diff --git a/.gitignore b/.gitignore
index 9f7d4b8c60..5017a114b8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -237,3 +237,8 @@ package-lock.json
llama.cpp/
# Stray "~" dir some tools create from a literal ~ TMPDIR; never part of the repo.
/~/
+
+# Agent workspace runtime/scratch artifacts, never part of the repo.
+async_task_outputs/
+temp/
+logs/
diff --git a/async_task_outputs/async_task_output_033lqa.md b/async_task_outputs/async_task_output_033lqa.md
deleted file mode 100644
index 9bfcec39cc..0000000000
--- a/async_task_outputs/async_task_output_033lqa.md
+++ /dev/null
@@ -1 +0,0 @@
-- Asked: `Make a new PR for that work`
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_04oge0.md b/async_task_outputs/async_task_output_04oge0.md
deleted file mode 100644
index e379d44aa4..0000000000
--- a/async_task_outputs/async_task_output_04oge0.md
+++ /dev/null
@@ -1 +0,0 @@
-- CI pending; local at `9c5b35c71`
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_07qggq.md b/async_task_outputs/async_task_output_07qggq.md
deleted file mode 100644
index c2a1446f5b..0000000000
--- a/async_task_outputs/async_task_output_07qggq.md
+++ /dev/null
@@ -1,4 +0,0 @@
-- Decision: GPU default stays PyTorch/diffusers; benchmark showed PyTorch GGUF 0.82s vs sd.cpp `--diffusion-fa` 6.96s at 1024px (~8.5x faster).
-- File noted: `scripts/compare_engines.py` reproduces benchmark; not committed in span.
-- Command `tail -30 ...compare_engines_*.log` showed run progress; background run completed exit 0.
-- COMPLETED: GPU comparison. PENDING: optional commit and CPU comparison.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_0hcd2s.md b/async_task_outputs/async_task_output_0hcd2s.md
deleted file mode 100644
index efb4f736c8..0000000000
--- a/async_task_outputs/async_task_output_0hcd2s.md
+++ /dev/null
@@ -1 +0,0 @@
-- Completed CPU sd.cpp vs diffusers benchmark.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_0kxcv4.md b/async_task_outputs/async_task_output_0kxcv4.md
deleted file mode 100644
index 87b9be6b0d..0000000000
--- a/async_task_outputs/async_task_output_0kxcv4.md
+++ /dev/null
@@ -1 +0,0 @@
-Continue cascading the already-pushed phase16 branch into the top branches, starting with image-workflows #6769 in the `unsloth` worktree; phase16 is merged but has unresolved conflicts. Next action is to inspect the conflict hunks in the listed files, especially `studio/backend/core/inference/diffusion.py`, `diffusion_families.py`, install tests, frontend picker/API/page files, and the truncated remaining paths from `git status`, then resolve them without re-running the completed merge command.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_1phcfm.md b/async_task_outputs/async_task_output_1phcfm.md
deleted file mode 100644
index ff52b86602..0000000000
--- a/async_task_outputs/async_task_output_1phcfm.md
+++ /dev/null
@@ -1 +0,0 @@
-- Asked summary for PR `6658`
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_283p70.md b/async_task_outputs/async_task_output_283p70.md
deleted file mode 100644
index f9cfc2f9b4..0000000000
--- a/async_task_outputs/async_task_output_283p70.md
+++ /dev/null
@@ -1 +0,0 @@
-- `Transform` img2img done+verified.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_2ip7xl.md b/async_task_outputs/async_task_output_2ip7xl.md
deleted file mode 100644
index 5b085cfbec..0000000000
--- a/async_task_outputs/async_task_output_2ip7xl.md
+++ /dev/null
@@ -1 +0,0 @@
-- PENDING: HF NVFP4 diffusion search
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_2p79oo.md b/async_task_outputs/async_task_output_2p79oo.md
deleted file mode 100644
index 8fb8023af5..0000000000
--- a/async_task_outputs/async_task_output_2p79oo.md
+++ /dev/null
@@ -1 +0,0 @@
-- PENDING: consumer GPU FP32 accum nerf; test 2:4 sparse
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_2r0025.md b/async_task_outputs/async_task_output_2r0025.md
deleted file mode 100644
index 61cac5b15b..0000000000
--- a/async_task_outputs/async_task_output_2r0025.md
+++ /dev/null
@@ -1 +0,0 @@
-- Bench done; report/results written.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_30zpk0.md b/async_task_outputs/async_task_output_30zpk0.md
deleted file mode 100644
index f59de5d29e..0000000000
--- a/async_task_outputs/async_task_output_30zpk0.md
+++ /dev/null
@@ -1 +0,0 @@
-- `Yes do that for all models as well`
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_32qisw.md b/async_task_outputs/async_task_output_32qisw.md
deleted file mode 100644
index c86d5e2e6b..0000000000
--- a/async_task_outputs/async_task_output_32qisw.md
+++ /dev/null
@@ -1 +0,0 @@
-- `INT8`: use `Qwen/Qwen-Image`+torchAO
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_3sovvl.md b/async_task_outputs/async_task_output_3sovvl.md
deleted file mode 100644
index 194f0bdf8d..0000000000
--- a/async_task_outputs/async_task_output_3sovvl.md
+++ /dev/null
@@ -1 +0,0 @@
-- Pending ComfyUI all-models/accuracy bench
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_4dou64.md b/async_task_outputs/async_task_output_4dou64.md
deleted file mode 100644
index 6b4a5665db..0000000000
--- a/async_task_outputs/async_task_output_4dou64.md
+++ /dev/null
@@ -1 +0,0 @@
-- `9c5b35c71`; lint pass, CPU queued
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_4dyxs8.md b/async_task_outputs/async_task_output_4dyxs8.md
deleted file mode 100644
index 11d72403f7..0000000000
--- a/async_task_outputs/async_task_output_4dyxs8.md
+++ /dev/null
@@ -1,15 +0,0 @@
-- Decision: PR `#6658` (`https://github.com/unslothai/unsloth/pull/6658`) was identified as the base PR because `gh pr view 6658 --repo unslothai/unsloth --json number,title,author,headRefName,baseRefName,state,url` showed head `image-generation`, base `main`, author `oobabooga`, state `OPEN`, title `Studio: add image generation with Unsloth GGUFs`.
-- Decision: The full diffusion stack was treated as 14 PRs total: original `#6658` plus 13 phase PRs. Reason: the branch chain was contiguous, each PR base matched the prior PR head; phases `3`, `5`, and `13` had no standalone PR and were folded into adjacent PRs.
-- Decision: Posted `@codex review` and `/gemini review` as separate comments on every PR so one bot trigger would not swallow the other.
-- Commands run: `gh auth status 2>&1 | head -20` exited successfully; key output showed authenticated to `github.com` as `danielhanchen` using `GH_TOKEN`.
-- Commands run: `cd /tmp && gh pr view 6658 --repo unslothai/unsloth --json number,title,author,headRefName,baseRefName,state,url 2>&1 | head -40` exited successfully; key output confirmed PR `#6658` metadata.
-- Commands run: `cd /tmp && gh pr list --repo unslothai/unsloth --author danielhanchen --state all --limit 60 --json number,title,headRefName,baseRefName,state,createdAt 2>&1 | head -200` exited successfully and was used to identify authored phase PRs.
-- Commands run: loop posted comments to `PRS="6658 6670 6675 6679 6680 6690 6694 6700 6701 6702 6703 6716 6717 6724"` using `gh pr comment "$n" --repo unslothai/unsloth --body "@codex review"` and `gh pr comment "$n" --repo unslothai/unsloth --body "/gemini review"`.
-- Command result: all 28 comment posts succeeded with `codex_rc=0` and `gemini_rc=0`.
-- PR stack recorded: `#6658` branch `image-generation` base `main`; `#6670` branch `diffusion-phase1` base `pr6658-image-generation`; `#6675` branch `diffusion-phase2-memory` base `diffusion-phase1`; `#6679` branch `diffusion-phase4-native` base `diffusion-phase2-memory`; `#6680` branch `diffusion-phase6-features` base `diffusion-phase4-native`; `#6690` branch `diffusion-phase7-perf` base `diffusion-phase6-features`; `#6694` branch `diffusion-phase8-quant` base `diffusion-phase7-perf`; `#6700` branch `diffusion-phase9-prequant` base `diffusion-phase8-quant`; `#6701` branch `diffusion-phase10-attention` base `diffusion-phase9-prequant`; `#6702` branch `diffusion-phase11-consumer-int8` base `diffusion-phase10-attention`; `#6703` branch `diffusion-phase12-fbcache` base `diffusion-phase11-consumer-int8`; `#6716` branch `diffusion-phase14-int8-modulation` base `diffusion-phase12-fbcache`; `#6717` branch `diffusion-phase15-int8-prequant` base `diffusion-phase14-int8-modulation`; `#6724` branch `diffusion-phase16-native-engine-routing` base `diffusion-phase15-int8-prequant`.
-- Comment URLs captured for `#6658`: codex `https://github.com/unslothai/unsloth/pull/6658#issuecomment-4828987610`, gemini `https://github.com/unslothai/unsloth/pull/6658#issuecomment-4828987681`.
-- Comment URLs captured for `#6670`: codex `https://github.com/unslothai/unsloth/pull/6670#issuecomment-4828987748`, gemini `https://github.com/unslothai/unsloth/pull/6670#issuecomment-4828987824`.
-- Error encountered: shell cwd was reset to `/mnt/disks/unslothai/ubuntu/workspace_81` after `cd /tmp`; no unresolved impact reported.
-- Files created/edited: none.
-- COMPLETED: authenticated GitHub context checked, full PR stack identified, `@codex review` and `/gemini review` posted separately on all 14 PRs.
-- PENDING: none for this span.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_5a3ktf.md b/async_task_outputs/async_task_output_5a3ktf.md
deleted file mode 100644
index 31f195e234..0000000000
--- a/async_task_outputs/async_task_output_5a3ktf.md
+++ /dev/null
@@ -1,2 +0,0 @@
-- Done: diffusion; 73 pass
-- Pending PR
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_5afl46.md b/async_task_outputs/async_task_output_5afl46.md
deleted file mode 100644
index 5ce2ddf26e..0000000000
--- a/async_task_outputs/async_task_output_5afl46.md
+++ /dev/null
@@ -1 +0,0 @@
-- GPU: ours beats ComfyUI; pending Z/Flux2
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_63adwt.md b/async_task_outputs/async_task_output_63adwt.md
deleted file mode 100644
index 9cd59d674b..0000000000
--- a/async_task_outputs/async_task_output_63adwt.md
+++ /dev/null
@@ -1 +0,0 @@
-- Asked support: `Mac`, GPU, GGUF
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_6pwnc4.md b/async_task_outputs/async_task_output_6pwnc4.md
deleted file mode 100644
index 048f1711b5..0000000000
--- a/async_task_outputs/async_task_output_6pwnc4.md
+++ /dev/null
@@ -1 +0,0 @@
-- Wrote `outputs/coverage_matrix.md`
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_6z1qxq.md b/async_task_outputs/async_task_output_6z1qxq.md
deleted file mode 100644
index cae7e5cdc3..0000000000
--- a/async_task_outputs/async_task_output_6z1qxq.md
+++ /dev/null
@@ -1,12 +0,0 @@
-- Decision: removed Studio diffusion weight-buffer feature because allocator already pools per-forward casts with no `cudaMalloc` churn, so end-to-end impact was neutral; left upstream LLM `WEIGHT_BUFFERS` in `unsloth/kernels/utils.py` untouched because unrelated reference path.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/backend/diffusion_gguf_compile.py`: removed `_WEIGHT_BUFFERS`, `_weight_buffer`, `_buffered_forward_native`, `install_weight_buffer`, `uninstall_weight_buffer`, `is_weight_buffer_installed`, env flag; docstring now explains removal.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/backend/diffusion_speed.py`: removed `"weight_buffer"` flag and install block; docstrings clarify eager has no GGUF accelerator.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/backend/diffusion.py`: removed buffer comments; `uninstall_all()` only reverts compiled-dequant.
-- Edited tests: removed 6 weight-buffer tests; updated `test_speed_eager_gguf_installs_no_accelerator`; `_stub_gguf_accel` now records compiled-dequant only.
-- Deleted `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/scripts/buffer_bench.py`.
-- Ran `grep -rn -i "weight_buffer\|buffered_forward\|install_weight_buffer\|WEIGHT_BUFFERS\|_buffered_forward_native\|is_weight_buffer" --include="*.py" studio/`; key output: no hits.
-- Ran `CUDA_VISIBLE_DEVICES="" python -m pytest tests/test_diffusion_speed.py tests/test_diffusion_gguf_compile.py tests/test_diffusion_arch_patches.py -q`; result `28 passed in 7.84s`.
-- Ran `CUDA_VISIBLE_DEVICES="" python -m pytest tests/ -q -k "diffusion"`; result `294 passed, 1 skipped, 5012 deselected, 1 warning in 13.38s`.
-- Ran tree-wide grep for removed symbols; only remaining hits are `WEIGHT_BUFFERS` in `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/unsloth/kernels/utils.py`, intentionally not changed.
-- COMPLETED: Studio diffusion global-buffer removal and verification.
-- PENDING: none in this span.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_76hycy.md b/async_task_outputs/async_task_output_76hycy.md
deleted file mode 100644
index d4eb267a0f..0000000000
--- a/async_task_outputs/async_task_output_76hycy.md
+++ /dev/null
@@ -1 +0,0 @@
-- Done: PR `#6690` opened, mergeable
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_7b5f92.md b/async_task_outputs/async_task_output_7b5f92.md
deleted file mode 100644
index 1823b41b2f..0000000000
--- a/async_task_outputs/async_task_output_7b5f92.md
+++ /dev/null
@@ -1,2 +0,0 @@
-- PENDING: Verify from `conversation history jsonl` whether CPU `sd.cpp` is fastest vs alternatives including `ComfyUI`; if confirmed, wire it into studio when GPUs are absent.
-- PENDING: Check and benchmark `https://github.com/sgl-project/sglang-omni`, `https://docs.sglang.io/docs/sglang-diffusion/index`, `https://docs.nvidia.com/dynamo/dev/backends/sg-lang/diffusion`, `https://developer.nvidia.com/blog/accelerating-diffusion-models-with-an-open-plug-and-play-offering/`, `https://github.com/NVlabs/FastGen`, `https://github.com/vllm-project/vllm-omni`.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_7mgh4t.md b/async_task_outputs/async_task_output_7mgh4t.md
deleted file mode 100644
index f8e0d90a7e..0000000000
--- a/async_task_outputs/async_task_output_7mgh4t.md
+++ /dev/null
@@ -1,2 +0,0 @@
-- #149 done: suite+5 GIFs pass
-- #148 hardened; #152 blocked
diff --git a/async_task_outputs/async_task_output_7ohiaw.md b/async_task_outputs/async_task_output_7ohiaw.md
deleted file mode 100644
index a2956b4b12..0000000000
--- a/async_task_outputs/async_task_output_7ohiaw.md
+++ /dev/null
@@ -1 +0,0 @@
-- User challenged comparison: check `ComfyUI` with `int8 / float8 / NVFP4` and compare BEST ComfyUI with all optimizations on.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_7pkxee.md b/async_task_outputs/async_task_output_7pkxee.md
deleted file mode 100644
index fa6c5a6dd4..0000000000
--- a/async_task_outputs/async_task_output_7pkxee.md
+++ /dev/null
@@ -1 +0,0 @@
-- Asked GGUF/diffusers CPU speed
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_86xro8.md b/async_task_outputs/async_task_output_86xro8.md
deleted file mode 100644
index 15757cd233..0000000000
--- a/async_task_outputs/async_task_output_86xro8.md
+++ /dev/null
@@ -1 +0,0 @@
-- Asked int8 pre-quant support
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_91pxca.md b/async_task_outputs/async_task_output_91pxca.md
deleted file mode 100644
index 54c938e819..0000000000
--- a/async_task_outputs/async_task_output_91pxca.md
+++ /dev/null
@@ -1,5 +0,0 @@
-- Verified all phase PRs touch only `studio/backend/...` plus `scripts/`; no core training lib.
-- Found GGUF NVIDIA path defaults to `SPEED_OFF` field but `resolve_speed_mode(..., is_gguf=True)` enables ~2.2x.
-- Confirmed `SdCppEngine` not wired into live routes.
-- COMPLETED: precise speedup matrix.
-- PENDING: route CPU/MPS to sd.cpp.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_9fb9e7.md b/async_task_outputs/async_task_output_9fb9e7.md
deleted file mode 100644
index 70a4491868..0000000000
--- a/async_task_outputs/async_task_output_9fb9e7.md
+++ /dev/null
@@ -1,2 +0,0 @@
-- Completed: sd.cpp CUDA works; diffusers GPU 10-16x faster; beats ComfyUI 3.9-7.9x on FLUX.1/Qwen.
-- Pending: Z-Image, FLUX.2-klein, LPIPS accuracy, CPU ComfyUI-vs-sd.cpp.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_9i95nj.md b/async_task_outputs/async_task_output_9i95nj.md
deleted file mode 100644
index 91a48e99f5..0000000000
--- a/async_task_outputs/async_task_output_9i95nj.md
+++ /dev/null
@@ -1 +0,0 @@
-- Studio live; stale install fixed
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_9qzr71.md b/async_task_outputs/async_task_output_9qzr71.md
deleted file mode 100644
index abde490b44..0000000000
--- a/async_task_outputs/async_task_output_9qzr71.md
+++ /dev/null
@@ -1 +0,0 @@
-Continue the latest actionable directive: fully satisfy the stop-hook goal by completing fair best-vs-best coverage for “as many models as possible,” especially Z-Image and FLUX.2-klein fp8 ComfyUI comparisons that were still pending. sd.cpp GPU support, sd.cpp-vs-diffusers performance, diffusers-vs-ComfyUI on tested models, accuracy validation, and CPU/GPU sd.cpp coverage were already marked done. The last assistant tool action, writing `outputs/coverage_matrix.md`, is done; next logically continue by fetching/running the missing fp8 best ComfyUI benchmarks for Z-Image and FLUX.2-klein, then update the coverage/writeup with those results.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_a1xjij.md b/async_task_outputs/async_task_output_a1xjij.md
deleted file mode 100644
index 91564d0061..0000000000
--- a/async_task_outputs/async_task_output_a1xjij.md
+++ /dev/null
@@ -1 +0,0 @@
-- Asked overall speedup.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_a3jhh0.md b/async_task_outputs/async_task_output_a3jhh0.md
deleted file mode 100644
index 98b61bbf08..0000000000
--- a/async_task_outputs/async_task_output_a3jhh0.md
+++ /dev/null
@@ -1 +0,0 @@
-- Asked Studio `--secure`+PRs
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_alswyh.md b/async_task_outputs/async_task_output_alswyh.md
deleted file mode 100644
index 8df67768c1..0000000000
--- a/async_task_outputs/async_task_output_alswyh.md
+++ /dev/null
@@ -1,2 +0,0 @@
-- Done: `sd.cpp` CUDA
-- Pending: accuracy, ComfyUI, CPU
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_aud22l.md b/async_task_outputs/async_task_output_aud22l.md
deleted file mode 100644
index cae292837e..0000000000
--- a/async_task_outputs/async_task_output_aud22l.md
+++ /dev/null
@@ -1 +0,0 @@
-Continue the latest directive: verify which earlier-phase review comments are real and still unfixed, fix real issues on their owning stacked branches, and skip ones already fixed by later phases. Phase 16/#6724 is done and pushed; task 88 is in progress. The next concrete action is to continue from the completed checkout of `diffusion-phase9-prequant` and implement the planned safe fix for the #6700 `torch.load(weights_only=False)` RCE in the prequant local-path load path, then test, commit, and push that branch.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_ay5dlx.md b/async_task_outputs/async_task_output_ay5dlx.md
deleted file mode 100644
index 386438b575..0000000000
--- a/async_task_outputs/async_task_output_ay5dlx.md
+++ /dev/null
@@ -1 +0,0 @@
-- 2A/2B/2D/3/5 done; `b7074ad05`
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_b648if.md b/async_task_outputs/async_task_output_b648if.md
deleted file mode 100644
index 0bee88a26b..0000000000
--- a/async_task_outputs/async_task_output_b648if.md
+++ /dev/null
@@ -1 +0,0 @@
-- TODO: reconcile CI PR `#6717`
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_b9qt5b.md b/async_task_outputs/async_task_output_b9qt5b.md
deleted file mode 100644
index 75fdc70b9c..0000000000
--- a/async_task_outputs/async_task_output_b9qt5b.md
+++ /dev/null
@@ -1 +0,0 @@
-- Bench done; summary/result files written
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_bl98pl.md b/async_task_outputs/async_task_output_bl98pl.md
deleted file mode 100644
index 96242b3413..0000000000
--- a/async_task_outputs/async_task_output_bl98pl.md
+++ /dev/null
@@ -1,9 +0,0 @@
-- Decision: hook feedback says task is not fully satisfied because best-vs-best ComfyUI fp8 coverage is incomplete for all tested model families.
-- Decision: confirmed completed items include `sd.cpp` GPU support, CUDA build for `sm_100`, working CPU/GPU paths, sd.cpp vs diffusers comparisons, diffusers+opts beating ComfyUI for tested best-vs-best cases, and LPIPS accuracy staying within the 25% rule with no 50% loss.
-- Decision: performance conclusions preserved: optimized diffusers is `1.9-3.4x` faster on GPU than optimized `sd.cpp`; `sd.cpp` is `1.6-2.8x` faster on CPU; diffusers+opts beats ComfyUI best-vs-best `1.9-3.4x` on GPU for FLUX.1 and Qwen.
-- Pending gap: `test as many models as possible` remains incomplete; only 2 of 4 model families have full best-vs-best ComfyUI fp8 comparisons: `FLUX.1` and `Qwen-Image`.
-- Pending gap: `Z-Image` and `FLUX.2-klein` currently have only ComfyUI GGUF comparison numbers, not ComfyUI fp8 best numbers.
-- Verbatim unresolved statement to preserve: `For Z-Image and FLUX.2-klein I only have the ComfyUI **GGUF** numbers so far (2.51s, 1.01s) vs our 0.51s/0.27s — I can fetch their fp8 single-files and rerun those two best-vs-best to fully close it.`
-- Key output: ComfyUI GGUF numbers for `Z-Image` and `FLUX.2-klein` are `2.51s` and `1.01s`; current “our” numbers are `0.51s/0.27s`.
-- Completed: most sd.cpp/diffusers optimization, CPU/GPU, performance, and accuracy validation work.
-- Pending: fetch fp8 single-files for `Z-Image` and `FLUX.2-klein`, rerun ComfyUI fp8 best-vs-best, compare against optimized diffusers/sd.cpp, and update final conclusion.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_bxhnpa.md b/async_task_outputs/async_task_output_bxhnpa.md
deleted file mode 100644
index 8a5c70bca0..0000000000
--- a/async_task_outputs/async_task_output_bxhnpa.md
+++ /dev/null
@@ -1 +0,0 @@
-- GGUF=diffusers+PyTorch; sd.cpp likely fasterCPU
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_d8h7zs.md b/async_task_outputs/async_task_output_d8h7zs.md
deleted file mode 100644
index 9b568d0da3..0000000000
--- a/async_task_outputs/async_task_output_d8h7zs.md
+++ /dev/null
@@ -1 +0,0 @@
-- PENDING: PR 6658 int8/fp8 mem
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_dgs8dq.md b/async_task_outputs/async_task_output_dgs8dq.md
deleted file mode 100644
index 1ecd2b2a9a..0000000000
--- a/async_task_outputs/async_task_output_dgs8dq.md
+++ /dev/null
@@ -1 +0,0 @@
-- Run `gh pr checks 6717`
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_dqlfn9.md b/async_task_outputs/async_task_output_dqlfn9.md
deleted file mode 100644
index f2883c25bd..0000000000
--- a/async_task_outputs/async_task_output_dqlfn9.md
+++ /dev/null
@@ -1 +0,0 @@
-- User directed: `keep working`; continue pending review/work.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_dr02pq.md b/async_task_outputs/async_task_output_dr02pq.md
deleted file mode 100644
index 0252bb2a3c..0000000000
--- a/async_task_outputs/async_task_output_dr02pq.md
+++ /dev/null
@@ -1,17 +0,0 @@
-- Decision: Used live GitHub PR metadata rather than memory to reconstruct the PR stack accurately.
-- Decision: Treated closed `#6658` as the original image-generation root and open `#6763` as the live continuation, because both are by `oobabooga`, both use head branch `image-generation`, and both are based on `main`.
-- Decision: Identified all authored PRs by `danielhanchen` stacked transitively on `#6658` / `#6763`, with current work concentrated in the top diffusion-image-workflows sub-stack.
-- Commands run from `/mnt/disks/unslothai/ubuntu/workspace_81`:
-- `env -u GH_TOKEN gh pr list --repo unslothai/unsloth --author danielhanchen --state open --limit 50 --json number,title,headRefName,baseRefName,isDraft,state 2>&1 | head -100`
-- Key output included open authored PRs such as `#6781` head `fix-mlx-gguf-reload-context` base `main`, title `MLX CI: bound llama-cli context so the GGUF reload stops timing out`; `#6780` head `fix-rag-extraction-rtl-docx-tables` base `main`, title `Studio RAG: fix RTL/Indic PDF corruption and dropped DOCX tables`; output was truncated after `harden-llmco`.
-- `for n in 6658 6763; do ... env -u GH_TOKEN gh pr view $n --repo unslothai/unsloth --json number,title,headRefName,baseRefName,author,state ... done`
-- Key output: `#6658 [CLOSED] by oobabooga`, title `Studio: add image generation with Unsloth GGUFs`, head `image-generation`, base `main`.
-- Key output: `#6763 [OPEN] by oobabooga`, title `Studio: add image generation with Unsloth GGUFs`, head `image-generation`, base `main`.
-- No files were created or edited in this span.
-- No errors were encountered.
-- Completed: Produced bottom-to-top stack rooted at `#6658` / `#6763`: `main` → `image-generation` `#6763` / `#6658` → `#6679` `diffusion-phase4-native` → `#6680` `diffusion-phase6-features` → `#6690` `diffusion-phase7-perf` → `#6694` `diffusion-phase8-quant` → `#6700` `diffusion-phase9-prequant` → `#6701` `diffusion-phase10-attention` → `#6702` `diffusion-phase11-consumer-int8` → `#6703` `diffusion-phase12-fbcache` → `#6716` `diffusion-phase14-int8-modulation` → `#6717` `diffusion-phase15-int8-prequant` → `#6724` `diffusion-phase16-native-engine-routing`, branching to `#6768` `diffusion-sdserver` and `#6769` `diffusion-image-workflows`; from `#6769`, branches `#6772` `diffusion-fp8-perrow` and `#6771` `diffusion-lora` → `#6773` `diffusion-controlnet`.
-- Completed: Counted `16 PRs`, all authored by `danielhanchen`, all currently `OPEN`, transitively stacked on `#6658` / `#6763`.
-- Completed: Grouped stack as `Phase chain (11): #6679, #6680, #6690, #6694, #6700, #6701, #6702, #6703, #6716, #6717, #6724`; `Native sd-server branch (1): #6768`; `diffusion-image-workflows sub-stack (4): #6769 -> #6771, #6772 -> #6773`.
-- Completed: Noted session work landed in top PRs `#6769`, `#6771`, `#6772`, `#6773`, covering `On Device/chat picker fixes`, `GGUF speed-mode relabel`, `LoRA dot-alias fix`, `FP8 per-row fix`, `ControlNet`, and `FLUX.2-dev family`.
-- Completed: Flagged that phase numbers `5` and `13` are absent as separate open PRs because they were folded into adjacent phases upstream.
-- Pending: User was offered follow-up to list merge order or check CI status across the stack; no follow-up was performed in this span.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_dx0jie.md b/async_task_outputs/async_task_output_dx0jie.md
deleted file mode 100644
index 6496e549c2..0000000000
--- a/async_task_outputs/async_task_output_dx0jie.md
+++ /dev/null
@@ -1,7 +0,0 @@
-- User directed continuation with `Yes do phase 16`.
-- Decision: proceed to `phase 16` because the user explicitly approved it.
-- Files created/edited: none in this span.
-- Commands run: none in this span.
-- Errors encountered: none.
-- COMPLETED: captured user approval for `phase 16`.
-- PENDING: execute `phase 16` in the resumed session.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_dy4t1t.md b/async_task_outputs/async_task_output_dy4t1t.md
deleted file mode 100644
index 51ae96e042..0000000000
--- a/async_task_outputs/async_task_output_dy4t1t.md
+++ /dev/null
@@ -1 +0,0 @@
-- check PR 6658 int8/fp8 mem
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_e214y1.md b/async_task_outputs/async_task_output_e214y1.md
deleted file mode 100644
index 4b323dbffa..0000000000
--- a/async_task_outputs/async_task_output_e214y1.md
+++ /dev/null
@@ -1 +0,0 @@
-- `keep testing`; continue phases
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_eubt71.md b/async_task_outputs/async_task_output_eubt71.md
deleted file mode 100644
index 56d2c1ba4e..0000000000
--- a/async_task_outputs/async_task_output_eubt71.md
+++ /dev/null
@@ -1,15 +0,0 @@
-- Decision: stacked Phase 16 on `diffusion-phase15-int8-prequant` because current workspace HEAD was Phase 15 (`9c5b35c71`) and PR needed to continue the chain.
-- Decision: staged only the 11 intended feature/test files and deliberately excluded local benchmark tooling/logs/plans to keep PR scope clean.
-- Created branch `diffusion-phase16-native-engine-routing` from `diffusion-phase15-int8-prequant`.
-- Committed `7f3c206fa` with message `Studio diffusion (Phase 16): route no-GPU loads to the native sd.cpp engine`.
-- Files committed: `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/backend/core/inference/diffusion_engine_router.py`, `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/backend/core/inference/diffusion_families.py`, `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/backend/core/inference/gpu_arbiter.py`, `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/backend/core/inference/sd_cpp_backend.py`, `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/backend/core/inference/sd_cpp_engine.py`, `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/backend/models/inference.py`, `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/backend/routes/inference.py`, plus 4 test files including `studio/backend/tests/test_diffusion_engine_router.py` and `studio/backend/tests/test_sd_cpp_backend.py`.
-- Created PR body file `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/temp/phase16_pr_body.md`.
-- Ran `gh auth status`; key output: logged in to `github.com` as `danielhanchen` using `GH_TOKEN`.
-- Ran `git checkout -b diffusion-phase16-native-engine-routing`; exit success, output `Switched to a new branch 'diffusion-phase16-native-engine-routing'`.
-- Ran `git commit`; exit success, output `11 files changed, 1241 insertions(+), 27 deletions(-)`, created 4 new files.
-- Ran `git push -u origin diffusion-phase16-native-engine-routing`; exit success, branch pushed to `https://github.com/unslothai/unsloth.git`; remote noted `GitHub found 19 vulnerabilities on unslothai/unsloth's default branch`.
-- Ran `gh pr create --repo unslothai/unsloth --base diffusion-phase15-int8-prequant --head diffusion-phase16-native-engine-routing --title "Studio diffusion (Phase 16): route no-GPU loads to the native sd.cpp engine" --body-file temp/phase16_pr_body.md`; output warning `Warning: 20 uncommitted changes`, then created `https://github.com/unslothai/unsloth/pull/6724`.
-- Ran `gh pr view 6724 --repo unslothai/unsloth --json number,title,state,baseRefName,headRefName,additions,deletions,changedFiles,url`; verified PR `#6724` is `OPEN`, base `diffusion-phase15-int8-prequant`, head `diffusion-phase16-native-engine-routing`, `+1241/-27 across 11 files`.
-- Completed: Phase 16 PR created and verified at `https://github.com/unslothai/unsloth/pull/6724`.
-- Completed: summary noted prior validation: sd.cpp fastest CPU engine vs diffusers/ComfyUI; CPU/Mac Studio auto-routes to sd.cpp with diffusers fallback; `313 tests green + real CPU end-to-end validated`; external comparisons written in `outputs/ext_engines/SUMMARY.md`, `FINAL_engine_comparison.md`, and `coverage_matrix.md`.
-- Pending: CI on PR `#6724` still needs to run/be watched; user was asked whether to watch checks and reconcile failures.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_f7xn15.md b/async_task_outputs/async_task_output_f7xn15.md
deleted file mode 100644
index 16d5a961d1..0000000000
--- a/async_task_outputs/async_task_output_f7xn15.md
+++ /dev/null
@@ -1 +0,0 @@
-- PR #6716 int8 fix done; CI pending
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_fbj32r.md b/async_task_outputs/async_task_output_fbj32r.md
deleted file mode 100644
index cfe98e08d4..0000000000
--- a/async_task_outputs/async_task_output_fbj32r.md
+++ /dev/null
@@ -1 +0,0 @@
-- Created `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/scripts/compare_engines.py`; started GPU6 benchmark; wait/read rejected.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_fbpegn.md b/async_task_outputs/async_task_output_fbpegn.md
deleted file mode 100644
index 747e1642a1..0000000000
--- a/async_task_outputs/async_task_output_fbpegn.md
+++ /dev/null
@@ -1 +0,0 @@
-- `INT8` uses `Qwen/Qwen-Image` torchAO
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_flkdsl.md b/async_task_outputs/async_task_output_flkdsl.md
deleted file mode 100644
index b221fbfe01..0000000000
--- a/async_task_outputs/async_task_output_flkdsl.md
+++ /dev/null
@@ -1 +0,0 @@
-- Asked if full platform/model opt done
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_fnfrer.md b/async_task_outputs/async_task_output_fnfrer.md
deleted file mode 100644
index e57e8edf85..0000000000
--- a/async_task_outputs/async_task_output_fnfrer.md
+++ /dev/null
@@ -1 +0,0 @@
-- Check int8 failures; fix if possible
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_fp4euz.md b/async_task_outputs/async_task_output_fp4euz.md
deleted file mode 100644
index 25b0cf8fc3..0000000000
--- a/async_task_outputs/async_task_output_fp4euz.md
+++ /dev/null
@@ -1 +0,0 @@
-- img2img done; pending frontend Transform
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_g07jn5.md b/async_task_outputs/async_task_output_g07jn5.md
deleted file mode 100644
index ac05ca82d9..0000000000
--- a/async_task_outputs/async_task_output_g07jn5.md
+++ /dev/null
@@ -1 +0,0 @@
-- Extend done; live URL `https://pierre-airlines-barbie-continues.trycloudflare.com`
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_g45aly.md b/async_task_outputs/async_task_output_g45aly.md
deleted file mode 100644
index f33a03dfc2..0000000000
--- a/async_task_outputs/async_task_output_g45aly.md
+++ /dev/null
@@ -1 +0,0 @@
-- Need faster inference; use 5 Opus
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_gbupqq.md b/async_task_outputs/async_task_output_gbupqq.md
deleted file mode 100644
index f59de5d29e..0000000000
--- a/async_task_outputs/async_task_output_gbupqq.md
+++ /dev/null
@@ -1 +0,0 @@
-- `Yes do that for all models as well`
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_girs82.md b/async_task_outputs/async_task_output_girs82.md
deleted file mode 100644
index 6eb7e28ec8..0000000000
--- a/async_task_outputs/async_task_output_girs82.md
+++ /dev/null
@@ -1 +0,0 @@
-- Pending: compare `sd` vs PyTorch
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_gm6421.md b/async_task_outputs/async_task_output_gm6421.md
deleted file mode 100644
index 551f03190a..0000000000
--- a/async_task_outputs/async_task_output_gm6421.md
+++ /dev/null
@@ -1 +0,0 @@
-- PR `#6717` made; CI pending.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_gsjrok.md b/async_task_outputs/async_task_output_gsjrok.md
deleted file mode 100644
index cb6b11918b..0000000000
--- a/async_task_outputs/async_task_output_gsjrok.md
+++ /dev/null
@@ -1,3 +0,0 @@
-- User requested: `Relaunch Studio with all changes and PRs`
-- No decisions, file edits, commands, or errors in this span.
-- PENDING: relaunch Studio reflecting all changes and PRs.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_gtnd4p.md b/async_task_outputs/async_task_output_gtnd4p.md
deleted file mode 100644
index b74da0727a..0000000000
--- a/async_task_outputs/async_task_output_gtnd4p.md
+++ /dev/null
@@ -1 +0,0 @@
-• Asked GGUF backend: PyTorch vs cpp
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_gvgfb2.md b/async_task_outputs/async_task_output_gvgfb2.md
deleted file mode 100644
index 88001a1aa8..0000000000
--- a/async_task_outputs/async_task_output_gvgfb2.md
+++ /dev/null
@@ -1 +0,0 @@
-Resume the latest directive: say "Continue work" and resume the current diffusion safetensors implementation task because the /goal is not yet achieved or there was an API interruption. No tool call is in flight; continue from the prepared state where the stacked-PR plan is complete, the live deployment and verification are done, and the remaining work is to move the diffusion safetensors implementation forward while keeping the unrelated pre-existing speed-work files separate.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_gyg5e6.md b/async_task_outputs/async_task_output_gyg5e6.md
deleted file mode 100644
index 639bcd73ca..0000000000
--- a/async_task_outputs/async_task_output_gyg5e6.md
+++ /dev/null
@@ -1 +0,0 @@
-- Relaunch Studio `--secure` stacked
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_h0941v.md b/async_task_outputs/async_task_output_h0941v.md
deleted file mode 100644
index b2843faeac..0000000000
--- a/async_task_outputs/async_task_output_h0941v.md
+++ /dev/null
@@ -1 +0,0 @@
-- PR `#6670` created stacked on `#6658`
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_hm2dbc.md b/async_task_outputs/async_task_output_hm2dbc.md
deleted file mode 100644
index 8e063e4f3b..0000000000
--- a/async_task_outputs/async_task_output_hm2dbc.md
+++ /dev/null
@@ -1 +0,0 @@
-- Pending: coverage final reply
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_hpt6vf.md b/async_task_outputs/async_task_output_hpt6vf.md
deleted file mode 100644
index 8dffded7a2..0000000000
--- a/async_task_outputs/async_task_output_hpt6vf.md
+++ /dev/null
@@ -1 +0,0 @@
-- phase4/6 PRs merged: `#6679` `#6680`
diff --git a/async_task_outputs/async_task_output_i04lr4.md b/async_task_outputs/async_task_output_i04lr4.md
deleted file mode 100644
index 910eaed4f8..0000000000
--- a/async_task_outputs/async_task_output_i04lr4.md
+++ /dev/null
@@ -1 +0,0 @@
-- PR `#6690` merged? no; open/mergeable
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_i1geh5.md b/async_task_outputs/async_task_output_i1geh5.md
deleted file mode 100644
index e11bdf1308..0000000000
--- a/async_task_outputs/async_task_output_i1geh5.md
+++ /dev/null
@@ -1,4 +0,0 @@
-- User raised a pending concern: accuracy/safety of using `fast accumulation`, specifically whether overflow could cause issues.
-- No decisions, file edits, commands, or errors occurred in this span.
-- COMPLETED: captured the new review question.
-- PENDING: answer/analyze overflow risk and accuracy implications of `fast accumulation`.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_i3cifp.md b/async_task_outputs/async_task_output_i3cifp.md
deleted file mode 100644
index bb3f4c7edd..0000000000
--- a/async_task_outputs/async_task_output_i3cifp.md
+++ /dev/null
@@ -1 +0,0 @@
-Continue work per the latest directive: if the /goal is not yet achieved or there was an API error, resume the current diffusion safetensors implementation task. The latest assistant state has no in-flight tool call; the next concrete action is to inspect the current repo/git state and continue from the existing diffusion safetensors work without re-running completed verification or PR-planning tools.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_i4xvmi.md b/async_task_outputs/async_task_output_i4xvmi.md
deleted file mode 100644
index 97ff3bf964..0000000000
--- a/async_task_outputs/async_task_output_i4xvmi.md
+++ /dev/null
@@ -1 +0,0 @@
-- Fixed int8 M=1; PR `#6716`
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_i52q64.md b/async_task_outputs/async_task_output_i52q64.md
deleted file mode 100644
index 2d2ee2c8a8..0000000000
--- a/async_task_outputs/async_task_output_i52q64.md
+++ /dev/null
@@ -1 +0,0 @@
-Continue from the latest user question: answer whether NXFP4/NVFP4 is supported through PyTorch core and TorchAO, based on the completed probe and PR updates. The in-flight work is complete: NVFP4 probe was measured, committed, pushed, PR body updated, and PR #6694 verified OPEN/MERGEABLE with sync 0/0. Next action is to provide the final concise answer: PyTorch core has FP4 primitives but no turnkey quantization flow; TorchAO supports NVFP4, but in this environment torch 2.9 only works with `use_triton_kernel=False` as a slow bf16-rate path, while the fast path needs MSLK or torch >= 2.11 CUTLASS FP4 extensions.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_if28t3.md b/async_task_outputs/async_task_output_if28t3.md
deleted file mode 100644
index 4212ba6241..0000000000
--- a/async_task_outputs/async_task_output_if28t3.md
+++ /dev/null
@@ -1,23 +0,0 @@
-- Decision: shipped compile path uses `transformer.compile_repeated_blocks(fullgraph = True, dynamic = True)`, which forwards to `torch.compile`; effective settings are `fullgraph=True`, `dynamic=True`, and default `mode`. This was chosen because Studio can vary resolution/batch/steps without excessive recompiles.
-- Decision: CUDA graphs are not enabled in the shipped path. Per `https://docs.pytorch.org/docs/stable/generated/torch.compile.html`, CUDA graphs come from `mode="reduce-overhead"` or `mode="max-autotune"`, while default mode gives Inductor fusion without graph capture.
-- Decision: `dynamic=True` conflicts with CUDA graphs because graph capture expects static shapes. Switching to CUDA graphs would require `dynamic=False` and recompilation for new shapes.
-- Decision: after ablation, `default` mode + `dynamic=True` remained the correct shipped choice because it was essentially as fast as autotune, much faster to compile, robust to shape changes, and avoided CUDA-graph runtime crashes.
-- Decision: `max-autotune-no-cudagraphs` worked but was not worth enabling as default: `0.78 s` vs `0.80 s` was within run-to-run noise, while compile time increased from `5.7 s` to `66.2 s` and required `dynamic=False`.
-- Decision: CUDA graph modes were rejected because they crashed in this pipeline, not merely because they were theoretically fragile.
-- Clarification made: since `fullgraph=True` succeeds, there is no Dynamo graph break in the block; GGUF dequant is compile-traceable. The remaining inefficiency is Inductor declining codegen for Z-Image complex-valued ops: `"does not support code generation for complex operators"`.
-- File context mentioned but not edited in this span: `diffusion_speed.py` contains the shipped compile call.
-- File context mentioned but not edited in this span: `compile_probe.py` already has a `--mode` flag and was used for mode ablation.
-- Command run: `LOG=logs/compile_modes_$(date +%Y%m%d_%H%M%S).log; echo "COMPILE MODES LOG: $LOG"; { for spec in "default:--mode default --dynamic" "maxautotune-nocg:--mode max-autotune-no-cudagraphs" "reduce-overhead:--mode reduce-overhead" "max-autotune:--mode max-autotune"; do ...` to ablate torch compile modes including CUDA graphs on GPU 6.
-- Command status: background task `b01iys6fy` completed with exit code `0`.
-- Command output file: `/home/ubuntu/CLAUDE_CODE_TMPDIR/claude-1000/-mnt-disks-unslothai-ubuntu-workspace-81/8723b9e3-2ab1-49e9-a4b1-d030954eb94a/tasks/b01iys6fy.output`.
-- Command run: `cat "$(ls -t /mnt/disks/unslothai/ubuntu/workspace_81/unsloth/logs/compile_modes_*.log | head -1)"` to read the latest compile-mode ablation log.
-- Key result: `default` with `--mode default --dynamic` gave eager `1.82s/gen`, compiled `0.80s/gen`, `+56.3% vs eager`, PSNR `37.7 dB`, compile time `5.7s`, verdict `COMPILE-WORKS FASTER`.
-- Key result: `max-autotune-no-cudagraphs` with `dynamic=False` gave eager `1.83s/gen`, compiled `0.78 s`, `+57.2%`, PSNR `37.3 dB`, compile time `66.2 s`, and worked.
-- Key result: `reduce-overhead` with CUDA graphs and `dynamic=False` failed.
-- Key result: `max-autotune` with CUDA graphs and `dynamic=False` failed.
-- Error encountered: both CUDA graph modes raised `RuntimeError: accessing tensor output of CUDAGraphs that has been overwritten by a subsequent run` at `transformer_z_image.py:271, in forward`.
-- Error analysis: likely caused by regional compile plus CUDA graph output buffer reuse; denoiser calls the same compiled block repeatedly and Z-Image carries an output across calls, so the static CUDA graph output buffer is overwritten before a later read.
-- Error resolution: resolved by keeping CUDA graphs disabled; no code changes were made to try manual `cudagraph_mark_step_begin()` or output cloning.
-- Completed: answered why CUDA graphs were not being used and measured `default`, `max-autotune-no-cudagraphs`, `reduce-overhead`, and `max-autotune`.
-- Completed: reported mode-by-mode speed, PSNR, compile time, and failure status.
-- Pending: optional follow-up offered to wire `mode="max-autotune-no-cudagraphs"` into the opt-in `max` tier as a gated one-line change, leaving default unchanged.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_ii5oy0.md b/async_task_outputs/async_task_output_ii5oy0.md
deleted file mode 100644
index 9705d857bd..0000000000
--- a/async_task_outputs/async_task_output_ii5oy0.md
+++ /dev/null
@@ -1 +0,0 @@
-- Bench complete; `SUMMARY.md` written.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_j6lj1a.md b/async_task_outputs/async_task_output_j6lj1a.md
deleted file mode 100644
index 01f5911256..0000000000
--- a/async_task_outputs/async_task_output_j6lj1a.md
+++ /dev/null
@@ -1 +0,0 @@
-- Fixed #197; LoRA E2E PASS; pending #195,#196,#185 subitems
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_jc0k23.md b/async_task_outputs/async_task_output_jc0k23.md
deleted file mode 100644
index fee420c304..0000000000
--- a/async_task_outputs/async_task_output_jc0k23.md
+++ /dev/null
@@ -1,11 +0,0 @@
-- Decision: served `wt-allprs` because branch `diffusion-all-prs` integrates stacked PRs `#6769`, `#6771`, `#6772`, `#6773` plus fixes including `e21700031`; verified HEAD is `929b8d8b3` with clean tree.
-- Decision: rebuilt frontend dist before relaunch so latest frontend commits were baked in.
-- Files changed: frontend build output regenerated under `/mnt/disks/unslothai/ubuntu/workspace_81/wt-allprs/studio/frontend/dist`, key asset `dist/assets/images--i_whlNR.js`.
-- Commands run: in `/mnt/disks/unslothai/ubuntu/workspace_81/wt-allprs`, `git branch --show-current`, `git status --porcelain`, `git log --oneline -12`; key output `diffusion-all-prs`, clean relevant status, HEAD log includes `929b8d8b3`.
-- Commands run: in `/mnt/disks/unslothai/ubuntu/workspace_81/wt-allprs/studio/frontend`, `npx vite build`; exit `0`, output `✓ built in 1.95s`.
-- Commands run: killed old `run.py --host 127.0.0.1 --port 8898` and `cloudflared`; command exit `144`, noted as `SIGURG` artifact, kill succeeded.
-- Commands run: curl readiness on `http://127.0.0.1:8898/`; before relaunch `000down`, after relaunch `200` after about `10s`.
-- Relaunched backend from `/mnt/disks/unslothai/ubuntu/workspace_81/wt-allprs/studio/backend`; log `/mnt/disks/unslothai/ubuntu/workspace_81/logs/studio_relaunch_20260701_102325.log`.
-- Verified tunnel `https://whenever-satisfaction-advertising-sunny.trycloudflare.com`; single listener on `:8898`.
-- Verified auth with `unsloth` / `diffusion-Thrg7s3tr1-UoGYq`; `login OK`, token len `127`, LoRA and ControlNet endpoints `200`, image backend `loaded = False`.
-- COMPLETED: Studio relaunched and ready with all stacked diffusion changes plus session fixes. PENDING: user testing, then next item likely SDXL or LoRA catalog.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_jw3r0h.md b/async_task_outputs/async_task_output_jw3r0h.md
deleted file mode 100644
index 4595142f6a..0000000000
--- a/async_task_outputs/async_task_output_jw3r0h.md
+++ /dev/null
@@ -1 +0,0 @@
-- GGUF GPU=diffusers; CPU/MPS=sd.cpp
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_jykfib.md b/async_task_outputs/async_task_output_jykfib.md
deleted file mode 100644
index 7bcce7f2c3..0000000000
--- a/async_task_outputs/async_task_output_jykfib.md
+++ /dev/null
@@ -1,10 +0,0 @@
-- Decision: added **FLUX.1-Kontext-dev** because `FluxKontextPipeline` supports image+prompt editing, gated base was accessible, and `Q4_K_M` GGUF exists.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/backend/core/inference/diffusion_families.py`: added `flux-kontext` family with `FluxKontextPipeline`, `FluxTransformer2DModel`, base `black-forest-labs/FLUX.1-Kontext-dev`, `cfg_kwarg=guidance_scale`, edit workflow.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/frontend/src/features/images/images-page.tsx`: added Kontext Edit GGUF entry, supported keyword, gen default.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/frontend/src/components/assistant-ui/model-selector/pickers.tsx`: unhid Kontext picker.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/backend/tests/test_diffusion_backend.py`: updated detect_family expectations for Kontext support.
-- Created `/mnt/disks/unslothai/ubuntu/workspace_81/scripts/repro_kontext_inprocess.py` and `/mnt/disks/unslothai/ubuntu/workspace_81/scripts/verify_kontext_http.py`.
-- Commands: backend tests/build passed: `78 passed, 5 warnings`, `tsc=0`, `BUILD=0`; HTTP verify passed: `family: flux.1-kontext`, `kind: gguf`, `workflows: ['edit']`, `PASS`, `=== EXIT 0 ===`.
-- Error: inline HTTP verify failed with `/bin/bash: eval: line 68: syntax error: unexpected end of file`; resolved by writing clean script.
-- Deployed Studio at `https://influences-qualification-thesis-loop.trycloudflare.com`.
-- Completed: task `#154` done, FLUX Kontext live and verified. Pending: `#152` mirror/macOS/Windows and committing stacked PRs.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_l2kwgd.md b/async_task_outputs/async_task_output_l2kwgd.md
deleted file mode 100644
index 3c2b32d78a..0000000000
--- a/async_task_outputs/async_task_output_l2kwgd.md
+++ /dev/null
@@ -1 +0,0 @@
-- Goal set: Studio image UI PR stack
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_lxspie.md b/async_task_outputs/async_task_output_lxspie.md
deleted file mode 100644
index 3a632310dd..0000000000
--- a/async_task_outputs/async_task_output_lxspie.md
+++ /dev/null
@@ -1 +0,0 @@
-- CPU bench done; sd.cpp wins RAM/speed
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_m2h34d.md b/async_task_outputs/async_task_output_m2h34d.md
deleted file mode 100644
index 04f40ea1a9..0000000000
--- a/async_task_outputs/async_task_output_m2h34d.md
+++ /dev/null
@@ -1,7 +0,0 @@
-- User requested adding a dynamic check to distinguish consumer vs non-consumer GPUs, enabling the target behavior only for consumer GPUs.
-- Preserve requirement verbatim: `Add a dynamic check to check if consumer vs non consumer - so enable it only if consumer - see https://developer.nvidia.com/cuda/gpus for example`
-- Reference URL provided: `https://developer.nvidia.com/cuda/gpus`
-- No files edited in this span.
-- No commands run in this span.
-- COMPLETED: captured the new requirement.
-- PENDING: implement and verify the dynamic consumer GPU check.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_mk1dse.md b/async_task_outputs/async_task_output_mk1dse.md
deleted file mode 100644
index 36d6772312..0000000000
--- a/async_task_outputs/async_task_output_mk1dse.md
+++ /dev/null
@@ -1,5 +0,0 @@
-- Built `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/scripts/accuracy_lpips.py`; LPIPS vs bf16 satisfied 25/50% rule.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/scripts/comfy_bench.py` for `flux.2-klein,z-image`.
-- Created `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/outputs/FINAL_engine_comparison.md`.
-- Key results: ours GPU beats ComfyUI 3.8-7.9x; CPU `sd.cpp` 60.3s vs diffusers 98.5s vs ComfyUI 102.4s.
-- Errors: `/dev/null` and `/tmp/oi.json` blocked by sandbox; resolved with workspace paths. `pkill` exited 144 but confirmed `comfy procs: 0`.
diff --git a/async_task_outputs/async_task_output_mk50gp.md b/async_task_outputs/async_task_output_mk50gp.md
deleted file mode 100644
index a0e53649f9..0000000000
--- a/async_task_outputs/async_task_output_mk50gp.md
+++ /dev/null
@@ -1 +0,0 @@
-- Need use `5 Opus subagents` on URLs.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_ml8dug.md b/async_task_outputs/async_task_output_ml8dug.md
deleted file mode 100644
index eb13a07bcf..0000000000
--- a/async_task_outputs/async_task_output_ml8dug.md
+++ /dev/null
@@ -1 +0,0 @@
-Continue the research + implementation task: synthesize the 5 agents’ findings, the user’s speed-vs-quality tradeoff preference, and the empirical GPU probe results into concrete recommendations for Unsloth Studio diffusion performance/memory work. The `max`-tier compile-mode change, tests, commit, rebase, and push are already done; do not rerun those completed steps. Next action is to write the final synthesis/report, including that speed tests passed, the full selected suite passed, the branch was pushed, coordinate_descent_tuning was only ~2% faster, and FirstBlockCache failed on Z-Image in this stack.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_ms5hvl.md b/async_task_outputs/async_task_output_ms5hvl.md
deleted file mode 100644
index 34a7371f25..0000000000
--- a/async_task_outputs/async_task_output_ms5hvl.md
+++ /dev/null
@@ -1 +0,0 @@
-- Pushed `ede94176f`; PR `#6690` green.
diff --git a/async_task_outputs/async_task_output_nd0rln.md b/async_task_outputs/async_task_output_nd0rln.md
deleted file mode 100644
index c8af458f07..0000000000
--- a/async_task_outputs/async_task_output_nd0rln.md
+++ /dev/null
@@ -1 +0,0 @@
-- Pending: apply UI label/warning change?
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_ngnqc0.md b/async_task_outputs/async_task_output_ngnqc0.md
deleted file mode 100644
index 93821ea4f7..0000000000
--- a/async_task_outputs/async_task_output_ngnqc0.md
+++ /dev/null
@@ -1 +0,0 @@
-- Done: NVFP4 2C PR `dbb029256`
diff --git a/async_task_outputs/async_task_output_nloqq3.md b/async_task_outputs/async_task_output_nloqq3.md
deleted file mode 100644
index 016fa48e7d..0000000000
--- a/async_task_outputs/async_task_output_nloqq3.md
+++ /dev/null
@@ -1 +0,0 @@
-- GPU: diffusers; CPU/MPS: sd.cpp
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_nnlb1f.md b/async_task_outputs/async_task_output_nnlb1f.md
deleted file mode 100644
index e78c60307f..0000000000
--- a/async_task_outputs/async_task_output_nnlb1f.md
+++ /dev/null
@@ -1 +0,0 @@
-- Built fast-transformer quant mode.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_nvg1ch.md b/async_task_outputs/async_task_output_nvg1ch.md
deleted file mode 100644
index 1a2f1ae9a0..0000000000
--- a/async_task_outputs/async_task_output_nvg1ch.md
+++ /dev/null
@@ -1 +0,0 @@
-- Goal: benchmark `sd.cpp` vs ComfyUI
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_o1awff.md b/async_task_outputs/async_task_output_o1awff.md
deleted file mode 100644
index 57e9fe6119..0000000000
--- a/async_task_outputs/async_task_output_o1awff.md
+++ /dev/null
@@ -1,19 +0,0 @@
-- Decision: Stacked PR prep was advanced without committing/pushing because outward-facing actions need user authorization; the plan is grounded in current git state.
-- Decision: Existing uncommitted speed-related changes must be kept separate from the feature work because they appear pre-existing and unrelated to this session.
-- Created `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/plans/diffusion-workflows-pr-plan.md`: added a stacked PR breakdown for work on branch `diffusion-eager-and-compile-cache`, including PR titles, summaries, file lists, and pre-PR test/build gates.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/plans/diffusion-workflows-pr-plan.md`: removed a stray tag after initial creation.
-- Proposed stack in the plan:
- 1. Backend PR: safetensors kinds, image-conditioned workflows (`img2img`/inpaint/outpaint), instruction-editing families (`Qwen-Image-Edit`, `FLUX Kontext`), and two bug fixes.
- 2. Frontend PR: workflow-tab Images redesign, mask canvas, outpaint, Edit tab, Advanced Options, and spinner fix.
- 3. sd.cpp installer hardening PR: independent pin, `sha256`, mirror-ready installer changes.
-- Command run: `cd /mnt/disks/unslothai/ubuntu/workspace_81/unsloth 2>/dev/null || { echo "no unsloth repo"; exit 0; }; git branch --show-current; git remote -v | head -2; git log --oneline -8` exited successfully.
-- Key output: current branch `diffusion-eager-and-compile-cache`; remote `oobabooga https://github.com/oobabooga/unsloth.git`; recent commits include `9a2cc341c Phase 16 review fixes: engine-switch unload, sd.cpp error mapping, per-image seeds, Qwen sampler`, `86b3a5d2d [pre-commit.ci] auto fixes from pre-commit.com hooks`, `7f3c206fa Studio diffusion (Phase 16): route no-GPU loads to the native sd.cpp engine`, `9c5b35c71 [pre-commit.ci] auto fix`.
-- Command run: `git diff --stat` plus marker grep over ambiguous files exited successfully.
-- Key output: tracked diff includes `scripts/diffusion_bench.py`, `studio/backend/core/inference/diffusion.py`, `studio/backend/core/inference/diffusion_engine_router.py`, `studio/backend/core/inference/diffusion_families.py`, `studio/backend/core/inference/diffusion_memory.py`, `studio/backend/core/inference/diffusion_speed.py`, `studio/backend/core/inference/sd_cpp_backend.py`, and more.
-- Finding: `studio/backend/core/inference/diffusion_speed.py`, `studio/backend/tests/test_diffusion_speed.py`, `studio/backend/tests/conftest.py`, and `scripts/diffusion_bench.py` are uncommitted changes likely not from this session; grep found 0 of the session’s feature markers in them, about 150 lines total.
-- Completed: autonomous feature build-out is described as complete: 5 workflows, 6 models, verified/reviewed/deployed.
-- Completed: deployment is live at `https://influences-qualification-thesis-loop.trycloudflare.com`.
-- Completed: items reported done include five workflows, six models, Advanced Options, FP8/INT8, two bug fixes, sd.cpp hardening, e2e suite + GIFs, completed review, `FLUX Kontext`, and PR plan.
-- Pending: commit/push the 3 stacked PRs; assistant asked for explicit authorization before doing this.
-- Pending: `#152` work requiring hardware/external action: publish `unslothai/stable-diffusion.cpp` mirror plus macOS/Windows staging.
-- No unresolved errors in this span; only issue found was mixed uncommitted work, documented in the PR plan and left untouched.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_o8a9qk.md b/async_task_outputs/async_task_output_o8a9qk.md
deleted file mode 100644
index 67a4bf1808..0000000000
--- a/async_task_outputs/async_task_output_o8a9qk.md
+++ /dev/null
@@ -1,4 +0,0 @@
-- Decided lock fp8 `use_fast_accum=True`: protects consumer Blackwell 838 TFLOPS path; 2:4 rejected due LPIPS `0.858`, kernel stride error, compile failure.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/backend/core/inference/diffusion_transformer_quant.py`; created `scripts/sparse_accum_probe.py`.
-- Ran tests: `14 passed`; final `172 passed, 4993 deselected, 1 warning`.
-- Push initially rejected; rebased onto `origin/diffusion-phase8-quant`; pushed `ead09c45c`.
diff --git a/async_task_outputs/async_task_output_optks2.md b/async_task_outputs/async_task_output_optks2.md
deleted file mode 100644
index 1e012cf1c9..0000000000
--- a/async_task_outputs/async_task_output_optks2.md
+++ /dev/null
@@ -1 +0,0 @@
-Continue the latest actionable directive: ensure the dynamic consumer-vs-non-consumer GPU check exists so the fast path is enabled only on consumer GPUs, using NVIDIA CUDA GPU data as reference. The assistant state says the work was synced and pushed, with all probes including `nvfp4_probe.py` on remote and PR #6694 open/mergeable; do not rerun the completed rebase/push/fetch. Next action is to inspect the current landed gating/probe state only if needed, then give the user the final concise status and answer that NVFP4 is available through torchao but only slow-path here until the fast kernel/torch >= 2.11 path is available.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_or1g7n.md b/async_task_outputs/async_task_output_or1g7n.md
deleted file mode 100644
index d1c8325c75..0000000000
--- a/async_task_outputs/async_task_output_or1g7n.md
+++ /dev/null
@@ -1 +0,0 @@
-- PR `#6694` open/mergeable; commit `983f2c14a`; fp8>mxfp8; `172 passed`.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_owynyb.md b/async_task_outputs/async_task_output_owynyb.md
deleted file mode 100644
index aa80c80595..0000000000
--- a/async_task_outputs/async_task_output_owynyb.md
+++ /dev/null
@@ -1,3 +0,0 @@
-- Decision: removed global weight buffers because benchmarks/allocator profile showed neutral/no useful memory win.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/backend/tests/test_diffusion_speed.py`: removed `install_weight_buffer` stub and weight_buffer assertions; `eager` now expects no GGUF accelerator.
-- Pending: search/remove remaining refs, delete `scripts/buffer_bench.py`, run `CUDA_VISIBLE_DEVICES="" python -m pytest tests/ -q -k "diffusion"`.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_p17g2s.md b/async_task_outputs/async_task_output_p17g2s.md
deleted file mode 100644
index 1f43d855ce..0000000000
--- a/async_task_outputs/async_task_output_p17g2s.md
+++ /dev/null
@@ -1 +0,0 @@
-- Planner started; user interrupted.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_p71aw7.md b/async_task_outputs/async_task_output_p71aw7.md
deleted file mode 100644
index 729837ffcf..0000000000
--- a/async_task_outputs/async_task_output_p71aw7.md
+++ /dev/null
@@ -1 +0,0 @@
-- PR 6658: supported models?
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_pacba3.md b/async_task_outputs/async_task_output_pacba3.md
deleted file mode 100644
index 21e15ad577..0000000000
--- a/async_task_outputs/async_task_output_pacba3.md
+++ /dev/null
@@ -1 +0,0 @@
-- Asked if pre-quant also works for `int8`
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_paq0f4.md b/async_task_outputs/async_task_output_paq0f4.md
deleted file mode 100644
index ecbecb7859..0000000000
--- a/async_task_outputs/async_task_output_paq0f4.md
+++ /dev/null
@@ -1 +0,0 @@
-- Bench: `1.83 s → 0.71 s` 2.56x.
diff --git a/async_task_outputs/async_task_output_puv9lj.md b/async_task_outputs/async_task_output_puv9lj.md
deleted file mode 100644
index e3659bd5e0..0000000000
--- a/async_task_outputs/async_task_output_puv9lj.md
+++ /dev/null
@@ -1 +0,0 @@
-- PR `#6717` int8 prequant fix pending CI
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_pvz3p9.md b/async_task_outputs/async_task_output_pvz3p9.md
deleted file mode 100644
index 5e6b7b3a29..0000000000
--- a/async_task_outputs/async_task_output_pvz3p9.md
+++ /dev/null
@@ -1,16 +0,0 @@
-- Decision: use ComfyUI fp8 + `--fast` as the fair “ComfyUI best” baseline because earlier GGUF-only comparisons understated ComfyUI’s optimized path.
-- Decision: compare Z-Image and FLUX.2-klein using bf16 single-file checkpoints loaded through `UNETLoader` with `weight_dtype=fp8_e4m3fn_fast`, because ComfyUI casts to fp8 and this matches its best available dense path.
-- Decision: final product conclusion is GPU `diffusers+opts` plus CPU/Mac `sd.cpp`, because `diffusers+opts` wins GPU across all 4 models while `sd.cpp` wins CPU.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/scripts/comfy_bench.py`: added `z-image-fp8` and `flux.2-klein-fp8` workflow support using ComfyUI fp8 casting.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/outputs/FINAL_engine_comparison.md`: updated final comparison with all 4 ComfyUI best fp8 results and final goal scorecard.
-- Ran `python3 -c "...HfApi(...).list_repo_files(...)"` to find single-file checkpoints. Key output: `Comfy-Org/z_image_turbo` had `split_files/diffusion_models/z_image_turbo_bf16.safetensors`; `Comfy-Org/flux2-klein` had `split_files/diffusion_models/flux-2-klein-4b.safetensors`; `Comfy-Org/FLUX.2-klein` returned `RepositoryNotFoundError: 404 Client Error`.
-- Ran download command from `/mnt/disks/unslothai/ubuntu/workspace_81` using `hf_hub_download`; key output: `OK z_image_turbo_bf16.safetensors: 12.31 GB` and `OK flux-2-klein-4b.safetensors: 7.75 GB`.
-- Ran `python -m py_compile scripts/comfy_bench.py && echo "compile OK"`; exit OK with `compile OK`.
-- Launched ComfyUI with `CUDA_VISIBLE_DEVICES=7 ComfyUI/.venv/bin/python ComfyUI/main.py --listen 127.0.0.1 --port 8235 --fast`; background server started, later stopped.
-- Ran benchmark command: `python3 -u scripts/comfy_bench.py --port 8235 --gpu 7 --families z-image-fp8,flux.2-klein-fp8 --tag best2_fp8`; key output: `z-image-fp8` OK `lat=1.51s vram=75.0GB`; `flux.2-klein-fp8` OK `lat=1.00s vram=85.8GB`.
-- Ran server cleanup command using `ps -ef | grep '[C]omfyUI/main.py' | awk '{print $2}' | while read p; do kill "$p"; done`; key output: `comfy procs: 0`.
-- Final complete best-vs-best table: `z-image` our `0.509(int8)` vs ComfyUI fp8 `1.51` = `3.0x`; `flux.2-klein` our `0.269(int8)` vs `1.00` = `3.7x`; `flux.1` our `0.518(fp8)` vs `1.00` = `1.9x`; `qwen-image` our `1.78(int8)` vs `6.01` = `3.4x`.
-- Resolved error: initial repo guess `Comfy-Org/FLUX.2-klein` was missing with `RepositoryNotFoundError: 404 Client Error`; resolved by using `Comfy-Org/flux2-klein`.
-- Completed: all 4 models now have fair ComfyUI best fp8 comparisons against our best results.
-- Completed: final conclusion documented that `diffusers+opts` beats ComfyUI GPU best by `1.9–3.7x`, `sd.cpp` beats CPU ComfyUI/diffusers by about `~1.7x`, and accuracy rule is satisfied with `LPIPS ≤ 0.17`.
-- Pending: none stated in this span.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_pvzllf.md b/async_task_outputs/async_task_output_pvzllf.md
deleted file mode 100644
index 9bb53b2b58..0000000000
--- a/async_task_outputs/async_task_output_pvzllf.md
+++ /dev/null
@@ -1 +0,0 @@
-- PENDING: `sd.cpp`/ComfyUI accuracy
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_qc1aoq.md b/async_task_outputs/async_task_output_qc1aoq.md
deleted file mode 100644
index ba1a5cf860..0000000000
--- a/async_task_outputs/async_task_output_qc1aoq.md
+++ /dev/null
@@ -1 +0,0 @@
-- Pushed #6769: `c846c9896`
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_qgexvi.md b/async_task_outputs/async_task_output_qgexvi.md
deleted file mode 100644
index 16bc8c0c21..0000000000
--- a/async_task_outputs/async_task_output_qgexvi.md
+++ /dev/null
@@ -1,22 +0,0 @@
-- Decision: implemented name-based GPU class detection so fp8 `use_fast_accum` defaults to enabled on consumer/workstation GPUs and disabled on recognized data-center GPUs; reason was user directive to maximize data-center accuracy despite measured ~8% speed loss.
-- Decision: added user override `transformer_quant_fast_accum` because user explicitly answered `Gate as I asked ... But also add it as an option for the user`; default `None` means auto, `True`/`False` force behavior.
-- Decision: token-exact GPU matching was chosen so workstation names like `A4000` are not misclassified as data-center token `A40`.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/backend/core/inference/diffusion_transformer_quant.py`: added `_is_consumer_gpu()`, tri-state fast-accum resolver, and fp8 config plumbing so `Float8MMConfig(... use_fast_accum=...)` depends on auto/override.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/backend/core/inference/diffusion.py`: threaded `transformer_quant_fast_accum` through dense quant pipeline load and `quantize_transformer(...)`.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/backend/models/inference.py`: added request field `transformer_quant_fast_accum`.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/backend/routes/inference.py`: forwards new request field into backend load path.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/scripts/diffusion_bench.py`: added CLI flag `--fp8-fast-accum auto|on|off` and forwards it.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/backend/tests/test_diffusion_transformer_quant.py`: added consumer/data-center/workstation/unknown detector tests and resolver/quantize forwarding coverage.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/backend/tests/test_diffusion_routes.py`: added route forwarding test for `transformer_quant_fast_accum`.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/temp/phase8_pr_body.md`: updated PR body to describe gating and override.
-- Ran `python -m pytest tests/test_diffusion_transformer_quant.py -q`; key output `27 passed in 0.18s`.
-- Ran B200 verification with `CUDA_VISIBLE_DEVICES=4`; key output `device='NVIDIA B200' is_consumer=False`, `Float8MMConfig(... use_fast_accum=False ...)`, `fp8 gen: median 0.665s`.
-- Ran full AST/test check: `python -c "import ast; ..."; pytest ...`; key output `AST OK`, `187 passed, 4993 deselected, 1 warning in 15.60s`.
-- Ran B200 override verification using `scripts/diffusion_bench.py ... --fp8-fast-accum on`; key output `gen[0] 0.621s`, `gen[1] 0.608s`, `generate: median=0.6082s`, proving override enabled fast accumulate.
-- Encountered edit error `String to replace not found in file.` in `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/backend/tests/test_diffusion_transformer_quant.py`; resolved by locating reformatted test with `grep -n` and editing the current text.
-- Initial push rejected with non-fast-forward hints `hint: the same ref. If you want to integrate the remote changes, use` and `hint: 'git pull' before pushing again.`; resolved by fetch/rebase/push fallback.
-- Ran sync verification: `git fetch origin diffusion-phase8-quant`; key output `ahead/behind: 1 1`, then `Successfully rebased and updated refs/heads/diffusion-phase8-quant.`, pushed `244124d74..10db6a477`, final output `=== final sync === 0 0`.
-- Ran PR update/confirmation: `gh pr edit 6694 --body-file temp/phase8_pr_body.md`; emitted GraphQL deprecation warning about `Projects (classic)`. Then `gh pr view 6694 --json mergeable,state,commits`; key output `state=OPEN mergeable=MERGEABLE commits=7`.
-- COMPLETED: consumer/data-center auto-gating, user override, bench CLI flag, backend/request/route plumbing, PR body update, GPU verification, tests, commit/rebase/push to PR `#6694`.
-- COMPLETED: PR `#6694` is open, mergeable, branch synced (`0 0` ahead/behind), and latest pushed commit includes the changes.
-- PENDING: none noted at end of span.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_qhxcs2.md b/async_task_outputs/async_task_output_qhxcs2.md
deleted file mode 100644
index 01ad6ba5cb..0000000000
--- a/async_task_outputs/async_task_output_qhxcs2.md
+++ /dev/null
@@ -1 +0,0 @@
-- Made `scripts/compare_engines.py`; run pending
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_qzsra8.md b/async_task_outputs/async_task_output_qzsra8.md
deleted file mode 100644
index 6b5aa307d4..0000000000
--- a/async_task_outputs/async_task_output_qzsra8.md
+++ /dev/null
@@ -1,2 +0,0 @@
-- User asked: `So for the PyTorch part, which optimizations did you do, and what impact does each provide`
-- PENDING: answer with PyTorch optimizations and per-optimization impact.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_r7h7rh.md b/async_task_outputs/async_task_output_r7h7rh.md
deleted file mode 100644
index 79eb8823d9..0000000000
--- a/async_task_outputs/async_task_output_r7h7rh.md
+++ /dev/null
@@ -1,9 +0,0 @@
-- Decision: corrected benchmark scope because previous comparison used ComfyUI GGUF default, not ComfyUI best; fair baseline is ComfyUI `fp8` + `--fast` + compile where available.
-- Decision: ComfyUI 0.26.0 exposes `fp8_e4m3fn`, `fp8_e4m3fn_fast`, `fp8_e5m2`; no dynamic `int8`; `nvfp4` only via prequantized file.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/scripts/comfy_bench.py`: added UNETLoader-based `flux.1-fp8`, `qwen-image-fp8`, and `qwen-image-nvfp4` benchmark workflows.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/outputs/FINAL_engine_comparison.md`: updated final table/verdict to best-vs-best: FLUX ComfyUI `1.00s` vs ours `0.518s`; Qwen ComfyUI `6.01s` vs ours `1.78s`.
-- Commands/results: started ComfyUI `--fast` on port `8234`; confirmed UNETLoader sees fp8/nvfp4 files; downloaded `flux1-schnell-fp8.safetensors` `17.24 GB`, `qwen_image_fp8_e4m3fn.safetensors` `20.43 GB`, `qwen_image_nvfp4.safetensors` `19.77 GB`.
-- Bench results: ComfyUI fp8 no compile FLUX `1.00s`/`25.2GB`, Qwen `6.01s`/`49.4GB`; fp8+compile FLUX `1.01s`/`62.9GB`, Qwen `6.06s`/`81.3GB`; nvfp4+compile Qwen `14.16s`/`101.1GB`.
-- Errors: compound restart/kill commands exited `144` due `pkill`; resolved by standalone launch and individual kill; ComfyUI procs remaining `0`.
-- COMPLETED: corrected FLUX.1 and Qwen best-vs-best GPU comparison and writeup.
-- PENDING: optional fp8 best-vs-best rerun for Z-Image and FLUX.2-klein.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_rqwz5y.md b/async_task_outputs/async_task_output_rqwz5y.md
deleted file mode 100644
index 110a471abe..0000000000
--- a/async_task_outputs/async_task_output_rqwz5y.md
+++ /dev/null
@@ -1,4 +0,0 @@
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/studio/...`: sd.cpp timeout/cleanup/tests; `model_kind` backend/API/UI; quant gated to GGUF; sentinel fix.
-- Ran tests/build: 97 backend passed; sd.cpp 19 passed; `tsc=0`; build ok.
-- `reviewer.py` ended `exit 143`; no report.
-- Deployed `https://poster-beer-devel-watts.trycloudflare.com`.
diff --git a/async_task_outputs/async_task_output_rt5k7l.md b/async_task_outputs/async_task_output_rt5k7l.md
deleted file mode 100644
index 3d51e4ec98..0000000000
--- a/async_task_outputs/async_task_output_rt5k7l.md
+++ /dev/null
@@ -1 +0,0 @@
-- Asked benchmark all models/PRs
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_sa2qcf.md b/async_task_outputs/async_task_output_sa2qcf.md
deleted file mode 100644
index 8500e99d5b..0000000000
--- a/async_task_outputs/async_task_output_sa2qcf.md
+++ /dev/null
@@ -1 +0,0 @@
-- PR `#6675` created, mergeable.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_sehiao.md b/async_task_outputs/async_task_output_sehiao.md
deleted file mode 100644
index bd012d9b1b..0000000000
--- a/async_task_outputs/async_task_output_sehiao.md
+++ /dev/null
@@ -1 +0,0 @@
-Continue the latest directive: review all phase PRs and their comments, decide which comments identify real issues, and fix only those real issues. The current focus is Phase 9 PR #6700, where the assistant identified that `transformer_prequant_path` bypasses the signed `native_path_lease` system and planned a low-risk default-deny fix for request-supplied local pickle paths while preserving trusted hosted-repo behavior. The last Bash checkout/reset of `diffusion-phase9-prequant` is DONE; do not rerun it. Next, inspect the checked-out branch files around `transformer_prequant_path` validation and implement the Phase 9 fix.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_si878q.md b/async_task_outputs/async_task_output_si878q.md
deleted file mode 100644
index 29467f3a20..0000000000
--- a/async_task_outputs/async_task_output_si878q.md
+++ /dev/null
@@ -1 +0,0 @@
-- `/login` ok; PR link received
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_sjuui0.md b/async_task_outputs/async_task_output_sjuui0.md
deleted file mode 100644
index f058b4c236..0000000000
--- a/async_task_outputs/async_task_output_sjuui0.md
+++ /dev/null
@@ -1 +0,0 @@
-- `increasing performance and speed`
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_ssca8h.md b/async_task_outputs/async_task_output_ssca8h.md
deleted file mode 100644
index b402ccc284..0000000000
--- a/async_task_outputs/async_task_output_ssca8h.md
+++ /dev/null
@@ -1 +0,0 @@
-- Edit tab done; live verified; #148/#149 pending
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_ssjou7.md b/async_task_outputs/async_task_output_ssjou7.md
deleted file mode 100644
index 91300daa30..0000000000
--- a/async_task_outputs/async_task_output_ssjou7.md
+++ /dev/null
@@ -1 +0,0 @@
-- Check NVFP4/FP8 low-mem; continue
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_t6piq3.md b/async_task_outputs/async_task_output_t6piq3.md
deleted file mode 100644
index d38eeb34f1..0000000000
--- a/async_task_outputs/async_task_output_t6piq3.md
+++ /dev/null
@@ -1 +0,0 @@
-Continue the latest directive: try out PyTorch/diffusers optimizations, review the linked PyTorch Inductor config, Diffusers optimization docs, and related articles/repos, using 5 Opus subagents unforked to group the materials and identify leverageable improvements. The latest tool call already completed: it fetched/rebased onto remote, ran `tests/test_diffusion_speed.py`, and appears to have succeeded; do not rerun it. Next action is to inspect the completed command output/truncated state if available, then push the rebased `diffusion-phase7-perf` branch or otherwise continue the PR update flow implied by “Remote advanced… rebase and push.”
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_t9630i.md b/async_task_outputs/async_task_output_t9630i.md
deleted file mode 100644
index 31a0cbf37a..0000000000
--- a/async_task_outputs/async_task_output_t9630i.md
+++ /dev/null
@@ -1 +0,0 @@
-- Pending: resume ComfyUI GPU7 benchmarks
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_tbwscy.md b/async_task_outputs/async_task_output_tbwscy.md
deleted file mode 100644
index 2fa178e578..0000000000
--- a/async_task_outputs/async_task_output_tbwscy.md
+++ /dev/null
@@ -1 +0,0 @@
-Continue the latest task: finish the review-fix branch workflow and restore the Phase-17 working state after pushing the final `diffusion-phase1` branch. The last completed tool was `Bash` “Restore Phase-17 working state,” which checked out `diffusion-eager-and-compile-cache`, restored held core/test files, and popped the Phase-17 stash. Next, inspect the post-restore git status and continue from the restored Phase-17 working tree; do not re-run the completed commit/push or restore commands.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_tm56wo.md b/async_task_outputs/async_task_output_tm56wo.md
deleted file mode 100644
index e780d7f7f9..0000000000
--- a/async_task_outputs/async_task_output_tm56wo.md
+++ /dev/null
@@ -1 +0,0 @@
-- Used `gh pr view`; found #6658 base, PRs #6670-#6717 stacked open.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_u3ea3h.md b/async_task_outputs/async_task_output_u3ea3h.md
deleted file mode 100644
index 9e84f2fcb0..0000000000
--- a/async_task_outputs/async_task_output_u3ea3h.md
+++ /dev/null
@@ -1 +0,0 @@
-- Safetensors done; Studio restarted
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_u8vd3f.md b/async_task_outputs/async_task_output_u8vd3f.md
deleted file mode 100644
index 8909a17d70..0000000000
--- a/async_task_outputs/async_task_output_u8vd3f.md
+++ /dev/null
@@ -1,9 +0,0 @@
-- Decision: `use_fast_accum=True` treated as precision tradeoff, not overflow risk, because FP8 GEMM still uses FP32 accumulator and torchao dynamic scaling bounds FP8 inputs before cast.
-- Decision: Z-Image singled out as strongest overflow test because it is `fp16_incompatible` with activations around `~9e5`.
-- Created `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/scripts/fp8_overflow_check.py`: probe hooks all quantized linears during real Z-Image generation and reports max abs/nonfinite/image finite for `fast_accum=True/False`.
-- Edited `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth/temp/phase8_pr_body.md`: added overflow verification artifact/results.
-- Ran `CUDA_VISIBLE_DEVICES=4 python3 -u scripts/fp8_overflow_check.py`; first attempt exit `1` due Dynamo hook compile error.
-- Resolved by editing probe to run eager/lower workload; rerun exit `0`: `fast_accum=True hooked_linears=276 max|linear_out|=1007616.0 nonfinite_elems=0 image_all_finite=True`; same for `fast_accum=False`.
-- Commit attempted, push initially rejected due remote advancing; verified local `3a3c9abdd` vs remote `bdb8eb918`, ahead/behind `1 1`.
-- Ran `git rebase origin/diffusion-phase8-quant -X theirs` then `git push origin diffusion-phase8-quant`; pushed `bdb8eb918..e966a6d7e`, verified ahead/behind `0 0`.
-- Completed: PR `#6694` updated, branch `diffusion-phase8-quant` remote contains `scripts/fp8_overflow_check.py`, PR mergeable.
diff --git a/async_task_outputs/async_task_output_v18gdm.md b/async_task_outputs/async_task_output_v18gdm.md
deleted file mode 100644
index bd0f35b3e2..0000000000
--- a/async_task_outputs/async_task_output_v18gdm.md
+++ /dev/null
@@ -1 +0,0 @@
-- Asked if all PRs target `unsloth studio` diffusion speedups
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_v2ldsv.md b/async_task_outputs/async_task_output_v2ldsv.md
deleted file mode 100644
index b37185e2e6..0000000000
--- a/async_task_outputs/async_task_output_v2ldsv.md
+++ /dev/null
@@ -1 +0,0 @@
-- Do `(3)` first; rest later.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_v5tcx6.md b/async_task_outputs/async_task_output_v5tcx6.md
deleted file mode 100644
index e71b36e438..0000000000
--- a/async_task_outputs/async_task_output_v5tcx6.md
+++ /dev/null
@@ -1 +0,0 @@
-- PR `#6717` green: HEAD `9c5b35c71` synced, 29 pass, 5 pending.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_vdv78e.md b/async_task_outputs/async_task_output_vdv78e.md
deleted file mode 100644
index 8678602582..0000000000
--- a/async_task_outputs/async_task_output_vdv78e.md
+++ /dev/null
@@ -1 +0,0 @@
-- sd.cpp unwired; live path diffusers+GGUF
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_vei0mf.md b/async_task_outputs/async_task_output_vei0mf.md
deleted file mode 100644
index 8b66ff0efc..0000000000
--- a/async_task_outputs/async_task_output_vei0mf.md
+++ /dev/null
@@ -1,4 +0,0 @@
-- Decision: `SAFETENSORS_MODELS` uses full repo ids, so On Device `unsloth/Qwen-Image-2512-FP8` resolves to `single_file`.
-- Created `/mnt/disks/unslothai/ubuntu/workspace_81/scripts/studio_ondevice_load_verify.py`.
-- Ran E2E: FP8 On Device click loaded `model_kind='single_file'`; unloaded OK.
-- COMPLETED: fixes verified. PENDING: SDXL/#196/#185.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_vm1ibj.md b/async_task_outputs/async_task_output_vm1ibj.md
deleted file mode 100644
index d178c7466b..0000000000
--- a/async_task_outputs/async_task_output_vm1ibj.md
+++ /dev/null
@@ -1 +0,0 @@
-- Goal: beat ComfyUI via `sd.cpp`
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_vrmbti.md b/async_task_outputs/async_task_output_vrmbti.md
deleted file mode 100644
index c799b163a5..0000000000
--- a/async_task_outputs/async_task_output_vrmbti.md
+++ /dev/null
@@ -1,3 +0,0 @@
-- User asked: `What are the torch compile flags - did you enable CUDAGraphs and also see https://docs.pytorch.org/docs/stable/generated/torch.compile.html`
-- Decision/context: Need verify or explain `torch.compile` flags, specifically whether CUDAGraphs are enabled.
-- Pending: Inspect relevant code/config and compare against PyTorch `torch.compile` docs at `https://docs.pytorch.org/docs/stable/generated/torch.compile.html`.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_w37m7v.md b/async_task_outputs/async_task_output_w37m7v.md
deleted file mode 100644
index 723f03347a..0000000000
--- a/async_task_outputs/async_task_output_w37m7v.md
+++ /dev/null
@@ -1 +0,0 @@
-- PENDING: verify PR #6717 gates
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_wdk0jp.md b/async_task_outputs/async_task_output_wdk0jp.md
deleted file mode 100644
index 9a08bb0ce3..0000000000
--- a/async_task_outputs/async_task_output_wdk0jp.md
+++ /dev/null
@@ -1,2 +0,0 @@
-- Adv+inpaint done
-- Restart pending
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_wkyewq.md b/async_task_outputs/async_task_output_wkyewq.md
deleted file mode 100644
index 12e5b71e23..0000000000
--- a/async_task_outputs/async_task_output_wkyewq.md
+++ /dev/null
@@ -1,2 +0,0 @@
-- Review launched: `reviewer.py` bg `bj7gbc091` + 3 forks; pending `reviewer.py`
-- Findings: fix GGUF quant UI, download timeout/tests; backend no Med/High
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_wr4fbc.md b/async_task_outputs/async_task_output_wr4fbc.md
deleted file mode 100644
index ec0ae06a24..0000000000
--- a/async_task_outputs/async_task_output_wr4fbc.md
+++ /dev/null
@@ -1 +0,0 @@
-- Asked perf compare: `sd`/PyTorch
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_wroolh.md b/async_task_outputs/async_task_output_wroolh.md
deleted file mode 100644
index ec16e690d0..0000000000
--- a/async_task_outputs/async_task_output_wroolh.md
+++ /dev/null
@@ -1 +0,0 @@
-Continue answering the user’s latest matrix-coverage question: whether Mac/Windows/Linux/WSL × NVIDIA/AMD/CPU/Mac × many models is “fully optimized” versus ComfyUI/diffusers/sd.cpp. State plainly that only Linux x86_64 + NVIDIA B200 GPU and Linux CPU were measured; Mac, Windows, WSL, AMD, Intel, and Apple/MPS remain unvalidated here, with CUDA-only fp8/int8 fast quant as the key limitation. No tool is in flight; next action is to proceed from the completed hardware enumeration and `outputs/coverage_matrix.md` write, without re-running completed commands unless fresh evidence is needed.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_wte90e.md b/async_task_outputs/async_task_output_wte90e.md
deleted file mode 100644
index 1a31dc9bc7..0000000000
--- a/async_task_outputs/async_task_output_wte90e.md
+++ /dev/null
@@ -1 +0,0 @@
-- Q: `GGUFs` backend? `PyTorch`?
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_wyakyz.md b/async_task_outputs/async_task_output_wyakyz.md
deleted file mode 100644
index 1e55b21146..0000000000
--- a/async_task_outputs/async_task_output_wyakyz.md
+++ /dev/null
@@ -1 +0,0 @@
-- Wrote `outputs/threeway/SUMMARY.md`; pending Z/Flux2, LPIPS, CPU.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_x50ivh.md b/async_task_outputs/async_task_output_x50ivh.md
deleted file mode 100644
index 26cb4a8191..0000000000
--- a/async_task_outputs/async_task_output_x50ivh.md
+++ /dev/null
@@ -1 +0,0 @@
-- Completed: `[pr-link]`, `[hook_success]`
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_x6pfaj.md b/async_task_outputs/async_task_output_x6pfaj.md
deleted file mode 100644
index 5403db6b40..0000000000
--- a/async_task_outputs/async_task_output_x6pfaj.md
+++ /dev/null
@@ -1 +0,0 @@
-Continue the latest directive: check all PRs again, fix merge conflicts, merge from main, fix only real issues, and confirm whether any local work is missing from the PRs. The phase chain 4→16 is already cascaded and pushed; do not rerun the completed phase16 validation/push. The last completed tool attempted to merge phase16 into `diffusion-image-workflows` #6769 and produced conflicts in `studio/backend/core/inference/diffusion.py`, `diffusion_families.py`, and additional `studio/b...` paths from the truncated result. Next action: inspect the current conflicted merge state in `/mnt/disks/unslothai/ubuntu/workspace_81/unsloth`, resolve the conflicts for #6769, then validate and push that branch before continuing up the stack.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_xho1tf.md b/async_task_outputs/async_task_output_xho1tf.md
deleted file mode 100644
index 5cabc227ea..0000000000
--- a/async_task_outputs/async_task_output_xho1tf.md
+++ /dev/null
@@ -1 +0,0 @@
-- Done GGUF relabel `38a69ab15`
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_xklshy.md b/async_task_outputs/async_task_output_xklshy.md
deleted file mode 100644
index 0122afaad3..0000000000
--- a/async_task_outputs/async_task_output_xklshy.md
+++ /dev/null
@@ -1 +0,0 @@
-- PR `#6658` inspected via `gh pr view`
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_xsopjx.md b/async_task_outputs/async_task_output_xsopjx.md
deleted file mode 100644
index ecbdc2b2b5..0000000000
--- a/async_task_outputs/async_task_output_xsopjx.md
+++ /dev/null
@@ -1,4 +0,0 @@
-- User requested a list of all PRs made by the assistant that were moved from the stack of `https://github.com/unslothai/unsloth/pull/6658`.
-- No decisions, file edits, commands, or errors occurred in this span.
-- COMPLETED: request captured for continuation.
-- PENDING: inspect GitHub/local branch or PR metadata to identify the relevant PRs and report them.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_yofm42.md b/async_task_outputs/async_task_output_yofm42.md
deleted file mode 100644
index bb8466a5ac..0000000000
--- a/async_task_outputs/async_task_output_yofm42.md
+++ /dev/null
@@ -1,4 +0,0 @@
-- Decision: attributed Z-Image diffusers resident-GPU `default` gains almost entirely to `compile_repeated_blocks`; `channels_last`/`cudnn.benchmark` kept because free no-ops on DiT but useful for UNet.
-- Evidence: `compile_probe.py` compile-only eager `1.83 → 0.79 s` `+56.6%`; `perf_verify.py` full default `1.80 → 0.82 s` `-54.7%`.
-- Not isolated: `inference_mode`, TF32, fused QKV; offered clean ablation on `GPU 6`.
-- Completed: answered attribution and caveats.
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_z8vkqi.md b/async_task_outputs/async_task_output_z8vkqi.md
deleted file mode 100644
index 0e1c85ac95..0000000000
--- a/async_task_outputs/async_task_output_z8vkqi.md
+++ /dev/null
@@ -1 +0,0 @@
-- GGUF diffusers dequantizes; sd.cpp likely faster
\ No newline at end of file
diff --git a/async_task_outputs/async_task_output_zl4zum.md b/async_task_outputs/async_task_output_zl4zum.md
deleted file mode 100644
index 1d720dd295..0000000000
--- a/async_task_outputs/async_task_output_zl4zum.md
+++ /dev/null
@@ -1 +0,0 @@
-- Decision: INT8 uses `Qwen/Qwen-Image`
diff --git a/async_task_outputs/extra_plan.md b/async_task_outputs/extra_plan.md
deleted file mode 100644
index 501f6e9ebe..0000000000
--- a/async_task_outputs/extra_plan.md
+++ /dev/null
@@ -1,238 +0,0 @@
-**(1) Summary & Findings**
-
-The target change should be treated as a measurement-driven speed-tier restructure, not as a blanket rewrite. The current evidence in the prompt already says the safest eager patches are installed broadly, while earlier direct in-place rewrites measured roughly neutral. The plan should preserve that bias: make the new tier behavior explicit, keep class-level monkey patches reversible and idempotent, and only promote additional dense-path in-place changes when they pass correctness and performance gates on each supported transformer family.
-
-The proposed tier model is coherent:
-
-`off`:
-No speed patches beyond whatever the base runtime requires.
-
-`default`:
-Enable channels-last where applicable, cuDNN tuning/configuration, compiled GGUF dequant-only path, and eager monkey patches for all supported dense and GGUF diffusion transformer paths.
-
-`max`:
-Enable everything in `default`, then add regional compilation of repeated transformer blocks, TF32 where supported and acceptable, and fused-QKV where the model class and attention implementation can safely use it.
-
-The important semantic change is that `max` becomes a strict superset of `default`. That means compiled GGUF dequant must no longer be assumed mutually exclusive with regional transformer compilation until tests prove it has to be. The expected implementation should first try composition, then fall back only with a narrow capability flag and a documented reason.
-
-The current Diffusers transformer structures look favorable for regional compilation because the target model families expose repeated transformer blocks. PyTorch’s regional compilation guidance explicitly targets repeated regions to reduce compile cold-start cost while still compiling hot blocks: [PyTorch regional compilation recipe](https://docs.pytorch.org/tutorials/recipes/regional_compilation.html). The lower-level API also describes nested compile regions as reusable repeated regions, with recompilation only when guards such as shape, dtype, device, or stride change: [torch.compiler API](https://docs.pytorch.org/docs/stable/torch.compiler_api.html).
-
-The in-place dense-path optimization opportunity is narrower than it first appears. The common formulas are residual adds, gated residual adds, and AdaLayerNorm-style modulation such as `norm * (1 + scale) + shift`. These are usually safe only when the mutated tensor is a fresh activation, is not reused by another branch, is not returned as an alias that callers expect to remain independent, and does not interfere with compiler/CUDA graph assumptions. For most eager inference paths, in-place modulation of fresh normalization outputs is more promising than mutating incoming block inputs.
-
-Channels-last should remain part of `default`, but its benefit is likely concentrated in 4D image/conv paths rather than the 3D sequence tensors used inside DiT transformer blocks. PyTorch documents channels-last as a memory format for 4D NCHW tensors: [channels-last tutorial](https://docs.pytorch.org/tutorials/intermediate/memory_format_tutorial.html). The implementation should avoid forcing channels-last on sequence tensors or creating hidden layout conversions that erase the win.
-
-TF32 belongs in `max`, not `default`, because it can change numerical results for float32 matmul/convolution. PyTorch documents TF32 as faster but lower mantissa precision on supported NVIDIA devices: [CUDA semantics: TF32](https://docs.pytorch.org/docs/stable/notes/cuda.html). It should be enabled with saved/restored global flags and validated by image/tensor tolerances, not assumed harmless.
-
-Global reusable buffers are plausible but high-risk. PyTorch’s CUDA caching allocator already tries to reach a steady state by reusing freed memory, which explains why manual reusable buffers can benchmark neutral: [PyTorch CUDA allocator overview](https://zdevito.github.io/2022/08/04/cuda-caching-allocator.html). Manual buffers are most likely useful only if profiling shows allocator churn or peak memory spikes that the allocator cannot smooth out. They are most dangerous inside compiled regions, because mutated inputs or dynamic buffer resizing can cause graph breaks, skipped CUDA graphs, or recompiles. PyTorch’s CUDA graph docs call out mutation and static-address constraints: [CUDAGraph Trees](https://docs.pytorch.org/docs/stable/user_guide/torch_compiler/torch.compiler_cudagraph_trees.html).
-
-**(2) Important Issues To Investigate Or Look Further Into**
-
-The first issue is whether compiled GGUF dequant composes with regional compile. Test both application orders: compile dequant first then compile repeated blocks, and compile repeated blocks first then wrap dequant. The desired behavior is one stable compiled dequant path reused inside or beside the regionally compiled block, without graph breaks, recompilation loops, stale dequant buffers, or correctness drift.
-
-The second issue is dense-path in-place mutation safety. For each supported transformer family, classify candidate mutations into three groups:
-
-Safe-looking:
-In-place modulation on fresh normalization outputs, such as multiply/add on the output of LayerNorm or RMSNorm before attention/MLP.
-
-Conditionally safe:
-In-place residual adds to `hidden_states` or `encoder_hidden_states`, only if no caller-visible alias, hook, adapter, attention processor, or later branch needs the pre-add value.
-
-Risky:
-In-place activation rewrites inside feed-forward modules, especially where activation inputs may be reused, where approximate GELU implementations are module-specific, or where compiler fusion already handles the elementwise chain.
-
-The third issue is model-specific modulation behavior. Qwen-style modulation can use per-token selection paths, while Z-Image-style modulation includes noisy/clean token selection and tanh gates. These branches may be correct in eager mode but create extra compiler guards or less stable fused graphs. They need per-model tests rather than a single shared assumption.
-
-The fourth issue is regional compile granularity. Compiling the whole transformer may produce stronger fusion but higher cold start and more graph-break risk. Compiling repeated blocks should be the default `max` strategy, but the exact block boundary must include enough computation to matter while excluding dynamic preprocessing, image packing/unpacking, scheduler logic, progress callbacks, and optional non-tensor control flow.
-
-The fifth issue is reversibility and idempotence. Since the system uses class-level monkey patches, tier switching must be safe across repeated pipeline loads, multiple model classes, and switching from `max` back to `default` or `off`. Every patch needs an original-method registry, an installed-state key, and a clean unpatch path.
-
-The sixth issue is numerical tolerance. “No accuracy beyond fp noise” should be operationalized as tensor-level and image-level checks. Dense BF16/FP16 paths can use tolerances appropriate to dtype. FP32 with TF32 enabled needs separate thresholds and should be reported as a `max`-only behavior change.
-
-The seventh issue is global-buffer lifetime. The arbiter guarantees one active pipeline, but that does not automatically guarantee safe buffer reuse across CUDA streams, async execution, callbacks, interrupted requests, shape changes, or teardown. Any reusable buffer scheme must be keyed by device, dtype, shape, and possibly stream, and it must never return a tensor that aliases the scratch buffer unless ownership is explicit.
-
-The eighth issue is channels-last scope. The plan should verify that channels-last conversion is applied only to compatible modules/tensors and does not add repeated `contiguous` or layout conversion costs inside transformer blocks.
-
-The ninth issue is fused-QKV compatibility. Fused-QKV must be tested against dense safetensors, GGUF, LoRA/adapters, custom attention processors, model offload, and torch.compile. It should not be enabled by class name alone; it needs structural checks on projection shapes, bias handling, dtype, quantization wrappers, and processor expectations.
-
-**(3) Approximate Plan On How To Resolve / Investigate / Do Task**
-
-1. Establish a baseline matrix.
-
-Measure current `off`, current `default`, and current `max` behavior before edits. Capture latency, warmup time, compile time, peak memory, allocation count if available, output tensor deltas, and generated image deltas. Use fixed seeds, fixed scheduler settings, identical prompts, identical dimensions, and a small number of representative resolutions.
-
-Matrix dimensions:
-Dense safetensors and GGUF.
-Each supported transformer family.
-Cold run and warmed run.
-Eager and compiled where applicable.
-At least one static-shape repeated run and one changed-shape run.
-
-2. Define the new tier contract first.
-
-Make the speed-tier resolver produce an explicit feature set instead of scattered conditionals. The contract should be:
-
-`default = channels_last + cudnn + eager_patches + gguf_dequant_compile`
-
-`max = default + regional_compile + tf32 + fused_qkv`
-
-This should be represented as capability flags that downstream patch/install code consumes. The key invariant is that `max` starts from the already-resolved `default` feature set, not from a separate branch.
-
-3. Normalize patch ordering.
-
-Use one deterministic install order:
-
-Runtime/global backend flags.
-Memory format setup.
-Class-level eager patches.
-GGUF dequant compile wrapper.
-Fused-QKV transforms if selected.
-Regional compile if selected.
-
-The reason to apply regional compile late is that the compiler should see the final call structure, including eager-patched operations and dequant wrappers. If tests prove this order breaks GGUF compiled dequant, test the reverse order and preserve the best one behind a narrowly named compatibility branch.
-
-4. Harden reversible patch infrastructure.
-
-Use a registry keyed by class object and patch name. Store original callables once. Reinstalling the same tier should be a no-op. Downgrading or disabling should restore exactly the original method when no other active tier requires the patch. Add explicit metadata such as installed model classes, active feature flags, and whether a patch is dense-only, GGUF-only, or shared.
-
-5. Revisit dense eager patches with model-specific candidate functions.
-
-For dense paths, evaluate these candidates independently:
-
-Ada modulation out-of-place replacement:
-Use fused formulas such as `addcmul` where it reduces temporary tensors and has already shown 1-ULP behavior.
-
-Ada modulation in-place:
-Only mutate fresh normalization outputs. Example conceptual rewrite: normalize into a fresh tensor, multiply by scale term in-place, then add shift in-place. Do not mutate source `hidden_states`.
-
-Residual gated add:
-Prefer `add_` only when the residual target is not needed elsewhere and the operation is outside a compiled CUDA graph-sensitive boundary. Test `x.add_(gate * residual)` versus `x = x + gate * residual`; if `gate * residual` still allocates the dominant temporary, this may not help.
-
-Activation in-place:
-Treat as experimental. Only use if the specific activation input is fresh and compiler/eager benchmarks show a win. GELU is less attractive than SiLU because module implementations and approximations vary.
-
-6. Build correctness tests before accepting each in-place candidate.
-
-For each target transformer family, run the original and patched block with identical randomized inputs covering:
-Batch 1 and batch 2.
-Small and realistic sequence lengths.
-BF16, FP16, and FP32 where supported.
-With and without text/context stream.
-With modulation-index or noisy/clean-token branches where applicable.
-With attention masks and RoPE/frequency inputs where applicable.
-
-Assertions:
-No shape, dtype, device, stride, or memory-format regression unless intentional.
-Output max/mean error within dtype-specific tolerance.
-No input tensor unexpectedly changed unless the candidate explicitly allows mutation.
-No returned tensor aliases a scratch buffer that will be reused.
-No autograd requirement is introduced; inference mode remains clean.
-
-7. Build compile-safety tests.
-
-For every accepted eager/in-place patch, test:
-Plain eager.
-`torch.compile` on the block.
-Regional compile on repeated blocks.
-`max` with GGUF compiled dequant active.
-Shape-stable repeated calls.
-Shape-changed calls that should either reuse dynamic guards or recompile a bounded number of times.
-
-Record graph breaks and recompiles. Any patch that increases recompiles or disables CUDA graph capture without a clear latency win should stay out of `default` and likely out of `max`.
-
-8. Test compiled GGUF dequant composition directly.
-
-Use a small GGUF-backed transformer path and run four configurations:
-
-GGUF dequant compile only.
-Regional compile only.
-GGUF dequant compile then regional compile.
-Regional compile then GGUF dequant compile.
-
-Pass/fail criteria:
-Same outputs within quantized tolerance.
-No crash during first compile.
-No repeated recompilation across identical inputs.
-No extra CPU fallback in hot path.
-No material latency regression versus dequant-only `default`.
-
-If composition works, keep `max` as a true superset. If not, implement a targeted compatibility mode that preserves `max` semantics as much as possible, such as compiling the dequant op outside the regional block or disabling only the conflicting nested compile boundary, not disabling all default GGUF optimizations.
-
-9. Re-examine global reusable buffers as an experiment, not a default feature.
-
-Start by profiling whether per-forward allocation is a real bottleneck in diffusion DiT blocks. Collect allocation counts, peak memory, reserved memory, and latency with allocator warmup. If allocator churn is not visible, do not add global buffers to default or max.
-
-If profiling shows a real issue, prototype eager-only scratch buffers with strict constraints:
-One buffer owner per active pipeline.
-Keyed by device, dtype, shape, and role.
-Never resized inside a compiled graph.
-Never used for tensors returned to callers.
-Invalidated on model unload, dtype change, device change, or resolution change.
-Disabled automatically when regional compile is active unless compile tests prove it is stable.
-
-10. Compare manual buffers against compiler-managed buffers.
-
-Because `torch.compile` and CUDA graphs can already manage static addresses and memory pools, benchmark global buffers separately for:
-Eager dense.
-Eager GGUF.
-Default GGUF compiled dequant.
-Max regional compile.
-Max regional compile plus compiled dequant.
-
-Expected result: global buffers may be neutral or harmful under `max`. If so, keep them opt-in/debug-only.
-
-11. Add acceptance benchmarks.
-
-Use representative image-generation calls rather than only synthetic block tests. Include:
-Single prompt, fixed resolution.
-Changed resolution.
-Changed batch size.
-Dense and GGUF.
-Each speed tier.
-Warmup excluded and included numbers.
-Peak memory.
-Compile cold-start time.
-Steady-state tokens/steps per second or seconds per denoise step.
-
-Promote a candidate only if it has a consistent win or a clear memory benefit without correctness or compile regression.
-
-12. Document final behavior in runtime metadata.
-
-Expose which optimizations are active for the current pipeline: eager patches, compiled dequant, regional compile, TF32, fused-QKV, channels-last, global buffers if enabled. This makes support/debugging much easier and helps prove `max` is actually a superset of `default`.
-
-**(4) Potential Bugs Or Issues Worth Looking Into**
-
-In-place residual mutation may corrupt caller-visible tensors if a block input is also referenced by another branch, hook, adapter, debug capture, or later residual path. This is the highest-risk dense optimization.
-
-In-place modulation may accidentally mutate a tensor view. Broadcasted scale/shift tensors, chunked modulation outputs, and selected per-token modulation branches can produce non-contiguous or aliased views. Mutate only the fresh normalized activation, never the chunked modulation tensors.
-
-`addcmul` rewrites can silently alter rounding order. The existing 1-ULP finding is encouraging, but each model-specific formula still needs per-dtype tolerances and image-level checks.
-
-Activation rewrites can break approximate GELU semantics or FeedForward module assumptions. They may also be optimized away by Inductor already, producing no eager win and worse compile behavior.
-
-Regional compile can specialize on shape, stride, dtype, device, boolean flags, or optional inputs. Diffusion workloads vary by height, width, prompt length, batch size, guidance mode, and model-specific options, so recompilation control is essential.
-
-Compiled GGUF dequant inside a regionally compiled block may create nested compile conflicts, graph breaks, duplicate compilation, stale dequant buffers, or CPU fallback. This is the main `max`-as-superset risk.
-
-Applying fused-QKV after compilation may compile the wrong graph; applying it before capability checks may break custom attention processors or quantized projections. The transform order needs tests.
-
-TF32 global flags can leak outside the active pipeline if not restored. This can affect unrelated inference or training sessions in the same process.
-
-Channels-last conversion can be a no-op for transformer sequence tensors, or worse, can introduce layout conversions if applied indiscriminately. Limit it to compatible tensors/modules.
-
-Global reusable buffers can create cross-call data hazards if a second request starts before the previous CUDA work has completed, even with single-active-pipeline scheduling at the Python level.
-
-Global buffers can pin peak VRAM after a large resolution request and hurt later smaller requests unless there is a clear release/shrink policy.
-
-Global buffers stored as module attributes can become compiler guards or static inputs, causing recompilation when shape/device/dtype changes.
-
-Manual buffers may fight CUDA graph memory planning. PyTorch’s compiled CUDA graph path has static-address assumptions; mutated external buffers can cause CUDA graph skips or partitioning.
-
-Class-level monkey patches can stack if install is not idempotent, or restore the wrong method if multiple tiers install overlapping patches.
-
-Tier downgrades can leave stale compiled modules, fused projections, backend flags, or patched methods active unless teardown is explicit.
-
-LoRA/adapters may depend on projection module structure. Fused-QKV and in-place attention rewrites must verify adapter compatibility.
-
-Offload or device movement can invalidate buffers and compiled graphs. Any optimization cache must be cleared on device map changes, CPU/GPU offload transitions, dtype changes, and model unload.
-
-The final recommendation is to implement the tier restructure first, then promote only the already-proven eager patches into dense/default behavior, then run the GGUF dequant plus regional compile composition tests, and only after that revisit in-place residuals, activations, and global buffers as individually gated experiments.
\ No newline at end of file
diff --git a/logs/comfy7.pid b/logs/comfy7.pid
deleted file mode 100644
index a0b0c984cd..0000000000
--- a/logs/comfy7.pid
+++ /dev/null
@@ -1 +0,0 @@
-425832
diff --git a/logs/comfy_cpu.pid b/logs/comfy_cpu.pid
deleted file mode 100644
index 510a61ba03..0000000000
--- a/logs/comfy_cpu.pid
+++ /dev/null
@@ -1 +0,0 @@
-430027
diff --git a/logs/comfy_fast.pid b/logs/comfy_fast.pid
deleted file mode 100644
index 6fcc8de961..0000000000
--- a/logs/comfy_fast.pid
+++ /dev/null
@@ -1 +0,0 @@
-801600
diff --git a/logs/object_info.json b/logs/object_info.json
deleted file mode 100644
index dfebacb259..0000000000
--- a/logs/object_info.json
+++ /dev/null
@@ -1 +0,0 @@
-{"KSampler": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model used for denoising the input latent."}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true, "tooltip": "The random seed used for creating the noise."}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000, "tooltip": "The number of steps used in the denoising process."}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01, "tooltip": "The Classifier-Free Guidance scale balances creativity and adherence to the prompt. Higher values result in images more closely matching the prompt however too high values will negatively impact quality."}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"], {"tooltip": "The algorithm used when sampling, this can affect the quality, speed, and style of the generated output."}], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal"], {"tooltip": "The scheduler controls how noise is gradually removed to form the image."}], "positive": ["CONDITIONING", {"tooltip": "The conditioning describing the attributes you want to include in the image."}], "negative": ["CONDITIONING", {"tooltip": "The conditioning describing the attributes you want to exclude from the image."}], "latent_image": ["LATENT", {"tooltip": "The latent image to denoise."}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "The amount of denoising applied, lower values will maintain the structure of the initial image allowing for image to image sampling."}]}}, "input_order": {"required": ["model", "seed", "steps", "cfg", "sampler_name", "scheduler", "positive", "negative", "latent_image", "denoise"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "KSampler", "display_name": "KSampler", "description": "Uses the provided model, positive and negative conditioning to denoise the latent image.", "python_module": "nodes", "category": "model/sampling", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The denoised latent."], "search_aliases": ["sampler", "sample", "generate", "denoise", "diffuse", "txt2img", "img2img"]}, "CheckpointLoaderSimple": {"input": {"required": {"ckpt_name": [[], {"tooltip": "The name of the checkpoint (model) to load."}]}}, "input_order": {"required": ["ckpt_name"]}, "is_input_list": false, "output": ["MODEL", "CLIP", "VAE"], "output_is_list": [false, false, false], "output_name": ["MODEL", "CLIP", "VAE"], "name": "CheckpointLoaderSimple", "display_name": "Load Checkpoint", "description": "Loads a diffusion model checkpoint, diffusion models are used to denoise latents.", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The model used for denoising latents.", "The CLIP model used for encoding text prompts.", "The VAE model used for encoding and decoding images to and from latent space."], "search_aliases": ["load model", "checkpoint", "model loader", "load checkpoint", "ckpt", "model"]}, "CLIPTextEncode": {"input": {"required": {"text": ["STRING", {"multiline": true, "dynamicPrompts": true, "tooltip": "The text to be encoded."}], "clip": ["CLIP", {"tooltip": "The CLIP model used for encoding the text."}]}}, "input_order": {"required": ["text", "clip"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "CLIPTextEncode", "display_name": "CLIP Text Encode (Prompt)", "description": "Encodes a text prompt using a CLIP model into an embedding that can be used to guide the diffusion model towards generating specific images.", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["A conditioning containing the embedded text used to guide the diffusion model."], "search_aliases": ["text", "prompt", "text prompt", "positive prompt", "negative prompt", "encode text", "text encoder", "encode prompt"]}, "CLIPSetLastLayer": {"input": {"required": {"clip": ["CLIP"], "stop_at_clip_layer": ["INT", {"default": -1, "min": -24, "max": -1, "step": 1, "advanced": true}]}}, "input_order": {"required": ["clip", "stop_at_clip_layer"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPSetLastLayer", "display_name": "CLIP Set Last Layer", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VAEDecode": {"input": {"required": {"samples": ["LATENT", {"tooltip": "The latent to be decoded."}], "vae": ["VAE", {"tooltip": "The VAE model used for decoding the latent."}]}}, "input_order": {"required": ["samples", "vae"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "VAEDecode", "display_name": "VAE Decode", "description": "Decodes latent images back into pixel space images.", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The decoded image."], "search_aliases": ["decode", "decode latent", "latent to image", "render latent"]}, "VAEEncode": {"input": {"required": {"pixels": ["IMAGE"], "vae": ["VAE"]}}, "input_order": {"required": ["pixels", "vae"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "VAEEncode", "display_name": "VAE Encode", "description": "", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": ["encode", "encode image", "image to latent"]}, "VAEEncodeForInpaint": {"input": {"required": {"pixels": ["IMAGE"], "vae": ["VAE"], "mask": ["MASK"], "grow_mask_by": ["INT", {"default": 6, "min": 0, "max": 64, "step": 1}]}}, "input_order": {"required": ["pixels", "vae", "mask", "grow_mask_by"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "VAEEncodeForInpaint", "display_name": "VAE Encode (for Inpainting)", "description": "", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VAELoader": {"input": {"required": {"vae_name": [["flux1_ae.safetensors", "flux2_ae.safetensors", "qwen_image_vae.safetensors", "zimage_vae.safetensors", "pixel_space"]]}}, "input_order": {"required": ["vae_name"]}, "is_input_list": false, "output": ["VAE"], "output_is_list": [false], "output_name": ["VAE"], "name": "VAELoader", "display_name": "Load VAE", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "EmptyLatentImage": {"input": {"required": {"width": ["INT", {"default": 512, "min": 16, "max": 16384, "step": 8, "tooltip": "The width of the latent images in pixels."}], "height": ["INT", {"default": 512, "min": 16, "max": 16384, "step": 8, "tooltip": "The height of the latent images in pixels."}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096, "tooltip": "The number of latent images in the batch."}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "EmptyLatentImage", "display_name": "Empty Latent Image", "description": "Create a new batch of empty latent images to be denoised via sampling.", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The empty latent image batch."], "search_aliases": ["empty", "empty latent", "new latent", "create latent", "blank latent", "blank"]}, "LatentUpscale": {"input": {"required": {"samples": ["LATENT"], "upscale_method": [["nearest-exact", "bilinear", "area", "bicubic", "bislerp"]], "width": ["INT", {"default": 512, "min": 0, "max": 16384, "step": 8}], "height": ["INT", {"default": 512, "min": 0, "max": 16384, "step": 8}], "crop": [["disabled", "center"]]}}, "input_order": {"required": ["samples", "upscale_method", "width", "height", "crop"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentUpscale", "display_name": "Upscale Latent", "description": "", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": ["enlarge latent", "resize latent"]}, "LatentUpscaleBy": {"input": {"required": {"samples": ["LATENT"], "upscale_method": [["nearest-exact", "bilinear", "area", "bicubic", "bislerp"]], "scale_by": ["FLOAT", {"default": 1.5, "min": 0.01, "max": 8.0, "step": 0.01}]}}, "input_order": {"required": ["samples", "upscale_method", "scale_by"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentUpscaleBy", "display_name": "Upscale Latent By", "description": "", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": ["enlarge latent", "resize latent", "scale latent"]}, "LatentFromBatch": {"input": {"required": {"samples": ["LATENT"], "batch_index": ["INT", {"default": 0, "min": -16384, "max": 16384}], "length": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["samples", "batch_index", "length"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentFromBatch", "display_name": "Get Latent From Batch", "description": "", "python_module": "nodes", "category": "model/latent/batch", "output_node": false, "has_intermediate_output": false, "search_aliases": ["select from batch", "pick latent", "batch subset"]}, "RepeatLatentBatch": {"input": {"required": {"samples": ["LATENT"], "amount": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["samples", "amount"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "RepeatLatentBatch", "display_name": "Repeat Latent Batch", "description": "", "python_module": "nodes", "category": "model/latent/batch", "output_node": false, "has_intermediate_output": false, "search_aliases": ["duplicate latent", "clone latent"]}, "SaveImage": {"input": {"required": {"images": ["IMAGE", {"tooltip": "The images to save."}], "filename_prefix": ["STRING", {"default": "ComfyUI", "tooltip": "The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes."}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["images", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "name": "SaveImage", "display_name": "Save Image", "description": "Saves the input images to your ComfyUI output directory.", "python_module": "nodes", "category": "image", "output_node": true, "has_intermediate_output": false, "search_aliases": ["save", "save image", "export image", "output image", "write image", "download"], "essentials_category": "Basics"}, "PreviewImage": {"input": {"required": {"images": ["IMAGE"]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["images"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "name": "PreviewImage", "display_name": "Preview Image", "description": "Saves the input images to your ComfyUI output directory.", "python_module": "nodes", "category": "image", "output_node": true, "has_intermediate_output": false, "search_aliases": ["preview", "preview image", "show image", "view image", "display image", "image viewer"], "essentials_category": "Basics"}, "LoadImage": {"input": {"required": {"image": [["example.png"], {"image_upload": true}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "name": "LoadImage", "display_name": "Load Image", "description": "", "python_module": "nodes", "category": "image", "output_node": false, "has_intermediate_output": false, "search_aliases": ["load image", "open image", "import image", "image input", "upload image", "read image", "image loader"], "essentials_category": "Basics"}, "LoadImageMask": {"input": {"required": {"image": [["example.png"], {"image_upload": true}], "channel": [["alpha", "red", "green", "blue"]]}}, "input_order": {"required": ["image", "channel"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "name": "LoadImageMask", "display_name": "Load Image (as Mask)", "description": "", "python_module": "nodes", "category": "image", "output_node": false, "has_intermediate_output": false, "search_aliases": ["import mask", "alpha mask", "channel mask"], "essentials_category": "Image Tools"}, "LoadImageOutput": {"input": {"required": {"image": ["COMBO", {"image_upload": true, "image_folder": "output", "remote": {"route": "/internal/files/output", "refresh_button": true, "control_after_refresh": "first"}}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "name": "LoadImageOutput", "display_name": "Load Image (from Outputs)", "description": "Load an image from the output folder. When the refresh button is clicked, the node will update the image list and automatically select the first image, allowing for easy iteration.", "python_module": "nodes", "category": "image", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["output image", "previous generation"], "essentials_category": "Basics"}, "ImageScale": {"input": {"required": {"image": ["IMAGE"], "upscale_method": [["nearest-exact", "bilinear", "area", "bicubic", "lanczos"]], "width": ["INT", {"default": 512, "min": 0, "max": 16384, "step": 1}], "height": ["INT", {"default": 512, "min": 0, "max": 16384, "step": 1}], "crop": [["disabled", "center"]]}}, "input_order": {"required": ["image", "upscale_method", "width", "height", "crop"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ImageScale", "display_name": "Upscale Image", "description": "", "python_module": "nodes", "category": "image/upscaling", "output_node": false, "has_intermediate_output": false, "search_aliases": ["resize", "resize image", "scale image", "image resize", "zoom", "zoom in", "change size"], "essentials_category": "Image Tools"}, "ImageScaleBy": {"input": {"required": {"image": ["IMAGE"], "upscale_method": [["nearest-exact", "bilinear", "area", "bicubic", "lanczos"]], "scale_by": ["FLOAT", {"default": 1.0, "min": 0.01, "max": 8.0, "step": 0.01}]}}, "input_order": {"required": ["image", "upscale_method", "scale_by"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ImageScaleBy", "display_name": "Upscale Image By", "description": "", "python_module": "nodes", "category": "image/upscaling", "output_node": false, "has_intermediate_output": false, "search_aliases": [], "essentials_category": "Image Tools"}, "ImageInvert": {"input": {"required": {"image": ["IMAGE"]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ImageInvert", "display_name": "Invert Image Colors", "description": "", "python_module": "nodes", "category": "image/color", "output_node": false, "has_intermediate_output": false, "search_aliases": ["reverse colors"], "essentials_category": "Image Tools"}, "ImageBatch": {"input": {"required": {"image1": ["IMAGE"], "image2": ["IMAGE"]}}, "input_order": {"required": ["image1", "image2"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ImageBatch", "display_name": "Batch Images (DEPRECATED)", "description": "", "python_module": "nodes", "category": "image/batch", "output_node": false, "has_intermediate_output": false, "deprecated": true, "search_aliases": ["combine images", "merge images", "stack images"]}, "ImagePadForOutpaint": {"input": {"required": {"image": ["IMAGE"], "left": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "top": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "right": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "bottom": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "feathering": ["INT", {"default": 40, "min": 0, "max": 16384, "step": 1, "advanced": true}]}}, "input_order": {"required": ["image", "left", "top", "right", "bottom", "feathering"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "name": "ImagePadForOutpaint", "display_name": "Pad Image for Outpainting", "description": "", "python_module": "nodes", "category": "image/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["extend canvas", "expand image"]}, "EmptyImage": {"input": {"required": {"width": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "height": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "color": ["INT", {"default": 0, "min": 0, "max": 16777215, "step": 1, "display": "color"}]}}, "input_order": {"required": ["width", "height", "batch_size", "color"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "EmptyImage", "display_name": "Empty Image", "description": "", "python_module": "nodes", "category": "image", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ConditioningAverage": {"input": {"required": {"conditioning_to": ["CONDITIONING"], "conditioning_from": ["CONDITIONING"], "conditioning_to_strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning_to", "conditioning_from", "conditioning_to_strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningAverage", "display_name": "Conditioning (Average)", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["blend prompts", "interpolate conditioning", "mix prompts", "style fusion", "weighted blend"]}, "ConditioningCombine": {"input": {"required": {"conditioning_1": ["CONDITIONING"], "conditioning_2": ["CONDITIONING"]}}, "input_order": {"required": ["conditioning_1", "conditioning_2"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningCombine", "display_name": "Conditioning (Combine)", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["combine", "merge conditioning", "combine prompts", "merge prompts", "mix prompts", "add prompt"], "essentials_category": "Image Generation"}, "ConditioningConcat": {"input": {"required": {"conditioning_to": ["CONDITIONING"], "conditioning_from": ["CONDITIONING"]}}, "input_order": {"required": ["conditioning_to", "conditioning_from"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningConcat", "display_name": "Conditioning (Concat)", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ConditioningSetArea": {"input": {"required": {"conditioning": ["CONDITIONING"], "width": ["INT", {"default": 64, "min": 64, "max": 16384, "step": 8}], "height": ["INT", {"default": 64, "min": 64, "max": 16384, "step": 8}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "width", "height", "x", "y", "strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetArea", "display_name": "Conditioning (Set Area)", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["regional prompt", "area prompt", "spatial conditioning", "localized prompt"]}, "ConditioningSetAreaPercentage": {"input": {"required": {"conditioning": ["CONDITIONING"], "width": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}], "height": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}], "x": ["FLOAT", {"default": 0, "min": 0, "max": 1.0, "step": 0.01}], "y": ["FLOAT", {"default": 0, "min": 0, "max": 1.0, "step": 0.01}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "width", "height", "x", "y", "strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetAreaPercentage", "display_name": "Conditioning (Set Area with Percentage)", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ConditioningSetAreaStrength": {"input": {"required": {"conditioning": ["CONDITIONING"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetAreaStrength", "display_name": "Conditioning (Set Area Strength)", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ConditioningSetMask": {"input": {"required": {"conditioning": ["CONDITIONING"], "mask": ["MASK"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "set_cond_area": [["default", "mask bounds"]]}}, "input_order": {"required": ["conditioning", "mask", "strength", "set_cond_area"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetMask", "display_name": "Conditioning (Set Mask)", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["masked prompt", "regional inpaint conditioning", "mask conditioning"]}, "KSamplerAdvanced": {"input": {"required": {"model": ["MODEL"], "add_noise": [["enable", "disable"], {"advanced": true}], "noise_seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal"]], "positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "latent_image": ["LATENT"], "start_at_step": ["INT", {"default": 0, "min": 0, "max": 10000, "advanced": true}], "end_at_step": ["INT", {"default": 10000, "min": 0, "max": 10000, "advanced": true}], "return_with_leftover_noise": [["disable", "enable"], {"advanced": true}]}}, "input_order": {"required": ["model", "add_noise", "noise_seed", "steps", "cfg", "sampler_name", "scheduler", "positive", "negative", "latent_image", "start_at_step", "end_at_step", "return_with_leftover_noise"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "KSamplerAdvanced", "display_name": "KSampler (Advanced)", "description": "", "python_module": "nodes", "category": "model/sampling", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SetLatentNoiseMask": {"input": {"required": {"samples": ["LATENT"], "mask": ["MASK"]}}, "input_order": {"required": ["samples", "mask"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "SetLatentNoiseMask", "display_name": "Set Latent Noise Mask", "description": "", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "LatentComposite": {"input": {"required": {"samples_to": ["LATENT"], "samples_from": ["LATENT"], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "feather": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}]}}, "input_order": {"required": ["samples_to", "samples_from", "x", "y", "feather"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentComposite", "display_name": "Latent Composite", "description": "", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": ["overlay latent", "layer latent", "paste latent"]}, "LatentBlend": {"input": {"required": {"samples1": ["LATENT"], "samples2": ["LATENT"], "blend_factor": ["FLOAT", {"default": 0.5, "min": 0, "max": 1, "step": 0.01}]}}, "input_order": {"required": ["samples1", "samples2", "blend_factor"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentBlend", "display_name": "Latent Blend", "description": "", "python_module": "nodes", "category": "experimental", "output_node": false, "has_intermediate_output": false, "search_aliases": ["mix latents", "interpolate latents"]}, "LatentRotate": {"input": {"required": {"samples": ["LATENT"], "rotation": [["none", "90 degrees", "180 degrees", "270 degrees"]]}}, "input_order": {"required": ["samples", "rotation"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentRotate", "display_name": "Rotate Latent", "description": "", "python_module": "nodes", "category": "model/latent/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "LatentFlip": {"input": {"required": {"samples": ["LATENT"], "flip_method": [["x-axis: vertically", "y-axis: horizontally"]]}}, "input_order": {"required": ["samples", "flip_method"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentFlip", "display_name": "Flip Latent", "description": "", "python_module": "nodes", "category": "model/latent/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["mirror latent"]}, "LatentCrop": {"input": {"required": {"samples": ["LATENT"], "width": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 8}], "height": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 8}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}]}}, "input_order": {"required": ["samples", "width", "height", "x", "y"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentCrop", "display_name": "Crop Latent", "description": "", "python_module": "nodes", "category": "model/latent/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["trim latent", "cut latent"]}, "LoraLoader": {"input": {"required": {"model": ["MODEL", {"tooltip": "The diffusion model the LoRA will be applied to."}], "clip": ["CLIP", {"tooltip": "The CLIP model the LoRA will be applied to."}], "lora_name": [[], {"tooltip": "The name of the LoRA."}], "strength_model": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01, "tooltip": "How strongly to modify the diffusion model. This value can be negative."}], "strength_clip": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01, "tooltip": "How strongly to modify the CLIP model. This value can be negative."}]}}, "input_order": {"required": ["model", "clip", "lora_name", "strength_model", "strength_clip"]}, "is_input_list": false, "output": ["MODEL", "CLIP"], "output_is_list": [false, false], "output_name": ["MODEL", "CLIP"], "name": "LoraLoader", "display_name": "Load LoRA (Model and CLIP)", "description": "This LoRA loader is used to modify both diffusion and CLIP models, altering the way in which latents are denoised such as applying styles. Multiple LoRA nodes can be linked together.", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The modified diffusion model.", "The modified CLIP model."], "search_aliases": ["lora", "load lora", "apply lora", "lora loader", "lora model"], "essentials_category": "Image Generation"}, "CLIPLoader": {"input": {"required": {"clip_name": [["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "type": [["stable_diffusion", "stable_cascade", "sd3", "stable_audio", "mochi", "ltxv", "pixart", "cosmos", "lumina2", "wan", "hidream", "chroma", "ace", "omnigen2", "qwen_image", "hunyuan_image", "flux2", "ovis", "longcat_image", "cogvideox", "lens", "pixeldit", "ideogram4", "boogu", "krea2"]]}, "optional": {"device": [["default", "cpu"], {"advanced": true}]}}, "input_order": {"required": ["clip_name", "type"], "optional": ["device"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPLoader", "display_name": "Load CLIP", "description": "Recipes:\nsd: clip-l\nstable cascade: clip-g\nsd3: t5 xxl / clip-g / clip-l\nstable audio: t5 base\nmochi: t5 xxl\ncogvideox: t5 xxl (226-token padding)\ncosmos: old t5 xxl\nlumina2: gemma 2 2B\nwan: umt5 xxl\nhidream: llama-3.1 (Recommend) or t5\nomnigen2: qwen vl 2.5 3B\nlens: gpt-oss-20b\npixeldit: gemma 2 2B elm", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "UNETLoader": {"input": {"required": {"unet_name": [[]], "weight_dtype": [["default", "fp8_e4m3fn", "fp8_e4m3fn_fast", "fp8_e5m2"], {"advanced": true}]}}, "input_order": {"required": ["unet_name", "weight_dtype"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "UNETLoader", "display_name": "Load Diffusion Model", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DualCLIPLoader": {"input": {"required": {"clip_name1": [["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "clip_name2": [["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "type": [["sdxl", "sd3", "flux", "hunyuan_video", "hidream", "hunyuan_image", "hunyuan_video_15", "kandinsky5", "kandinsky5_image", "ltxv", "newbie", "ace"]]}, "optional": {"device": [["default", "cpu"], {"advanced": true}]}}, "input_order": {"required": ["clip_name1", "clip_name2", "type"], "optional": ["device"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "DualCLIPLoader", "display_name": "Load CLIP (Dual)", "description": "Recipes:\nsdxl: clip-l, clip-g\nsd3: clip-l, clip-g / clip-l, t5 / clip-g, t5\nflux: clip-l, t5\nhidream: at least one of t5 or llama, recommended t5 and llama\nhunyuan_image: qwen2.5vl 7b and byt5 small\nnewbie: gemma-3-4b-it, jina clip v2", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CLIPVisionEncode": {"input": {"required": {"clip_vision": ["CLIP_VISION"], "image": ["IMAGE"], "crop": [["center", "none"]]}}, "input_order": {"required": ["clip_vision", "image", "crop"]}, "is_input_list": false, "output": ["CLIP_VISION_OUTPUT"], "output_is_list": [false], "output_name": ["CLIP_VISION_OUTPUT"], "name": "CLIPVisionEncode", "display_name": "CLIP Vision Encode", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "StyleModelApply": {"input": {"required": {"conditioning": ["CONDITIONING"], "style_model": ["STYLE_MODEL"], "clip_vision_output": ["CLIP_VISION_OUTPUT"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.001}], "strength_type": [["multiply", "attn_bias"]]}}, "input_order": {"required": ["conditioning", "style_model", "clip_vision_output", "strength", "strength_type"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "StyleModelApply", "display_name": "Apply Style Model", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": ["style transfer"]}, "unCLIPConditioning": {"input": {"required": {"conditioning": ["CONDITIONING"], "clip_vision_output": ["CLIP_VISION_OUTPUT"], "strength": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}], "noise_augmentation": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "clip_vision_output", "strength", "noise_augmentation"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "unCLIPConditioning", "display_name": "unCLIPConditioning", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ControlNetApply": {"input": {"required": {"conditioning": ["CONDITIONING"], "control_net": ["CONTROL_NET"], "image": ["IMAGE"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "control_net", "image", "strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ControlNetApply", "display_name": "Apply ControlNet (DEPRECATED)", "description": "", "python_module": "nodes", "category": "model/conditioning/controlnet", "output_node": false, "has_intermediate_output": false, "deprecated": true, "search_aliases": []}, "ControlNetApplyAdvanced": {"input": {"required": {"positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "control_net": ["CONTROL_NET"], "image": ["IMAGE"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}, "optional": {"vae": ["VAE"]}}, "input_order": {"required": ["positive", "negative", "control_net", "image", "strength", "start_percent", "end_percent"], "optional": ["vae"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "name": "ControlNetApplyAdvanced", "display_name": "Apply ControlNet", "description": "", "python_module": "nodes", "category": "model/conditioning/controlnet", "output_node": false, "has_intermediate_output": false, "search_aliases": ["controlnet", "apply controlnet", "use controlnet", "control net"]}, "ControlNetLoader": {"input": {"required": {"control_net_name": [[]]}}, "input_order": {"required": ["control_net_name"]}, "is_input_list": false, "output": ["CONTROL_NET"], "output_is_list": [false], "output_name": ["CONTROL_NET"], "name": "ControlNetLoader", "display_name": "Load ControlNet Model", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": ["controlnet", "control net", "cn", "load controlnet", "controlnet loader"]}, "DiffControlNetLoader": {"input": {"required": {"model": ["MODEL"], "control_net_name": [[]]}}, "input_order": {"required": ["model", "control_net_name"]}, "is_input_list": false, "output": ["CONTROL_NET"], "output_is_list": [false], "output_name": ["CONTROL_NET"], "name": "DiffControlNetLoader", "display_name": "Load ControlNet Model (diff)", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "StyleModelLoader": {"input": {"required": {"style_model_name": [[]]}}, "input_order": {"required": ["style_model_name"]}, "is_input_list": false, "output": ["STYLE_MODEL"], "output_is_list": [false], "output_name": ["STYLE_MODEL"], "name": "StyleModelLoader", "display_name": "Load Style Model", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CLIPVisionLoader": {"input": {"required": {"clip_name": [[]]}}, "input_order": {"required": ["clip_name"]}, "is_input_list": false, "output": ["CLIP_VISION"], "output_is_list": [false], "output_name": ["CLIP_VISION"], "name": "CLIPVisionLoader", "display_name": "Load CLIP Vision", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VAEDecodeTiled": {"input": {"required": {"samples": ["LATENT"], "vae": ["VAE"], "tile_size": ["INT", {"default": 512, "min": 64, "max": 4096, "step": 32, "advanced": true}], "overlap": ["INT", {"default": 64, "min": 0, "max": 4096, "step": 32, "advanced": true}], "temporal_size": ["INT", {"default": 64, "min": 8, "max": 4096, "step": 4, "tooltip": "Only used for video VAEs: Amount of frames to decode at a time.", "advanced": true}], "temporal_overlap": ["INT", {"default": 8, "min": 4, "max": 4096, "step": 4, "tooltip": "Only used for video VAEs: Amount of frames to overlap.", "advanced": true}]}}, "input_order": {"required": ["samples", "vae", "tile_size", "overlap", "temporal_size", "temporal_overlap"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "VAEDecodeTiled", "display_name": "VAE Decode (Tiled)", "description": "", "python_module": "nodes", "category": "experimental", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VAEEncodeTiled": {"input": {"required": {"pixels": ["IMAGE"], "vae": ["VAE"], "tile_size": ["INT", {"default": 512, "min": 64, "max": 4096, "step": 64, "advanced": true}], "overlap": ["INT", {"default": 64, "min": 0, "max": 4096, "step": 32, "advanced": true}], "temporal_size": ["INT", {"default": 64, "min": 8, "max": 4096, "step": 4, "tooltip": "Only used for video VAEs: Amount of frames to encode at a time.", "advanced": true}], "temporal_overlap": ["INT", {"default": 8, "min": 4, "max": 4096, "step": 4, "tooltip": "Only used for video VAEs: Amount of frames to overlap.", "advanced": true}]}}, "input_order": {"required": ["pixels", "vae", "tile_size", "overlap", "temporal_size", "temporal_overlap"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "VAEEncodeTiled", "display_name": "VAE Encode (Tiled)", "description": "", "python_module": "nodes", "category": "experimental", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "unCLIPCheckpointLoader": {"input": {"required": {"ckpt_name": [[]]}}, "input_order": {"required": ["ckpt_name"]}, "is_input_list": false, "output": ["MODEL", "CLIP", "VAE", "CLIP_VISION"], "output_is_list": [false, false, false, false], "output_name": ["MODEL", "CLIP", "VAE", "CLIP_VISION"], "name": "unCLIPCheckpointLoader", "display_name": "Load unCLIP Checkpoint", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "GLIGENLoader": {"input": {"required": {"gligen_name": [[]]}}, "input_order": {"required": ["gligen_name"]}, "is_input_list": false, "output": ["GLIGEN"], "output_is_list": [false], "output_name": ["GLIGEN"], "name": "GLIGENLoader", "display_name": "Load GLIGEN Model", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "GLIGENTextBoxApply": {"input": {"required": {"conditioning_to": ["CONDITIONING"], "clip": ["CLIP"], "gligen_textbox_model": ["GLIGEN"], "text": ["STRING", {"multiline": true, "dynamicPrompts": true}], "width": ["INT", {"default": 64, "min": 8, "max": 16384, "step": 8}], "height": ["INT", {"default": 64, "min": 8, "max": 16384, "step": 8}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}]}}, "input_order": {"required": ["conditioning_to", "clip", "gligen_textbox_model", "text", "width", "height", "x", "y"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "GLIGENTextBoxApply", "display_name": "Apply GLIGEN Text Box", "description": "", "python_module": "nodes", "category": "model/conditioning/gligen", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "InpaintModelConditioning": {"input": {"required": {"positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "vae": ["VAE"], "pixels": ["IMAGE"], "mask": ["MASK"], "noise_mask": ["BOOLEAN", {"default": true, "tooltip": "Add a noise mask to the latent so sampling will only happen within the mask. Might improve results or completely break things depending on the model."}]}}, "input_order": {"required": ["positive", "negative", "vae", "pixels", "mask", "noise_mask"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "name": "InpaintModelConditioning", "display_name": "InpaintModelConditioning", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CheckpointLoader": {"input": {"required": {"config_name": [["anything_v3.yaml", "v1-inference.yaml", "v1-inference_clip_skip_2.yaml", "v1-inference_clip_skip_2_fp16.yaml", "v1-inference_fp16.yaml", "v1-inpainting-inference.yaml", "v2-inference-v.yaml", "v2-inference-v_fp32.yaml", "v2-inference.yaml", "v2-inference_fp32.yaml", "v2-inpainting-inference.yaml"]], "ckpt_name": [[]]}}, "input_order": {"required": ["config_name", "ckpt_name"]}, "is_input_list": false, "output": ["MODEL", "CLIP", "VAE"], "output_is_list": [false, false, false], "output_name": ["MODEL", "CLIP", "VAE"], "name": "CheckpointLoader", "display_name": "Load Checkpoint With Config (DEPRECATED)", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "deprecated": true, "search_aliases": ["load model", "model loader"]}, "DiffusersLoader": {"input": {"required": {"model_path": [[]]}}, "input_order": {"required": ["model_path"]}, "is_input_list": false, "output": ["MODEL", "CLIP", "VAE"], "output_is_list": [false, false, false], "output_name": ["MODEL", "CLIP", "VAE"], "name": "DiffusersLoader", "display_name": "Load Diffusers Model (DEPRECATED)", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "deprecated": true, "search_aliases": ["load diffusers model"]}, "LoadLatent": {"input": {"required": {"latent": [[]]}}, "input_order": {"required": ["latent"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LoadLatent", "display_name": "LoadLatent", "description": "", "python_module": "nodes", "category": "experimental", "output_node": false, "has_intermediate_output": false, "search_aliases": ["import latent", "open latent"]}, "SaveLatent": {"input": {"required": {"samples": ["LATENT"], "filename_prefix": ["STRING", {"default": "latents/ComfyUI"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["samples", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["samples"], "name": "SaveLatent", "display_name": "SaveLatent", "description": "", "python_module": "nodes", "category": "experimental", "output_node": true, "has_intermediate_output": false, "search_aliases": ["export latent"]}, "ConditioningZeroOut": {"input": {"required": {"conditioning": ["CONDITIONING"]}}, "input_order": {"required": ["conditioning"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningZeroOut", "display_name": "Conditioning Zero Out", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["null conditioning", "clear conditioning"]}, "ConditioningSetTimestepRange": {"input": {"required": {"conditioning": ["CONDITIONING"], "start": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["conditioning", "start", "end"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetTimestepRange", "display_name": "ConditioningSetTimestepRange", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "LoraLoaderModelOnly": {"input": {"required": {"model": ["MODEL"], "lora_name": [[]], "strength_model": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "lora_name", "strength_model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "LoraLoaderModelOnly", "display_name": "Load LoRA", "description": "This LoRAs loader is used to modify the diffusion model, altering the way in which latents are denoised such as applying styles. Multiple LoRA nodes can be linked together.", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The modified diffusion model.", "The modified CLIP model."], "search_aliases": ["lora", "load lora", "apply lora", "lora loader", "lora model"], "essentials_category": "Image Generation"}, "LatentAdd": {"input": {"required": {"samples1": ["LATENT", {}], "samples2": ["LATENT", {}]}}, "input_order": {"required": ["samples1", "samples2"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentAdd", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine latents", "sum latents"], "essentials_category": null, "has_intermediate_output": false}, "LatentSubtract": {"input": {"required": {"samples1": ["LATENT", {}], "samples2": ["LATENT", {}]}}, "input_order": {"required": ["samples1", "samples2"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentSubtract", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["difference latent", "remove features"], "essentials_category": null, "has_intermediate_output": false}, "LatentMultiply": {"input": {"required": {"samples": ["LATENT", {}], "multiplier": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["samples", "multiplier"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentMultiply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["scale latent", "amplify latent", "latent gain"], "essentials_category": null, "has_intermediate_output": false}, "LatentInterpolate": {"input": {"required": {"samples1": ["LATENT", {}], "samples2": ["LATENT", {}], "ratio": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["samples1", "samples2", "ratio"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentInterpolate", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["blend latent", "mix latent", "lerp latent", "transition"], "essentials_category": null, "has_intermediate_output": false}, "LatentConcat": {"input": {"required": {"samples1": ["LATENT", {}], "samples2": ["LATENT", {}], "dim": ["COMBO", {"multiselect": false, "options": ["x", "-x", "y", "-y", "t", "-t"]}]}}, "input_order": {"required": ["samples1", "samples2", "dim"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentConcat", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["join latents", "stitch latents"], "essentials_category": null, "has_intermediate_output": false}, "LatentCut": {"input": {"required": {"samples": ["LATENT", {}], "dim": ["COMBO", {"multiselect": false, "options": ["x", "y", "t"]}], "index": ["INT", {"default": 0, "min": -16384, "max": 16384, "step": 1}], "amount": ["INT", {"default": 1, "min": 1, "max": 16384, "step": 1}]}}, "input_order": {"required": ["samples", "dim", "index", "amount"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentCut", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["crop latent", "slice latent", "extract region"], "essentials_category": null, "has_intermediate_output": false}, "LatentCutToBatch": {"input": {"required": {"samples": ["LATENT", {}], "dim": ["COMBO", {"multiselect": false, "options": ["t", "x", "y"]}], "slice_size": ["INT", {"default": 1, "min": 1, "max": 16384, "step": 1}]}}, "input_order": {"required": ["samples", "dim", "slice_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentCutToBatch", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["slice to batch", "split latent", "tile latent"], "essentials_category": null, "has_intermediate_output": false}, "LatentBatch": {"input": {"required": {"samples1": ["LATENT", {}], "samples2": ["LATENT", {}]}}, "input_order": {"required": ["samples1", "samples2"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentBatch", "display_name": "Batch Latents (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/batch", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine latents", "merge latents", "join latents"], "essentials_category": null, "has_intermediate_output": false}, "LatentBatchSeedBehavior": {"input": {"required": {"samples": ["LATENT", {}], "seed_behavior": ["COMBO", {"default": "fixed", "multiselect": false, "options": ["random", "fixed"]}]}}, "input_order": {"required": ["samples", "seed_behavior"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentBatchSeedBehavior", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LatentApplyOperation": {"input": {"required": {"samples": ["LATENT", {}], "operation": ["LATENT_OPERATION", {}]}}, "input_order": {"required": ["samples", "operation"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentApplyOperation", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced/operations", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["transform latent"], "essentials_category": null, "has_intermediate_output": false}, "LatentApplyOperationCFG": {"input": {"required": {"model": ["MODEL", {}], "operation": ["LATENT_OPERATION", {}]}}, "input_order": {"required": ["model", "operation"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentApplyOperationCFG", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced/operations", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LatentOperationTonemapReinhard": {"input": {"required": {"multiplier": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["multiplier"]}, "is_input_list": false, "output": ["LATENT_OPERATION"], "output_is_list": [false], "output_name": ["LATENT_OPERATION"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentOperationTonemapReinhard", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced/operations", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["hdr latent"], "essentials_category": null, "has_intermediate_output": false}, "LatentOperationSharpen": {"input": {"required": {"sharpen_radius": ["INT", {"advanced": true, "default": 9, "min": 1, "max": 31, "step": 1}], "sigma": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.1, "max": 10.0, "step": 0.1}], "alpha": ["FLOAT", {"advanced": true, "default": 0.1, "min": 0.0, "max": 5.0, "step": 0.01}]}}, "input_order": {"required": ["sharpen_radius", "sigma", "alpha"]}, "is_input_list": false, "output": ["LATENT_OPERATION"], "output_is_list": [false], "output_name": ["LATENT_OPERATION"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentOperationSharpen", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced/operations", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReplaceVideoLatentFrames": {"input": {"required": {"destination": ["LATENT", {"tooltip": "The destination latent where frames will be replaced."}], "index": ["INT", {"tooltip": "The starting latent frame index in the destination latent where the source latent frames will be placed. Negative values count from the end.", "default": 0, "min": -16384, "max": 16384, "step": 1}]}, "optional": {"source": ["LATENT", {"tooltip": "The source latent providing frames to insert into the destination latent. If not provided, the destination latent is returned unchanged."}]}}, "input_order": {"required": ["destination", "index"], "optional": ["source"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReplaceVideoLatentFrames", "display_name": "Replace Video Latent Frames", "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HypernetworkLoader": {"input": {"required": {"model": ["MODEL", {}], "hypernetwork_name": ["COMBO", {"multiselect": false, "options": []}], "strength": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "hypernetwork_name", "strength"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "HypernetworkLoader", "display_name": "Load Hypernetwork", "description": "", "python_module": "comfy_extras.nodes_hypernetwork", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "UpscaleModelLoader": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["UPSCALE_MODEL"], "output_is_list": [false], "output_name": ["UPSCALE_MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "UpscaleModelLoader", "display_name": "Load Upscale Model", "description": "", "python_module": "comfy_extras.nodes_upscale_model", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageUpscaleWithModel": {"input": {"required": {"upscale_model": ["UPSCALE_MODEL", {}], "image": ["IMAGE", {}]}}, "input_order": {"required": ["upscale_model", "image"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageUpscaleWithModel", "display_name": "Upscale Image (using Model)", "description": "", "python_module": "comfy_extras.nodes_upscale_model", "category": "image/upscaling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["upscale", "upscaler", "upsc", "enlarge image", "super resolution", "hires", "superres", "increase resolution"], "essentials_category": null, "has_intermediate_output": false}, "ImageBlend": {"input": {"required": {"image1": ["IMAGE", {}], "image2": ["IMAGE", {}], "blend_factor": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "blend_mode": ["COMBO", {"multiselect": false, "options": ["normal", "multiply", "screen", "overlay", "soft_light", "difference"]}]}}, "input_order": {"required": ["image1", "image2", "blend_factor", "blend_mode"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageBlend", "display_name": "Blend Images", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["mix images"], "essentials_category": "Image Tools", "has_intermediate_output": false}, "ImageBlur": {"input": {"required": {"image": ["IMAGE", {}], "blur_radius": ["INT", {"default": 1, "min": 1, "max": 31, "step": 1}], "sigma": ["FLOAT", {"default": 1.0, "min": 0.1, "max": 10.0, "step": 0.1}]}}, "input_order": {"required": ["image", "blur_radius", "sigma"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageBlur", "display_name": "Blur Image", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageQuantize": {"input": {"required": {"image": ["IMAGE", {}], "colors": ["INT", {"default": 256, "min": 1, "max": 256, "step": 1}], "dither": ["COMBO", {"multiselect": false, "options": ["none", "floyd-steinberg", "bayer-2", "bayer-4", "bayer-8", "bayer-16"]}]}}, "input_order": {"required": ["image", "colors", "dither"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageQuantize", "display_name": "Quantize Image", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageSharpen": {"input": {"required": {"image": ["IMAGE", {}], "sharpen_radius": ["INT", {"advanced": true, "default": 1, "min": 1, "max": 31, "step": 1}], "sigma": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.1, "max": 10.0, "step": 0.01}], "alpha": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 5.0, "step": 0.01}]}}, "input_order": {"required": ["image", "sharpen_radius", "sigma", "alpha"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageSharpen", "display_name": "Sharpen Image", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageScaleToTotalPixels": {"input": {"required": {"image": ["IMAGE", {}], "upscale_method": ["COMBO", {"multiselect": false, "options": ["nearest-exact", "bilinear", "area", "bicubic", "lanczos"]}], "megapixels": ["FLOAT", {"default": 1.0, "min": 0.01, "max": 16.0, "step": 0.01}], "resolution_steps": ["INT", {"advanced": true, "default": 1, "min": 1, "max": 256}]}}, "input_order": {"required": ["image", "upscale_method", "megapixels", "resolution_steps"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageScaleToTotalPixels", "display_name": "Scale Image to Total Pixels", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/upscaling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ResizeImageMaskNode": {"input": {"required": {"input": ["COMFY_MATCHTYPE_V3", {"template": {"template_id": "input_type", "allowed_types": "IMAGE,MASK"}}], "resize_type": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Select how to resize: by exact dimensions, scale factor, matching another image, etc.", "options": [{"key": "scale dimensions", "inputs": {"required": {"width": ["INT", {"tooltip": "Target width in pixels. Set to 0 to auto-calculate from height while preserving aspect ratio.", "default": 512, "min": 0, "max": 16384, "step": 1}], "height": ["INT", {"tooltip": "Target height in pixels. Set to 0 to auto-calculate from width while preserving aspect ratio.", "default": 512, "min": 0, "max": 16384, "step": 1}], "crop": ["COMBO", {"tooltip": "How to handle aspect ratio mismatch: 'disabled' stretches to fit, 'center' crops to maintain aspect ratio.", "default": "center", "multiselect": false, "options": ["disabled", "center"]}]}}}, {"key": "scale by multiplier", "inputs": {"required": {"multiplier": ["FLOAT", {"tooltip": "Scale factor (e.g., 2.0 doubles size, 0.5 halves size).", "default": 1.0, "min": 0.01, "max": 8.0, "step": 0.01}]}}}, {"key": "scale longer dimension", "inputs": {"required": {"longer_size": ["INT", {"tooltip": "The longer edge will be resized to this value. Aspect ratio is preserved.", "default": 512, "min": 0, "max": 16384, "step": 1}]}}}, {"key": "scale shorter dimension", "inputs": {"required": {"shorter_size": ["INT", {"tooltip": "The shorter edge will be resized to this value. Aspect ratio is preserved.", "default": 512, "min": 0, "max": 16384, "step": 1}]}}}, {"key": "scale width", "inputs": {"required": {"width": ["INT", {"tooltip": "Target width in pixels. Height auto-adjusts to preserve aspect ratio.", "default": 512, "min": 0, "max": 16384, "step": 1}]}}}, {"key": "scale height", "inputs": {"required": {"height": ["INT", {"tooltip": "Target height in pixels. Width auto-adjusts to preserve aspect ratio.", "default": 512, "min": 0, "max": 16384, "step": 1}]}}}, {"key": "scale total pixels", "inputs": {"required": {"megapixels": ["FLOAT", {"tooltip": "Target total megapixels (e.g., 1.0 \u2248 1024\u00d71024). Aspect ratio is preserved.", "default": 1.0, "min": 0.01, "max": 16.0, "step": 0.01}]}}}, {"key": "match size", "inputs": {"required": {"match": ["IMAGE,MASK", {"tooltip": "Resize input to match the dimensions of this reference image or mask."}], "crop": ["COMBO", {"tooltip": "How to handle aspect ratio mismatch: 'disabled' stretches to fit, 'center' crops to maintain aspect ratio.", "default": "center", "multiselect": false, "options": ["disabled", "center"]}]}}}, {"key": "scale to multiple", "inputs": {"required": {"multiple": ["INT", {"tooltip": "Resize so width and height are divisible by this number. Useful for latent alignment (e.g., 8 or 64).", "default": 8, "min": 1, "max": 16384, "step": 1}]}}}]}], "scale_method": ["COMBO", {"tooltip": "Interpolation algorithm. 'area' is best for downscaling, 'lanczos' for upscaling, 'nearest-exact' for pixel art.", "default": "area", "multiselect": false, "options": ["nearest-exact", "bilinear", "area", "bicubic", "lanczos"]}]}}, "input_order": {"required": ["input", "resize_type", "scale_method"]}, "is_input_list": false, "output": ["COMFY_MATCHTYPE_V3"], "output_is_list": [false], "output_name": ["resized"], "output_tooltips": [null], "output_matchtypes": ["input_type"], "name": "ResizeImageMaskNode", "display_name": "Resize Image/Mask", "description": "Resize an image or mask using various scaling methods.", "python_module": "comfy_extras.nodes_post_processing", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["resize", "resize image", "resize mask", "scale", "scale image", "scale mask", "image resize", "change size", "dimensions", "shrink", "enlarge"], "essentials_category": null, "has_intermediate_output": false}, "BatchImagesNode": {"input": {"required": {"images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image", "min": 1, "max": 50}}]}}, "input_order": {"required": ["images"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "BatchImagesNode", "display_name": "Batch Images", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["batch", "image batch", "batch images", "combine images", "merge images", "stack images"], "essentials_category": "Image Tools", "has_intermediate_output": false}, "BatchMasksNode": {"input": {"required": {"masks": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"mask": ["MASK", {}]}}, "prefix": "mask", "min": 1, "max": 50}}]}}, "input_order": {"required": ["masks"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "BatchMasksNode", "display_name": "Batch Masks", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine masks", "stack masks", "merge masks"], "essentials_category": null, "has_intermediate_output": false}, "BatchLatentsNode": {"input": {"required": {"latents": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"latent": ["LATENT", {}]}}, "prefix": "latent", "min": 1, "max": 50}}]}}, "input_order": {"required": ["latents"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "BatchLatentsNode", "display_name": "Batch Latents", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "model/latent/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine latents", "stack latents", "merge latents"], "essentials_category": null, "has_intermediate_output": false}, "ColorTransfer": {"input": {"required": {"image_target": ["IMAGE", {"tooltip": "Image(s) to apply the color transform to."}], "image_ref": ["IMAGE", {"tooltip": "Reference image(s) to match colors to."}], "method": ["COMBO", {"multiselect": false, "options": ["reinhard_lab", "mkl_lab", "histogram"]}], "source_stats": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "per_frame: each frame matched to image_ref individually. uniform: pool stats across all source frames as baseline, match to image_ref. target_frame: use one chosen frame as the baseline for the transform to image_ref, applied uniformly to all frames (preserves relative differences)", "options": [{"key": "per_frame", "inputs": {"required": {}}}, {"key": "uniform", "inputs": {"required": {}}}, {"key": "target_frame", "inputs": {"required": {"target_index": ["INT", {"tooltip": "Frame index used as the source baseline for computing the transform to image_ref", "default": 0, "min": 0, "max": 10000}]}}}]}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["image_target", "image_ref", "method", "source_stats", "strength"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["image"], "output_tooltips": [null], "output_matchtypes": null, "name": "ColorTransfer", "display_name": "Transfer Color", "description": "Match the colors of one image to another using various algorithms.", "python_module": "comfy_extras.nodes_post_processing", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["color match", "color grading", "color correction", "match colors", "color transform", "mkl", "reinhard", "histogram"], "essentials_category": null, "has_intermediate_output": false}, "LatentCompositeMasked": {"input": {"required": {"destination": ["LATENT", {}], "source": ["LATENT", {}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "resize_source": ["BOOLEAN", {"default": false}]}, "optional": {"mask": ["MASK", {}]}}, "input_order": {"required": ["destination", "source", "x", "y", "resize_source"], "optional": ["mask"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentCompositeMasked", "display_name": "Latent Composite Masked", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "model/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["overlay latent", "layer latent", "paste latent", "inpaint latent"], "essentials_category": null, "has_intermediate_output": false}, "ImageCompositeMasked": {"input": {"required": {"destination": ["IMAGE", {}], "source": ["IMAGE", {}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "resize_source": ["BOOLEAN", {"default": false}]}, "optional": {"mask": ["MASK", {}]}}, "input_order": {"required": ["destination", "source", "x", "y", "resize_source"], "optional": ["mask"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageCompositeMasked", "display_name": "Image Composite Masked", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/compositing", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["overlay", "layer", "paste image", "images composition"], "essentials_category": null, "has_intermediate_output": false}, "MaskToImage": {"input": {"required": {"mask": ["MASK", {}]}}, "input_order": {"required": ["mask"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MaskToImage", "display_name": "Convert Mask to Image", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["convert mask"], "essentials_category": null, "has_intermediate_output": false}, "ImageToMask": {"input": {"required": {"image": ["IMAGE", {}], "channel": ["COMBO", {"multiselect": false, "options": ["red", "green", "blue", "alpha"]}]}}, "input_order": {"required": ["image", "channel"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageToMask", "display_name": "Convert Image to Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["extract channel", "channel to mask"], "essentials_category": null, "has_intermediate_output": false}, "ImageColorToMask": {"input": {"required": {"image": ["IMAGE", {}], "color": ["INT", {"default": 0, "min": 0, "max": 16777215, "step": 1, "display": "number"}]}}, "input_order": {"required": ["image", "color"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageColorToMask", "display_name": "Convert Image Color to Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["color keying", "chroma key"], "essentials_category": null, "has_intermediate_output": false}, "SolidMask": {"input": {"required": {"value": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "width": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "height": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}]}}, "input_order": {"required": ["value", "width", "height"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "SolidMask", "display_name": "Create Solid Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "InvertMask": {"input": {"required": {"mask": ["MASK", {}]}}, "input_order": {"required": ["mask"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "InvertMask", "display_name": "Invert Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["reverse mask", "flip mask"], "essentials_category": null, "has_intermediate_output": false}, "CropMask": {"input": {"required": {"mask": ["MASK", {}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "width": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "height": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}]}}, "input_order": {"required": ["mask", "x", "y", "width", "height"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "CropMask", "display_name": "Crop Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["cut mask", "extract mask region", "mask slice"], "essentials_category": null, "has_intermediate_output": false}, "MaskComposite": {"input": {"required": {"destination": ["MASK", {}], "source": ["MASK", {}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "operation": ["COMBO", {"multiselect": false, "options": ["multiply", "add", "subtract", "and", "or", "xor"]}]}}, "input_order": {"required": ["destination", "source", "x", "y", "operation"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "MaskComposite", "display_name": "Combine Masks", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine masks", "blend masks", "layer masks", "masks composition"], "essentials_category": null, "has_intermediate_output": false}, "FeatherMask": {"input": {"required": {"mask": ["MASK", {}], "left": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "top": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "right": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "bottom": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}]}}, "input_order": {"required": ["mask", "left", "top", "right", "bottom"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "FeatherMask", "display_name": "Feather Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["soft edge mask", "blur mask edges", "gradient mask edge"], "essentials_category": null, "has_intermediate_output": false}, "GrowMask": {"input": {"required": {"mask": ["MASK", {}], "expand": ["INT", {"default": 0, "min": -16384, "max": 16384, "step": 1}], "tapered_corners": ["BOOLEAN", {"advanced": true, "default": true}]}}, "input_order": {"required": ["mask", "expand", "tapered_corners"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrowMask", "display_name": "Grow Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["expand mask", "shrink mask"], "essentials_category": null, "has_intermediate_output": false}, "ThresholdMask": {"input": {"required": {"mask": ["MASK", {}], "value": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["mask", "value"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "ThresholdMask", "display_name": "Threshold Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["binary mask"], "essentials_category": null, "has_intermediate_output": false}, "MaskPreview": {"input": {"required": {"mask": ["MASK", {}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["mask"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "MaskPreview", "display_name": "Preview Mask", "description": "Saves the input images to your ComfyUI output directory.", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["show mask", "view mask", "inspect mask", "debug mask"], "essentials_category": null, "has_intermediate_output": false}, "PorterDuffImageComposite": {"input": {"required": {"source": ["IMAGE", {}], "source_alpha": ["MASK", {}], "destination": ["IMAGE", {}], "destination_alpha": ["MASK", {}], "mode": ["COMBO", {"default": "DST", "multiselect": false, "options": ["ADD", "CLEAR", "DARKEN", "DST", "DST_ATOP", "DST_IN", "DST_OUT", "DST_OVER", "LIGHTEN", "MULTIPLY", "OVERLAY", "SCREEN", "SRC", "SRC_ATOP", "SRC_IN", "SRC_OUT", "SRC_OVER", "XOR"]}]}}, "input_order": {"required": ["source", "source_alpha", "destination", "destination_alpha", "mode"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "PorterDuffImageComposite", "display_name": "Porter-Duff Image Composite", "description": "", "python_module": "comfy_extras.nodes_compositing", "category": "image/compositing", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["alpha composite", "blend modes", "layer blend", "transparency blend"], "essentials_category": null, "has_intermediate_output": false}, "SplitImageWithAlpha": {"input": {"required": {"image": ["IMAGE", {}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SplitImageWithAlpha", "display_name": "Split Image with Alpha", "description": "", "python_module": "comfy_extras.nodes_compositing", "category": "image/compositing", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["extract alpha", "separate transparency", "remove alpha"], "essentials_category": null, "has_intermediate_output": false}, "JoinImageWithAlpha": {"input": {"required": {"image": ["IMAGE", {}], "alpha": ["MASK", {}]}}, "input_order": {"required": ["image", "alpha"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "JoinImageWithAlpha", "display_name": "Join Image with Alpha", "description": "", "python_module": "comfy_extras.nodes_compositing", "category": "image/compositing", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["add transparency", "apply alpha", "composite alpha", "RGBA"], "essentials_category": null, "has_intermediate_output": false}, "RebatchLatents": {"input": {"required": {"latents": ["LATENT", {}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["latents", "batch_size"]}, "is_input_list": true, "output": ["LATENT"], "output_is_list": [true], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "RebatchLatents", "display_name": "Rebatch Latents", "description": "", "python_module": "comfy_extras.nodes_rebatch", "category": "model/latent/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RebatchImages": {"input": {"required": {"images": ["IMAGE", {}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["images", "batch_size"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RebatchImages", "display_name": "Rebatch Images", "description": "", "python_module": "comfy_extras.nodes_rebatch", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ModelMergeSimple": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "ratio": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "ratio"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSimple", "display_name": "ModelMergeSimple", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeBlocks": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "input": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "out": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "input", "middle", "out"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeBlocks", "display_name": "ModelMergeBlocks", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeSubtract": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "multiplier": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "multiplier"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSubtract", "display_name": "ModelMergeSubtract", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeAdd": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"]}}, "input_order": {"required": ["model1", "model2"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeAdd", "display_name": "ModelMergeAdd", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CheckpointSave": {"input": {"required": {"model": ["MODEL"], "clip": ["CLIP"], "vae": ["VAE"], "filename_prefix": ["STRING", {"default": "checkpoints/ComfyUI"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["model", "clip", "vae", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "CheckpointSave", "display_name": "Save Checkpoint", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": true, "has_intermediate_output": false, "search_aliases": ["save model", "export checkpoint", "merge save"]}, "CLIPMergeSimple": {"input": {"required": {"clip1": ["CLIP"], "clip2": ["CLIP"], "ratio": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["clip1", "clip2", "ratio"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPMergeSimple", "display_name": "CLIPMergeSimple", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CLIPMergeSubtract": {"input": {"required": {"clip1": ["CLIP"], "clip2": ["CLIP"], "multiplier": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["clip1", "clip2", "multiplier"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPMergeSubtract", "display_name": "CLIPMergeSubtract", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": false, "has_intermediate_output": false, "search_aliases": ["clip difference", "text encoder subtract"]}, "CLIPMergeAdd": {"input": {"required": {"clip1": ["CLIP"], "clip2": ["CLIP"]}}, "input_order": {"required": ["clip1", "clip2"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPMergeAdd", "display_name": "CLIPMergeAdd", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": false, "has_intermediate_output": false, "search_aliases": ["combine clip"]}, "CLIPSave": {"input": {"required": {"clip": ["CLIP"], "filename_prefix": ["STRING", {"default": "clip/ComfyUI"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["clip", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "CLIPSave", "display_name": "CLIPSave", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "VAESave": {"input": {"required": {"vae": ["VAE"], "filename_prefix": ["STRING", {"default": "vae/ComfyUI_vae"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["vae", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "VAESave", "display_name": "VAESave", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "ModelSave": {"input": {"required": {"model": ["MODEL"], "filename_prefix": ["STRING", {"default": "diffusion_models/ComfyUI"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["model", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "ModelSave", "display_name": "ModelSave", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": true, "has_intermediate_output": false, "search_aliases": ["export model", "checkpoint save"]}, "TomePatchModel": {"input": {"required": {"model": ["MODEL", {}], "ratio": ["FLOAT", {"default": 0.3, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "ratio"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "TomePatchModel", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_tomesd", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeSDXLRefiner": {"input": {"required": {"ascore": ["FLOAT", {"default": 6.0, "min": 0.0, "max": 1000.0, "step": 0.01}], "width": ["INT", {"default": 1024, "min": 0, "max": 16384}], "height": ["INT", {"default": 1024, "min": 0, "max": 16384}], "text": ["STRING", {"multiline": true, "dynamicPrompts": true}], "clip": ["CLIP", {}]}}, "input_order": {"required": ["ascore", "width", "height", "text", "clip"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeSDXLRefiner", "display_name": "CLIP Text Encode (SDXL Refiner)", "description": "", "python_module": "comfy_extras.nodes_clip_sdxl", "category": "model/conditioning/stable diffusion", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeSDXL": {"input": {"required": {"clip": ["CLIP", {}], "width": ["INT", {"default": 1024, "min": 0, "max": 16384}], "height": ["INT", {"default": 1024, "min": 0, "max": 16384}], "crop_w": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 16384}], "crop_h": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 16384}], "target_width": ["INT", {"default": 1024, "min": 0, "max": 16384}], "target_height": ["INT", {"default": 1024, "min": 0, "max": 16384}], "text_g": ["STRING", {"multiline": true, "dynamicPrompts": true}], "text_l": ["STRING", {"multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["clip", "width", "height", "crop_w", "crop_h", "target_width", "target_height", "text_g", "text_l"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeSDXL", "display_name": "CLIP Text Encode (SDXL)", "description": "", "python_module": "comfy_extras.nodes_clip_sdxl", "category": "model/conditioning/stable diffusion", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Canny": {"input": {"required": {"image": ["IMAGE", {}], "low_threshold": ["FLOAT", {"default": 0.4, "min": 0.01, "max": 0.99, "step": 0.01}], "high_threshold": ["FLOAT", {"default": 0.8, "min": 0.01, "max": 0.99, "step": 0.01}]}}, "input_order": {"required": ["image", "low_threshold", "high_threshold"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Canny", "display_name": "Detect Edges (Canny)", "description": "", "python_module": "comfy_extras.nodes_canny", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["edge detection", "outline", "contour detection", "line art"], "essentials_category": "Image Tools", "has_intermediate_output": false}, "FreeU": {"input": {"required": {"model": ["MODEL", {}], "b1": ["FLOAT", {"advanced": true, "default": 1.1, "min": 0.0, "max": 10.0, "step": 0.01}], "b2": ["FLOAT", {"advanced": true, "default": 1.2, "min": 0.0, "max": 10.0, "step": 0.01}], "s1": ["FLOAT", {"advanced": true, "default": 0.9, "min": 0.0, "max": 10.0, "step": 0.01}], "s2": ["FLOAT", {"advanced": true, "default": 0.2, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "b1", "b2", "s1", "s2"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "FreeU", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_freelunch", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FreeU_V2": {"input": {"required": {"model": ["MODEL", {}], "b1": ["FLOAT", {"advanced": true, "default": 1.3, "min": 0.0, "max": 10.0, "step": 0.01}], "b2": ["FLOAT", {"advanced": true, "default": 1.4, "min": 0.0, "max": 10.0, "step": 0.01}], "s1": ["FLOAT", {"advanced": true, "default": 0.9, "min": 0.0, "max": 10.0, "step": 0.01}], "s2": ["FLOAT", {"advanced": true, "default": 0.2, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "b1", "b2", "s1", "s2"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "FreeU_V2", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_freelunch", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerCustom": {"input": {"required": {"model": ["MODEL", {}], "add_noise": ["BOOLEAN", {"advanced": true, "default": true}], "noise_seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "sampler": ["SAMPLER", {}], "sigmas": ["SIGMAS", {}], "latent_image": ["LATENT", {}]}}, "input_order": {"required": ["model", "add_noise", "noise_seed", "cfg", "positive", "negative", "sampler", "sigmas", "latent_image"]}, "is_input_list": false, "output": ["LATENT", "LATENT"], "output_is_list": [false, false], "output_name": ["output", "denoised_output"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SamplerCustom", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/custom", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CFGOverride": {"input": {"required": {"model": ["MODEL", {}], "cfg": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["model", "cfg", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "CFGOverride", "display_name": "CFG Override", "description": "Override cfg to a fixed value over a [start, end] percent (sigma) range. With multiple overrides, the one nearest the sampler wins on overlap.", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/guiders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BasicScheduler": {"input": {"required": {"model": ["MODEL", {}], "scheduler": ["COMBO", {"multiselect": false, "options": ["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal"]}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "scheduler", "steps", "denoise"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "BasicScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KarrasScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "sigma_max": ["FLOAT", {"advanced": true, "default": 14.614642, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "sigma_min": ["FLOAT", {"advanced": true, "default": 0.0291675, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "rho": ["FLOAT", {"advanced": true, "default": 7.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["steps", "sigma_max", "sigma_min", "rho"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "KarrasScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ExponentialScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "sigma_max": ["FLOAT", {"advanced": true, "default": 14.614642, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "sigma_min": ["FLOAT", {"advanced": true, "default": 0.0291675, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["steps", "sigma_max", "sigma_min"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "ExponentialScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PolyexponentialScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "sigma_max": ["FLOAT", {"advanced": true, "default": 14.614642, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "sigma_min": ["FLOAT", {"advanced": true, "default": 0.0291675, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "rho": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["steps", "sigma_max", "sigma_min", "rho"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "PolyexponentialScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LaplaceScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "sigma_max": ["FLOAT", {"advanced": true, "default": 14.614642, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "sigma_min": ["FLOAT", {"advanced": true, "default": 0.0291675, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "mu": ["FLOAT", {"advanced": true, "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.1, "round": false}], "beta": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0.0, "max": 10.0, "step": 0.1, "round": false}]}}, "input_order": {"required": ["steps", "sigma_max", "sigma_min", "mu", "beta"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "LaplaceScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VPScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "beta_d": ["FLOAT", {"advanced": true, "default": 19.9, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "beta_min": ["FLOAT", {"advanced": true, "default": 0.1, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "eps_s": ["FLOAT", {"advanced": true, "default": 0.001, "min": 0.0, "max": 1.0, "step": 0.0001, "round": false}]}}, "input_order": {"required": ["steps", "beta_d", "beta_min", "eps_s"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "VPScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BetaSamplingScheduler": {"input": {"required": {"model": ["MODEL", {}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "alpha": ["FLOAT", {"advanced": true, "default": 0.6, "min": 0.0, "max": 50.0, "step": 0.01, "round": false}], "beta": ["FLOAT", {"advanced": true, "default": 0.6, "min": 0.0, "max": 50.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["model", "steps", "alpha", "beta"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "BetaSamplingScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SDTurboScheduler": {"input": {"required": {"model": ["MODEL", {}], "steps": ["INT", {"default": 1, "min": 1, "max": 10}], "denoise": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "steps", "denoise"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "SDTurboScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KSamplerSelect": {"input": {"required": {"sampler_name": ["COMBO", {"multiselect": false, "options": ["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]}]}}, "input_order": {"required": ["sampler_name"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "KSamplerSelect", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerEulerAncestral": {"input": {"required": {"eta": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["eta", "s_noise"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerEulerAncestral", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerEulerAncestralCFGPP": {"input": {"required": {"eta": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["eta", "s_noise"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerEulerAncestralCFGPP", "display_name": "SamplerEulerAncestralCFG++", "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerLMS": {"input": {"required": {"order": ["INT", {"advanced": true, "default": 4, "min": 1, "max": 100}]}}, "input_order": {"required": ["order"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerLMS", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerDPMPP_3M_SDE": {"input": {"required": {"eta": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "noise_device": ["COMBO", {"advanced": true, "multiselect": false, "options": ["gpu", "cpu"]}]}}, "input_order": {"required": ["eta", "s_noise", "noise_device"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerDPMPP_3M_SDE", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerDPMPP_2M_SDE": {"input": {"required": {"solver_type": ["COMBO", {"multiselect": false, "options": ["midpoint", "heun"]}], "eta": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "noise_device": ["COMBO", {"advanced": true, "multiselect": false, "options": ["gpu", "cpu"]}]}}, "input_order": {"required": ["solver_type", "eta", "s_noise", "noise_device"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerDPMPP_2M_SDE", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerDPMPP_SDE": {"input": {"required": {"eta": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "r": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "noise_device": ["COMBO", {"advanced": true, "multiselect": false, "options": ["gpu", "cpu"]}]}}, "input_order": {"required": ["eta", "s_noise", "r", "noise_device"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerDPMPP_SDE", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerDPMPP_2S_Ancestral": {"input": {"required": {"eta": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["eta", "s_noise"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerDPMPP_2S_Ancestral", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerDPMAdaptative": {"input": {"required": {"order": ["INT", {"advanced": true, "default": 3, "min": 2, "max": 3}], "rtol": ["FLOAT", {"advanced": true, "default": 0.05, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "atol": ["FLOAT", {"advanced": true, "default": 0.0078, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "h_init": ["FLOAT", {"advanced": true, "default": 0.05, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "pcoeff": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "icoeff": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "dcoeff": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "accept_safety": ["FLOAT", {"advanced": true, "default": 0.81, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "eta": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["order", "rtol", "atol", "h_init", "pcoeff", "icoeff", "dcoeff", "accept_safety", "eta", "s_noise"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerDPMAdaptative", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerER_SDE": {"input": {"required": {"solver_type": ["COMBO", {"multiselect": false, "options": ["ER-SDE", "Reverse-time SDE", "ODE"]}], "max_stage": ["INT", {"advanced": true, "default": 3, "min": 1, "max": 3}], "eta": ["FLOAT", {"tooltip": "Stochastic strength of reverse-time SDE.\nWhen eta=0, it reduces to deterministic ODE. This setting doesn't apply to ER-SDE solver type.", "advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["solver_type", "max_stage", "eta", "s_noise"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerER_SDE", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerSASolver": {"input": {"required": {"model": ["MODEL", {}], "eta": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01, "round": false}], "sde_start_percent": ["FLOAT", {"advanced": true, "default": 0.2, "min": 0.0, "max": 1.0, "step": 0.001}], "sde_end_percent": ["FLOAT", {"advanced": true, "default": 0.8, "min": 0.0, "max": 1.0, "step": 0.001}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "predictor_order": ["INT", {"advanced": true, "default": 3, "min": 1, "max": 6}], "corrector_order": ["INT", {"advanced": true, "default": 4, "min": 0, "max": 6}], "use_pece": ["BOOLEAN", {"advanced": true}], "simple_order_2": ["BOOLEAN", {"advanced": true}]}}, "input_order": {"required": ["model", "eta", "sde_start_percent", "sde_end_percent", "s_noise", "predictor_order", "corrector_order", "use_pece", "simple_order_2"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerSASolver", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["sde"], "essentials_category": null, "has_intermediate_output": false}, "SamplerSEEDS2": {"input": {"required": {"solver_type": ["COMBO", {"multiselect": false, "options": ["phi_1", "phi_2"]}], "eta": ["FLOAT", {"tooltip": "Stochastic strength", "advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"tooltip": "SDE noise multiplier", "advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "r": ["FLOAT", {"tooltip": "Relative step size for the intermediate stage (c2 node)", "advanced": true, "default": 0.5, "min": 0.01, "max": 1.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["solver_type", "eta", "s_noise", "r"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerSEEDS2", "display_name": null, "description": "This sampler node can represent multiple samplers:\n\nseeds_2\n- default setting\n\nexp_heun_2_x0\n- solver_type=phi_2, r=1.0, eta=0.0\n\nexp_heun_2_x0_sde\n- solver_type=phi_2, r=1.0, eta=1.0, s_noise=1.0", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["sde", "exp heun"], "essentials_category": null, "has_intermediate_output": false}, "SplitSigmas": {"input": {"required": {"sigmas": ["SIGMAS", {}], "step": ["INT", {"default": 0, "min": 0, "max": 10000}]}}, "input_order": {"required": ["sigmas", "step"]}, "is_input_list": false, "output": ["SIGMAS", "SIGMAS"], "output_is_list": [false, false], "output_name": ["high_sigmas", "low_sigmas"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SplitSigmas", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SplitSigmasDenoise": {"input": {"required": {"sigmas": ["SIGMAS", {}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["sigmas", "denoise"]}, "is_input_list": false, "output": ["SIGMAS", "SIGMAS"], "output_is_list": [false, false], "output_name": ["high_sigmas", "low_sigmas"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SplitSigmasDenoise", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FlipSigmas": {"input": {"required": {"sigmas": ["SIGMAS", {}]}}, "input_order": {"required": ["sigmas"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "FlipSigmas", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SetFirstSigma": {"input": {"required": {"sigmas": ["SIGMAS", {}], "sigma": ["FLOAT", {"default": 136.0, "min": 0.0, "max": 20000.0, "step": 0.001, "round": false}]}}, "input_order": {"required": ["sigmas", "sigma"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "SetFirstSigma", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ExtendIntermediateSigmas": {"input": {"required": {"sigmas": ["SIGMAS", {}], "steps": ["INT", {"default": 2, "min": 1, "max": 100}], "start_at_sigma": ["FLOAT", {"default": -1.0, "min": -1.0, "max": 20000.0, "step": 0.01, "round": false}], "end_at_sigma": ["FLOAT", {"default": 12.0, "min": 0.0, "max": 20000.0, "step": 0.01, "round": false}], "spacing": ["COMBO", {"multiselect": false, "options": ["linear", "cosine", "sine"]}]}}, "input_order": {"required": ["sigmas", "steps", "start_at_sigma", "end_at_sigma", "spacing"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "ExtendIntermediateSigmas", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["interpolate sigmas"], "essentials_category": null, "has_intermediate_output": false}, "SamplingPercentToSigma": {"input": {"required": {"model": ["MODEL", {}], "sampling_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.0001}], "return_actual_sigma": ["BOOLEAN", {"tooltip": "Return the actual sigma value instead of the value used for interval checks.\nThis only affects results at 0.0 and 1.0.", "default": false}]}}, "input_order": {"required": ["model", "sampling_percent", "return_actual_sigma"]}, "is_input_list": false, "output": ["FLOAT"], "output_is_list": [false], "output_name": ["sigma_value"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplingPercentToSigma", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CFGGuider": {"input": {"required": {"model": ["MODEL", {}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}]}}, "input_order": {"required": ["model", "positive", "negative", "cfg"]}, "is_input_list": false, "output": ["GUIDER"], "output_is_list": [false], "output_name": ["GUIDER"], "output_tooltips": [null], "output_matchtypes": null, "name": "CFGGuider", "display_name": "CFG Guider", "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/guiders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "DualCFGGuider": {"input": {"required": {"model": ["MODEL", {}], "cond1": ["CONDITIONING", {}], "cond2": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "cfg_conds": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "cfg_cond2_negative": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "style": ["COMBO", {"multiselect": false, "options": ["regular", "nested"]}]}}, "input_order": {"required": ["model", "cond1", "cond2", "negative", "cfg_conds", "cfg_cond2_negative", "style"]}, "is_input_list": false, "output": ["GUIDER"], "output_is_list": [false], "output_name": ["GUIDER"], "output_tooltips": [null], "output_matchtypes": null, "name": "DualCFGGuider", "display_name": "Dual CFG Guider", "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/guiders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["dual prompt guidance"], "essentials_category": null, "has_intermediate_output": false}, "DualModelGuider": {"input": {"required": {"model": ["MODEL", {"tooltip": "Model used for the positive (conditional) pass."}], "positive": ["CONDITIONING", {}], "cfg": ["FLOAT", {"default": 4.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}]}, "optional": {"model_negative": ["MODEL", {"tooltip": "Model used for the negative (unconditional) pass. Use the same model for ordinary CFG."}], "negative": ["CONDITIONING", {"tooltip": "Negative conditioning run on the negative model. Leave unconnected for a text-free (image-only) unconditional pass."}]}}, "input_order": {"required": ["model", "positive", "cfg"], "optional": ["model_negative", "negative"]}, "is_input_list": false, "output": ["GUIDER"], "output_is_list": [false], "output_name": ["GUIDER"], "output_tooltips": [null], "output_matchtypes": null, "name": "DualModelGuider", "display_name": "Dual Model CFG Guider", "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/guiders", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BasicGuider": {"input": {"required": {"model": ["MODEL", {}], "conditioning": ["CONDITIONING", {}]}}, "input_order": {"required": ["model", "conditioning"]}, "is_input_list": false, "output": ["GUIDER"], "output_is_list": [false], "output_name": ["GUIDER"], "output_tooltips": [null], "output_matchtypes": null, "name": "BasicGuider", "display_name": "Basic Guider", "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/guiders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RandomNoise": {"input": {"required": {"noise_seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}}, "input_order": {"required": ["noise_seed"]}, "is_input_list": false, "output": ["NOISE"], "output_is_list": [false], "output_name": ["NOISE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RandomNoise", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/noise", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "DisableNoise": {"input": {"required": {}}, "input_order": {"required": []}, "is_input_list": false, "output": ["NOISE"], "output_is_list": [false], "output_name": ["NOISE"], "output_tooltips": [null], "output_matchtypes": null, "name": "DisableNoise", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/noise", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["zero noise"], "essentials_category": null, "has_intermediate_output": false}, "AddNoise": {"input": {"required": {"model": ["MODEL", {}], "noise": ["NOISE", {}], "sigmas": ["SIGMAS", {}], "latent_image": ["LATENT", {}]}}, "input_order": {"required": ["model", "noise", "sigmas", "latent_image"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "AddNoise", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "experimental/custom_sampling/noise", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerCustomAdvanced": {"input": {"required": {"noise": ["NOISE", {}], "guider": ["GUIDER", {}], "sampler": ["SAMPLER", {}], "sigmas": ["SIGMAS", {}], "latent_image": ["LATENT", {}]}}, "input_order": {"required": ["noise", "guider", "sampler", "sigmas", "latent_image"]}, "is_input_list": false, "output": ["LATENT", "LATENT"], "output_is_list": [false, false], "output_name": ["output", "denoised_output"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SamplerCustomAdvanced", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/custom", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ManualSigmas": {"input": {"required": {"sigmas": ["STRING", {"default": "1, 0.5", "multiline": false}]}}, "input_order": {"required": ["sigmas"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "ManualSigmas", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "experimental/custom_sampling", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["custom noise schedule", "define sigmas"], "essentials_category": null, "has_intermediate_output": false}, "HyperTile": {"input": {"required": {"model": ["MODEL", {}], "tile_size": ["INT", {"advanced": true, "default": 256, "min": 1, "max": 2048}], "swap_size": ["INT", {"advanced": true, "default": 2, "min": 1, "max": 128}], "max_depth": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 10}], "scale_depth": ["BOOLEAN", {"advanced": true, "default": false}]}}, "input_order": {"required": ["model", "tile_size", "swap_size", "max_depth", "scale_depth"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "HyperTile", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hypertile", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ModelSamplingDiscrete": {"input": {"required": {"model": ["MODEL"], "sampling": [["eps", "v_prediction", "lcm", "x0", "img_to_img", "img_to_img_flow"]], "zsnr": ["BOOLEAN", {"default": false, "advanced": true}]}}, "input_order": {"required": ["model", "sampling", "zsnr"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingDiscrete", "display_name": "ModelSamplingDiscrete", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingContinuousEDM": {"input": {"required": {"model": ["MODEL"], "sampling": [["v_prediction", "edm", "edm_playground_v2.5", "eps", "cosmos_rflow"]], "sigma_max": ["FLOAT", {"default": 120.0, "min": 0.0, "max": 1000.0, "step": 0.001, "round": false, "advanced": true}], "sigma_min": ["FLOAT", {"default": 0.002, "min": 0.0, "max": 1000.0, "step": 0.001, "round": false, "advanced": true}]}}, "input_order": {"required": ["model", "sampling", "sigma_max", "sigma_min"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingContinuousEDM", "display_name": "ModelSamplingContinuousEDM", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingContinuousV": {"input": {"required": {"model": ["MODEL"], "sampling": [["v_prediction"]], "sigma_max": ["FLOAT", {"default": 500.0, "min": 0.0, "max": 1000.0, "step": 0.001, "round": false, "advanced": true}], "sigma_min": ["FLOAT", {"default": 0.03, "min": 0.0, "max": 1000.0, "step": 0.001, "round": false, "advanced": true}]}}, "input_order": {"required": ["model", "sampling", "sigma_max", "sigma_min"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingContinuousV", "display_name": "ModelSamplingContinuousV", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingStableCascade": {"input": {"required": {"model": ["MODEL"], "shift": ["FLOAT", {"default": 2.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "shift"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingStableCascade", "display_name": "ModelSamplingStableCascade", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch/stable cascade", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingSD3": {"input": {"required": {"model": ["MODEL"], "shift": ["FLOAT", {"default": 3.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "shift"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingSD3", "display_name": "ModelSamplingSD3", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch/stable diffusion", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingAuraFlow": {"input": {"required": {"model": ["MODEL"], "shift": ["FLOAT", {"default": 1.73, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "shift"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingAuraFlow", "display_name": "ModelSamplingAuraFlow", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingFlux": {"input": {"required": {"model": ["MODEL"], "max_shift": ["FLOAT", {"default": 1.15, "min": 0.0, "max": 100.0, "step": 0.01, "advanced": true}], "base_shift": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 100.0, "step": 0.01, "advanced": true}], "width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 8}]}}, "input_order": {"required": ["model", "max_shift", "base_shift", "width", "height"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingFlux", "display_name": "ModelSamplingFlux", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch/flux", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelNoiseScale": {"input": {"required": {"model": ["MODEL"], "noise_scale": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 64.0, "step": 0.01, "tooltip": "Absolute training noise scale. For example HiDream-O1 base: 8.0, dev: 7.5."}]}}, "input_order": {"required": ["model", "noise_scale"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelNoiseScale", "display_name": "ModelNoiseScale", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "RescaleCFG": {"input": {"required": {"model": ["MODEL"], "multiplier": ["FLOAT", {"default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "multiplier"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "RescaleCFG", "display_name": "RescaleCFG", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelComputeDtype": {"input": {"required": {"model": ["MODEL"], "dtype": [["default", "fp32", "fp16", "bf16"], {"advanced": true}]}}, "input_order": {"required": ["model", "dtype"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelComputeDtype", "display_name": "ModelComputeDtype", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "advanced/debug", "output_node": false, "has_intermediate_output": false, "search_aliases": ["model precision", "change dtype"]}, "PatchModelAddDownscale": {"input": {"required": {"model": ["MODEL", {}], "block_number": ["INT", {"advanced": true, "default": 3, "min": 1, "max": 32, "step": 1}], "downscale_factor": ["FLOAT", {"default": 2.0, "min": 0.1, "max": 9.0, "step": 0.001}], "start_percent": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"advanced": true, "default": 0.35, "min": 0.0, "max": 1.0, "step": 0.001}], "downscale_after_skip": ["BOOLEAN", {"advanced": true, "default": true}], "downscale_method": ["COMBO", {"multiselect": false, "options": ["bicubic", "nearest-exact", "bilinear", "area", "bislerp"]}], "upscale_method": ["COMBO", {"multiselect": false, "options": ["bicubic", "nearest-exact", "bilinear", "area", "bislerp"]}]}}, "input_order": {"required": ["model", "block_number", "downscale_factor", "start_percent", "end_percent", "downscale_after_skip", "downscale_method", "upscale_method"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "PatchModelAddDownscale", "display_name": "PatchModelAddDownscale (Kohya Deep Shrink)", "description": "", "python_module": "comfy_extras.nodes_model_downscale", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageCrop": {"input": {"required": {"image": ["IMAGE", {}], "width": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "height": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}]}}, "input_order": {"required": ["image", "width", "height", "x", "y"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageCrop", "display_name": "Crop Image (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["trim"], "essentials_category": "Image Tools", "has_intermediate_output": false}, "ImageCropV2": {"input": {"required": {"image": ["IMAGE", {}], "crop_region": ["BOUNDING_BOX", {"default": {"x": 0, "y": 0, "width": 512, "height": 512}, "socketless": true, "component": "ImageCrop"}]}}, "input_order": {"required": ["image", "crop_region"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageCropV2", "display_name": "Crop Image", "description": "Crop an image to the specified dimensions.", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["crop", "cut", "trim"], "essentials_category": "Image Tools", "has_intermediate_output": true}, "PrimitiveBoundingBox": {"input": {"required": {"x": ["INT", {"default": 0, "min": 0, "max": 16384}], "y": ["INT", {"default": 0, "min": 0, "max": 16384}], "width": ["INT", {"default": 512, "min": 1, "max": 16384}], "height": ["INT", {"default": 512, "min": 1, "max": 16384}]}}, "input_order": {"required": ["x", "y", "width", "height"]}, "is_input_list": false, "output": ["BOUNDING_BOX"], "output_is_list": [false], "output_name": ["BOUNDING_BOX"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveBoundingBox", "display_name": "Bounding Box", "description": "", "python_module": "comfy_extras.nodes_images", "category": "utilities/primitive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RepeatImageBatch": {"input": {"required": {"image": ["IMAGE", {}], "amount": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["image", "amount"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RepeatImageBatch", "display_name": "Repeat Image Batch", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["duplicate image", "clone image"], "essentials_category": null, "has_intermediate_output": false}, "ImageFromBatch": {"input": {"required": {"image": ["IMAGE", {}], "batch_index": ["INT", {"default": 0, "min": -16384, "max": 16384}], "length": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["image", "batch_index", "length"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageFromBatch", "display_name": "Get Image from Batch", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["select image", "pick from batch", "extract image"], "essentials_category": null, "has_intermediate_output": false}, "ImageAddNoise": {"input": {"required": {"image": ["IMAGE", {}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "strength": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["image", "seed", "strength"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageAddNoise", "display_name": "Add Noise to Image", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["film grain"], "essentials_category": null, "has_intermediate_output": false}, "SaveAnimatedWEBP": {"input": {"required": {"images": ["IMAGE", {}], "filename_prefix": ["STRING", {"default": "ComfyUI", "multiline": false}], "fps": ["FLOAT", {"default": 6.0, "min": 0.01, "max": 1000.0, "step": 0.01}], "lossless": ["BOOLEAN", {"default": true}], "quality": ["INT", {"default": 80, "min": 0, "max": 100}], "method": ["COMBO", {"multiselect": false, "options": ["default", "fastest", "slowest"]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "filename_prefix", "fps", "lossless", "quality", "method"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveAnimatedWEBP", "display_name": "Save Animated WEBP", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveAnimatedPNG": {"input": {"required": {"images": ["IMAGE", {}], "filename_prefix": ["STRING", {"default": "ComfyUI", "multiline": false}], "fps": ["FLOAT", {"default": 6.0, "min": 0.01, "max": 1000.0, "step": 0.01}], "compress_level": ["INT", {"advanced": true, "default": 4, "min": 0, "max": 9}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "filename_prefix", "fps", "compress_level"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveAnimatedPNG", "display_name": "Save Animated PNG", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveImageAdvanced": {"input": {"required": {"images": ["IMAGE", {"tooltip": "The images to save."}], "filename_prefix": ["STRING", {"tooltip": "The prefix for the file to save. May include formatting tokens such as %date:yyyy-MM-dd% or %Empty Latent Image.width%.", "default": "ComfyUI", "multiline": false}], "format": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The file format in which to save the image.", "options": [{"key": "png", "inputs": {"required": {"bit_depth": ["COMBO", {"advanced": true, "default": "8-bit", "multiselect": false, "options": ["8-bit", "16-bit"]}], "input_color_space": ["COMBO", {"advanced": true, "default": "sRGB", "multiselect": false, "options": ["sRGB"]}]}}}, {"key": "exr", "inputs": {"required": {"bit_depth": ["COMBO", {"advanced": true, "default": "32-bit float", "multiselect": false, "options": ["32-bit float"]}], "input_color_space": ["COMBO", {"tooltip": "Colorspace of the input tensor. The EXR is always written as scene-linear in the matching gamut.\nsRGB \u2014 input is sRGB-encoded Rec.709; the inverse sRGB EOTF is applied.\nHDR \u2014 input is HLG-encoded Rec.2020 (BT.2100); the inverse HLG OETF is applied to get scene-linear light.\nlinear \u2014 input is already scene-linear (Rec.709 primaries); written through unchanged. Use this for renderer/compositor output.", "advanced": true, "default": "sRGB", "multiselect": false, "options": ["sRGB", "HDR", "linear"]}]}}}]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "filename_prefix", "format"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveImageAdvanced", "display_name": "Save Image (Advanced)", "description": "Saves the input images to your ComfyUI output directory.", "python_module": "comfy_extras.nodes_images", "category": "image", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["save", "save image", "export image", "output image", "write image"], "essentials_category": "Basics", "has_intermediate_output": false}, "SaveSVGNode": {"input": {"required": {"svg": ["SVG", {}], "filename_prefix": ["STRING", {"tooltip": "The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes.", "default": "svg/ComfyUI", "multiline": false}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["svg", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["SVG"], "output_is_list": [false], "output_name": ["svg"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveSVGNode", "display_name": "Save SVG", "description": "Save SVG files on disk.", "python_module": "comfy_extras.nodes_images", "category": "image", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export vector", "save vector graphics"], "essentials_category": null, "has_intermediate_output": false}, "ImageStitch": {"input": {"required": {"image1": ["IMAGE", {}], "direction": ["COMBO", {"default": "right", "multiselect": false, "options": ["right", "down", "left", "up"]}], "match_image_size": ["BOOLEAN", {"default": true}], "spacing_width": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 1024, "step": 2}], "spacing_color": ["COMBO", {"advanced": true, "default": "white", "multiselect": false, "options": ["white", "black", "red", "green", "blue"]}]}, "optional": {"image2": ["IMAGE", {}]}}, "input_order": {"required": ["image1", "direction", "match_image_size", "spacing_width", "spacing_color"], "optional": ["image2"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageStitch", "display_name": "Stitch Images", "description": "Stitches image2 to image1 in the specified direction.\nIf image2 is not provided, returns image1 unchanged.\nOptional spacing can be added between images.", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine images", "join images", "concatenate images", "side by side"], "essentials_category": null, "has_intermediate_output": false}, "ResizeAndPadImage": {"input": {"required": {"image": ["IMAGE", {}], "target_width": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "target_height": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "padding_color": ["COMBO", {"advanced": true, "multiselect": false, "options": ["white", "black"]}], "interpolation": ["COMBO", {"advanced": true, "multiselect": false, "options": ["area", "bicubic", "nearest-exact", "bilinear", "lanczos"]}]}}, "input_order": {"required": ["image", "target_width", "target_height", "padding_color", "interpolation"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ResizeAndPadImage", "display_name": "Resize And Pad Image", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["fit to size"], "essentials_category": null, "has_intermediate_output": false}, "GetImageSize": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image"], "hidden": ["unique_id"]}, "is_input_list": false, "output": ["INT", "INT", "INT"], "output_is_list": [false, false, false], "output_name": ["width", "height", "batch_size"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "GetImageSize", "display_name": "Get Image Size", "description": "Returns width and height of the image, and passes it through unchanged.", "python_module": "comfy_extras.nodes_images", "category": "image", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["dimensions", "resolution", "image info"], "essentials_category": null, "has_intermediate_output": false}, "ImageRotate": {"input": {"required": {"image": ["IMAGE", {}], "rotation": ["COMBO", {"multiselect": false, "options": ["none", "90 degrees", "180 degrees", "270 degrees"]}]}}, "input_order": {"required": ["image", "rotation"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageRotate", "display_name": "Rotate Image", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["turn", "flip orientation"], "essentials_category": "Image Tools", "has_intermediate_output": false}, "ImageFlip": {"input": {"required": {"image": ["IMAGE", {}], "flip_method": ["COMBO", {"multiselect": false, "options": ["x-axis: vertically", "y-axis: horizontally"]}]}}, "input_order": {"required": ["image", "flip_method"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageFlip", "display_name": "Flip Image", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["mirror", "reflect"], "essentials_category": null, "has_intermediate_output": false}, "ImageScaleToMaxDimension": {"input": {"required": {"image": ["IMAGE", {}], "upscale_method": ["COMBO", {"multiselect": false, "options": ["area", "lanczos", "bilinear", "nearest-exact", "bilinear", "bicubic"]}], "largest_size": ["INT", {"default": 512, "min": 0, "max": 16384, "step": 1}]}}, "input_order": {"required": ["image", "upscale_method", "largest_size"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageScaleToMaxDimension", "display_name": "Scale Image to Max Dimension", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/upscaling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SplitImageToTileList": {"input": {"required": {"image": ["IMAGE", {}], "tile_width": ["INT", {"default": 1024, "min": 64, "max": 16384}], "tile_height": ["INT", {"default": 1024, "min": 64, "max": 16384}], "overlap": ["INT", {"default": 128, "min": 0, "max": 4096}]}}, "input_order": {"required": ["image", "tile_width", "tile_height", "overlap"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "SplitImageToTileList", "display_name": "Split Image into List of Tiles", "description": "Splits an image into a batched list of tiles with a specified overlap.", "python_module": "comfy_extras.nodes_images", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["split image", "tile image", "slice image"], "essentials_category": null, "has_intermediate_output": false}, "ImageMergeTileList": {"input": {"required": {"image_list": ["IMAGE", {}], "final_width": ["INT", {"default": 1024, "min": 64, "max": 32768}], "final_height": ["INT", {"default": 1024, "min": 64, "max": 32768}], "overlap": ["INT", {"default": 128, "min": 0, "max": 4096}]}}, "input_order": {"required": ["image_list", "final_width", "final_height", "overlap"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageMergeTileList", "display_name": "Merge List of Tiles to Image", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["split image", "tile image", "slice image"], "essentials_category": null, "has_intermediate_output": false}, "ImageOnlyCheckpointLoader": {"input": {"required": {"ckpt_name": [[]]}}, "input_order": {"required": ["ckpt_name"]}, "is_input_list": false, "output": ["MODEL", "CLIP_VISION", "VAE"], "output_is_list": [false, false, false], "output_name": ["MODEL", "CLIP_VISION", "VAE"], "name": "ImageOnlyCheckpointLoader", "display_name": "Load Checkpoint Image Only (img2vid model)", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SVD_img2vid_Conditioning": {"input": {"required": {"clip_vision": ["CLIP_VISION"], "init_image": ["IMAGE"], "vae": ["VAE"], "width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 576, "min": 16, "max": 16384, "step": 8}], "video_frames": ["INT", {"default": 14, "min": 1, "max": 4096}], "motion_bucket_id": ["INT", {"default": 127, "min": 1, "max": 1023, "advanced": true}], "fps": ["INT", {"default": 6, "min": 1, "max": 1024}], "augmentation_level": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 10.0, "step": 0.01, "advanced": true}]}}, "input_order": {"required": ["clip_vision", "init_image", "vae", "width", "height", "video_frames", "motion_bucket_id", "fps", "augmentation_level"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "name": "SVD_img2vid_Conditioning", "display_name": "SVD_img2vid_Conditioning", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "model/conditioning/stable video", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VideoLinearCFGGuidance": {"input": {"required": {"model": ["MODEL"], "min_cfg": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.5, "round": 0.01, "advanced": true}]}}, "input_order": {"required": ["model", "min_cfg"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "VideoLinearCFGGuidance", "display_name": "Video Linear CFG Guidance", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "model/sampling/guiders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VideoTriangleCFGGuidance": {"input": {"required": {"model": ["MODEL"], "min_cfg": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.5, "round": 0.01, "advanced": true}]}}, "input_order": {"required": ["model", "min_cfg"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "VideoTriangleCFGGuidance", "display_name": "Video Triangle CFG Guidance", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "model/sampling/guiders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImageOnlyCheckpointSave": {"input": {"required": {"model": ["MODEL"], "clip_vision": ["CLIP_VISION"], "vae": ["VAE"], "filename_prefix": ["STRING", {"default": "checkpoints/ComfyUI"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["model", "clip_vision", "vae", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "ImageOnlyCheckpointSave", "display_name": "ImageOnlyCheckpointSave", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "model/merging", "output_node": true, "has_intermediate_output": false, "search_aliases": ["save model", "export checkpoint", "merge save"]}, "ConditioningSetAreaPercentageVideo": {"input": {"required": {"conditioning": ["CONDITIONING"], "width": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}], "height": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}], "temporal": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}], "x": ["FLOAT", {"default": 0, "min": 0, "max": 1.0, "step": 0.01}], "y": ["FLOAT", {"default": 0, "min": 0, "max": 1.0, "step": 0.01}], "z": ["FLOAT", {"default": 0, "min": 0, "max": 1.0, "step": 0.01}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "width", "height", "temporal", "x", "y", "z", "strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetAreaPercentageVideo", "display_name": "Conditioning (Set Area with Percentage for Video)", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "Ideogram4Scheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 200}], "width": ["INT", {"default": 1024, "min": 256, "max": 8192, "step": 16}], "height": ["INT", {"default": 1024, "min": 256, "max": 8192, "step": 16}], "mu": ["FLOAT", {"default": 0.0, "min": -10.0, "max": 10.0, "step": 0.05}], "std": ["FLOAT", {"default": 1.75, "min": 0.1, "max": 5.0, "step": 0.05}]}}, "input_order": {"required": ["steps", "width", "height", "mu", "std"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "Ideogram4Scheduler", "display_name": "Ideogram 4 Scheduler", "description": "", "python_module": "comfy_extras.nodes_ideogram4", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TrainLoraNode": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to train the LoRA on."}], "latents": ["LATENT", {"tooltip": "The Latents to use for training, serve as dataset/input of the model."}], "positive": ["CONDITIONING", {"tooltip": "The positive conditioning to use for training."}], "batch_size": ["INT", {"tooltip": "The batch size to use for training.", "default": 1, "min": 1, "max": 10000}], "grad_accumulation_steps": ["INT", {"tooltip": "The number of gradient accumulation steps to use for training.", "default": 1, "min": 1, "max": 1024}], "steps": ["INT", {"tooltip": "The number of steps to train the LoRA for.", "default": 16, "min": 1, "max": 100000}], "learning_rate": ["FLOAT", {"tooltip": "The learning rate to use for training.", "default": 0.0005, "min": 1e-07, "max": 1.0, "step": 1e-07}], "rank": ["INT", {"tooltip": "The rank of the LoRA layers.", "default": 8, "min": 1, "max": 128}], "optimizer": ["COMBO", {"tooltip": "The optimizer to use for training.", "default": "AdamW", "multiselect": false, "options": ["AdamW", "Adam", "SGD", "RMSprop"]}], "loss_function": ["COMBO", {"tooltip": "The loss function to use for training.", "default": "MSE", "multiselect": false, "options": ["MSE", "L1", "Huber", "SmoothL1"]}], "seed": ["INT", {"tooltip": "The seed to use for training (used in generator for LoRA weight initialization and noise sampling)", "default": 0, "min": 0, "max": 18446744073709551615}], "training_dtype": ["COMBO", {"tooltip": "The dtype to use for training. 'none' preserves the model's native compute dtype instead of overriding it. For fp16 models, GradScaler is automatically enabled.", "default": "bf16", "multiselect": false, "options": ["bf16", "fp32", "none"]}], "lora_dtype": ["COMBO", {"tooltip": "The dtype to use for lora.", "default": "bf16", "multiselect": false, "options": ["bf16", "fp32"]}], "quantized_backward": ["BOOLEAN", {"tooltip": "When using training_dtype 'none' and training on quantized model, doing backward with quantized matmul when enabled.", "default": false}], "algorithm": ["COMBO", {"tooltip": "The algorithm to use for training.", "default": "LoRA", "multiselect": false, "options": ["LoRA", "LoHa", "LoKr", "OFT"]}], "gradient_checkpointing": ["BOOLEAN", {"tooltip": "Use gradient checkpointing for training.", "default": true}], "checkpoint_depth": ["INT", {"tooltip": "Depth level for gradient checkpointing.", "default": 1, "min": 1, "max": 5}], "offloading": ["BOOLEAN", {"tooltip": "Offload model weights to CPU during training to save GPU memory.", "default": false}], "existing_lora": ["COMBO", {"tooltip": "The existing LoRA to append to. Set to None for new LoRA.", "default": "[None]", "multiselect": false, "options": ["[None]"]}], "bucket_mode": ["BOOLEAN", {"tooltip": "Enable resolution bucket mode. When enabled, expects pre-bucketed latents from ResolutionBucket node.", "default": false}], "bypass_mode": ["BOOLEAN", {"tooltip": "Enable bypass mode for training. When enabled, adapters are applied via forward hooks instead of weight modification. Useful for quantized models where weights cannot be directly modified.", "default": false}]}}, "input_order": {"required": ["model", "latents", "positive", "batch_size", "grad_accumulation_steps", "steps", "learning_rate", "rank", "optimizer", "loss_function", "seed", "training_dtype", "lora_dtype", "quantized_backward", "algorithm", "gradient_checkpointing", "checkpoint_depth", "offloading", "existing_lora", "bucket_mode", "bypass_mode"]}, "is_input_list": true, "output": ["LORA_MODEL", "LOSS_MAP", "INT"], "output_is_list": [false, false, false], "output_name": ["lora", "loss_map", "steps"], "output_tooltips": ["LoRA weights", "Loss history", "Total training steps"], "output_matchtypes": null, "name": "TrainLoraNode", "display_name": "Train LoRA", "description": "", "python_module": "comfy_extras.nodes_train", "category": "model/training", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LoraModelLoader": {"input": {"required": {"model": ["MODEL", {"tooltip": "The diffusion model the LoRA will be applied to."}], "lora": ["LORA_MODEL", {"tooltip": "The LoRA model to apply to the diffusion model."}], "strength_model": ["FLOAT", {"tooltip": "How strongly to modify the diffusion model. This value can be negative.", "default": 1.0, "min": -100.0, "max": 100.0}], "bypass": ["BOOLEAN", {"tooltip": "When enabled, applies LoRA in bypass mode without modifying base model weights. Useful for training and when model weights are offloaded.", "default": false}]}}, "input_order": {"required": ["model", "lora", "strength_model", "bypass"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["model"], "output_tooltips": ["The modified diffusion model."], "output_matchtypes": null, "name": "LoraModelLoader", "display_name": "Load LoRA Model", "description": "", "python_module": "comfy_extras.nodes_train", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveLoRA": {"input": {"required": {"lora": ["LORA_MODEL", {"tooltip": "The LoRA model to save. Do not use the model with LoRA layers."}], "prefix": ["STRING", {"tooltip": "The prefix to use for the saved LoRA file.", "default": "loras/ComfyUI_trained_lora", "multiline": false}]}, "optional": {"steps": ["INT", {"tooltip": "Optional: The number of steps the LoRA has been trained for, used to name the saved file."}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["lora", "prefix"], "optional": ["steps"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveLoRA", "display_name": "Save LoRA Weights", "description": "", "python_module": "comfy_extras.nodes_train", "category": "model/merging", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export lora"], "essentials_category": null, "has_intermediate_output": false}, "LossGraphNode": {"input": {"required": {"loss": ["LOSS_MAP", {"tooltip": "Loss map from training node."}], "filename_prefix": ["STRING", {"tooltip": "Prefix for the saved loss graph image.", "default": "loss_graph", "multiline": false}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["loss", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "LossGraphNode", "display_name": "Plot Loss Graph", "description": "", "python_module": "comfy_extras.nodes_train", "category": "model/training", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["training chart", "training visualization", "plot loss"], "essentials_category": null, "has_intermediate_output": false}, "LoadImageDataSetFromFolder": {"input": {"required": {"folder": ["COMBO", {"tooltip": "The folder to load images from.", "multiselect": false, "options": ["3d"]}]}}, "input_order": {"required": ["folder"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["images"], "output_tooltips": ["List of loaded images"], "output_matchtypes": null, "name": "LoadImageDataSetFromFolder", "display_name": "Load Image (from Folder)", "description": "Load a dataset of images from a specified folder and return a list of images. Supported formats: PNG, JPG, JPEG, WEBP.", "python_module": "comfy_extras.nodes_dataset", "category": "image", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["load folder", "load from folder", "load dataset", "load images", "import dataset"], "essentials_category": null, "has_intermediate_output": false}, "LoadImageTextDataSetFromFolder": {"input": {"required": {"folder": ["COMBO", {"tooltip": "The folder to load images and text captions from.", "multiselect": false, "options": ["3d"]}]}}, "input_order": {"required": ["folder"]}, "is_input_list": false, "output": ["IMAGE", "STRING"], "output_is_list": [true, true], "output_name": ["images", "texts"], "output_tooltips": ["List of loaded images", "List of text captions"], "output_matchtypes": null, "name": "LoadImageTextDataSetFromFolder", "display_name": "Load Image-Text (from Folder)", "description": "Load a dataset of pairs of images and text captions from a specified folder and return them as a list. Supported formats: PNG, JPG, JPEG, WEBP.", "python_module": "comfy_extras.nodes_dataset", "category": "image", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["load folder", "load from folder", "load dataset", "load images", "import dataset"], "essentials_category": null, "has_intermediate_output": false}, "SaveImageDataSetToFolder": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to save."}], "folder_name": ["STRING", {"tooltip": "Name of the folder to save images to (inside output directory).", "default": "dataset", "multiline": false}], "filename_prefix": ["STRING", {"tooltip": "Prefix for saved image filenames.", "advanced": true, "default": "image", "multiline": false}], "mode": ["COMBO", {"tooltip": "Whether to overwrite existing files or increment filenames to avoid overwriting.", "default": "overwrite", "multiselect": false, "options": ["overwrite", "increment"]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "folder_name", "filename_prefix", "mode"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": true, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveImageDataSetToFolder", "display_name": "Save Image (to Folder) (DEPRECATED)", "description": "Save a dataset of images to a specified folder. Supported formats: PNG.", "python_module": "comfy_extras.nodes_dataset", "category": "image", "output_node": true, "deprecated": true, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["save folder", "save to folder", "save dataset", "save images", "export dataset"], "essentials_category": null, "has_intermediate_output": false}, "SaveImageTextDataSetToFolder": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to save."}], "folder_name": ["STRING", {"tooltip": "Name of the folder to save images to (inside output directory).", "default": "dataset", "multiline": false}], "filename_prefix": ["STRING", {"tooltip": "Prefix for saved image filenames.", "advanced": true, "default": "image", "multiline": false}], "mode": ["COMBO", {"tooltip": "Whether to overwrite existing files or increment filenames to avoid overwriting.", "default": "overwrite", "multiselect": false, "options": ["overwrite", "increment"]}]}, "optional": {"texts": ["STRING", {"tooltip": "List of text captions to save.", "forceInput": true, "multiline": false}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "folder_name", "filename_prefix", "mode"], "optional": ["texts"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": true, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveImageTextDataSetToFolder", "display_name": "Save Image-Text (to Folder)", "description": "Save a dataset of pairs of images and text captions to a specified folder. Images are saved as PNG files and captions are saved as TXT files with the same filename_prefix.", "python_module": "comfy_extras.nodes_dataset", "category": "image", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["save folder", "save to folder", "save dataset", "save images", "save text", "export dataset"], "essentials_category": null, "has_intermediate_output": false}, "ResizeImagesByShorterEdge": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "shorter_edge": ["INT", {"tooltip": "Target dimension for the shorter edge.", "default": 512, "min": 1, "max": 8192}]}}, "input_order": {"required": ["images", "shorter_edge"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "ResizeImagesByShorterEdge", "display_name": "Resize Images by Shorter Edge (DEPRECATED)", "description": "Resize images so that the shorter edge matches the specified dimension while preserving aspect ratio.", "python_module": "comfy_extras.nodes_dataset", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ResizeImagesByLongerEdge": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "longer_edge": ["INT", {"tooltip": "Target dimension for the longer edge.", "default": 1024, "min": 1, "max": 8192}]}}, "input_order": {"required": ["images", "longer_edge"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "ResizeImagesByLongerEdge", "display_name": "Resize Images by Longer Edge (DEPRECATED)", "description": "Resize images so that the longer edge matches the specified dimension while preserving aspect ratio.", "python_module": "comfy_extras.nodes_dataset", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CenterCropImages": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "width": ["INT", {"tooltip": "Crop width.", "default": 512, "min": 1, "max": 8192}], "height": ["INT", {"tooltip": "Crop height.", "default": 512, "min": 1, "max": 8192}]}}, "input_order": {"required": ["images", "width", "height"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "CenterCropImages", "display_name": "Crop Image (Center)", "description": "Center crop an image to the specified dimensions.", "python_module": "comfy_extras.nodes_dataset", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["crop", "cut", "trim"], "essentials_category": null, "has_intermediate_output": false}, "RandomCropImages": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "width": ["INT", {"tooltip": "Crop width.", "default": 512, "min": 1, "max": 8192}], "height": ["INT", {"tooltip": "Crop height.", "default": 512, "min": 1, "max": 8192}], "seed": ["INT", {"tooltip": "Random seed.", "default": 0, "min": 0, "max": 18446744073709551615}]}}, "input_order": {"required": ["images", "width", "height", "seed"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "RandomCropImages", "display_name": "Crop Image (Random)", "description": "Randomly crop an image to the specified dimensions.", "python_module": "comfy_extras.nodes_dataset", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["crop", "cut", "trim"], "essentials_category": null, "has_intermediate_output": false}, "NormalizeImages": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "mean": ["FLOAT", {"tooltip": "Mean value for normalization.", "advanced": true, "default": 0.5, "min": 0.0, "max": 1.0}], "std": ["FLOAT", {"tooltip": "Standard deviation for normalization.", "advanced": true, "default": 0.5, "min": 0.001, "max": 1.0}]}}, "input_order": {"required": ["images", "mean", "std"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "NormalizeImages", "display_name": "Normalize Image Colors", "description": "Normalize images using mean and standard deviation.", "python_module": "comfy_extras.nodes_dataset", "category": "image/color", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["normalize", "normalize colors"], "essentials_category": null, "has_intermediate_output": false}, "AdjustBrightness": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "factor": ["FLOAT", {"tooltip": "Brightness factor. 1.0 = no change, <1.0 = darker, >1.0 = brighter.", "default": 1.0, "min": 0.0, "max": 2.0}]}}, "input_order": {"required": ["images", "factor"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "AdjustBrightness", "display_name": "Adjust Brightness", "description": "Adjust the brightness of an image.", "python_module": "comfy_extras.nodes_dataset", "category": "image/adjustments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["brightness"], "essentials_category": null, "has_intermediate_output": false}, "AdjustContrast": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "factor": ["FLOAT", {"tooltip": "Contrast factor. 1.0 = no change, <1.0 = less contrast, >1.0 = more contrast.", "default": 1.0, "min": 0.0, "max": 2.0}]}}, "input_order": {"required": ["images", "factor"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "AdjustContrast", "display_name": "Adjust Contrast", "description": "Adjust the contrast of an image.", "python_module": "comfy_extras.nodes_dataset", "category": "image/adjustments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["contrast"], "essentials_category": null, "has_intermediate_output": false}, "ShuffleDataset": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to process."}], "seed": ["INT", {"tooltip": "Random seed.", "default": 0, "min": 0, "max": 18446744073709551615}]}}, "input_order": {"required": ["images", "seed"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "ShuffleDataset", "display_name": "Shuffle Images List", "description": "Randomly shuffle the order of images in a list.", "python_module": "comfy_extras.nodes_dataset", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["shuffle", "randomize", "mix"], "essentials_category": null, "has_intermediate_output": false}, "ShuffleImageTextDataset": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to shuffle."}], "texts": ["STRING", {"tooltip": "List of texts to shuffle.", "forceInput": true, "multiline": false}], "seed": ["INT", {"tooltip": "Random seed.", "default": 0, "min": 0, "max": 18446744073709551615}]}}, "input_order": {"required": ["images", "texts", "seed"]}, "is_input_list": true, "output": ["IMAGE", "STRING"], "output_is_list": [true, true], "output_name": ["images", "texts"], "output_tooltips": ["Shuffled images", "Shuffled texts"], "output_matchtypes": null, "name": "ShuffleImageTextDataset", "display_name": "Shuffle Pairs of Image-Text", "description": "Randomly shuffle the order of pairs of image-text in a list.", "python_module": "comfy_extras.nodes_dataset", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["shuffle", "randomize", "mix"], "essentials_category": null, "has_intermediate_output": false}, "TextToLowercase": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}]}}, "input_order": {"required": ["texts"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "TextToLowercase", "display_name": "Convert Text to Lowercase (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TextToUppercase": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}]}}, "input_order": {"required": ["texts"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "TextToUppercase", "display_name": "Convert Text to Uppercase (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TruncateText": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}], "max_length": ["INT", {"tooltip": "Maximum text length.", "default": 77, "min": 1, "max": 10000}]}}, "input_order": {"required": ["texts", "max_length"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "TruncateText", "display_name": "Truncate Text", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AddTextPrefix": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}], "prefix": ["STRING", {"tooltip": "Prefix to add.", "default": "", "multiline": false}]}}, "input_order": {"required": ["texts", "prefix"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "AddTextPrefix", "display_name": "Add Text Prefix (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AddTextSuffix": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}], "suffix": ["STRING", {"tooltip": "Suffix to add.", "default": "", "multiline": false}]}}, "input_order": {"required": ["texts", "suffix"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "AddTextSuffix", "display_name": "Add Text Suffix (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReplaceText": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}], "find": ["STRING", {"tooltip": "Text to find.", "default": "", "multiline": false}], "replace": ["STRING", {"tooltip": "Text to replace with.", "default": "", "multiline": false}]}}, "input_order": {"required": ["texts", "find", "replace"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "ReplaceText", "display_name": "Replace Text (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StripWhitespace": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}]}}, "input_order": {"required": ["texts"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "StripWhitespace", "display_name": "Strip Whitespace (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageDeduplication": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to process."}], "similarity_threshold": ["FLOAT", {"tooltip": "Similarity threshold (0-1). Higher means more similar. Images above this threshold are considered duplicates.", "advanced": true, "default": 0.95, "min": 0.0, "max": 1.0}]}}, "input_order": {"required": ["images", "similarity_threshold"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "ImageDeduplication", "display_name": "Deduplicate Images", "description": "Remove duplicate or very similar images from a list.", "python_module": "comfy_extras.nodes_dataset", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["deduplicate", "remove duplicates", "similarity filter"], "essentials_category": null, "has_intermediate_output": false}, "ImageGrid": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to process."}], "columns": ["INT", {"tooltip": "Number of columns in the grid.", "default": 4, "min": 1, "max": 20}], "cell_width": ["INT", {"tooltip": "Width of each cell in the grid.", "advanced": true, "default": 256, "min": 32, "max": 2048}], "cell_height": ["INT", {"tooltip": "Height of each cell in the grid.", "advanced": true, "default": 256, "min": 32, "max": 2048}], "padding": ["INT", {"tooltip": "Padding between images.", "advanced": true, "default": 4, "min": 0, "max": 50}]}}, "input_order": {"required": ["images", "columns", "cell_width", "cell_height", "padding"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "ImageGrid", "display_name": "Make Image Grid", "description": "Arrange multiple images into a grid layout.", "python_module": "comfy_extras.nodes_dataset", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["grid", "collage", "combine"], "essentials_category": null, "has_intermediate_output": false}, "MergeImageLists": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to process."}]}}, "input_order": {"required": ["images"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "MergeImageLists", "display_name": "Merge Image Lists (DEPRECATED)", "description": "Concatenate multiple image lists into one.", "python_module": "comfy_extras.nodes_dataset", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["list", "merge list", "make list"], "essentials_category": null, "has_intermediate_output": false}, "MergeTextLists": {"input": {"required": {"texts": ["STRING", {"tooltip": "List of texts to process.", "multiline": false}]}}, "input_order": {"required": ["texts"]}, "is_input_list": true, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "MergeTextLists", "display_name": "Merge Text Lists (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MakeTrainingDataset": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to encode."}], "vae": ["VAE", {"tooltip": "VAE model for encoding images to latents."}], "clip": ["CLIP", {"tooltip": "CLIP model for encoding text to conditioning."}]}, "optional": {"texts": ["STRING", {"tooltip": "List of text captions. Can be length n (matching images), 1 (repeated for all), or omitted (uses empty string).", "forceInput": true, "multiline": false}]}}, "input_order": {"required": ["images", "vae", "clip"], "optional": ["texts"]}, "is_input_list": true, "output": ["LATENT", "CONDITIONING"], "output_is_list": [true, true], "output_name": ["latents", "conditioning"], "output_tooltips": ["List of latent dicts", "List of conditioning lists"], "output_matchtypes": null, "name": "MakeTrainingDataset", "display_name": "Make Training Dataset", "description": "Encode images with VAE and texts with CLIP to create a training dataset of latents and conditionings.", "python_module": "comfy_extras.nodes_dataset", "category": "model/training", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["encode dataset"], "essentials_category": null, "has_intermediate_output": false}, "SaveTrainingDataset": {"input": {"required": {"latents": ["LATENT", {"tooltip": "List of latent dicts from MakeTrainingDataset."}], "conditioning": ["CONDITIONING", {"tooltip": "List of conditioning lists from MakeTrainingDataset."}], "folder_name": ["STRING", {"tooltip": "Name of folder to save dataset (inside output directory).", "default": "training_dataset", "multiline": false}], "shard_size": ["INT", {"tooltip": "Number of samples per shard file.", "advanced": true, "default": 1000, "min": 1, "max": 100000}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["latents", "conditioning", "folder_name", "shard_size"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": true, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveTrainingDataset", "display_name": "Save Training Dataset", "description": "Save encoded training dataset (latents + conditioning) to disk for efficient loading during training.", "python_module": "comfy_extras.nodes_dataset", "category": "model/training", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export dataset", "save dataset"], "essentials_category": null, "has_intermediate_output": false}, "LoadTrainingDataset": {"input": {"required": {"folder_name": ["STRING", {"tooltip": "Name of folder containing the saved dataset (inside output directory).", "default": "training_dataset", "multiline": false}]}}, "input_order": {"required": ["folder_name"]}, "is_input_list": false, "output": ["LATENT", "CONDITIONING"], "output_is_list": [true, true], "output_name": ["latents", "conditioning"], "output_tooltips": ["List of latent dicts", "List of conditioning lists"], "output_matchtypes": null, "name": "LoadTrainingDataset", "display_name": "Load Training Dataset", "description": "Load encoded training dataset (latents + conditioning) from disk for use in training.", "python_module": "comfy_extras.nodes_dataset", "category": "model/training", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["import dataset", "training data"], "essentials_category": null, "has_intermediate_output": false}, "ResolutionBucket": {"input": {"required": {"latents": ["LATENT", {"tooltip": "List of latent dicts to bucket by resolution."}], "conditioning": ["CONDITIONING", {"tooltip": "List of conditioning lists (must match latents length)."}]}}, "input_order": {"required": ["latents", "conditioning"]}, "is_input_list": true, "output": ["LATENT", "CONDITIONING"], "output_is_list": [true, true], "output_name": ["latents", "conditioning"], "output_tooltips": ["List of batched latent dicts, one per resolution bucket.", "List of condition lists, one per resolution bucket."], "output_matchtypes": null, "name": "ResolutionBucket", "display_name": "Resolution Bucket", "description": "Group latents and conditionings into buckets", "python_module": "comfy_extras.nodes_dataset", "category": "model/training", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["bucket by resolution", "group by resolution", "batch by resolution"], "essentials_category": null, "has_intermediate_output": false}, "SelfAttentionGuidance": {"input": {"required": {"model": ["MODEL", {}], "scale": ["FLOAT", {"default": 0.5, "min": -2.0, "max": 5.0, "step": 0.01}], "blur_sigma": ["FLOAT", {"advanced": true, "default": 2.0, "min": 0.0, "max": 10.0, "step": 0.1}]}}, "input_order": {"required": ["model", "scale", "blur_sigma"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SelfAttentionGuidance", "display_name": "Self-Attention Guidance", "description": "", "python_module": "comfy_extras.nodes_sag", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PerpNeg": {"input": {"required": {"model": ["MODEL", {}], "empty_conditioning": ["CONDITIONING", {}], "neg_scale": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "empty_conditioning", "neg_scale"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "PerpNeg", "display_name": "Perp-Neg (DEPRECATED by Perp-Neg Guider)", "description": "", "python_module": "comfy_extras.nodes_perpneg", "category": "experimental", "output_node": false, "deprecated": true, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PerpNegGuider": {"input": {"required": {"model": ["MODEL", {}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "empty_conditioning": ["CONDITIONING", {}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "neg_scale": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "positive", "negative", "empty_conditioning", "cfg", "neg_scale"]}, "is_input_list": false, "output": ["GUIDER"], "output_is_list": [false], "output_name": ["GUIDER"], "output_tooltips": [null], "output_matchtypes": null, "name": "PerpNegGuider", "display_name": "Perp-Neg Guider", "description": "", "python_module": "comfy_extras.nodes_perpneg", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StableZero123_Conditioning": {"input": {"required": {"clip_vision": ["CLIP_VISION", {}], "init_image": ["IMAGE", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 256, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 256, "min": 16, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "elevation": ["FLOAT", {"default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}], "azimuth": ["FLOAT", {"default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}]}}, "input_order": {"required": ["clip_vision", "init_image", "vae", "width", "height", "batch_size", "elevation", "azimuth"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "StableZero123_Conditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable3d", "category": "model/conditioning/stable zero123", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StableZero123_Conditioning_Batched": {"input": {"required": {"clip_vision": ["CLIP_VISION", {}], "init_image": ["IMAGE", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 256, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 256, "min": 16, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "elevation": ["FLOAT", {"default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}], "azimuth": ["FLOAT", {"default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}], "elevation_batch_increment": ["FLOAT", {"advanced": true, "default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}], "azimuth_batch_increment": ["FLOAT", {"advanced": true, "default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}]}}, "input_order": {"required": ["clip_vision", "init_image", "vae", "width", "height", "batch_size", "elevation", "azimuth", "elevation_batch_increment", "azimuth_batch_increment"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "StableZero123_Conditioning_Batched", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable3d", "category": "model/conditioning/stable zero123", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SV3D_Conditioning": {"input": {"required": {"clip_vision": ["CLIP_VISION", {}], "init_image": ["IMAGE", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 576, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 576, "min": 16, "max": 16384, "step": 8}], "video_frames": ["INT", {"default": 21, "min": 1, "max": 4096}], "elevation": ["FLOAT", {"default": 0.0, "min": -90.0, "max": 90.0, "step": 0.1, "round": false}]}}, "input_order": {"required": ["clip_vision", "init_image", "vae", "width", "height", "video_frames", "elevation"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "SV3D_Conditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable3d", "category": "model/conditioning/stable video 3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SD_4XUpscale_Conditioning": {"input": {"required": {"images": ["IMAGE", {}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "scale_ratio": ["FLOAT", {"default": 4.0, "min": 0.0, "max": 10.0, "step": 0.01}], "noise_augmentation": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["images", "positive", "negative", "scale_ratio", "noise_augmentation"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "SD_4XUpscale_Conditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_sdupscale", "category": "model/conditioning/stable diffusion upscaler", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PhotoMakerLoader": {"input": {"required": {"photomaker_model_name": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["photomaker_model_name"]}, "is_input_list": false, "output": ["PHOTOMAKER"], "output_is_list": [false], "output_name": ["PHOTOMAKER"], "output_tooltips": [null], "output_matchtypes": null, "name": "PhotoMakerLoader", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_photomaker", "category": "experimental/photomaker", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PhotoMakerEncode": {"input": {"required": {"photomaker": ["PHOTOMAKER", {}], "image": ["IMAGE", {}], "clip": ["CLIP", {}], "text": ["STRING", {"default": "photograph of photomaker", "multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["photomaker", "image", "clip", "text"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "PhotoMakerEncode", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_photomaker", "category": "experimental/photomaker", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodePixArtAlpha": {"input": {"required": {"width": ["INT", {"default": 1024, "min": 0, "max": 16384}], "height": ["INT", {"default": 1024, "min": 0, "max": 16384}], "text": ["STRING", {"multiline": true, "dynamicPrompts": true}], "clip": ["CLIP", {}]}}, "input_order": {"required": ["width", "height", "text", "clip"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodePixArtAlpha", "display_name": "CLIP Text Encode (PixArt Alpha)", "description": "Encodes text and sets the resolution conditioning for PixArt Alpha. Does not apply to PixArt Sigma.", "python_module": "comfy_extras.nodes_pixart", "category": "model/conditioning/pixart", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["pixart prompt"], "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeControlnet": {"input": {"required": {"clip": ["CLIP", {}], "conditioning": ["CONDITIONING", {}], "text": ["STRING", {"multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["clip", "conditioning", "text"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeControlnet", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cond", "category": "experimental/conditioning", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "T5TokenizerOptions": {"input": {"required": {"clip": ["CLIP", {}], "min_padding": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 10000, "step": 1}], "min_length": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 10000, "step": 1}]}}, "input_order": {"required": ["clip", "min_padding", "min_length"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "T5TokenizerOptions", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cond", "category": "experimental/conditioning", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Morphology": {"input": {"required": {"image": ["IMAGE", {}], "operation": ["COMBO", {"multiselect": false, "options": ["erode", "dilate", "open", "close", "gradient", "bottom_hat", "top_hat"]}], "kernel_size": ["INT", {"default": 3, "min": 3, "max": 999, "step": 1}]}}, "input_order": {"required": ["image", "operation", "kernel_size"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Morphology", "display_name": "Apply Morphology", "description": "", "python_module": "comfy_extras.nodes_morphology", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["erode", "dilate"], "essentials_category": null, "has_intermediate_output": false}, "ImageRGBToYUV": {"input": {"required": {"image": ["IMAGE", {}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE", "IMAGE", "IMAGE"], "output_is_list": [false, false, false], "output_name": ["Y", "U", "V"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "ImageRGBToYUV", "display_name": "Image RGB to YUV", "description": "", "python_module": "comfy_extras.nodes_morphology", "category": "image/color", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["color space conversion"], "essentials_category": null, "has_intermediate_output": false}, "ImageYUVToRGB": {"input": {"required": {"Y": ["IMAGE", {}], "U": ["IMAGE", {}], "V": ["IMAGE", {}]}}, "input_order": {"required": ["Y", "U", "V"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageYUVToRGB", "display_name": "Image YUV to RGB", "description": "", "python_module": "comfy_extras.nodes_morphology", "category": "image/color", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["color space conversion"], "essentials_category": null, "has_intermediate_output": false}, "StableCascade_EmptyLatentImage": {"input": {"required": {"width": ["INT", {"default": 1024, "min": 256, "max": 16384, "step": 8}], "height": ["INT", {"default": 1024, "min": 256, "max": 16384, "step": 8}], "compression": ["INT", {"advanced": true, "default": 42, "min": 4, "max": 128, "step": 1}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "compression", "batch_size"]}, "is_input_list": false, "output": ["LATENT", "LATENT"], "output_is_list": [false, false], "output_name": ["stage_c", "stage_b"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "StableCascade_EmptyLatentImage", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable_cascade", "category": "model/latent/stable cascade", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StableCascade_StageB_Conditioning": {"input": {"required": {"conditioning": ["CONDITIONING", {}], "stage_c": ["LATENT", {}]}}, "input_order": {"required": ["conditioning", "stage_c"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StableCascade_StageB_Conditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable_cascade", "category": "model/conditioning/stable cascade", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StableCascade_StageC_VAEEncode": {"input": {"required": {"image": ["IMAGE", {}], "vae": ["VAE", {}], "compression": ["INT", {"advanced": true, "default": 42, "min": 4, "max": 128, "step": 1}]}}, "input_order": {"required": ["image", "vae", "compression"]}, "is_input_list": false, "output": ["LATENT", "LATENT"], "output_is_list": [false, false], "output_name": ["stage_c", "stage_b"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "StableCascade_StageC_VAEEncode", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable_cascade", "category": "model/latent/stable cascade", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StableCascade_SuperResolutionControlnet": {"input": {"required": {"image": ["IMAGE", {}], "vae": ["VAE", {}]}}, "input_order": {"required": ["image", "vae"]}, "is_input_list": false, "output": ["IMAGE", "LATENT", "LATENT"], "output_is_list": [false, false, false], "output_name": ["controlnet_input", "stage_c", "stage_b"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "StableCascade_SuperResolutionControlnet", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable_cascade", "category": "experimental/stable_cascade", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "DifferentialDiffusion": {"input": {"required": {"model": ["MODEL", {}]}, "optional": {"strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model"], "optional": ["strength"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "DifferentialDiffusion", "display_name": "Differential Diffusion", "description": "", "python_module": "comfy_extras.nodes_differential_diffusion", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["inpaint gradient", "variable denoise strength"], "essentials_category": null, "has_intermediate_output": false}, "InstructPixToPixConditioning": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "pixels": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "pixels"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "InstructPixToPixConditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_ip2p", "category": "model/conditioning/instructpix2pix", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ModelMergeSD1": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "time_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "label_emb.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "out.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "time_embed.", "label_emb.", "input_blocks.0.", "input_blocks.1.", "input_blocks.2.", "input_blocks.3.", "input_blocks.4.", "input_blocks.5.", "input_blocks.6.", "input_blocks.7.", "input_blocks.8.", "input_blocks.9.", "input_blocks.10.", "input_blocks.11.", "middle_block.0.", "middle_block.1.", "middle_block.2.", "output_blocks.0.", "output_blocks.1.", "output_blocks.2.", "output_blocks.3.", "output_blocks.4.", "output_blocks.5.", "output_blocks.6.", "output_blocks.7.", "output_blocks.8.", "output_blocks.9.", "output_blocks.10.", "output_blocks.11.", "out."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSD1", "display_name": "ModelMergeSD1", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeSD2": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "time_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "label_emb.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "out.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "time_embed.", "label_emb.", "input_blocks.0.", "input_blocks.1.", "input_blocks.2.", "input_blocks.3.", "input_blocks.4.", "input_blocks.5.", "input_blocks.6.", "input_blocks.7.", "input_blocks.8.", "input_blocks.9.", "input_blocks.10.", "input_blocks.11.", "middle_block.0.", "middle_block.1.", "middle_block.2.", "output_blocks.0.", "output_blocks.1.", "output_blocks.2.", "output_blocks.3.", "output_blocks.4.", "output_blocks.5.", "output_blocks.6.", "output_blocks.7.", "output_blocks.8.", "output_blocks.9.", "output_blocks.10.", "output_blocks.11.", "out."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSD2", "display_name": "ModelMergeSD2", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeSDXL": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "time_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "label_emb.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.0": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.1": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.2": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.3": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.4": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.5": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.6": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.7": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.8": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.0": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.1": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.2": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.0": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.1": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.2": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.3": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.4": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.5": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.6": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.7": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.8": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "out.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "time_embed.", "label_emb.", "input_blocks.0", "input_blocks.1", "input_blocks.2", "input_blocks.3", "input_blocks.4", "input_blocks.5", "input_blocks.6", "input_blocks.7", "input_blocks.8", "middle_block.0", "middle_block.1", "middle_block.2", "output_blocks.0", "output_blocks.1", "output_blocks.2", "output_blocks.3", "output_blocks.4", "output_blocks.5", "output_blocks.6", "output_blocks.7", "output_blocks.8", "out."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSDXL", "display_name": "ModelMergeSDXL", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeSD3_2B": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "context_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "y_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embed.", "x_embedder.", "context_embedder.", "y_embedder.", "t_embedder.", "joint_blocks.0.", "joint_blocks.1.", "joint_blocks.2.", "joint_blocks.3.", "joint_blocks.4.", "joint_blocks.5.", "joint_blocks.6.", "joint_blocks.7.", "joint_blocks.8.", "joint_blocks.9.", "joint_blocks.10.", "joint_blocks.11.", "joint_blocks.12.", "joint_blocks.13.", "joint_blocks.14.", "joint_blocks.15.", "joint_blocks.16.", "joint_blocks.17.", "joint_blocks.18.", "joint_blocks.19.", "joint_blocks.20.", "joint_blocks.21.", "joint_blocks.22.", "joint_blocks.23.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSD3_2B", "display_name": "ModelMergeSD3_2B", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeAuraflow": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "init_x_linear.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "positional_encoding": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "cond_seq_linear.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "register_tokens": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_layers.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_layers.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_layers.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_layers.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "modF.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_linear.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "init_x_linear.", "positional_encoding", "cond_seq_linear.", "register_tokens", "t_embedder.", "double_layers.0.", "double_layers.1.", "double_layers.2.", "double_layers.3.", "single_layers.0.", "single_layers.1.", "single_layers.2.", "single_layers.3.", "single_layers.4.", "single_layers.5.", "single_layers.6.", "single_layers.7.", "single_layers.8.", "single_layers.9.", "single_layers.10.", "single_layers.11.", "single_layers.12.", "single_layers.13.", "single_layers.14.", "single_layers.15.", "single_layers.16.", "single_layers.17.", "single_layers.18.", "single_layers.19.", "single_layers.20.", "single_layers.21.", "single_layers.22.", "single_layers.23.", "single_layers.24.", "single_layers.25.", "single_layers.26.", "single_layers.27.", "single_layers.28.", "single_layers.29.", "single_layers.30.", "single_layers.31.", "modF.", "final_linear."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeAuraflow", "display_name": "ModelMergeAuraflow", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeFlux1": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "img_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "time_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "guidance_in": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "vector_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txt_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.36.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.37.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "img_in.", "time_in.", "guidance_in", "vector_in.", "txt_in.", "double_blocks.0.", "double_blocks.1.", "double_blocks.2.", "double_blocks.3.", "double_blocks.4.", "double_blocks.5.", "double_blocks.6.", "double_blocks.7.", "double_blocks.8.", "double_blocks.9.", "double_blocks.10.", "double_blocks.11.", "double_blocks.12.", "double_blocks.13.", "double_blocks.14.", "double_blocks.15.", "double_blocks.16.", "double_blocks.17.", "double_blocks.18.", "single_blocks.0.", "single_blocks.1.", "single_blocks.2.", "single_blocks.3.", "single_blocks.4.", "single_blocks.5.", "single_blocks.6.", "single_blocks.7.", "single_blocks.8.", "single_blocks.9.", "single_blocks.10.", "single_blocks.11.", "single_blocks.12.", "single_blocks.13.", "single_blocks.14.", "single_blocks.15.", "single_blocks.16.", "single_blocks.17.", "single_blocks.18.", "single_blocks.19.", "single_blocks.20.", "single_blocks.21.", "single_blocks.22.", "single_blocks.23.", "single_blocks.24.", "single_blocks.25.", "single_blocks.26.", "single_blocks.27.", "single_blocks.28.", "single_blocks.29.", "single_blocks.30.", "single_blocks.31.", "single_blocks.32.", "single_blocks.33.", "single_blocks.34.", "single_blocks.35.", "single_blocks.36.", "single_blocks.37.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeFlux1", "display_name": "ModelMergeFlux1", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeSD35_Large": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "context_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "y_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.36.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.37.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embed.", "x_embedder.", "context_embedder.", "y_embedder.", "t_embedder.", "joint_blocks.0.", "joint_blocks.1.", "joint_blocks.2.", "joint_blocks.3.", "joint_blocks.4.", "joint_blocks.5.", "joint_blocks.6.", "joint_blocks.7.", "joint_blocks.8.", "joint_blocks.9.", "joint_blocks.10.", "joint_blocks.11.", "joint_blocks.12.", "joint_blocks.13.", "joint_blocks.14.", "joint_blocks.15.", "joint_blocks.16.", "joint_blocks.17.", "joint_blocks.18.", "joint_blocks.19.", "joint_blocks.20.", "joint_blocks.21.", "joint_blocks.22.", "joint_blocks.23.", "joint_blocks.24.", "joint_blocks.25.", "joint_blocks.26.", "joint_blocks.27.", "joint_blocks.28.", "joint_blocks.29.", "joint_blocks.30.", "joint_blocks.31.", "joint_blocks.32.", "joint_blocks.33.", "joint_blocks.34.", "joint_blocks.35.", "joint_blocks.36.", "joint_blocks.37.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSD35_Large", "display_name": "ModelMergeSD35_Large", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeMochiPreview": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_frequencies.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t5_y_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t5_yproj.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.36.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.37.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.38.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.39.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.40.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.41.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.42.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.43.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.44.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.45.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.46.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.47.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_frequencies.", "t_embedder.", "t5_y_embedder.", "t5_yproj.", "blocks.0.", "blocks.1.", "blocks.2.", "blocks.3.", "blocks.4.", "blocks.5.", "blocks.6.", "blocks.7.", "blocks.8.", "blocks.9.", "blocks.10.", "blocks.11.", "blocks.12.", "blocks.13.", "blocks.14.", "blocks.15.", "blocks.16.", "blocks.17.", "blocks.18.", "blocks.19.", "blocks.20.", "blocks.21.", "blocks.22.", "blocks.23.", "blocks.24.", "blocks.25.", "blocks.26.", "blocks.27.", "blocks.28.", "blocks.29.", "blocks.30.", "blocks.31.", "blocks.32.", "blocks.33.", "blocks.34.", "blocks.35.", "blocks.36.", "blocks.37.", "blocks.38.", "blocks.39.", "blocks.40.", "blocks.41.", "blocks.42.", "blocks.43.", "blocks.44.", "blocks.45.", "blocks.46.", "blocks.47.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeMochiPreview", "display_name": "ModelMergeMochiPreview", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeLTXV": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "patchify_proj.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "adaln_single.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "caption_projection.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "scale_shift_table": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "proj_out.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "patchify_proj.", "adaln_single.", "caption_projection.", "transformer_blocks.0.", "transformer_blocks.1.", "transformer_blocks.2.", "transformer_blocks.3.", "transformer_blocks.4.", "transformer_blocks.5.", "transformer_blocks.6.", "transformer_blocks.7.", "transformer_blocks.8.", "transformer_blocks.9.", "transformer_blocks.10.", "transformer_blocks.11.", "transformer_blocks.12.", "transformer_blocks.13.", "transformer_blocks.14.", "transformer_blocks.15.", "transformer_blocks.16.", "transformer_blocks.17.", "transformer_blocks.18.", "transformer_blocks.19.", "transformer_blocks.20.", "transformer_blocks.21.", "transformer_blocks.22.", "transformer_blocks.23.", "transformer_blocks.24.", "transformer_blocks.25.", "transformer_blocks.26.", "transformer_blocks.27.", "scale_shift_table", "proj_out."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeLTXV", "display_name": "ModelMergeLTXV", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeCosmos7B": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "extra_pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "affline_norm.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embedder.", "extra_pos_embedder.", "x_embedder.", "t_embedder.", "affline_norm.", "blocks.block0.", "blocks.block1.", "blocks.block2.", "blocks.block3.", "blocks.block4.", "blocks.block5.", "blocks.block6.", "blocks.block7.", "blocks.block8.", "blocks.block9.", "blocks.block10.", "blocks.block11.", "blocks.block12.", "blocks.block13.", "blocks.block14.", "blocks.block15.", "blocks.block16.", "blocks.block17.", "blocks.block18.", "blocks.block19.", "blocks.block20.", "blocks.block21.", "blocks.block22.", "blocks.block23.", "blocks.block24.", "blocks.block25.", "blocks.block26.", "blocks.block27.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeCosmos7B", "display_name": "ModelMergeCosmos7B", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeCosmos14B": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "extra_pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "affline_norm.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embedder.", "extra_pos_embedder.", "x_embedder.", "t_embedder.", "affline_norm.", "blocks.block0.", "blocks.block1.", "blocks.block2.", "blocks.block3.", "blocks.block4.", "blocks.block5.", "blocks.block6.", "blocks.block7.", "blocks.block8.", "blocks.block9.", "blocks.block10.", "blocks.block11.", "blocks.block12.", "blocks.block13.", "blocks.block14.", "blocks.block15.", "blocks.block16.", "blocks.block17.", "blocks.block18.", "blocks.block19.", "blocks.block20.", "blocks.block21.", "blocks.block22.", "blocks.block23.", "blocks.block24.", "blocks.block25.", "blocks.block26.", "blocks.block27.", "blocks.block28.", "blocks.block29.", "blocks.block30.", "blocks.block31.", "blocks.block32.", "blocks.block33.", "blocks.block34.", "blocks.block35.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeCosmos14B", "display_name": "ModelMergeCosmos14B", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeWAN2_1": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "patch_embedding.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "time_embedding.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "time_projection.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "text_embedding.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "img_emb.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.36.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.37.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.38.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.39.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "head.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "patch_embedding.", "time_embedding.", "time_projection.", "text_embedding.", "img_emb.", "blocks.0.", "blocks.1.", "blocks.2.", "blocks.3.", "blocks.4.", "blocks.5.", "blocks.6.", "blocks.7.", "blocks.8.", "blocks.9.", "blocks.10.", "blocks.11.", "blocks.12.", "blocks.13.", "blocks.14.", "blocks.15.", "blocks.16.", "blocks.17.", "blocks.18.", "blocks.19.", "blocks.20.", "blocks.21.", "blocks.22.", "blocks.23.", "blocks.24.", "blocks.25.", "blocks.26.", "blocks.27.", "blocks.28.", "blocks.29.", "blocks.30.", "blocks.31.", "blocks.32.", "blocks.33.", "blocks.34.", "blocks.35.", "blocks.36.", "blocks.37.", "blocks.38.", "blocks.39.", "head."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeWAN2_1", "display_name": "ModelMergeWAN2_1", "description": "1.3B model has 30 blocks, 14B model has 40 blocks. Image to video model has the extra img_emb.", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeCosmosPredict2_2B": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedding_norm.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embedder.", "x_embedder.", "t_embedder.", "t_embedding_norm.", "blocks.0.", "blocks.1.", "blocks.2.", "blocks.3.", "blocks.4.", "blocks.5.", "blocks.6.", "blocks.7.", "blocks.8.", "blocks.9.", "blocks.10.", "blocks.11.", "blocks.12.", "blocks.13.", "blocks.14.", "blocks.15.", "blocks.16.", "blocks.17.", "blocks.18.", "blocks.19.", "blocks.20.", "blocks.21.", "blocks.22.", "blocks.23.", "blocks.24.", "blocks.25.", "blocks.26.", "blocks.27.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeCosmosPredict2_2B", "display_name": "ModelMergeCosmosPredict2_2B", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeCosmosPredict2_14B": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedding_norm.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embedder.", "x_embedder.", "t_embedder.", "t_embedding_norm.", "blocks.0.", "blocks.1.", "blocks.2.", "blocks.3.", "blocks.4.", "blocks.5.", "blocks.6.", "blocks.7.", "blocks.8.", "blocks.9.", "blocks.10.", "blocks.11.", "blocks.12.", "blocks.13.", "blocks.14.", "blocks.15.", "blocks.16.", "blocks.17.", "blocks.18.", "blocks.19.", "blocks.20.", "blocks.21.", "blocks.22.", "blocks.23.", "blocks.24.", "blocks.25.", "blocks.26.", "blocks.27.", "blocks.28.", "blocks.29.", "blocks.30.", "blocks.31.", "blocks.32.", "blocks.33.", "blocks.34.", "blocks.35.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeCosmosPredict2_14B", "display_name": "ModelMergeCosmosPredict2_14B", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeQwenImage": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embeds.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "img_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txt_norm.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txt_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "time_text_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.36.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.37.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.38.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.39.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.40.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.41.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.42.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.43.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.44.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.45.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.46.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.47.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.48.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.49.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.50.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.51.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.52.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.53.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.54.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.55.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.56.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.57.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.58.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.59.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "proj_out.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embeds.", "img_in.", "txt_norm.", "txt_in.", "time_text_embed.", "transformer_blocks.0.", "transformer_blocks.1.", "transformer_blocks.2.", "transformer_blocks.3.", "transformer_blocks.4.", "transformer_blocks.5.", "transformer_blocks.6.", "transformer_blocks.7.", "transformer_blocks.8.", "transformer_blocks.9.", "transformer_blocks.10.", "transformer_blocks.11.", "transformer_blocks.12.", "transformer_blocks.13.", "transformer_blocks.14.", "transformer_blocks.15.", "transformer_blocks.16.", "transformer_blocks.17.", "transformer_blocks.18.", "transformer_blocks.19.", "transformer_blocks.20.", "transformer_blocks.21.", "transformer_blocks.22.", "transformer_blocks.23.", "transformer_blocks.24.", "transformer_blocks.25.", "transformer_blocks.26.", "transformer_blocks.27.", "transformer_blocks.28.", "transformer_blocks.29.", "transformer_blocks.30.", "transformer_blocks.31.", "transformer_blocks.32.", "transformer_blocks.33.", "transformer_blocks.34.", "transformer_blocks.35.", "transformer_blocks.36.", "transformer_blocks.37.", "transformer_blocks.38.", "transformer_blocks.39.", "transformer_blocks.40.", "transformer_blocks.41.", "transformer_blocks.42.", "transformer_blocks.43.", "transformer_blocks.44.", "transformer_blocks.45.", "transformer_blocks.46.", "transformer_blocks.47.", "transformer_blocks.48.", "transformer_blocks.49.", "transformer_blocks.50.", "transformer_blocks.51.", "transformer_blocks.52.", "transformer_blocks.53.", "transformer_blocks.54.", "transformer_blocks.55.", "transformer_blocks.56.", "transformer_blocks.57.", "transformer_blocks.58.", "transformer_blocks.59.", "proj_out."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeQwenImage", "display_name": "ModelMergeQwenImage", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeKrea2": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "first.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "tmlp.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txtmlp.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "tproj.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txtfusion.layerwise_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txtfusion.layerwise_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txtfusion.projector.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txtfusion.refiner_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txtfusion.refiner_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "last.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "first.", "tmlp.", "txtmlp.", "tproj.", "txtfusion.layerwise_blocks.0.", "txtfusion.layerwise_blocks.1.", "txtfusion.projector.", "txtfusion.refiner_blocks.0.", "txtfusion.refiner_blocks.1.", "blocks.0.", "blocks.1.", "blocks.2.", "blocks.3.", "blocks.4.", "blocks.5.", "blocks.6.", "blocks.7.", "blocks.8.", "blocks.9.", "blocks.10.", "blocks.11.", "blocks.12.", "blocks.13.", "blocks.14.", "blocks.15.", "blocks.16.", "blocks.17.", "blocks.18.", "blocks.19.", "blocks.20.", "blocks.21.", "blocks.22.", "blocks.23.", "blocks.24.", "blocks.25.", "blocks.26.", "blocks.27.", "last."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeKrea2", "display_name": "ModelMergeKrea2", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "PerturbedAttentionGuidance": {"input": {"required": {"model": ["MODEL", {}], "scale": ["FLOAT", {"default": 3.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": 0.01}]}}, "input_order": {"required": ["model", "scale"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "PerturbedAttentionGuidance", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_pag", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AlignYourStepsScheduler": {"input": {"required": {"model_type": ["COMBO", {"multiselect": false, "options": ["SD1", "SDXL", "SVD"]}], "steps": ["INT", {"default": 10, "min": 1, "max": 10000}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model_type", "steps", "denoise"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "AlignYourStepsScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_align_your_steps", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["AYS scheduler"], "essentials_category": null, "has_intermediate_output": false}, "UNetSelfAttentionMultiply": {"input": {"required": {"model": ["MODEL", {}], "q": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "k": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "v": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "out": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "q", "k", "v", "out"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "UNetSelfAttentionMultiply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_attention_multiply", "category": "experimental/attention_experiments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "UNetCrossAttentionMultiply": {"input": {"required": {"model": ["MODEL", {}], "q": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "k": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "v": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "out": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "q", "k", "v", "out"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "UNetCrossAttentionMultiply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_attention_multiply", "category": "experimental/attention_experiments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPAttentionMultiply": {"input": {"required": {"clip": ["CLIP", {}], "q": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "k": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "v": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "out": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["clip", "q", "k", "v", "out"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPAttentionMultiply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_attention_multiply", "category": "experimental/attention_experiments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["clip attention scale", "text encoder attention"], "essentials_category": null, "has_intermediate_output": false}, "UNetTemporalAttentionMultiply": {"input": {"required": {"model": ["MODEL", {}], "self_structural": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "self_temporal": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "cross_structural": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "cross_temporal": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "self_structural", "self_temporal", "cross_structural", "cross_temporal"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "UNetTemporalAttentionMultiply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_attention_multiply", "category": "experimental/attention_experiments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerLCMUpscale": {"input": {"required": {"scale_ratio": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.1, "max": 20.0, "step": 0.01}], "scale_steps": ["INT", {"advanced": true, "default": -1, "min": -1, "max": 1000, "step": 1}], "upscale_method": ["COMBO", {"multiselect": false, "options": ["bislerp", "nearest-exact", "bilinear", "area", "bicubic"]}]}}, "input_order": {"required": ["scale_ratio", "scale_steps", "upscale_method"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerLCMUpscale", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_advanced_samplers", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerLCM": {"input": {"required": {"s_noise": ["FLOAT", {"tooltip": "Per-step noise multiplier at the first step (1.0 = match training).", "default": 1.0, "min": 0.0, "max": 64.0, "step": 0.01}], "s_noise_end": ["FLOAT", {"tooltip": "Per-step noise multiplier at the last step. Set equal to s_noise for a constant schedule.", "default": 1.0, "min": 0.0, "max": 64.0, "step": 0.01}], "noise_clip_std": ["FLOAT", {"tooltip": "Clamp per-step noise to +/- N*std. 0 disables.", "default": 0.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["s_noise", "s_noise_end", "noise_clip_std"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerLCM", "display_name": null, "description": "LCM sampler with tunable per-step noise. s_noise is a multiplier on the model's training noise scale", "python_module": "comfy_extras.nodes_advanced_samplers", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerEulerCFGpp": {"input": {"required": {"version": ["COMBO", {"advanced": true, "multiselect": false, "options": ["regular", "alternative"]}]}}, "input_order": {"required": ["version"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerEulerCFGpp", "display_name": "SamplerEulerCFG++", "description": "", "python_module": "comfy_extras.nodes_advanced_samplers", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WebcamCapture": {"input": {"required": {"image": ["WEBCAM", {}], "width": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "height": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "capture_on_queue": ["BOOLEAN", {"default": true}]}}, "input_order": {"required": ["image", "width", "height", "capture_on_queue"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "WebcamCapture", "display_name": "Webcam Capture", "description": "", "python_module": "comfy_extras.nodes_webcam", "category": "image", "output_node": false, "has_intermediate_output": false, "search_aliases": ["camera input", "live capture", "camera feed", "snapshot"], "essentials_category": "Basics"}, "EmptyLatentAudio": {"input": {"required": {"seconds": ["FLOAT", {"default": 47.6, "min": 1.0, "max": 1000.0, "step": 0.1}], "batch_size": ["INT", {"tooltip": "The number of latent images in the batch.", "default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["seconds", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyLatentAudio", "display_name": "Empty Latent Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "model/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": "Audio", "has_intermediate_output": false}, "VAEEncodeAudio": {"input": {"required": {"audio": ["AUDIO", {}], "vae": ["VAE", {}]}}, "input_order": {"required": ["audio", "vae"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "VAEEncodeAudio", "display_name": "VAE Encode Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "model/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["audio to latent"], "essentials_category": null, "has_intermediate_output": false}, "VAEDecodeAudio": {"input": {"required": {"samples": ["LATENT", {}], "vae": ["VAE", {}]}}, "input_order": {"required": ["samples", "vae"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "VAEDecodeAudio", "display_name": "VAE Decode Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "model/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["latent to audio"], "essentials_category": null, "has_intermediate_output": false}, "VAEDecodeAudioTiled": {"input": {"required": {"samples": ["LATENT", {}], "vae": ["VAE", {}], "tile_size": ["INT", {"default": 512, "min": 32, "max": 8192, "step": 8}], "overlap": ["INT", {"default": 64, "min": 0, "max": 1024, "step": 8}]}}, "input_order": {"required": ["samples", "vae", "tile_size", "overlap"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "VAEDecodeAudioTiled", "display_name": "VAE Decode Audio (Tiled)", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "model/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["latent to audio"], "essentials_category": null, "has_intermediate_output": false}, "SaveAudio": {"input": {"required": {"audio": ["AUDIO", {}], "filename_prefix": ["STRING", {"default": "audio/ComfyUI", "multiline": false}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["audio", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["audio"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveAudio", "display_name": "Save Audio (FLAC) (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": true, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export flac"], "essentials_category": "Audio", "has_intermediate_output": false}, "SaveAudioMP3": {"input": {"required": {"audio": ["AUDIO", {}], "filename_prefix": ["STRING", {"default": "audio/ComfyUI", "multiline": false}], "quality": ["COMBO", {"default": "V0", "multiselect": false, "options": ["V0", "128k", "320k"]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["audio", "filename_prefix", "quality"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["audio"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveAudioMP3", "display_name": "Save Audio (MP3) (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": true, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export mp3"], "essentials_category": "Audio", "has_intermediate_output": false}, "SaveAudioOpus": {"input": {"required": {"audio": ["AUDIO", {}], "filename_prefix": ["STRING", {"default": "audio/ComfyUI", "multiline": false}], "quality": ["COMBO", {"default": "128k", "multiselect": false, "options": ["64k", "96k", "128k", "192k", "320k"]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["audio", "filename_prefix", "quality"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["audio"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveAudioOpus", "display_name": "Save Audio (Opus) (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": true, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export opus"], "essentials_category": null, "has_intermediate_output": false}, "SaveAudioAdvanced": {"input": {"required": {"audio": ["AUDIO", {"tooltip": "The audio to save."}], "filename_prefix": ["STRING", {"tooltip": "The prefix for the file to save. May include formatting tokens such as %date:yyyy-MM-dd%.", "default": "audio/ComfyUI", "multiline": false}], "format": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The file format in which to save the audio.", "options": [{"key": "flac", "inputs": {"required": {}}}, {"key": "mp3", "inputs": {"required": {"quality": ["COMBO", {"default": "V0", "multiselect": false, "options": ["V0", "128k", "320k"]}]}}}, {"key": "opus", "inputs": {"required": {"quality": ["COMBO", {"default": "128k", "multiselect": false, "options": ["64k", "96k", "128k", "192k", "320k"]}]}}}]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["audio", "filename_prefix", "format"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["audio"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveAudioAdvanced", "display_name": "Save Audio (Advanced)", "description": "Saves the input audio to your ComfyUI output directory.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["save audio", "export audio", "output audio", "write audio", "flac", "mp3", "opus"], "essentials_category": null, "has_intermediate_output": false}, "LoadAudio": {"input": {"required": {"audio": ["COMBO", {"multiselect": false, "options": [], "audio_upload": true}]}}, "input_order": {"required": ["audio"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LoadAudio", "display_name": "Load Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["import audio", "open audio", "audio file"], "essentials_category": "Audio", "has_intermediate_output": false}, "PreviewAudio": {"input": {"required": {"audio": ["AUDIO", {}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["audio"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["audio"], "output_tooltips": [null], "output_matchtypes": null, "name": "PreviewAudio", "display_name": "Preview Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["play audio"], "essentials_category": null, "has_intermediate_output": false}, "ConditioningStableAudio": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "seconds_start": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1000.0, "step": 0.1}], "seconds_total": ["FLOAT", {"default": 47.0, "min": 0.0, "max": 1000.0, "step": 0.1}]}}, "input_order": {"required": ["positive", "negative", "seconds_start", "seconds_total"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ConditioningStableAudio", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_audio", "category": "model/conditioning/stable audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecordAudio": {"input": {"required": {"audio": ["AUDIO_RECORD", {}]}}, "input_order": {"required": ["audio"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecordAudio", "display_name": "Record Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["microphone input", "audio capture", "voice input"], "essentials_category": null, "has_intermediate_output": false}, "TrimAudioDuration": {"input": {"required": {"audio": ["AUDIO", {}], "start_index": ["FLOAT", {"tooltip": "Start time in seconds, can be negative to count from the end (supports sub-seconds).", "default": 0.0, "min": -18446744073709551615, "max": 18446744073709551615, "step": 0.01}], "duration": ["FLOAT", {"tooltip": "Duration in seconds", "default": 60.0, "min": 0.0, "step": 0.01}]}}, "input_order": {"required": ["audio", "start_index", "duration"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "TrimAudioDuration", "display_name": "Trim Audio Duration", "description": "Trim audio tensor into chosen time range.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["cut audio", "audio clip", "shorten audio"], "essentials_category": null, "has_intermediate_output": false}, "SplitAudioChannels": {"input": {"required": {"audio": ["AUDIO", {}]}}, "input_order": {"required": ["audio"]}, "is_input_list": false, "output": ["AUDIO", "AUDIO"], "output_is_list": [false, false], "output_name": ["left", "right"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SplitAudioChannels", "display_name": "Split Audio Channels", "description": "Separates the audio into left and right channels.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["stereo to mono"], "essentials_category": null, "has_intermediate_output": false}, "JoinAudioChannels": {"input": {"required": {"audio_left": ["AUDIO", {}], "audio_right": ["AUDIO", {}]}}, "input_order": {"required": ["audio_left", "audio_right"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["audio"], "output_tooltips": [null], "output_matchtypes": null, "name": "JoinAudioChannels", "display_name": "Join Audio Channels", "description": "Joins left and right mono audio channels into a stereo audio.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AudioConcat": {"input": {"required": {"audio1": ["AUDIO", {}], "audio2": ["AUDIO", {}], "direction": ["COMBO", {"tooltip": "Whether to append audio2 after or before audio1.", "default": "after", "multiselect": false, "options": ["after", "before"]}]}}, "input_order": {"required": ["audio1", "audio2", "direction"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioConcat", "display_name": "Concatenate Audio", "description": "Concatenates the audio1 to audio2 in the specified direction.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["join audio", "combine audio", "append audio"], "essentials_category": null, "has_intermediate_output": false}, "AudioMerge": {"input": {"required": {"audio1": ["AUDIO", {}], "audio2": ["AUDIO", {}], "merge_method": ["COMBO", {"tooltip": "The method used to combine the audio waveforms.", "multiselect": false, "options": ["add", "mean", "subtract", "multiply"]}]}}, "input_order": {"required": ["audio1", "audio2", "merge_method"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioMerge", "display_name": "Merge Audio", "description": "Combine two audio tracks by overlaying their waveforms.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["mix audio", "overlay audio", "layer audio"], "essentials_category": null, "has_intermediate_output": false}, "AudioAdjustVolume": {"input": {"required": {"audio": ["AUDIO", {}], "volume": ["INT", {"tooltip": "Volume adjustment in decibels (dB). 0 = no change, +6 = double, -6 = half, etc", "default": 1, "min": -100, "max": 100}]}}, "input_order": {"required": ["audio", "volume"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioAdjustVolume", "display_name": "Adjust Audio Volume", "description": "Adjust the volume of the audio by a specified amount in decibels (dB).", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["audio gain", "loudness", "audio level"], "essentials_category": null, "has_intermediate_output": false}, "EmptyAudio": {"input": {"required": {"duration": ["FLOAT", {"tooltip": "Duration of the empty audio clip in seconds", "default": 60.0, "min": 0.0, "max": 18446744073709551615, "step": 0.01}], "sample_rate": ["INT", {"tooltip": "Sample rate of the empty audio clip.", "advanced": true, "default": 44100, "min": 1, "max": 192000}], "channels": ["INT", {"tooltip": "Number of audio channels (1 for mono, 2 for stereo).", "advanced": true, "default": 2, "min": 1, "max": 2}]}}, "input_order": {"required": ["duration", "sample_rate", "channels"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyAudio", "display_name": "Empty Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["blank audio"], "essentials_category": null, "has_intermediate_output": false}, "AudioEqualizer3Band": {"input": {"required": {"audio": ["AUDIO", {}], "low_gain_dB": ["FLOAT", {"tooltip": "Gain for Low frequencies (Bass)", "default": 0.0, "min": -24.0, "max": 24.0, "step": 0.1}], "low_freq": ["INT", {"tooltip": "Cutoff frequency for Low shelf", "default": 100, "min": 20, "max": 500}], "mid_gain_dB": ["FLOAT", {"tooltip": "Gain for Mid frequencies", "default": 0.0, "min": -24.0, "max": 24.0, "step": 0.1}], "mid_freq": ["INT", {"tooltip": "Center frequency for Mids", "default": 1000, "min": 200, "max": 4000}], "mid_q": ["FLOAT", {"tooltip": "Q factor (bandwidth) for Mids", "default": 0.707, "min": 0.1, "max": 10.0, "step": 0.1}], "high_gain_dB": ["FLOAT", {"tooltip": "Gain for High frequencies (Treble)", "default": 0.0, "min": -24.0, "max": 24.0, "step": 0.1}], "high_freq": ["INT", {"tooltip": "Cutoff frequency for High shelf", "default": 5000, "min": 1000, "max": 15000}]}}, "input_order": {"required": ["audio", "low_gain_dB", "low_freq", "mid_gain_dB", "mid_freq", "mid_q", "high_gain_dB", "high_freq"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioEqualizer3Band", "display_name": "Audio Equalizer (3-Band)", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["eq", "bass boost", "treble boost", "equalizer"], "essentials_category": null, "has_intermediate_output": false}, "TripleCLIPLoader": {"input": {"required": {"clip_name1": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}], "clip_name2": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}], "clip_name3": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}]}}, "input_order": {"required": ["clip_name1", "clip_name2", "clip_name3"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "TripleCLIPLoader", "display_name": "Load CLIP (Triple)", "description": "Recipes:\nsd3: clip-l, clip-g, t5", "python_module": "comfy_extras.nodes_sd3", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptySD3LatentImage": {"input": {"required": {"width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptySD3LatentImage", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_sd3", "category": "model/latent/stable diffusion", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeSD3": {"input": {"required": {"clip": ["CLIP", {}], "clip_l": ["STRING", {"multiline": true, "dynamicPrompts": true}], "clip_g": ["STRING", {"multiline": true, "dynamicPrompts": true}], "t5xxl": ["STRING", {"multiline": true, "dynamicPrompts": true}], "empty_padding": ["COMBO", {"advanced": true, "multiselect": false, "options": ["none", "empty_prompt"]}]}}, "input_order": {"required": ["clip", "clip_l", "clip_g", "t5xxl", "empty_padding"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeSD3", "display_name": "CLIP Text Encode (SD3)", "description": "", "python_module": "comfy_extras.nodes_sd3", "category": "model/conditioning/stable diffusion", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["sd3 prompt"], "essentials_category": null, "has_intermediate_output": false}, "ControlNetApplySD3": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "control_net": ["CONTROL_NET", {}], "vae": ["VAE", {}], "image": ["IMAGE", {}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["positive", "negative", "control_net", "vae", "image", "strength", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ControlNetApplySD3", "display_name": "Apply Controlnet with VAE", "description": "", "python_module": "comfy_extras.nodes_sd3", "category": "model/conditioning/controlnet", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SkipLayerGuidanceSD3": {"input": {"required": {"model": ["MODEL", {}], "layers": ["STRING", {"advanced": true, "default": "7, 8, 9", "multiline": false}], "scale": ["FLOAT", {"default": 3.0, "min": 0.0, "max": 10.0, "step": 0.1}], "start_percent": ["FLOAT", {"advanced": true, "default": 0.01, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"advanced": true, "default": 0.15, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["model", "layers", "scale", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SkipLayerGuidanceSD3", "display_name": null, "description": "Generic version of SkipLayerGuidance node that can be used on every DiT model.", "python_module": "comfy_extras.nodes_sd3", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GITSScheduler": {"input": {"required": {"coeff": ["FLOAT", {"advanced": true, "default": 1.2, "min": 0.8, "max": 1.5, "step": 0.05}], "steps": ["INT", {"default": 10, "min": 2, "max": 1000}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["coeff", "steps", "denoise"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "GITSScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_gits", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SetUnionControlNetType": {"input": {"required": {"control_net": ["CONTROL_NET", {}], "type": ["COMBO", {"multiselect": false, "options": ["auto", "openpose", "depth", "hed/pidi/scribble/ted", "canny/lineart/anime_lineart/mlsd", "normal", "segment", "tile", "repaint"]}]}}, "input_order": {"required": ["control_net", "type"]}, "is_input_list": false, "output": ["CONTROL_NET"], "output_is_list": [false], "output_name": ["CONTROL_NET"], "output_tooltips": [null], "output_matchtypes": null, "name": "SetUnionControlNetType", "display_name": "Set Union ControlNet Type", "description": "", "python_module": "comfy_extras.nodes_controlnet", "category": "model/conditioning/controlnet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["set controlnet type", "union controlnet type"], "essentials_category": null, "has_intermediate_output": false}, "ControlNetInpaintingAliMamaApply": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "control_net": ["CONTROL_NET", {}], "vae": ["VAE", {}], "image": ["IMAGE", {}], "mask": ["MASK", {}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "start_percent": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["positive", "negative", "control_net", "vae", "image", "mask", "strength", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ControlNetInpaintingAliMamaApply", "display_name": "Apply ControlNet Inpainting (AliMama)", "description": "", "python_module": "comfy_extras.nodes_controlnet", "category": "model/conditioning/controlnet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["masked controlnet"], "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeHunyuanDiT": {"input": {"required": {"clip": ["CLIP", {}], "bert": ["STRING", {"multiline": true, "dynamicPrompts": true}], "mt5xl": ["STRING", {"multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["clip", "bert", "mt5xl"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeHunyuanDiT", "display_name": "CLIP Text Encode (Hunyuan Image)", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/conditioning/hunyuan image", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TextEncodeHunyuanVideo_ImageToVideo": {"input": {"required": {"clip": ["CLIP", {}], "clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "prompt": ["STRING", {"multiline": true, "dynamicPrompts": true}], "image_interleave": ["INT", {"tooltip": "How much the image influences things vs the text prompt. Higher number means more influence from the text prompt.", "advanced": true, "default": 2, "min": 1, "max": 512}]}}, "input_order": {"required": ["clip", "clip_vision_output", "prompt", "image_interleave"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeHunyuanVideo_ImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/conditioning/hunyuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyHunyuanLatentVideo": {"input": {"required": {"width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 25, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyHunyuanLatentVideo", "display_name": "Empty HunyuanVideo 1.0 Latent", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/latent/hunyuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyHunyuanVideo15Latent": {"input": {"required": {"width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 25, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyHunyuanVideo15Latent", "display_name": "Empty HunyuanVideo 1.5 Latent", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/latent/hunyuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HunyuanVideo15ImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 33, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"start_image": ["IMAGE", {}], "clip_vision_output": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["start_image", "clip_vision_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "HunyuanVideo15ImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/conditioning/hunyuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HunyuanVideo15SuperResolution": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "latent": ["LATENT", {}], "noise_augmentation": ["FLOAT", {"advanced": true, "default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01}]}, "optional": {"vae": ["VAE", {}], "start_image": ["IMAGE", {}], "clip_vision_output": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": ["positive", "negative", "latent", "noise_augmentation"], "optional": ["vae", "start_image", "clip_vision_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "HunyuanVideo15SuperResolution", "display_name": "Hunyuan Video 1.5 Super Resolution", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/conditioning/hunyuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HunyuanVideo15LatentUpscaleWithModel": {"input": {"required": {"model": ["LATENT_UPSCALE_MODEL", {}], "samples": ["LATENT", {}], "upscale_method": ["COMBO", {"default": "bilinear", "multiselect": false, "options": ["nearest-exact", "bilinear", "area", "bicubic", "bislerp"]}], "width": ["INT", {"default": 1280, "min": 0, "max": 16384, "step": 8}], "height": ["INT", {"default": 720, "min": 0, "max": 16384, "step": 8}], "crop": ["COMBO", {"multiselect": false, "options": ["disabled", "center"]}]}}, "input_order": {"required": ["model", "samples", "upscale_method", "width", "height", "crop"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "HunyuanVideo15LatentUpscaleWithModel", "display_name": "Hunyuan Video 15 Latent Upscale With Model", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/latent/hunyhuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LatentUpscaleModelLoader": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["LATENT_UPSCALE_MODEL"], "output_is_list": [false], "output_name": ["LATENT_UPSCALE_MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentUpscaleModelLoader", "display_name": "Load Latent Upscale Model", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HunyuanImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 53, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "guidance_type": ["COMBO", {"advanced": true, "multiselect": false, "options": ["v1 (concat)", "v2 (replace)", "custom"]}]}, "optional": {"start_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "vae", "width", "height", "length", "batch_size", "guidance_type"], "optional": ["start_image"]}, "is_input_list": false, "output": ["CONDITIONING", "LATENT"], "output_is_list": [false, false], "output_name": ["positive", "latent"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "HunyuanImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/conditioning/hunyuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyHunyuanImageLatent": {"input": {"required": {"width": ["INT", {"default": 2048, "min": 64, "max": 16384, "step": 32}], "height": ["INT", {"default": 2048, "min": 64, "max": 16384, "step": 32}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyHunyuanImageLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/latent/hunyuan image", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HunyuanRefinerLatent": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "latent": ["LATENT", {}], "noise_augmentation": ["FLOAT", {"advanced": true, "default": 0.1, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["positive", "negative", "latent", "noise_augmentation"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "HunyuanRefinerLatent", "display_name": "Hunyuan Latent Refiner", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/conditioning/hunyuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Epsilon Scaling": {"input": {"required": {"model": ["MODEL", {}], "scaling_factor": ["FLOAT", {"advanced": true, "default": 1.005, "min": 0.5, "max": 1.5, "step": 0.001, "display": "number"}]}}, "input_order": {"required": ["model", "scaling_factor"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "Epsilon Scaling", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_eps", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TemporalScoreRescaling": {"input": {"required": {"model": ["MODEL", {}], "tsr_k": ["FLOAT", {"tooltip": "Controls the rescaling strength.\nLower k produces more detailed results; higher k produces smoother results in image generation. Setting k = 1 disables rescaling.", "advanced": true, "default": 0.95, "min": 0.01, "max": 100.0, "step": 0.001, "display": "number"}], "tsr_sigma": ["FLOAT", {"tooltip": "Controls how early rescaling takes effect.\nLarger values take effect earlier.", "advanced": true, "default": 1.0, "min": 0.01, "max": 100.0, "step": 0.001, "display": "number"}]}}, "input_order": {"required": ["model", "tsr_k", "tsr_sigma"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["patched_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "TemporalScoreRescaling", "display_name": "TSR - Temporal Score Rescaling", "description": "[Post-CFG Function]\nTSR - Temporal Score Rescaling (2510.01184)\n\nRescaling the model's score or noise to steer the sampling diversity.\n", "python_module": "comfy_extras.nodes_eps", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeFlux": {"input": {"required": {"clip": ["CLIP", {}], "clip_l": ["STRING", {"multiline": true, "dynamicPrompts": true}], "t5xxl": ["STRING", {"multiline": true, "dynamicPrompts": true}], "guidance": ["FLOAT", {"default": 3.5, "min": 0.0, "max": 100.0, "step": 0.1}]}}, "input_order": {"required": ["clip", "clip_l", "t5xxl", "guidance"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeFlux", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_flux", "category": "model/conditioning/flux", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxGuidance": {"input": {"required": {"conditioning": ["CONDITIONING", {}], "guidance": ["FLOAT", {"default": 3.5, "min": 0.0, "max": 100.0, "step": 0.1}]}}, "input_order": {"required": ["conditioning", "guidance"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxGuidance", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_flux", "category": "model/conditioning/flux", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxDisableGuidance": {"input": {"required": {"conditioning": ["CONDITIONING", {}]}}, "input_order": {"required": ["conditioning"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxDisableGuidance", "display_name": null, "description": "This node completely disables the guidance embed on Flux and Flux like models", "python_module": "comfy_extras.nodes_flux", "category": "model/conditioning/flux", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxKontextImageScale": {"input": {"required": {"image": ["IMAGE", {}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxKontextImageScale", "display_name": null, "description": "This node resizes the image to one that is more optimal for flux kontext.", "python_module": "comfy_extras.nodes_flux", "category": "model/conditioning/flux", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxKontextMultiReferenceLatentMethod": {"input": {"required": {"conditioning": ["CONDITIONING", {}], "reference_latents_method": ["COMBO", {"advanced": true, "multiselect": false, "options": ["offset", "index", "uxo/uno", "index_timestep_zero"]}]}}, "input_order": {"required": ["conditioning", "reference_latents_method"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxKontextMultiReferenceLatentMethod", "display_name": "Edit Model Reference Method", "description": "", "python_module": "comfy_extras.nodes_flux", "category": "model/conditioning/flux", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyFlux2LatentImage": {"input": {"required": {"width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyFlux2LatentImage", "display_name": "Empty Flux 2 Latent", "description": "", "python_module": "comfy_extras.nodes_flux", "category": "model/latent/flux", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Flux2Scheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 4096}], "width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 1}], "height": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 1}]}}, "input_order": {"required": ["steps", "width", "height"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "Flux2Scheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_flux", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxKVCache": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to use KV Cache on."}]}}, "input_order": {"required": ["model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The patched model with KV Cache enabled."], "output_matchtypes": null, "name": "FluxKVCache", "display_name": "Flux KV Cache", "description": "Enables KV Cache optimization for reference images on Flux family models.", "python_module": "comfy_extras.nodes_flux", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LoraSave": {"input": {"required": {"filename_prefix": ["STRING", {"default": "loras/ComfyUI_extracted_lora", "multiline": false}], "rank": ["INT", {"advanced": true, "default": 8, "min": 1, "max": 4096, "step": 1}], "lora_type": ["COMBO", {"advanced": true, "multiselect": false, "options": ["standard", "full_diff"]}], "bias_diff": ["BOOLEAN", {"advanced": true, "default": true}]}, "optional": {"model_diff": ["MODEL", {"tooltip": "The ModelSubtract output to be converted to a lora."}], "text_encoder_diff": ["CLIP", {"tooltip": "The CLIPSubtract output to be converted to a lora."}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["filename_prefix", "rank", "lora_type", "bias_diff"], "optional": ["model_diff", "text_encoder_diff"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "LoraSave", "display_name": "Extract and Save Lora", "description": "", "python_module": "comfy_extras.nodes_lora_extract", "category": "experimental", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export lora"], "essentials_category": null, "has_intermediate_output": false}, "TorchCompileModel": {"input": {"required": {"model": ["MODEL", {}], "backend": ["COMBO", {"advanced": true, "multiselect": false, "options": ["inductor", "cudagraphs"]}]}}, "input_order": {"required": ["model", "backend"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "TorchCompileModel", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_torch_compile", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyMochiLatentVideo": {"input": {"required": {"width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 25, "min": 7, "max": 16384, "step": 6}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyMochiLatentVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_mochi", "category": "model/latent/mochi", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SkipLayerGuidanceDiT": {"input": {"required": {"model": ["MODEL", {}], "double_layers": ["STRING", {"advanced": true, "default": "7, 8, 9", "multiline": false}], "single_layers": ["STRING", {"advanced": true, "default": "7, 8, 9", "multiline": false}], "scale": ["FLOAT", {"default": 3.0, "min": 0.0, "max": 10.0, "step": 0.1}], "start_percent": ["FLOAT", {"advanced": true, "default": 0.01, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"advanced": true, "default": 0.15, "min": 0.0, "max": 1.0, "step": 0.001}], "rescaling_scale": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "double_layers", "single_layers", "scale", "start_percent", "end_percent", "rescaling_scale"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SkipLayerGuidanceDiT", "display_name": null, "description": "Generic version of SkipLayerGuidance node that can be used on every DiT model.", "python_module": "comfy_extras.nodes_slg", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SkipLayerGuidanceDiTSimple": {"input": {"required": {"model": ["MODEL", {}], "double_layers": ["STRING", {"advanced": true, "default": "7, 8, 9", "multiline": false}], "single_layers": ["STRING", {"advanced": true, "default": "7, 8, 9", "multiline": false}], "start_percent": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["model", "double_layers", "single_layers", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SkipLayerGuidanceDiTSimple", "display_name": null, "description": "Simple version of the SkipLayerGuidanceDiT node that only modifies the uncond pass.", "python_module": "comfy_extras.nodes_slg", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Mahiro": {"input": {"required": {"model": ["MODEL", {}]}}, "input_order": {"required": ["model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["patched_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "Mahiro", "display_name": "Positive-Biased Guidance", "description": "Modify the guidance to scale more on the 'direction' of the positive prompt rather than the difference between the negative prompt.", "python_module": "comfy_extras.nodes_mahiro", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["mahiro", "mahiro cfg", "similarity-adaptive guidance", "positive-biased cfg"], "essentials_category": null, "has_intermediate_output": false}, "LTXVLatentUpsampler": {"input": {"required": {"samples": ["LATENT", {}], "upscale_model": ["LATENT_UPSCALE_MODEL", {}], "vae": ["VAE", {}]}}, "input_order": {"required": ["samples", "upscale_model", "vae"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVLatentUpsampler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt_upsampler", "category": "model/latent/ltxv", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVAudioVAELoader": {"input": {"required": {"ckpt_name": ["COMBO", {"tooltip": "Audio VAE checkpoint to load.", "multiselect": false, "options": []}]}}, "input_order": {"required": ["ckpt_name"]}, "is_input_list": false, "output": ["VAE"], "output_is_list": [false], "output_name": ["Audio VAE"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVAudioVAELoader", "display_name": "Load LTXV Audio VAE", "description": "", "python_module": "comfy_extras.nodes_lt_audio", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVAudioVAEEncode": {"input": {"required": {"audio": ["AUDIO", {"tooltip": "The audio to be encoded."}], "audio_vae": ["VAE", {"display_name": "Audio VAE", "tooltip": "The Audio VAE model to use for encoding."}]}}, "input_order": {"required": ["audio", "audio_vae"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["Audio Latent"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVAudioVAEEncode", "display_name": "LTXV Audio VAE Encode", "description": "", "python_module": "comfy_extras.nodes_lt_audio", "category": "model/latent/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVAudioVAEDecode": {"input": {"required": {"samples": ["LATENT", {"tooltip": "The latent to be decoded."}], "audio_vae": ["VAE", {"display_name": "Audio VAE", "tooltip": "The Audio VAE model used for decoding the latent."}]}}, "input_order": {"required": ["samples", "audio_vae"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["Audio"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVAudioVAEDecode", "display_name": "LTXV Audio VAE Decode", "description": "", "python_module": "comfy_extras.nodes_lt_audio", "category": "model/latent/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVEmptyLatentAudio": {"input": {"required": {"frames_number": ["INT", {"tooltip": "Number of frames.", "default": 97, "min": 1, "max": 1000, "step": 1, "display": "number"}], "frame_rate": ["INT", {"tooltip": "Number of frames per second.", "default": 25, "min": 1, "max": 1000, "step": 1, "display": "number"}], "batch_size": ["INT", {"tooltip": "The number of latent audio samples in the batch.", "default": 1, "min": 1, "max": 4096, "display": "number"}], "audio_vae": ["VAE", {"display_name": "Audio VAE", "tooltip": "The Audio VAE model to get configuration from."}]}}, "input_order": {"required": ["frames_number", "frame_rate", "batch_size", "audio_vae"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["Latent"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVEmptyLatentAudio", "display_name": "LTXV Empty Latent Audio", "description": "", "python_module": "comfy_extras.nodes_lt_audio", "category": "model/latent/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXAVTextEncoderLoader": {"input": {"required": {"text_encoder": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}], "ckpt_name": ["COMBO", {"multiselect": false, "options": []}], "device": ["COMBO", {"advanced": true, "multiselect": false, "options": ["default", "cpu"]}]}}, "input_order": {"required": ["text_encoder", "ckpt_name", "device"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXAVTextEncoderLoader", "display_name": "Load LTXV Audio Text Encoder", "description": "Recipes:\nltxav: gemma 3 12B", "python_module": "comfy_extras.nodes_lt_audio", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyLTXVLatentVideo": {"input": {"required": {"width": ["INT", {"default": 768, "min": 64, "max": 16384, "step": 32}], "height": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 32}], "length": ["INT", {"default": 97, "min": 1, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyLTXVLatentVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/latent/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVImgToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "image": ["IMAGE", {}], "width": ["INT", {"default": 768, "min": 64, "max": 16384, "step": 32}], "height": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 32}], "length": ["INT", {"default": 97, "min": 9, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0}]}}, "input_order": {"required": ["positive", "negative", "vae", "image", "width", "height", "length", "batch_size", "strength"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "LTXVImgToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVImgToVideoInplace": {"input": {"required": {"vae": ["VAE", {}], "image": ["IMAGE", {}], "latent": ["LATENT", {}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0}], "bypass": ["BOOLEAN", {"tooltip": "Bypass the conditioning.", "default": false}]}}, "input_order": {"required": ["vae", "image", "latent", "strength", "bypass"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["latent"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVImgToVideoInplace", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ModelSamplingLTXV": {"input": {"required": {"model": ["MODEL", {}], "max_shift": ["FLOAT", {"default": 2.05, "min": 0.0, "max": 100.0, "step": 0.01}], "base_shift": ["FLOAT", {"default": 0.95, "min": 0.0, "max": 100.0, "step": 0.01}]}, "optional": {"latent": ["LATENT", {}]}}, "input_order": {"required": ["model", "max_shift", "base_shift"], "optional": ["latent"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "ModelSamplingLTXV", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/patch/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVConditioning": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "frame_rate": ["FLOAT", {"default": 25.0, "min": 0.0, "max": 1000.0, "step": 0.01}]}}, "input_order": {"required": ["positive", "negative", "frame_rate"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LTXVConditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "max_shift": ["FLOAT", {"default": 2.05, "min": 0.0, "max": 100.0, "step": 0.01}], "base_shift": ["FLOAT", {"default": 0.95, "min": 0.0, "max": 100.0, "step": 0.01}], "stretch": ["BOOLEAN", {"tooltip": "Stretch the sigmas to be in the range [terminal, 1].", "advanced": true, "default": true}], "terminal": ["FLOAT", {"tooltip": "The terminal value of the sigmas after stretching.", "advanced": true, "default": 0.1, "min": 0.0, "max": 0.99, "step": 0.01}]}, "optional": {"latent": ["LATENT", {}]}}, "input_order": {"required": ["steps", "max_shift", "base_shift", "stretch", "terminal"], "optional": ["latent"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GetICLoRAParameters": {"input": {"required": {"iclora_model": ["MODEL", {"tooltip": "Direct output from a LoRA Loader for the specific IC-LoRA from which to extract the metadata."}]}}, "input_order": {"required": ["iclora_model"]}, "is_input_list": false, "output": ["IC_LORA_PARAMETERS"], "output_is_list": [false], "output_name": ["iclora_parameters"], "output_tooltips": ["IC-LoRA parameters extracted from the LoRA metadata (eg. reference_downscale_factor). Connect to LTXVAddGuide if the LoRA requires special handling of the guides."], "output_matchtypes": null, "name": "GetICLoRAParameters", "display_name": "Get IC-LoRA Parameters", "description": "Extracts IC-LoRA parameters from the safetensors metadata of a LoRA-loaded model and outputs them for LTXVAddGuide (eg. reference_downscale_factor).", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["ic-lora", "ic lora", "iclora", "downscale factor", "reference downscale"], "essentials_category": null, "has_intermediate_output": false}, "LTXVAddGuide": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "latent": ["LATENT", {}], "image": ["IMAGE", {"tooltip": "Image or video to condition the latent video on. Must be 8*n + 1 frames. If the video is not 8*n + 1 frames, it will be cropped to the nearest 8*n + 1 frames."}], "frame_idx": ["INT", {"tooltip": "Frame index to start the conditioning at. For single-frame images or videos with 1-8 frames, any frame_idx value is acceptable. For videos with 9+ frames, frame_idx must be divisible by 8, otherwise it will be rounded down to the nearest multiple of 8. Negative values are counted from the end of the video.", "default": 0, "min": -9999, "max": 9999}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}, "optional": {"attention_mask": ["MASK", {"tooltip": "Optional pixel-space spatial mask. Controls per-region conditioning influence via self-attention, multiplied by strength."}], "iclora_parameters": ["IC_LORA_PARAMETERS", {"tooltip": "Optional IC-LoRA parameters from a Get IC-LoRA Parameters node. Used for adjusting guide processing as required by certain IC-LoRAs (eg. those with a reference_downscale_factor > 1). When chained, each LTXVAddGuide uses only the parameters connected to it."}]}}, "input_order": {"required": ["positive", "negative", "vae", "latent", "image", "frame_idx", "strength"], "optional": ["attention_mask", "iclora_parameters"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "LTXVAddGuide", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVPreprocess": {"input": {"required": {"image": ["IMAGE", {}], "img_compression": ["INT", {"tooltip": "Amount of compression to apply on image.", "default": 35, "min": 0, "max": 100}]}}, "input_order": {"required": ["image", "img_compression"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["output_image"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVPreprocess", "display_name": "LTXV Preprocess", "description": "", "python_module": "comfy_extras.nodes_lt", "category": "video/preprocessors", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVCropGuides": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "latent": ["LATENT", {}]}}, "input_order": {"required": ["positive", "negative", "latent"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "LTXVCropGuides", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVConcatAVLatent": {"input": {"required": {"video_latent": ["LATENT", {}], "audio_latent": ["LATENT", {}]}}, "input_order": {"required": ["video_latent", "audio_latent"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["latent"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVConcatAVLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/latent/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVSeparateAVLatent": {"input": {"required": {"av_latent": ["LATENT", {}]}}, "input_order": {"required": ["av_latent"]}, "is_input_list": false, "output": ["LATENT", "LATENT"], "output_is_list": [false, false], "output_name": ["video_latent", "audio_latent"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LTXVSeparateAVLatent", "display_name": null, "description": "LTXV Separate AV Latent", "python_module": "comfy_extras.nodes_lt", "category": "model/latent/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVReferenceAudio": {"input": {"required": {"model": ["MODEL", {}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "reference_audio": ["AUDIO", {"tooltip": "Reference audio clip whose speaker identity to transfer. ~5 seconds recommended (training duration). Shorter or longer clips may degrade voice identity transfer."}], "audio_vae": ["VAE", {"display_name": "Audio VAE", "tooltip": "LTXV Audio VAE for encoding."}], "identity_guidance_scale": ["FLOAT", {"tooltip": "Strength of identity guidance. Runs an extra forward pass without reference each step to amplify speaker identity. Set to 0 to disable (no extra pass).", "default": 3.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": 0.01}], "start_percent": ["FLOAT", {"tooltip": "Start of the sigma range where identity guidance is active.", "advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"tooltip": "End of the sigma range where identity guidance is active.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["model", "positive", "negative", "reference_audio", "audio_vae", "identity_guidance_scale", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["MODEL", "CONDITIONING", "CONDITIONING"], "output_is_list": [false, false, false], "output_name": ["MODEL", "positive", "negative"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "LTXVReferenceAudio", "display_name": "LTXV Reference Audio (ID-LoRA)", "description": "Set reference audio for ID-LoRA speaker identity transfer. Encodes a reference audio clip into the conditioning and optionally patches the model with identity guidance (extra forward pass without reference, amplifying the speaker identity effect).", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CreateHookLora": {"input": {"required": {"lora_name": [[]], "strength_model": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}], "strength_clip": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}]}, "optional": {"prev_hooks": ["HOOKS"]}}, "input_order": {"required": ["lora_name", "strength_model", "strength_clip"], "optional": ["prev_hooks"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CreateHookLora", "display_name": "Create Hook LoRA", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/create", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "CreateHookLoraModelOnly": {"input": {"required": {"lora_name": [[]], "strength_model": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}]}, "optional": {"prev_hooks": ["HOOKS"]}}, "input_order": {"required": ["lora_name", "strength_model"], "optional": ["prev_hooks"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CreateHookLoraModelOnly", "display_name": "Create Hook LoRA (MO)", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/create", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "CreateHookModelAsLora": {"input": {"required": {"ckpt_name": [[]], "strength_model": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}], "strength_clip": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}]}, "optional": {"prev_hooks": ["HOOKS"]}}, "input_order": {"required": ["ckpt_name", "strength_model", "strength_clip"], "optional": ["prev_hooks"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CreateHookModelAsLora", "display_name": "Create Hook Model as LoRA", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/create", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "CreateHookModelAsLoraModelOnly": {"input": {"required": {"ckpt_name": [[]], "strength_model": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}]}, "optional": {"prev_hooks": ["HOOKS"]}}, "input_order": {"required": ["ckpt_name", "strength_model"], "optional": ["prev_hooks"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CreateHookModelAsLoraModelOnly", "display_name": "Create Hook Model as LoRA (MO)", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/create", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "SetHookKeyframes": {"input": {"required": {"hooks": ["HOOKS"]}, "optional": {"hook_kf": ["HOOK_KEYFRAMES"]}}, "input_order": {"required": ["hooks"], "optional": ["hook_kf"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "SetHookKeyframes", "display_name": "Set Hook Keyframes", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/scheduling", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "CreateHookKeyframe": {"input": {"required": {"strength_mult": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}]}, "optional": {"prev_hook_kf": ["HOOK_KEYFRAMES"]}}, "input_order": {"required": ["strength_mult", "start_percent"], "optional": ["prev_hook_kf"]}, "is_input_list": false, "output": ["HOOK_KEYFRAMES"], "output_is_list": [false], "output_name": ["HOOK_KF"], "name": "CreateHookKeyframe", "display_name": "Create Hook Keyframe", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/scheduling", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["hook scheduling", "strength animation", "timed hook"]}, "CreateHookKeyframesInterpolated": {"input": {"required": {"strength_start": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.001}], "strength_end": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.001}], "interpolation": [["linear", "ease_in", "ease_out", "ease_in_out"]], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "keyframes_count": ["INT", {"default": 5, "min": 2, "max": 100, "step": 1}], "print_keyframes": ["BOOLEAN", {"default": false, "advanced": true}]}, "optional": {"prev_hook_kf": ["HOOK_KEYFRAMES"]}}, "input_order": {"required": ["strength_start", "strength_end", "interpolation", "start_percent", "end_percent", "keyframes_count", "print_keyframes"], "optional": ["prev_hook_kf"]}, "is_input_list": false, "output": ["HOOK_KEYFRAMES"], "output_is_list": [false], "output_name": ["HOOK_KF"], "name": "CreateHookKeyframesInterpolated", "display_name": "Create Hook Keyframes Interp.", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/scheduling", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["ease hook strength", "smooth hook transition", "interpolate keyframes"]}, "CreateHookKeyframesFromFloats": {"input": {"required": {"floats_strength": ["FLOATS", {"default": -1, "min": -1, "step": 0.001, "forceInput": true}], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "print_keyframes": ["BOOLEAN", {"default": false, "advanced": true}]}, "optional": {"prev_hook_kf": ["HOOK_KEYFRAMES"]}}, "input_order": {"required": ["floats_strength", "start_percent", "end_percent", "print_keyframes"], "optional": ["prev_hook_kf"]}, "is_input_list": false, "output": ["HOOK_KEYFRAMES"], "output_is_list": [false], "output_name": ["HOOK_KF"], "name": "CreateHookKeyframesFromFloats", "display_name": "Create Hook Keyframes From Floats", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/scheduling", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["batch keyframes", "strength list to keyframes"]}, "CombineHooks2": {"input": {"required": {}, "optional": {"hooks_A": ["HOOKS"], "hooks_B": ["HOOKS"]}}, "input_order": {"required": [], "optional": ["hooks_A", "hooks_B"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CombineHooks2", "display_name": "Combine Hooks [2]", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/combine", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["merge hooks"]}, "CombineHooks4": {"input": {"required": {}, "optional": {"hooks_A": ["HOOKS"], "hooks_B": ["HOOKS"], "hooks_C": ["HOOKS"], "hooks_D": ["HOOKS"]}}, "input_order": {"required": [], "optional": ["hooks_A", "hooks_B", "hooks_C", "hooks_D"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CombineHooks4", "display_name": "Combine Hooks [4]", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/combine", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "CombineHooks8": {"input": {"required": {}, "optional": {"hooks_A": ["HOOKS"], "hooks_B": ["HOOKS"], "hooks_C": ["HOOKS"], "hooks_D": ["HOOKS"], "hooks_E": ["HOOKS"], "hooks_F": ["HOOKS"], "hooks_G": ["HOOKS"], "hooks_H": ["HOOKS"]}}, "input_order": {"required": [], "optional": ["hooks_A", "hooks_B", "hooks_C", "hooks_D", "hooks_E", "hooks_F", "hooks_G", "hooks_H"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CombineHooks8", "display_name": "Combine Hooks [8]", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/combine", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "ConditioningSetProperties": {"input": {"required": {"cond_NEW": ["CONDITIONING"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "set_cond_area": [["default", "mask bounds"]]}, "optional": {"mask": ["MASK"], "hooks": ["HOOKS"], "timesteps": ["TIMESTEPS_RANGE"]}}, "input_order": {"required": ["cond_NEW", "strength", "set_cond_area"], "optional": ["mask", "hooks", "timesteps"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetProperties", "display_name": "Cond Set Props", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond single", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "ConditioningSetPropertiesAndCombine": {"input": {"required": {"cond": ["CONDITIONING"], "cond_NEW": ["CONDITIONING"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "set_cond_area": [["default", "mask bounds"]]}, "optional": {"mask": ["MASK"], "hooks": ["HOOKS"], "timesteps": ["TIMESTEPS_RANGE"]}}, "input_order": {"required": ["cond", "cond_NEW", "strength", "set_cond_area"], "optional": ["mask", "hooks", "timesteps"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetPropertiesAndCombine", "display_name": "Cond Set Props Combine", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond single", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "PairConditioningSetProperties": {"input": {"required": {"positive_NEW": ["CONDITIONING"], "negative_NEW": ["CONDITIONING"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "set_cond_area": [["default", "mask bounds"]]}, "optional": {"mask": ["MASK"], "hooks": ["HOOKS"], "timesteps": ["TIMESTEPS_RANGE"]}}, "input_order": {"required": ["positive_NEW", "negative_NEW", "strength", "set_cond_area"], "optional": ["mask", "hooks", "timesteps"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "name": "PairConditioningSetProperties", "display_name": "Cond Pair Set Props", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond pair", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "PairConditioningSetPropertiesAndCombine": {"input": {"required": {"positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "positive_NEW": ["CONDITIONING"], "negative_NEW": ["CONDITIONING"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "set_cond_area": [["default", "mask bounds"]]}, "optional": {"mask": ["MASK"], "hooks": ["HOOKS"], "timesteps": ["TIMESTEPS_RANGE"]}}, "input_order": {"required": ["positive", "negative", "positive_NEW", "negative_NEW", "strength", "set_cond_area"], "optional": ["mask", "hooks", "timesteps"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "name": "PairConditioningSetPropertiesAndCombine", "display_name": "Cond Pair Set Props Combine", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond pair", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "ConditioningSetDefaultCombine": {"input": {"required": {"cond": ["CONDITIONING"], "cond_DEFAULT": ["CONDITIONING"]}, "optional": {"hooks": ["HOOKS"]}}, "input_order": {"required": ["cond", "cond_DEFAULT"], "optional": ["hooks"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetDefaultCombine", "display_name": "Cond Set Default Combine", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond single", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "PairConditioningSetDefaultCombine": {"input": {"required": {"positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "positive_DEFAULT": ["CONDITIONING"], "negative_DEFAULT": ["CONDITIONING"]}, "optional": {"hooks": ["HOOKS"]}}, "input_order": {"required": ["positive", "negative", "positive_DEFAULT", "negative_DEFAULT"], "optional": ["hooks"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "name": "PairConditioningSetDefaultCombine", "display_name": "Cond Pair Set Default Combine", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond pair", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "PairConditioningCombine": {"input": {"required": {"positive_A": ["CONDITIONING"], "negative_A": ["CONDITIONING"], "positive_B": ["CONDITIONING"], "negative_B": ["CONDITIONING"]}}, "input_order": {"required": ["positive_A", "negative_A", "positive_B", "negative_B"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "name": "PairConditioningCombine", "display_name": "Cond Pair Combine", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond pair", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "SetClipHooks": {"input": {"required": {"clip": ["CLIP"], "apply_to_conds": ["BOOLEAN", {"default": true, "advanced": true}], "schedule_clip": ["BOOLEAN", {"default": false, "advanced": true}]}, "optional": {"hooks": ["HOOKS"]}}, "input_order": {"required": ["clip", "apply_to_conds", "schedule_clip"], "optional": ["hooks"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "SetClipHooks", "display_name": "Set CLIP Hooks", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/clip", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "ConditioningTimestepsRange": {"input": {"required": {"start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["start_percent", "end_percent"]}, "is_input_list": false, "output": ["TIMESTEPS_RANGE", "TIMESTEPS_RANGE", "TIMESTEPS_RANGE"], "output_is_list": [false, false, false], "output_name": ["TIMESTEPS_RANGE", "BEFORE_RANGE", "AFTER_RANGE"], "name": "ConditioningTimestepsRange", "display_name": "Timesteps Range", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["prompt scheduling", "timestep segments", "conditioning phases"]}, "MultiGPU_WorkUnits": {"input": {"required": {"model": ["MODEL", {}], "max_gpus": ["INT", {"default": 2, "min": 1, "step": 1}]}}, "input_order": {"required": ["model", "max_gpus"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "MultiGPU_WorkUnits", "display_name": "MultiGPU CFG Split", "description": "Prepares model to have sampling accelerated via splitting work units.\n\nShould be placed after nodes that modify the model object itself, such as compile or attention-switch nodes.\n\nOther than those exceptions, this node can be placed in any order.", "python_module": "comfy_extras.nodes_multigpu", "category": "advanced/multigpu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SelectModelDevice": {"input": {"required": {"model": ["MODEL", {}], "device": ["COMBO", {"multiselect": false, "options": ["default", "cpu"]}]}}, "input_order": {"required": ["model", "device"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SelectModelDevice", "display_name": "Select Model Device", "description": "Place the diffusion model on a specific device (default / cpu / gpu:N).\n\n- \"default\" restores the device assigned by the loader (even after a\n prior Select Model Device call).\n- \"cpu\" pins both the load and offload device to CPU.\n- \"gpu:N\" pins the load device to the Nth available GPU; the offload\n device is restored to the loader's original choice.\n\nWhen the requested device differs from the device the input model is\nalready on, a fresh model is spawned via the loader's reload factory\n(cached_patcher_init) so the new patcher owns independent weights on\nthe new device. Loaders that don't support multigpu (no factory) will\ncause the node to pass through unchanged with a warning.\n\nIf the workflow already has MultiGPU CFG Split applied and the chosen\nGPU collides with one of the existing multigpu clones, that clone is\ndropped so two patchers don't end up bound to the same device.\n\nWhen the selected device does not exist on the current machine\n(e.g. a workflow built on a 2-GPU box opened on a 1-GPU box),\nthe node passes the model through unchanged and logs a message\ninstead of failing.\n\nNOTE: Placing Select Model Device *after* a node that has already\nconsumed the same model (e.g. a KSampler that ran on this model on\nthe original device) is not recommended -- any state the prior\nconsumer mutated on the original model will be observed when the\nselected device matches the original (fast path). Place Select Model\nDevice before any consumer of the model.", "python_module": "comfy_extras.nodes_multigpu", "category": "advanced/multigpu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SelectCLIPDevice": {"input": {"required": {"clip": ["CLIP", {}], "device": ["COMBO", {"multiselect": false, "options": ["default", "cpu"]}]}}, "input_order": {"required": ["clip", "device"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "SelectCLIPDevice", "display_name": "Select CLIP Device", "description": "Place the CLIP text encoder on a specific device (default / cpu / gpu:N).\n\n- \"default\" restores the device assigned by the loader.\n- \"cpu\" pins both the load and offload device to CPU.\n- \"gpu:N\" pins the load device to the Nth available GPU.\n\nWhen the selected device does not exist on the current machine\n(e.g. a workflow built on a 2-GPU box opened on a 1-GPU box),\nthe node passes the CLIP through unchanged and logs a message\ninstead of failing.", "python_module": "comfy_extras.nodes_multigpu", "category": "advanced/multigpu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SelectVAEDevice": {"input": {"required": {"vae": ["VAE", {}], "device": ["COMBO", {"multiselect": false, "options": ["default"]}]}}, "input_order": {"required": ["vae", "device"]}, "is_input_list": false, "output": ["VAE"], "output_is_list": [false], "output_name": ["VAE"], "output_tooltips": [null], "output_matchtypes": null, "name": "SelectVAEDevice", "display_name": "Select VAE Device", "description": "Place the VAE on a specific device (default / gpu:N).\n\n- \"default\" restores the device assigned by the loader.\n- \"gpu:N\" pins the load device to the Nth available GPU; the offload\n device is set to the standard VAE offload device.\n\nCPU is intentionally not exposed in the UI for the VAE; if a workflow\nsupplies \"cpu\" anyway (e.g. opened from another machine), the request\nis dropped with a log message and the VAE is passed through unchanged.\n\nWhen the selected device does not exist on the current machine\n(e.g. a workflow built on a 2-GPU box opened on a 1-GPU box),\nthe node passes the VAE through unchanged and logs a message\ninstead of failing.", "python_module": "comfy_extras.nodes_multigpu", "category": "advanced/multigpu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Load3D": {"input": {"required": {"model_file": ["COMBO", {"multiselect": false, "options": ["none"], "file_upload": true}], "image": ["LOAD_3D", {}], "width": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}], "height": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}]}}, "input_order": {"required": ["model_file", "image", "width", "height"]}, "is_input_list": false, "output": ["IMAGE", "MASK", "STRING", "IMAGE", "LOAD3D_CAMERA", "VIDEO", "FILE_3D", "LOAD3D_MODEL_INFO"], "output_is_list": [false, false, false, false, false, false, false, false], "output_name": ["image", "mask", "mesh_path", "normal", "camera_info", "recording_video", "model_3d", "model_3d_info"], "output_tooltips": [null, null, null, null, null, null, null, null], "output_matchtypes": null, "name": "Load3D", "display_name": "Load 3D & Animation", "description": "", "python_module": "comfy_extras.nodes_load_3d", "category": "3d", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": "Basics", "has_intermediate_output": false}, "Load3DAdvanced": {"input": {"required": {"model_file": ["COMBO", {"multiselect": false, "options": ["none"], "file_upload": true}], "viewport_state": ["LOAD_3D", {}], "width": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}], "height": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}]}}, "input_order": {"required": ["model_file", "viewport_state", "width", "height"]}, "is_input_list": false, "output": ["FILE_3D", "LOAD3D_MODEL_INFO", "LOAD3D_CAMERA", "INT", "INT"], "output_is_list": [false, false, false, false, false], "output_name": ["model_3d", "model_3d_info", "camera_info", "width", "height"], "output_tooltips": [null, null, null, null, null], "output_matchtypes": null, "name": "Load3DAdvanced", "display_name": "Load 3D (Advanced)", "description": "", "python_module": "comfy_extras.nodes_load_3d", "category": "3d", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["load mesh", "load gltf", "load glb", "load obj", "load fbx", "load stl"], "essentials_category": null, "has_intermediate_output": false}, "Preview3D": {"input": {"required": {"model_file": ["STRING,FILE_3D_GLB,FILE_3D_GLTF,FILE_3D_FBX,FILE_3D_OBJ,FILE_3D_STL,FILE_3D_USDZ,FILE_3D", {"default": "", "widgetType": "STRING", "multiline": false, "tooltip": "3D model file or path string"}]}, "optional": {"camera_info": ["LOAD3D_CAMERA", {"advanced": true}], "bg_image": ["IMAGE", {"advanced": true}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model_file"], "optional": ["camera_info", "bg_image"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "Preview3D", "display_name": "Preview 3D & Animation", "description": "", "python_module": "comfy_extras.nodes_load_3d", "category": "3d", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["view mesh", "3d viewer"], "essentials_category": null, "has_intermediate_output": false}, "Preview3DAdvanced": {"input": {"required": {"model_3d": ["FILE_3D_GLB,FILE_3D_GLTF,FILE_3D_FBX,FILE_3D_OBJ,FILE_3D_STL,FILE_3D_USDZ,FILE_3D", {"tooltip": "3D model file from an upstream 3D node."}], "viewport_state": ["LOAD_3D", {}], "width": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}], "height": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}]}, "optional": {"model_3d_info": ["LOAD3D_MODEL_INFO", {"advanced": true}], "camera_info": ["LOAD3D_CAMERA", {"advanced": true}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model_3d", "viewport_state", "width", "height"], "optional": ["model_3d_info", "camera_info"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["FILE_3D", "LOAD3D_MODEL_INFO", "LOAD3D_CAMERA", "INT", "INT"], "output_is_list": [false, false, false, false, false], "output_name": ["model_3d", "model_3d_info", "camera_info", "width", "height"], "output_tooltips": [null, null, null, null, null], "output_matchtypes": null, "name": "Preview3DAdvanced", "display_name": "Preview 3D (Advanced)", "description": "", "python_module": "comfy_extras.nodes_load_3d", "category": "3d", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["preview 3d", "3d viewer", "view mesh", "frame 3d", "3d camera output"], "essentials_category": null, "has_intermediate_output": false}, "PreviewGaussianSplat": {"input": {"required": {"model_3d": ["FILE_3D_SPLAT_ANY,FILE_3D_PLY,FILE_3D_SPLAT,FILE_3D_SPZ,FILE_3D_KSPLAT", {"tooltip": "A gaussian splat 3D file."}], "viewport_state": ["LOAD_3D", {}], "width": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}], "height": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}]}, "optional": {"model_3d_info": ["LOAD3D_MODEL_INFO", {"advanced": true}], "camera_info": ["LOAD3D_CAMERA", {"advanced": true}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model_3d", "viewport_state", "width", "height"], "optional": ["model_3d_info", "camera_info"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["FILE_3D_SPLAT_ANY", "LOAD3D_MODEL_INFO", "LOAD3D_CAMERA", "INT", "INT"], "output_is_list": [false, false, false, false, false], "output_name": ["model_3d", "model_3d_info", "camera_info", "width", "height"], "output_tooltips": [null, null, null, null, null], "output_matchtypes": null, "name": "PreviewGaussianSplat", "display_name": "Preview Splat", "description": "", "python_module": "comfy_extras.nodes_load_3d", "category": "3d", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["view splat", "view gaussian", "view gaussian splat", "preview gaussian", "preview gaussian splat", "view 3dgs", "preview 3dgs", "preview ply", "preview spz", "preview splat", "preview ksplat"], "essentials_category": null, "has_intermediate_output": false}, "PreviewPointCloud": {"input": {"required": {"model_3d": ["FILE_3D_POINT_CLOUD_ANY,FILE_3D_PLY", {"tooltip": "Point cloud file (.ply)"}], "viewport_state": ["LOAD_3D", {}], "width": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}], "height": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}]}, "optional": {"model_3d_info": ["LOAD3D_MODEL_INFO", {"advanced": true}], "camera_info": ["LOAD3D_CAMERA", {"advanced": true}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model_3d", "viewport_state", "width", "height"], "optional": ["model_3d_info", "camera_info"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["FILE_3D_POINT_CLOUD_ANY", "LOAD3D_MODEL_INFO", "LOAD3D_CAMERA", "INT", "INT"], "output_is_list": [false, false, false, false, false], "output_name": ["model_3d", "model_3d_info", "camera_info", "width", "height"], "output_tooltips": [null, null, null, null, null], "output_matchtypes": null, "name": "PreviewPointCloud", "display_name": "Preview Point Cloud", "description": "", "python_module": "comfy_extras.nodes_load_3d", "category": "3d", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["view point cloud", "view pointcloud", "preview point cloud", "preview pointcloud", "preview ply"], "essentials_category": null, "has_intermediate_output": false}, "EmptyCosmosLatentVideo": {"input": {"required": {"width": ["INT", {"default": 1280, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 704, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 121, "min": 1, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyCosmosLatentVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cosmos", "category": "model/latent/cosmos", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CosmosImageToVideoLatent": {"input": {"required": {"vae": ["VAE", {}], "width": ["INT", {"default": 1280, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 704, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 121, "min": 1, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"start_image": ["IMAGE", {}], "end_image": ["IMAGE", {}]}}, "input_order": {"required": ["vae", "width", "height", "length", "batch_size"], "optional": ["start_image", "end_image"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "CosmosImageToVideoLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cosmos", "category": "model/conditioning/cosmos", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CosmosPredict2ImageToVideoLatent": {"input": {"required": {"vae": ["VAE", {}], "width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 93, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"start_image": ["IMAGE", {}], "end_image": ["IMAGE", {}]}}, "input_order": {"required": ["vae", "width", "height", "length", "batch_size"], "optional": ["start_image", "end_image"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "CosmosPredict2ImageToVideoLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cosmos", "category": "model/conditioning/cosmos", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveWEBM": {"input": {"required": {"images": ["IMAGE", {"tooltip": "RGBA images are saved with their alpha channel as transparency (vp9 codec only)."}], "filename_prefix": ["STRING", {"default": "ComfyUI", "multiline": false}], "codec": ["COMBO", {"multiselect": false, "options": ["vp9", "av1"]}], "fps": ["FLOAT", {"default": 24.0, "min": 0.01, "max": 1000.0, "step": 0.01}], "crf": ["FLOAT", {"tooltip": "Higher crf means lower quality with a smaller file size, lower crf means higher quality higher filesize.", "default": 32.0, "min": 0, "max": 63.0, "step": 1}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "filename_prefix", "codec", "fps", "crf"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveWEBM", "display_name": "Save WEBM", "description": "", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export webm"], "essentials_category": null, "has_intermediate_output": false}, "SaveVideo": {"input": {"required": {"video": ["VIDEO", {"tooltip": "The video to save."}], "filename_prefix": ["STRING", {"tooltip": "The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes.", "default": "video/ComfyUI", "multiline": false}], "format": ["COMBO", {"tooltip": "The format to save the video as.", "default": "auto", "multiselect": false, "options": ["auto", "mp4"]}], "codec": ["COMBO", {"tooltip": "The codec to use for the video.", "default": "auto", "multiselect": false, "options": ["auto", "h264"]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["video", "filename_prefix", "format", "codec"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["video"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveVideo", "display_name": "Save Video", "description": "Saves the input images to your ComfyUI output directory.", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export video"], "essentials_category": "Basics", "has_intermediate_output": false}, "CreateVideo": {"input": {"required": {"images": ["IMAGE", {"tooltip": "The images to create a video from."}], "fps": ["FLOAT", {"default": 30.0, "min": 1.0, "max": 120.0, "step": 1.0}]}, "optional": {"audio": ["AUDIO", {"tooltip": "The audio to add to the video."}], "bit_depth": ["INT", {"tooltip": "Bit depth of the created video. 10-bit keeps smoother gradients with less banding, but some players and downstream nodes may not support it.", "default": 8, "min": 8, "max": 10, "step": 2, "display": "number"}]}}, "input_order": {"required": ["images", "fps"], "optional": ["audio", "bit_depth"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "CreateVideo", "display_name": "Create Video", "description": "Create a video from images.", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["images to video"], "essentials_category": "Video Tools", "has_intermediate_output": false}, "GetVideoComponents": {"input": {"required": {"video": ["VIDEO", {"tooltip": "The video to extract components from."}]}}, "input_order": {"required": ["video"]}, "is_input_list": false, "output": ["IMAGE", "AUDIO", "FLOAT", "INT"], "output_is_list": [false, false, false, false], "output_name": ["images", "audio", "fps", "bit_depth"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "GetVideoComponents", "display_name": "Get Video Components", "description": "Extracts all components from a video: frames, audio, framerate, and bit depth.", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["extract frames", "split video", "video to images", "demux"], "essentials_category": null, "has_intermediate_output": false}, "LoadVideo": {"input": {"required": {"file": ["COMBO", {"multiselect": false, "options": [], "video_upload": true}]}}, "input_order": {"required": ["file"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LoadVideo", "display_name": "Load Video", "description": "", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["import video", "open video", "video file"], "essentials_category": "Basics", "has_intermediate_output": false}, "Video Slice": {"input": {"required": {"video": ["VIDEO", {}], "start_time": ["FLOAT", {"tooltip": "Start time in seconds", "default": 0.0, "min": -100000.0, "max": 100000.0, "step": 0.001}], "duration": ["FLOAT", {"tooltip": "Duration in seconds, or 0 for unlimited duration", "default": 0.0, "min": 0.0, "step": 0.001}], "strict_duration": ["BOOLEAN", {"tooltip": "If True, when the specified duration is not possible, an error will be raised.", "default": false}]}}, "input_order": {"required": ["video", "start_time", "duration", "strict_duration"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Video Slice", "display_name": "Trim Video", "description": "", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["trim video duration", "skip first frames", "frame load cap", "start time"], "essentials_category": "Video Tools", "has_intermediate_output": false}, "CLIPTextEncodeLumina2": {"input": {"required": {"system_prompt": ["COMBO", {"tooltip": "Lumina2 provide two types of system prompts:Superior: You are an assistant designed to generate superior images with the superior degree of image-text alignment based on textual prompts or user prompts. Alignment: You are an assistant designed to generate high-quality images with the highest degree of image-text alignment based on textual prompts.", "multiselect": false, "options": ["superior", "alignment"]}], "user_prompt": ["STRING", {"tooltip": "The text to be encoded.", "multiline": true, "dynamicPrompts": true}], "clip": ["CLIP", {"tooltip": "The CLIP model used for encoding the text."}]}}, "input_order": {"required": ["system_prompt", "user_prompt", "clip"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": ["A conditioning containing the embedded text used to guide the diffusion model."], "output_matchtypes": null, "name": "CLIPTextEncodeLumina2", "display_name": "CLIP Text Encode (Lumina 2)", "description": "Encodes a system prompt and a user prompt using a CLIP model into an embedding that can be used to guide the diffusion model towards generating specific images.", "python_module": "comfy_extras.nodes_lumina2", "category": "model/conditioning/lumina", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["lumina prompt"], "essentials_category": null, "has_intermediate_output": false}, "RenormCFG": {"input": {"required": {"model": ["MODEL", {}], "cfg_trunc": ["FLOAT", {"advanced": true, "default": 100, "min": 0.0, "max": 100.0, "step": 0.01}], "renorm_cfg": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "cfg_trunc", "renorm_cfg"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "RenormCFG", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lumina2", "category": "model/patch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanTrackToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "tracks": ["STRING", {"default": "[]", "multiline": true}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "temperature": ["FLOAT", {"advanced": true, "default": 220.0, "min": 1.0, "max": 1000.0, "step": 0.1}], "topk": ["INT", {"advanced": true, "default": 2, "min": 1, "max": 10}], "start_image": ["IMAGE", {}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "tracks", "width", "height", "length", "batch_size", "temperature", "topk", "start_image"], "optional": ["clip_vision_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanTrackToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/move", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["motion tracking", "trajectory video", "point tracking", "keypoint animation"], "essentials_category": null, "has_intermediate_output": false}, "WanImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["clip_vision_output", "start_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanFunControlToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}], "control_video": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["clip_vision_output", "start_image", "control_video"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanFunControlToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/fun control", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan22FunControlToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"ref_image": ["IMAGE", {}], "control_video": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["ref_image", "control_video"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "Wan22FunControlToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/fun control", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanFunInpaintToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}], "end_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["clip_vision_output", "start_image", "end_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanFunInpaintToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/fun inpaint", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanFirstLastFrameToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"clip_vision_start_image": ["CLIP_VISION_OUTPUT", {}], "clip_vision_end_image": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}], "end_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["clip_vision_start_image", "clip_vision_end_image", "start_image", "end_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanFirstLastFrameToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanVaceToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1000.0, "step": 0.01}]}, "optional": {"control_video": ["IMAGE", {}], "control_masks": ["MASK", {}], "reference_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size", "strength"], "optional": ["control_video", "control_masks", "reference_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT", "INT"], "output_is_list": [false, false, false, false], "output_name": ["positive", "negative", "latent", "trim_latent"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "WanVaceToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/vace", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["video conditioning", "video control"], "essentials_category": null, "has_intermediate_output": false}, "TrimVideoLatent": {"input": {"required": {"samples": ["LATENT", {}], "trim_amount": ["INT", {"default": 0, "min": 0, "max": 99999}]}}, "input_order": {"required": ["samples", "trim_amount"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "TrimVideoLatent", "display_name": "Trim Video Latent", "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanCameraImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}], "camera_conditions": ["WAN_CAMERA_EMBEDDING", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["clip_vision_output", "start_image", "camera_conditions"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanCameraImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/camera", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanPhantomSubjectToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"images": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["images"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false, false], "output_name": ["positive", "negative_text", "negative_img_text", "latent"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "WanPhantomSubjectToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/phantom subject", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanSoundImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 77, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"audio_encoder_output": ["AUDIO_ENCODER_OUTPUT", {}], "ref_image": ["IMAGE", {}], "control_video": ["IMAGE", {}], "ref_motion": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["audio_encoder_output", "ref_image", "control_video", "ref_motion"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanSoundImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/sound", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanSoundImageToVideoExtend": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "length": ["INT", {"default": 77, "min": 1, "max": 16384, "step": 4}], "video_latent": ["LATENT", {}]}, "optional": {"audio_encoder_output": ["AUDIO_ENCODER_OUTPUT", {}], "ref_image": ["IMAGE", {}], "control_video": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "length", "video_latent"], "optional": ["audio_encoder_output", "ref_image", "control_video"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanSoundImageToVideoExtend", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/sound", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanHuMoImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 97, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"audio_encoder_output": ["AUDIO_ENCODER_OUTPUT", {}], "ref_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["audio_encoder_output", "ref_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanHuMoImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/humo", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanAnimateToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 77, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "continue_motion_max_frames": ["INT", {"default": 5, "min": 1, "max": 16384, "step": 4}], "video_frame_offset": ["INT", {"tooltip": "The amount of frames to seek in all the input videos. Used for generating longer videos by chunk. Connect to the video_frame_offset output of the previous node for extending a video.", "default": 0, "min": 0, "max": 16384, "step": 1}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "reference_image": ["IMAGE", {}], "face_video": ["IMAGE", {}], "pose_video": ["IMAGE", {}], "background_video": ["IMAGE", {}], "character_mask": ["MASK", {}], "continue_motion": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size", "continue_motion_max_frames", "video_frame_offset"], "optional": ["clip_vision_output", "reference_image", "face_video", "pose_video", "background_video", "character_mask", "continue_motion"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT", "INT", "INT", "INT"], "output_is_list": [false, false, false, false, false, false], "output_name": ["positive", "negative", "latent", "trim_latent", "trim_image", "video_frame_offset"], "output_tooltips": [null, null, null, null, null, null], "output_matchtypes": null, "name": "WanAnimateToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/animate", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan22ImageToVideoLatent": {"input": {"required": {"vae": ["VAE", {}], "width": ["INT", {"default": 1280, "min": 32, "max": 16384, "step": 32}], "height": ["INT", {"default": 704, "min": 32, "max": 16384, "step": 32}], "length": ["INT", {"default": 49, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"start_image": ["IMAGE", {}]}}, "input_order": {"required": ["vae", "width", "height", "length", "batch_size"], "optional": ["start_image"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan22ImageToVideoLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanInfiniteTalkToVideo": {"input": {"required": {"mode": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "single_speaker", "inputs": {"required": {}}}, {"key": "two_speakers", "inputs": {"required": {}, "optional": {"audio_encoder_output_2": ["AUDIO_ENCODER_OUTPUT", {}], "mask_1": ["MASK", {"tooltip": "Mask for the first speaker, required if using two audio inputs."}], "mask_2": ["MASK", {"tooltip": "Mask for the second speaker, required if using two audio inputs."}]}}}]}], "model": ["MODEL", {}], "model_patch": ["MODEL_PATCH", {}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "audio_encoder_output_1": ["AUDIO_ENCODER_OUTPUT", {}], "motion_frame_count": ["INT", {"tooltip": "Number of previous frames to use as motion context.", "advanced": true, "default": 9, "min": 1, "max": 33, "step": 1}], "audio_scale": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}], "previous_frames": ["IMAGE", {}]}}, "input_order": {"required": ["mode", "model", "model_patch", "positive", "negative", "vae", "width", "height", "length", "audio_encoder_output_1", "motion_frame_count", "audio_scale"], "optional": ["clip_vision_output", "start_image", "previous_frames"]}, "is_input_list": false, "output": ["MODEL", "CONDITIONING", "CONDITIONING", "LATENT", "INT"], "output_is_list": [false, false, false, false, false], "output_name": ["model", "positive", "negative", "latent", "trim_image"], "output_tooltips": [null, null, null, null, null], "output_matchtypes": null, "name": "WanInfiniteTalkToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/infinite talk", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BerniniConditioning": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 8192, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 8192, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 8192, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"source_video": ["IMAGE", {"tooltip": "Source video to edit or restyle (v2v, rv2v). Resized to width/height and trimmed to length."}], "reference_video": ["IMAGE", {"tooltip": "Video to insert into the source video (ads2v)."}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {"tooltip": "Reference image injected as an in-context token (r2v, rv2v)."}]}}, "prefix": "reference_image_", "min": 0, "max": 8}}], "ref_max_size": ["INT", {"tooltip": "Max size for the long edge of reference_video and reference_images. Resized with preserved aspect ratio and snapped to 16px.", "default": 848, "min": 16, "max": 8192, "step": 16}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["source_video", "reference_video", "reference_images", "ref_max_size"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "BerniniConditioning", "display_name": "Bernini Conditioning", "description": "Conditioning node for Bernini in-context video/image conditioning. It can be used for the following tasks: t2v (text-to-video), v2v (video-to-video), rv2v (reference-guided video editing), r2v (reference-to-video), ads2v (insert image/video into video).Reference images injected as in-context tokens (r2v, rv2v) are encoded independently at their own native aspect ratio (long edge capped at ref_max_size)", "python_module": "comfy_extras.nodes_bernini", "category": "model/conditioning/bernini", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LotusConditioning": {"input": {"required": {}}, "input_order": {"required": []}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["conditioning"], "output_tooltips": [null], "output_matchtypes": null, "name": "LotusConditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lotus", "category": "model/conditioning/lotus", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyLatentHunyuan3Dv2": {"input": {"required": {"resolution": ["INT", {"default": 3072, "min": 1, "max": 8192}], "batch_size": ["INT", {"tooltip": "The number of latent images in the batch.", "default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["resolution", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyLatentHunyuan3Dv2", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "model/latent/hunyuan 3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Hunyuan3Dv2Conditioning": {"input": {"required": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": ["clip_vision_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Hunyuan3Dv2Conditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "model/conditioning/hunyuan 3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Hunyuan3Dv2ConditioningMultiView": {"input": {"required": {}, "optional": {"front": ["CLIP_VISION_OUTPUT", {}], "left": ["CLIP_VISION_OUTPUT", {}], "back": ["CLIP_VISION_OUTPUT", {}], "right": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": [], "optional": ["front", "left", "back", "right"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Hunyuan3Dv2ConditioningMultiView", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "model/conditioning/hunyuan 3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VAEDecodeHunyuan3D": {"input": {"required": {"samples": ["LATENT", {}], "vae": ["VAE", {}], "num_chunks": ["INT", {"advanced": true, "default": 8000, "min": 1000, "max": 500000}], "octree_resolution": ["INT", {"advanced": true, "default": 256, "min": 16, "max": 512}]}}, "input_order": {"required": ["samples", "vae", "num_chunks", "octree_resolution"]}, "is_input_list": false, "output": ["VOXEL"], "output_is_list": [false], "output_name": ["VOXEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "VAEDecodeHunyuan3D", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "model/latent/hunyuan 3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VoxelToMeshBasic": {"input": {"required": {"voxel": ["VOXEL", {}], "threshold": ["FLOAT", {"default": 0.6, "min": -1.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["voxel", "threshold"]}, "is_input_list": false, "output": ["MESH"], "output_is_list": [false], "output_name": ["MESH"], "output_tooltips": [null], "output_matchtypes": null, "name": "VoxelToMeshBasic", "display_name": "Voxel to Mesh (Basic) (DEPRECATED)", "description": "Converts a voxel grid to a mesh.", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "3d", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VoxelToMesh": {"input": {"required": {"voxel": ["VOXEL", {}], "algorithm": ["COMBO", {"multiselect": false, "options": ["surface net", "basic"]}], "threshold": ["FLOAT", {"default": 0.6, "min": -1.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["voxel", "algorithm", "threshold"]}, "is_input_list": false, "output": ["MESH"], "output_is_list": [false], "output_name": ["MESH"], "output_tooltips": [null], "output_matchtypes": null, "name": "VoxelToMesh", "display_name": "Voxel to Mesh", "description": "Converts a voxel grid to a mesh.", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PrimitiveString": {"input": {"required": {"value": ["STRING", {"multiline": false}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveString", "display_name": "Text String (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_primitive", "category": "utilities/primitive", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["text", "string", "text box", "prompt"], "essentials_category": null, "has_intermediate_output": false}, "PrimitiveStringMultiline": {"input": {"required": {"value": ["STRING", {"multiline": true}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveStringMultiline", "display_name": "Input Text", "description": "", "python_module": "comfy_extras.nodes_primitive", "category": "utilities/primitive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["text", "string", "text multiline", "string multiline", "text box", "prompt"], "essentials_category": "Basics", "has_intermediate_output": false}, "PrimitiveInt": {"input": {"required": {"value": ["INT", {"min": -9223372036854775807, "max": 9223372036854775807, "control_after_generate": "fixed"}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["INT"], "output_is_list": [false], "output_name": ["INT"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveInt", "display_name": "Int", "description": "", "python_module": "comfy_extras.nodes_primitive", "category": "utilities/primitive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PrimitiveFloat": {"input": {"required": {"value": ["FLOAT", {"min": -9223372036854775807, "max": 9223372036854775807, "step": 0.1}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["FLOAT"], "output_is_list": [false], "output_name": ["FLOAT"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveFloat", "display_name": "Float", "description": "", "python_module": "comfy_extras.nodes_primitive", "category": "utilities/primitive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PrimitiveBoolean": {"input": {"required": {"value": ["BOOLEAN", {}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveBoolean", "display_name": "Boolean", "description": "", "python_module": "comfy_extras.nodes_primitive", "category": "utilities/primitive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CFGZeroStar": {"input": {"required": {"model": ["MODEL", {}]}}, "input_order": {"required": ["model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["patched_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "CFGZeroStar", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cfg", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CFGNorm": {"input": {"required": {"model": ["MODEL", {}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}]}, "optional": {"pre_cfg": ["BOOLEAN", {"tooltip": "If true, rescale the combined noise BEFORE the sampler's CFG combine, without clamping (can amplify). Matches the norm-scaled CFG used by models like Lens. Default false keeps the original post-CFG x0-space attenuate-only behavior.", "default": false}]}}, "input_order": {"required": ["model", "strength"], "optional": ["pre_cfg"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["patched_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "CFGNorm", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cfg", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OptimalStepsScheduler": {"input": {"required": {"model_type": ["COMBO", {"multiselect": false, "options": ["FLUX", "Wan", "Chroma"]}], "steps": ["INT", {"default": 20, "min": 3, "max": 1000}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model_type", "steps", "denoise"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "OptimalStepsScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_optimalsteps", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "QuadrupleCLIPLoader": {"input": {"required": {"clip_name1": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}], "clip_name2": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}], "clip_name3": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}], "clip_name4": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}]}}, "input_order": {"required": ["clip_name1", "clip_name2", "clip_name3", "clip_name4"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "QuadrupleCLIPLoader", "display_name": "Load CLIP (Quadruple)", "description": "Recipes:\nhidream: long clip-l, long clip-g, t5xxl, llama_8b_3.1_instruct", "python_module": "comfy_extras.nodes_hidream", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeHiDream": {"input": {"required": {"clip": ["CLIP", {}], "clip_l": ["STRING", {"multiline": true, "dynamicPrompts": true}], "clip_g": ["STRING", {"multiline": true, "dynamicPrompts": true}], "t5xxl": ["STRING", {"multiline": true, "dynamicPrompts": true}], "llama": ["STRING", {"multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["clip", "clip_l", "clip_g", "t5xxl", "llama"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeHiDream", "display_name": "CLIP Text Encode (HiDream)", "description": "", "python_module": "comfy_extras.nodes_hidream", "category": "model/conditioning/hidream", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["hidream prompt"], "essentials_category": null, "has_intermediate_output": false}, "FreSca": {"input": {"required": {"model": ["MODEL", {}], "scale_low": ["FLOAT", {"tooltip": "Scaling factor for low-frequency components", "advanced": true, "default": 1.0, "min": 0, "max": 10, "step": 0.01}], "scale_high": ["FLOAT", {"tooltip": "Scaling factor for high-frequency components", "advanced": true, "default": 1.25, "min": 0, "max": 10, "step": 0.01}], "freq_cutoff": ["INT", {"tooltip": "Number of frequency indices around center to consider as low-frequency", "advanced": true, "default": 20, "min": 1, "max": 10000, "step": 1}]}}, "input_order": {"required": ["model", "scale_low", "scale_high", "freq_cutoff"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "FreSca", "display_name": "FreSca", "description": "Applies frequency-dependent scaling to the guidance", "python_module": "comfy_extras.nodes_fresca", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["frequency guidance"], "essentials_category": null, "has_intermediate_output": false}, "APG": {"input": {"required": {"model": ["MODEL", {}], "eta": ["FLOAT", {"tooltip": "Controls the scale of the parallel guidance vector. Default CFG behavior at a setting of 1.", "advanced": true, "default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}], "norm_threshold": ["FLOAT", {"tooltip": "Normalize guidance vector to this value, normalization disable at a setting of 0.", "advanced": true, "default": 5.0, "min": 0.0, "max": 50.0, "step": 0.1}], "momentum": ["FLOAT", {"tooltip": "Controls a running average of guidance during diffusion, disabled at a setting of 0.", "advanced": true, "default": 0.0, "min": -5.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "eta", "norm_threshold", "momentum"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "APG", "display_name": "Adaptive Projected Guidance", "description": "", "python_module": "comfy_extras.nodes_apg", "category": "model/sampling/custom", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PreviewAny": {"input": {"required": {"source": ["*", {}]}}, "input_order": {"required": ["source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "name": "PreviewAny", "display_name": "Preview as Text", "description": "", "python_module": "comfy_extras.nodes_preview_any", "category": "utilities", "output_node": true, "has_intermediate_output": false, "search_aliases": ["show output", "inspect", "debug", "print value", "show text"]}, "TextEncodeAceStepAudio": {"input": {"required": {"clip": ["CLIP", {}], "tags": ["STRING", {"multiline": true, "dynamicPrompts": true}], "lyrics": ["STRING", {"multiline": true, "dynamicPrompts": true}], "lyrics_strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["clip", "tags", "lyrics", "lyrics_strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeAceStepAudio", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_ace", "category": "model/conditioning/ace", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyAceStepLatentAudio": {"input": {"required": {"seconds": ["FLOAT", {"default": 120.0, "min": 1.0, "max": 1000.0, "step": 0.1}], "batch_size": ["INT", {"tooltip": "The number of latent images in the batch.", "default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["seconds", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyAceStepLatentAudio", "display_name": "Empty Ace Step 1.0 Latent Audio", "description": "", "python_module": "comfy_extras.nodes_ace", "category": "model/latent/ace", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TextEncodeAceStepAudio1.5": {"input": {"required": {"clip": ["CLIP", {}], "tags": ["STRING", {"multiline": true, "dynamicPrompts": true}], "lyrics": ["STRING", {"multiline": true, "dynamicPrompts": true}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "bpm": ["INT", {"default": 120, "min": 10, "max": 300}], "duration": ["FLOAT", {"default": 120.0, "min": 0.0, "max": 2000.0, "step": 0.1}], "timesignature": ["COMBO", {"multiselect": false, "options": ["2", "3", "4", "6"]}], "language": ["COMBO", {"default": "en", "multiselect": false, "options": ["ar", "az", "bg", "bn", "ca", "cs", "da", "de", "el", "en", "es", "fa", "fi", "fr", "he", "hi", "hr", "ht", "hu", "id", "is", "it", "ja", "ko", "la", "lt", "ms", "ne", "nl", "no", "pa", "pl", "pt", "ro", "ru", "sa", "sk", "sr", "sv", "sw", "ta", "te", "th", "tl", "tr", "uk", "ur", "vi", "yue", "zh", "unknown"]}], "keyscale": ["COMBO", {"multiselect": false, "options": ["C major", "C# major", "Db major", "D major", "D# major", "Eb major", "E major", "F major", "F# major", "Gb major", "G major", "G# major", "Ab major", "A major", "A# major", "Bb major", "B major", "C minor", "C# minor", "Db minor", "D minor", "D# minor", "Eb minor", "E minor", "F minor", "F# minor", "Gb minor", "G minor", "G# minor", "Ab minor", "A minor", "A# minor", "Bb minor", "B minor"]}], "generate_audio_codes": ["BOOLEAN", {"tooltip": "Enable the LLM that generates audio codes. This can be slow but will increase the quality of the generated audio. Turn this off if you are giving the model an audio reference.", "advanced": true, "default": true}], "cfg_scale": ["FLOAT", {"advanced": true, "default": 2.0, "min": 0.0, "max": 100.0, "step": 0.1}], "temperature": ["FLOAT", {"advanced": true, "default": 0.85, "min": 0.0, "max": 2.0, "step": 0.01}], "top_p": ["FLOAT", {"advanced": true, "default": 0.9, "min": 0.0, "max": 2000.0, "step": 0.01}], "top_k": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 100}], "min_p": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["clip", "tags", "lyrics", "seed", "bpm", "duration", "timesignature", "language", "keyscale", "generate_audio_codes", "cfg_scale", "temperature", "top_p", "top_k", "min_p"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeAceStepAudio1.5", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_ace", "category": "model/conditioning/ace", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyAceStep1.5LatentAudio": {"input": {"required": {"seconds": ["FLOAT", {"default": 120.0, "min": 1.0, "max": 1000.0, "step": 0.01}], "batch_size": ["INT", {"tooltip": "The number of latent images in the batch.", "default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["seconds", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyAceStep1.5LatentAudio", "display_name": "Empty Ace Step 1.5 Latent Audio", "description": "", "python_module": "comfy_extras.nodes_ace", "category": "model/latent/ace", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReferenceTimbreAudio": {"input": {"required": {"conditioning": ["CONDITIONING", {}]}, "optional": {"latent": ["LATENT", {}]}}, "input_order": {"required": ["conditioning"], "optional": ["latent"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReferenceTimbreAudio", "display_name": "Set Reference Audio", "description": "This node sets the reference audio for ace step 1.5", "python_module": "comfy_extras.nodes_ace", "category": "model/conditioning", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StringFormat": {"input": {"required": {"values": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"value": ["*", {}]}}, "names": ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"], "min": 0}}], "f_string": ["STRING", {"default": "{a}", "multiline": true}]}}, "input_order": {"required": ["values", "f_string"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringFormat", "display_name": "Format Text", "description": "Same as Python's string format method. Supports all of Python's format options and features.", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["string", "format"], "essentials_category": null, "has_intermediate_output": false}, "StringConcatenate": {"input": {"required": {"string_a": ["STRING", {"multiline": true}], "string_b": ["STRING", {"multiline": true}], "delimiter": ["STRING", {"default": "", "multiline": false}]}}, "input_order": {"required": ["string_a", "string_b", "delimiter"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringConcatenate", "display_name": "Concatenate Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["concatenate", "text concat", "join text", "merge text", "combine strings", "string concat", "append text", "combine text"], "essentials_category": null, "has_intermediate_output": false}, "StringSubstring": {"input": {"required": {"string": ["STRING", {"multiline": true}], "start": ["INT", {}], "end": ["INT", {}]}}, "input_order": {"required": ["string", "start", "end"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringSubstring", "display_name": "Substring", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["substring", "extract text", "text portion"], "essentials_category": null, "has_intermediate_output": false}, "StringLength": {"input": {"required": {"string": ["STRING", {"multiline": true}]}}, "input_order": {"required": ["string"]}, "is_input_list": false, "output": ["INT"], "output_is_list": [false], "output_name": ["length"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringLength", "display_name": "Text Length", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["character count", "text size", "string length"], "essentials_category": null, "has_intermediate_output": false}, "CaseConverter": {"input": {"required": {"string": ["STRING", {"multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["UPPERCASE", "lowercase", "Capitalize", "Title Case"]}]}}, "input_order": {"required": ["string", "mode"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CaseConverter", "display_name": "Convert Text Case", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["case converter", "text case", "uppercase", "lowercase", "capitalize"], "essentials_category": null, "has_intermediate_output": false}, "StringTrim": {"input": {"required": {"string": ["STRING", {"multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["Both", "Left", "Right"]}]}}, "input_order": {"required": ["string", "mode"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringTrim", "display_name": "Trim Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["trim", "clean whitespace", "remove whitespace", "remove spaces", "strip"], "essentials_category": null, "has_intermediate_output": false}, "StringReplace": {"input": {"required": {"string": ["STRING", {"multiline": true}], "find": ["STRING", {"multiline": true}], "replace": ["STRING", {"multiline": true}]}}, "input_order": {"required": ["string", "find", "replace"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringReplace", "display_name": "Replace Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["replace", "find and replace", "substitute", "swap text"], "essentials_category": null, "has_intermediate_output": false}, "StringContains": {"input": {"required": {"string": ["STRING", {"multiline": true}], "substring": ["STRING", {"multiline": true}], "case_sensitive": ["BOOLEAN", {"advanced": true, "default": true}]}}, "input_order": {"required": ["string", "substring", "case_sensitive"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["contains"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringContains", "display_name": "Contains Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["contains", "text includes", "string includes"], "essentials_category": null, "has_intermediate_output": false}, "StringCompare": {"input": {"required": {"string_a": ["STRING", {"multiline": true}], "string_b": ["STRING", {"multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["Starts With", "Ends With", "Equal"]}], "case_sensitive": ["BOOLEAN", {"advanced": true, "default": true}]}}, "input_order": {"required": ["string_a", "string_b", "mode", "case_sensitive"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringCompare", "display_name": "Compare Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["compare", "text match", "string equals", "starts with", "ends with"], "essentials_category": null, "has_intermediate_output": false}, "RegexMatch": {"input": {"required": {"string": ["STRING", {"multiline": true}], "regex_pattern": ["STRING", {"multiline": true}], "case_insensitive": ["BOOLEAN", {"advanced": true, "default": true}], "multiline": ["BOOLEAN", {"advanced": true, "default": false}], "dotall": ["BOOLEAN", {"advanced": true, "default": false}]}}, "input_order": {"required": ["string", "regex_pattern", "case_insensitive", "multiline", "dotall"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["matches"], "output_tooltips": [null], "output_matchtypes": null, "name": "RegexMatch", "display_name": "Match Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["regex match", "regex", "pattern match", "text contains", "string match"], "essentials_category": null, "has_intermediate_output": false}, "RegexExtract": {"input": {"required": {"string": ["STRING", {"multiline": true}], "regex_pattern": ["STRING", {"multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["First Match", "All Matches", "First Group", "All Groups"]}], "case_insensitive": ["BOOLEAN", {"advanced": true, "default": true}], "multiline": ["BOOLEAN", {"advanced": true, "default": false}], "dotall": ["BOOLEAN", {"advanced": true, "default": false}], "group_index": ["INT", {"advanced": true, "default": 1, "min": 0, "max": 100}]}}, "input_order": {"required": ["string", "regex_pattern", "mode", "case_insensitive", "multiline", "dotall", "group_index"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "RegexExtract", "display_name": "Extract Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["regex extract", "regex", "pattern extract", "text parser", "parse text"], "essentials_category": null, "has_intermediate_output": false}, "RegexReplace": {"input": {"required": {"string": ["STRING", {"multiline": true}], "regex_pattern": ["STRING", {"multiline": true}], "replace": ["STRING", {"multiline": true}]}, "optional": {"case_insensitive": ["BOOLEAN", {"advanced": true, "default": true}], "multiline": ["BOOLEAN", {"advanced": true, "default": false}], "dotall": ["BOOLEAN", {"tooltip": "When enabled, the dot (.) character will match any character including newline characters. When disabled, dots won't match newlines.", "advanced": true, "default": false}], "count": ["INT", {"tooltip": "Maximum number of replacements to make. Set to 0 to replace all occurrences (default). Set to 1 to replace only the first match, 2 for the first two matches, etc.", "advanced": true, "default": 0, "min": 0, "max": 100}]}}, "input_order": {"required": ["string", "regex_pattern", "replace"], "optional": ["case_insensitive", "multiline", "dotall", "count"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "RegexReplace", "display_name": "Replace Text (Regex)", "description": "Find and replace text using regex patterns.", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["regex replace", "regex", "pattern replace", "substitution"], "essentials_category": null, "has_intermediate_output": false}, "JsonExtractString": {"input": {"required": {"json_string": ["STRING", {"multiline": true}], "key": ["STRING", {"multiline": false}]}}, "input_order": {"required": ["json_string", "key"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "JsonExtractString", "display_name": "Extract Text from JSON", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["json", "extract json", "parse json", "json value", "read json"], "essentials_category": null, "has_intermediate_output": false}, "WanCameraEmbedding": {"input": {"required": {"camera_pose": ["COMBO", {"default": "Static", "multiselect": false, "options": ["Static", "Pan Up", "Pan Down", "Pan Left", "Pan Right", "Zoom In", "Zoom Out", "Anti Clockwise (ACW)", "ClockWise (CW)"]}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}]}, "optional": {"speed": ["FLOAT", {"default": 1.0, "min": 0, "max": 10.0, "step": 0.1}], "fx": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0, "max": 1, "step": 1e-09}], "fy": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0, "max": 1, "step": 1e-09}], "cx": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0, "max": 1, "step": 0.01}], "cy": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0, "max": 1, "step": 0.01}]}}, "input_order": {"required": ["camera_pose", "width", "height", "length"], "optional": ["speed", "fx", "fy", "cx", "cy"]}, "is_input_list": false, "output": ["WAN_CAMERA_EMBEDDING", "INT", "INT", "INT"], "output_is_list": [false, false, false, false], "output_name": ["camera_embedding", "width", "height", "length"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "WanCameraEmbedding", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_camera_trajectory", "category": "model/conditioning/wan/camera", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReferenceLatent": {"input": {"required": {"conditioning": ["CONDITIONING", {}]}, "optional": {"latent": ["LATENT", {}]}}, "input_order": {"required": ["conditioning"], "optional": ["latent"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReferenceLatent", "display_name": "Set Reference Latent", "description": "This node sets the guiding latent for an edit model. If the model supports it you can chain multiple to set multiple reference images.", "python_module": "comfy_extras.nodes_edit_model", "category": "model/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TCFG": {"input": {"required": {"model": ["MODEL", {}]}}, "input_order": {"required": ["model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["patched_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "TCFG", "display_name": "Tangential Damping CFG", "description": "TCFG \u2013 Tangential Damping CFG (2503.18137)\n\nRefine the uncond (negative) to align with the cond (positive) for improving quality.", "python_module": "comfy_extras.nodes_tcfg", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ContextWindowsManual": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to apply context windows to during sampling."}], "context_length": ["INT", {"tooltip": "The length of the context window.", "default": 16, "min": 1}], "context_overlap": ["INT", {"tooltip": "The overlap of the context window.", "default": 4, "min": 0}], "context_schedule": ["COMBO", {"tooltip": "Step-dependent scheduling algorithm for context windows.", "default": "standard_static", "multiselect": false, "options": ["standard_static", "standard_uniform", "looped_uniform", "batched"]}], "context_stride": ["INT", {"tooltip": "The stride of the context window; only applicable to uniform schedules.", "default": 1, "min": 1}], "closed_loop": ["BOOLEAN", {"tooltip": "Whether to close the context window loop; only applicable to looped schedules.", "default": false}], "fuse_method": ["COMBO", {"tooltip": "The method to use to fuse the context windows.", "default": "pyramid", "multiselect": false, "options": ["pyramid", "relative", "flat", "overlap-linear"]}], "dim": ["INT", {"tooltip": "The dimension to apply the context windows to.", "default": 0, "min": 0, "max": 5}], "freenoise": ["BOOLEAN", {"tooltip": "Whether to apply FreeNoise noise shuffling, improves window blending.", "default": false}], "cond_retain_index_list": ["STRING", {"tooltip": "List of latent indices to retain in the conditioning tensors for each window. For concat-style I2V models (e.g. Wan I2V, HunyuanVideo I2V, Cosmos I2V, SVD) the encoded start image lives in the c_concat conditioning channels; setting this to '0' will retain that start image content at sub-pos 0 of every window.", "default": "", "multiline": false}], "split_conds_to_windows": ["BOOLEAN", {"tooltip": "Whether to split multiple conditionings (created by ConditionCombine) to each window based on region index.", "default": false}], "latent_retain_index_list": ["STRING", {"tooltip": "List of latent indices to retain in the noise latent itself for each window. Use for workflows where reference content (e.g. a start image) lives directly in the noise latent rather than in separate conditioning channels (e.g. inplace-style I2V like LTXV, AnimateDiff). Independent of cond_retain_index_list.", "default": "", "multiline": false}], "causal_window_fix": ["BOOLEAN", {"tooltip": "Whether to add a causal fix frame to non-0-indexed context windows.", "default": true}]}}, "input_order": {"required": ["model", "context_length", "context_overlap", "context_schedule", "context_stride", "closed_loop", "fuse_method", "dim", "freenoise", "cond_retain_index_list", "split_conds_to_windows", "latent_retain_index_list", "causal_window_fix"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The model with context windows applied during sampling."], "output_matchtypes": null, "name": "ContextWindowsManual", "display_name": "Context Windows (Manual)", "description": "Manually set context windows.", "python_module": "comfy_extras.nodes_context_windows", "category": "model/patch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanContextWindowsManual": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to apply context windows to during sampling."}], "context_length": ["INT", {"tooltip": "The length of the context window in real frames. Must be 4*n + 1.", "default": 81, "min": 1, "max": 16384, "step": 4}], "context_overlap": ["INT", {"tooltip": "The overlap of the context window in real frames.", "default": 30, "min": 0}], "context_schedule": ["COMBO", {"tooltip": "Step-dependent scheduling algorithm for context windows.", "default": "standard_uniform", "multiselect": false, "options": ["standard_static", "standard_uniform", "looped_uniform", "batched"]}], "context_stride": ["INT", {"tooltip": "The stride of the context window; only applicable to uniform schedules.", "advanced": true, "default": 1, "min": 1}], "closed_loop": ["BOOLEAN", {"tooltip": "Whether to close the context window loop; only applicable to looped schedules.", "advanced": true, "default": false}], "fuse_method": ["COMBO", {"tooltip": "The method to use to fuse the context windows.", "default": "pyramid", "multiselect": false, "options": ["pyramid", "relative", "flat", "overlap-linear"]}], "freenoise": ["BOOLEAN", {"tooltip": "Whether to apply FreeNoise noise shuffling, improves window blending.", "advanced": true, "default": true}], "retain_first_frame": ["BOOLEAN", {"tooltip": "Retain the first I2V frame in every context window (may help retain initial reference).", "default": false}], "split_conds_to_windows": ["BOOLEAN", {"tooltip": "Whether to split multiple conditionings (created by ConditionCombine) to each window based on region index.", "advanced": true, "default": false}]}}, "input_order": {"required": ["model", "context_length", "context_overlap", "context_schedule", "context_stride", "closed_loop", "fuse_method", "freenoise", "retain_first_frame", "split_conds_to_windows"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The model with context windows applied during sampling."], "output_matchtypes": null, "name": "WanContextWindowsManual", "display_name": "Wan Context Windows", "description": "Set context windows for Wan-like models.", "python_module": "comfy_extras.nodes_context_windows", "category": "model/patch/wan", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVContextWindows": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to apply context windows to during sampling."}], "context_length": ["INT", {"tooltip": "The length of the context window in real frames. Must be 8*n + 1.", "default": 145, "min": 1, "max": 16384, "step": 8}], "context_overlap": ["INT", {"tooltip": "The overlap of the context window in real frames.", "default": 40, "min": 0, "step": 8}], "context_schedule": ["COMBO", {"tooltip": "Step-dependent scheduling algorithm for context windows.", "default": "standard_uniform", "multiselect": false, "options": ["standard_static", "standard_uniform", "looped_uniform", "batched"]}], "context_stride": ["INT", {"tooltip": "The stride of the context window; only applicable to uniform schedules.", "advanced": true, "default": 1, "min": 1}], "closed_loop": ["BOOLEAN", {"tooltip": "Whether to close the context window loop; only applicable to looped schedules.", "advanced": true, "default": false}], "fuse_method": ["COMBO", {"tooltip": "The method to use to fuse the context windows.", "default": "pyramid", "multiselect": false, "options": ["pyramid", "relative", "flat", "overlap-linear"]}], "freenoise": ["BOOLEAN", {"tooltip": "Whether to apply FreeNoise noise shuffling, improves window blending.", "advanced": true, "default": true}], "retain_first_frame": ["BOOLEAN", {"tooltip": "Retain the first latent frame in every context window (may help retain initial reference).", "default": false}], "split_conds_to_windows": ["BOOLEAN", {"tooltip": "Whether to split multiple conditionings (created by ConditionCombine) to each window based on region index.", "advanced": true, "default": false}]}}, "input_order": {"required": ["model", "context_length", "context_overlap", "context_schedule", "context_stride", "closed_loop", "fuse_method", "freenoise", "retain_first_frame", "split_conds_to_windows"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The model with context windows applied during sampling."], "output_matchtypes": null, "name": "LTXVContextWindows", "display_name": "LTXV Context Windows", "description": "Set context windows for LTXV-like models.", "python_module": "comfy_extras.nodes_context_windows", "category": "model/patch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TextEncodeQwenImageEdit": {"input": {"required": {"clip": ["CLIP", {}], "prompt": ["STRING", {"multiline": true, "dynamicPrompts": true}]}, "optional": {"vae": ["VAE", {}], "image": ["IMAGE", {}]}}, "input_order": {"required": ["clip", "prompt"], "optional": ["vae", "image"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeQwenImageEdit", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_qwen", "category": "model/conditioning/qwen image", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TextEncodeQwenImageEditPlus": {"input": {"required": {"clip": ["CLIP", {}], "prompt": ["STRING", {"multiline": true, "dynamicPrompts": true}]}, "optional": {"vae": ["VAE", {}], "image1": ["IMAGE", {}], "image2": ["IMAGE", {}], "image3": ["IMAGE", {}]}}, "input_order": {"required": ["clip", "prompt"], "optional": ["vae", "image1", "image2", "image3"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeQwenImageEditPlus", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_qwen", "category": "model/conditioning/qwen image", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyQwenImageLayeredLatentImage": {"input": {"required": {"width": ["INT", {"default": 640, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 640, "min": 16, "max": 16384, "step": 16}], "layers": ["INT", {"default": 3, "min": 0, "max": 16384, "step": 1}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "layers", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyQwenImageLayeredLatentImage", "display_name": "Empty Qwen Image Layered Latent", "description": "", "python_module": "comfy_extras.nodes_qwen", "category": "model/latent/qwen", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TextEncodeBooguEdit": {"input": {"required": {"clip": ["CLIP", {}], "prompt": ["STRING", {"multiline": true, "dynamicPrompts": true}], "negative_prompt": ["STRING", {"advanced": true, "multiline": true, "dynamicPrompts": true}], "vae": ["VAE", {}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Reference image(s) to edit. Boogu focuses on one reference per sample; more are allowed.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16"], "min": 0}}]}}, "input_order": {"required": ["clip", "prompt", "negative_prompt", "vae", "images"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "TextEncodeBooguEdit", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_boogu", "category": "model/conditioning/boogu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyChromaRadianceLatentImage": {"input": {"required": {"width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyChromaRadianceLatentImage", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_chroma_radiance", "category": "model/latent/chroma radiance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ChromaRadianceOptions": {"input": {"required": {"model": ["MODEL", {}], "preserve_wrapper": ["BOOLEAN", {"tooltip": "When enabled, will delegate to an existing model function wrapper if it exists. Generally should be left enabled.", "default": true}], "start_sigma": ["FLOAT", {"tooltip": "First sigma that these options will be in effect.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0}], "end_sigma": ["FLOAT", {"tooltip": "Last sigma that these options will be in effect.", "advanced": true, "default": 0.0, "min": 0.0, "max": 1.0}], "nerf_tile_size": ["INT", {"tooltip": "Allows overriding the default NeRF tile size. -1 means use the default (32). 0 means use non-tiling mode (may require a lot of VRAM).", "advanced": true, "default": -1, "min": -1}], "force_sequential_txt_ids": ["BOOLEAN", {"tooltip": "Force usage of sequential text token IDs instead of zeroes. Should be used for checkpoints from 2026-05-22 to 2026-06-01 that are trained in this way but do not contain the __sequential__ key in the state dict.", "advanced": true, "default": false}]}}, "input_order": {"required": ["model", "preserve_wrapper", "start_sigma", "end_sigma", "nerf_tile_size", "force_sequential_txt_ids"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "ChromaRadianceOptions", "display_name": null, "description": "Allows setting advanced options for the Chroma Radiance model.", "python_module": "comfy_extras.nodes_chroma_radiance", "category": "model/patch/chroma radiance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PiDConditioning": {"input": {"required": {"positive": ["CONDITIONING", {}], "latent": ["LATENT", {"tooltip": "latent (from VAEEncode or a KSampler)."}], "latent_format": ["COMBO", {"tooltip": "Flux1 (16-ch) and Flux2 (128-ch) latents are auto-detected from channel dim under 'flux'. For SD3 (16-ch), SDXL (4-ch), or QwenImage (16-ch), select manually.", "default": "flux", "multiselect": false, "options": ["flux", "sd3", "sdxl", "qwenimage"]}], "degrade_sigma": ["FLOAT", {"tooltip": "0 = clean latent. Increase to denoise corrupted latent outputs.", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["positive", "latent", "latent_format", "degrade_sigma"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "PiDConditioning", "display_name": "PiD Conditioning", "description": "Attaches a latent and a degrade_sigma scalar to a CONDITIONING for PiD decoding/upscaling", "python_module": "comfy_extras.nodes_pid", "category": "model/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ModelPatchLoader": {"input": {"required": {"name": [[]]}}, "input_order": {"required": ["name"]}, "is_input_list": false, "output": ["MODEL_PATCH"], "output_is_list": [false], "output_name": ["MODEL_PATCH"], "name": "ModelPatchLoader", "display_name": "Load Model Patch", "description": "", "python_module": "comfy_extras.nodes_model_patch", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "QwenImageDiffsynthControlnet": {"input": {"required": {"model": ["MODEL"], "model_patch": ["MODEL_PATCH"], "vae": ["VAE"], "image": ["IMAGE"], "strength": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}, "optional": {"mask": ["MASK"]}}, "input_order": {"required": ["model", "model_patch", "vae", "image", "strength"], "optional": ["mask"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "QwenImageDiffsynthControlnet", "display_name": "Apply Qwen Image DiffSynth ControlNet", "description": "", "python_module": "comfy_extras.nodes_model_patch", "category": "model/patch/qwen", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "ZImageFunControlnet": {"input": {"required": {"model": ["MODEL"], "model_patch": ["MODEL_PATCH"], "vae": ["VAE"], "strength": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}, "optional": {"image": ["IMAGE"], "inpaint_image": ["IMAGE"], "mask": ["MASK"]}}, "input_order": {"required": ["model", "model_patch", "vae", "strength"], "optional": ["image", "inpaint_image", "mask"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ZImageFunControlnet", "display_name": "Apply Z-Image Fun ControlNet", "description": "", "python_module": "comfy_extras.nodes_model_patch", "category": "model/patch/z-image", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "USOStyleReference": {"input": {"required": {"model": ["MODEL"], "model_patch": ["MODEL_PATCH"], "clip_vision_output": ["CLIP_VISION_OUTPUT"]}}, "input_order": {"required": ["model", "model_patch", "clip_vision_output"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "USOStyleReference", "display_name": "Apply USO Style Reference", "description": "", "python_module": "comfy_extras.nodes_model_patch", "category": "model/patch/flux", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "SUPIRApply": {"input": {"required": {"model": ["MODEL", {}], "model_patch": ["MODEL_PATCH", {}], "vae": ["VAE", {}], "image": ["IMAGE", {}], "strength_start": ["FLOAT", {"tooltip": "Control strength at the start of sampling (high sigma).", "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "strength_end": ["FLOAT", {"tooltip": "Control strength at the end of sampling (low sigma). Linearly interpolated from start.", "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "restore_cfg": ["FLOAT", {"tooltip": "Pulls denoised output toward the input latent. Higher = stronger fidelity to input. 0 to disable.", "advanced": true, "default": 4.0, "min": 0.0, "max": 20.0, "step": 0.1}], "restore_cfg_s_tmin": ["FLOAT", {"tooltip": "Sigma threshold below which restore_cfg is disabled.", "advanced": true, "default": 0.05, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "model_patch", "vae", "image", "strength_start", "strength_end", "restore_cfg", "restore_cfg_s_tmin"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SUPIRApply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_model_patch", "category": "model/patch/supir", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EasyCache": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to add EasyCache to."}], "reuse_threshold": ["FLOAT", {"tooltip": "The threshold for reusing cached steps.", "advanced": true, "default": 0.2, "min": 0.0, "max": 3.0, "step": 0.01}], "start_percent": ["FLOAT", {"tooltip": "The relative sampling step to begin use of EasyCache.", "advanced": true, "default": 0.15, "min": 0.0, "max": 1.0, "step": 0.01}], "end_percent": ["FLOAT", {"tooltip": "The relative sampling step to end use of EasyCache.", "advanced": true, "default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}], "verbose": ["BOOLEAN", {"tooltip": "Whether to log verbose information.", "advanced": true, "default": false}]}}, "input_order": {"required": ["model", "reuse_threshold", "start_percent", "end_percent", "verbose"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The model with EasyCache."], "output_matchtypes": null, "name": "EasyCache", "display_name": "EasyCache", "description": "Native EasyCache implementation.", "python_module": "comfy_extras.nodes_easycache", "category": "advanced/debug", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LazyCache": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to add LazyCache to."}], "reuse_threshold": ["FLOAT", {"tooltip": "The threshold for reusing cached steps.", "advanced": true, "default": 0.2, "min": 0.0, "max": 3.0, "step": 0.01}], "start_percent": ["FLOAT", {"tooltip": "The relative sampling step to begin use of LazyCache.", "advanced": true, "default": 0.15, "min": 0.0, "max": 1.0, "step": 0.01}], "end_percent": ["FLOAT", {"tooltip": "The relative sampling step to end use of LazyCache.", "advanced": true, "default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}], "verbose": ["BOOLEAN", {"tooltip": "Whether to log verbose information.", "advanced": true, "default": false}]}}, "input_order": {"required": ["model", "reuse_threshold", "start_percent", "end_percent", "verbose"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The model with LazyCache."], "output_matchtypes": null, "name": "LazyCache", "display_name": "LazyCache", "description": "A homebrew version of EasyCache - even 'easier' version of EasyCache to implement. Overall works worse than EasyCache, but better in some rare cases AND universal compatibility with everything in ComfyUI.", "python_module": "comfy_extras.nodes_easycache", "category": "advanced/debug", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AudioEncoderLoader": {"input": {"required": {"audio_encoder_name": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["audio_encoder_name"]}, "is_input_list": false, "output": ["AUDIO_ENCODER"], "output_is_list": [false], "output_name": ["AUDIO_ENCODER"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioEncoderLoader", "display_name": "Load Audio Encoder", "description": "", "python_module": "comfy_extras.nodes_audio_encoder", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AudioEncoderEncode": {"input": {"required": {"audio_encoder": ["AUDIO_ENCODER", {}], "audio": ["AUDIO", {}]}}, "input_order": {"required": ["audio_encoder", "audio"]}, "is_input_list": false, "output": ["AUDIO_ENCODER_OUTPUT"], "output_is_list": [false], "output_name": ["AUDIO_ENCODER_OUTPUT"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioEncoderEncode", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_audio_encoder", "category": "model/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ScaleROPE": {"input": {"required": {"model": ["MODEL", {}], "scale_x": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.1}], "shift_x": ["FLOAT", {"advanced": true, "default": 0.0, "min": -256.0, "max": 256.0, "step": 0.1}], "scale_y": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.1}], "shift_y": ["FLOAT", {"advanced": true, "default": 0.0, "min": -256.0, "max": 256.0, "step": 0.1}], "scale_t": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.1}], "shift_t": ["FLOAT", {"advanced": true, "default": 0.0, "min": -256.0, "max": 256.0, "step": 0.1}]}}, "input_order": {"required": ["model", "scale_x", "shift_x", "scale_y", "shift_y", "scale_t", "shift_t"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "ScaleROPE", "display_name": null, "description": "Scale and shift the ROPE of the model.", "python_module": "comfy_extras.nodes_rope", "category": "model/patch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ComfySwitchNode": {"input": {"required": {"switch": ["BOOLEAN", {}], "on_false": ["COMFY_MATCHTYPE_V3", {"lazy": true, "template": {"template_id": "switch", "allowed_types": "*"}}], "on_true": ["COMFY_MATCHTYPE_V3", {"lazy": true, "template": {"template_id": "switch", "allowed_types": "*"}}]}}, "input_order": {"required": ["switch", "on_false", "on_true"]}, "is_input_list": false, "output": ["COMFY_MATCHTYPE_V3"], "output_is_list": [false], "output_name": ["output"], "output_tooltips": [null], "output_matchtypes": ["switch"], "name": "ComfySwitchNode", "display_name": "If/Else Switch", "description": "", "python_module": "comfy_extras.nodes_logic", "category": "utilities/logic", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["if", "then", "switch", "conditional", "branch"], "essentials_category": null, "has_intermediate_output": false}, "CustomCombo": {"input": {"required": {"choice": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["choice"]}, "is_input_list": false, "output": ["STRING", "INT"], "output_is_list": [false, false], "output_name": ["STRING", "INDEX"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "CustomCombo", "display_name": "Custom Combo", "description": "", "python_module": "comfy_extras.nodes_logic", "category": "utilities", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ComfyNotNode": {"input": {"required": {"value": ["*", {}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "output_tooltips": [null], "output_matchtypes": null, "name": "ComfyNotNode", "display_name": "Not", "description": "Logical NOT operation. Returns true if the value is falsy. Uses Python's rules for truthiness.", "python_module": "comfy_extras.nodes_logic", "category": "utilities/logic", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["invert", "toggle", "negate", "flip boolean"], "essentials_category": null, "has_intermediate_output": false}, "ComfyAndNode": {"input": {"required": {"values": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"value": ["*", {}]}}, "prefix": "value", "min": 1, "max": 10}}]}}, "input_order": {"required": ["values"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "output_tooltips": [null], "output_matchtypes": null, "name": "ComfyAndNode", "display_name": "And", "description": "Logical AND operation. Returns true if all of the values are truthy. Uses Python's rules for truthiness.", "python_module": "comfy_extras.nodes_logic", "category": "utilities/logic", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["all", "every"], "essentials_category": null, "has_intermediate_output": false}, "ComfyOrNode": {"input": {"required": {"values": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"value": ["*", {}]}}, "prefix": "value", "min": 1, "max": 10}}]}}, "input_order": {"required": ["values"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "output_tooltips": [null], "output_matchtypes": null, "name": "ComfyOrNode", "display_name": "Or", "description": "Logical OR operation. Returns true if any of the values are truthy. Uses Python's rules for truthiness.", "python_module": "comfy_extras.nodes_logic", "category": "utilities/logic", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["any", "some"], "essentials_category": null, "has_intermediate_output": false}, "ResolutionSelector": {"input": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio for the output dimensions.", "default": "1:1 (Square)", "multiselect": false, "options": ["1:1 (Square)", "2:3 (Portrait Photo)", "3:2 (Photo)", "3:4 (Portrait Standard)", "4:3 (Standard)", "9:16 (Portrait Widescreen)", "16:9 (Widescreen)", "21:9 (Ultrawide)"]}], "megapixels": ["FLOAT", {"tooltip": "Target total megapixels. 1.0 MP \u2248 1024x1024 for square.", "default": 1.0, "min": 0.1, "max": 16.0, "step": 0.1}], "multiple": ["INT", {"tooltip": "Nearest multiple of the result to set the selected resolution to.", "advanced": true, "default": 8, "min": 8, "max": 128, "step": 4}]}}, "input_order": {"required": ["aspect_ratio", "megapixels", "multiple"]}, "is_input_list": false, "output": ["INT", "INT"], "output_is_list": [false, false], "output_name": ["width", "height"], "output_tooltips": ["Calculated width in pixels multiplied by the selected multiple.", "Calculated height in pixels multiplied by the selected multiple."], "output_matchtypes": null, "name": "ResolutionSelector", "display_name": "Resolution Selector", "description": "Calculate width and height from aspect ratio and megapixel target. Useful for setting up Empty Latent Image dimensions.", "python_module": "comfy_extras.nodes_resolution", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "wanBlockSwap": {"input": {"required": {"model": ["MODEL", {}]}}, "input_order": {"required": ["model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "wanBlockSwap", "display_name": null, "description": "Intercept wanBlockSwap custom node that causes major instability and make it no-op.", "python_module": "comfy_extras.nodes_nop", "category": "", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Kandinsky5ImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 768, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 512, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 121, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"start_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["start_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT", "LATENT"], "output_is_list": [false, false, false, false], "output_name": ["positive", "negative", "latent", "cond_latent"], "output_tooltips": [null, null, "Empty video latent", "Clean encoded start images, used to replace the noisy start of the model output latents"], "output_matchtypes": null, "name": "Kandinsky5ImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_kandinsky5", "category": "model/conditioning/kandinsky", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "NormalizeVideoLatentStart": {"input": {"required": {"latent": ["LATENT", {}], "start_frame_count": ["INT", {"tooltip": "Number of latent frames to normalize, counted from the start", "default": 4, "min": 1, "max": 16384, "step": 1}], "reference_frame_count": ["INT", {"tooltip": "Number of latent frames after the start frames to use as reference", "default": 5, "min": 1, "max": 16384, "step": 1}]}}, "input_order": {"required": ["latent", "start_frame_count", "reference_frame_count"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["latent"], "output_tooltips": [null], "output_matchtypes": null, "name": "NormalizeVideoLatentStart", "display_name": null, "description": "Normalizes the initial frames of a video latent to match the mean and standard deviation of subsequent reference frames. Helps reduce differences between the starting frames and the rest of the video.", "python_module": "comfy_extras.nodes_kandinsky5", "category": "model/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeKandinsky5": {"input": {"required": {"clip": ["CLIP", {}], "clip_l": ["STRING", {"multiline": true, "dynamicPrompts": true}], "qwen25_7b": ["STRING", {"multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["clip", "clip_l", "qwen25_7b"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeKandinsky5", "display_name": "CLIP Text Encode (Kandinsky 5)", "description": "", "python_module": "comfy_extras.nodes_kandinsky5", "category": "model/conditioning/kandinsky", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["kandinsky prompt"], "essentials_category": null, "has_intermediate_output": false}, "WanMoveTrackToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "strength": ["FLOAT", {"tooltip": "Strength of the track conditioning.", "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "start_image": ["IMAGE", {}]}, "optional": {"tracks": ["TRACKS", {}], "clip_vision_output": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "strength", "width", "height", "length", "batch_size", "start_image"], "optional": ["tracks", "clip_vision_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanMoveTrackToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wanmove", "category": "model/conditioning/wan/move", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanMoveTracksFromCoords": {"input": {"required": {}, "optional": {"track_coords": ["STRING", {"default": "[]", "forceInput": true, "multiline": false}], "track_mask": ["MASK", {}]}}, "input_order": {"required": [], "optional": ["track_coords", "track_mask"]}, "is_input_list": false, "output": ["TRACKS", "INT"], "output_is_list": [false, false], "output_name": ["TRACKS", "track_length"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "WanMoveTracksFromCoords", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wanmove", "category": "model/conditioning/wan/move", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanMoveConcatTrack": {"input": {"required": {"tracks_1": ["TRACKS", {}]}, "optional": {"tracks_2": ["TRACKS", {}]}}, "input_order": {"required": ["tracks_1"], "optional": ["tracks_2"]}, "is_input_list": false, "output": ["TRACKS"], "output_is_list": [false], "output_name": ["TRACKS"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanMoveConcatTrack", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wanmove", "category": "model/conditioning/wan/move", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanMoveVisualizeTracks": {"input": {"required": {"images": ["IMAGE", {}], "line_resolution": ["INT", {"default": 24, "min": 1, "max": 1024}], "circle_size": ["INT", {"advanced": true, "default": 12, "min": 1, "max": 128}], "opacity": ["FLOAT", {"default": 0.75, "min": 0.0, "max": 1.0, "step": 0.01}], "line_width": ["INT", {"advanced": true, "default": 16, "min": 1, "max": 128}]}, "optional": {"tracks": ["TRACKS", {}]}}, "input_order": {"required": ["images", "line_resolution", "circle_size", "opacity", "line_width"], "optional": ["tracks"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanMoveVisualizeTracks", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wanmove", "category": "model/conditioning/wan/move", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GenerateTracks": {"input": {"required": {"width": ["INT", {"default": 832, "min": 16, "max": 4096, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 4096, "step": 16}], "start_x": ["FLOAT", {"tooltip": "Normalized X coordinate (0-1) for start position.", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}], "start_y": ["FLOAT", {"tooltip": "Normalized Y coordinate (0-1) for start position.", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}], "end_x": ["FLOAT", {"tooltip": "Normalized X coordinate (0-1) for end position.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "end_y": ["FLOAT", {"tooltip": "Normalized Y coordinate (0-1) for end position.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "num_frames": ["INT", {"default": 81, "min": 1, "max": 1024}], "num_tracks": ["INT", {"default": 5, "min": 1, "max": 100}], "track_spread": ["FLOAT", {"tooltip": "Normalized distance between tracks. Tracks are spread perpendicular to the motion direction.", "default": 0.025, "min": 0.0, "max": 1.0, "step": 0.001}], "bezier": ["BOOLEAN", {"tooltip": "Enable Bezier curve path using the mid point as control point.", "default": false}], "mid_x": ["FLOAT", {"tooltip": "Normalized X control point for Bezier curve. Only used when 'bezier' is enabled.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "mid_y": ["FLOAT", {"tooltip": "Normalized Y control point for Bezier curve. Only used when 'bezier' is enabled.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "interpolation": ["COMBO", {"tooltip": "Controls the timing/speed of movement along the path.", "multiselect": false, "options": ["linear", "ease_in", "ease_out", "ease_in_out", "constant"]}]}, "optional": {"track_mask": ["MASK", {"tooltip": "Optional mask to indicate visible frames."}]}}, "input_order": {"required": ["width", "height", "start_x", "start_y", "end_x", "end_y", "num_frames", "num_tracks", "track_spread", "bezier", "mid_x", "mid_y", "interpolation"], "optional": ["track_mask"]}, "is_input_list": false, "output": ["TRACKS", "INT"], "output_is_list": [false, false], "output_name": ["TRACKS", "track_length"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "GenerateTracks", "display_name": "Generate Video Tracks", "description": "", "python_module": "comfy_extras.nodes_wanmove", "category": "model/conditioning/wan/move", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["motion paths", "camera movement", "trajectory"], "essentials_category": null, "has_intermediate_output": false}, "EmptyARVideoLatent": {"input": {"required": {"width": ["INT", {"default": 832, "min": 16, "max": 8192, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 8192, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 1024, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyARVideoLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_ar_video", "category": "model/latent/autoregressive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerARVideo": {"input": {"required": {"num_frame_per_block": ["INT", {"tooltip": "Frames per autoregressive block. 1 = framewise, 3 = chunkwise. Must match the checkpoint's training mode.", "default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["num_frame_per_block"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerARVideo", "display_name": "Sampler AR Video", "description": "", "python_module": "comfy_extras.nodes_ar_video", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ARVideoI2V": {"input": {"required": {"model": ["MODEL", {}], "vae": ["VAE", {}], "start_image": ["IMAGE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 8192, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 8192, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 1024, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["model", "vae", "start_image", "width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["MODEL", "LATENT"], "output_is_list": [false, false], "output_name": ["MODEL", "LATENT"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ARVideoI2V", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_ar_video", "category": "model/conditioning/autoregressive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageCompare": {"input": {"required": {"compare_view": ["IMAGECOMPARE", {"socketless": true}]}, "optional": {"image_a": ["IMAGE", {}], "image_b": ["IMAGE", {}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["compare_view"], "optional": ["image_a", "image_b"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "ImageCompare", "display_name": "Compare Images", "description": "Compares two images side by side with a slider.", "python_module": "comfy_extras.nodes_image_compare", "category": "image", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": "Image Tools", "has_intermediate_output": false}, "TextEncodeZImageOmni": {"input": {"required": {"clip": ["CLIP", {}], "prompt": ["STRING", {"multiline": true, "dynamicPrompts": true}], "auto_resize_images": ["BOOLEAN", {"advanced": true, "default": true}]}, "optional": {"image_encoder": ["CLIP_VISION", {}], "vae": ["VAE", {}], "image1": ["IMAGE", {}], "image2": ["IMAGE", {}], "image3": ["IMAGE", {}]}}, "input_order": {"required": ["clip", "prompt", "auto_resize_images"], "optional": ["image_encoder", "vae", "image1", "image2", "image3"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeZImageOmni", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_zimage", "category": "model/conditioning/z-image", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GLSLShader": {"input": {"required": {"fragment_shader": ["STRING", {"tooltip": "GLSL fragment shader source code (GLSL ES 3.00 / WebGL 2.0 compatible)", "default": "#version 300 es\nprecision highp float;\n\nuniform sampler2D u_image0;\nuniform vec2 u_resolution;\n\nin vec2 v_texCoord;\nlayout(location = 0) out vec4 fragColor0;\n\nvoid main() {\n fragColor0 = texture(u_image0, v_texCoord);\n}\n", "multiline": true}], "size_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Output size: 'from_input' uses first input image dimensions, 'custom' allows manual size", "options": [{"key": "from_input", "inputs": {"required": {}}}, {"key": "custom", "inputs": {"required": {"width": ["INT", {"default": 512, "min": 1, "max": 16384}], "height": ["INT", {"default": 512, "min": 1, "max": 16384}]}}}]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Images are available as u_image0-4 (sampler2D) in the shader code", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image", "min": 1, "max": 5}}], "floats": ["COMFY_AUTOGROW_V3", {"tooltip": "Floats are available as u_float0-19 in the shader code", "template": {"input": {"required": {"float": ["FLOAT", {"default": 0.0, "forceInput": true}]}}, "prefix": "u_float", "min": 0, "max": 20}}], "ints": ["COMFY_AUTOGROW_V3", {"tooltip": "Ints are available as u_int0-19 in the shader code", "template": {"input": {"required": {"int": ["INT", {"default": 0, "forceInput": true}]}}, "prefix": "u_int", "min": 0, "max": 20}}], "bools": ["COMFY_AUTOGROW_V3", {"tooltip": "Booleans are available as u_bool0-9 (bool) in the shader code", "template": {"input": {"required": {"bool": ["BOOLEAN", {"default": false, "forceInput": true}]}}, "prefix": "u_bool", "min": 0, "max": 10}}], "curves": ["COMFY_AUTOGROW_V3", {"tooltip": "Curves are available as u_curve0-3 (sampler2D, 1D LUT) in the shader code. Sample with texture(u_curve0, vec2(x, 0.5)).r", "template": {"input": {"required": {"curve": ["CURVE", {"default": {"points": [[0.0, 0.0], [1.0, 1.0]], "interpolation": "monotone_cubic"}, "socketless": true, "forceInput": true}]}}, "prefix": "u_curve", "min": 0, "max": 4}}]}}, "input_order": {"required": ["fragment_shader", "size_mode", "images", "floats", "ints", "bools", "curves"]}, "is_input_list": false, "output": ["IMAGE", "IMAGE", "IMAGE", "IMAGE"], "output_is_list": [false, false, false, false], "output_name": ["IMAGE0", "IMAGE1", "IMAGE2", "IMAGE3"], "output_tooltips": ["Available via layout(location = 0) out vec4 fragColor0 in the shader code", "Available via layout(location = 1) out vec4 fragColor1 in the shader code", "Available via layout(location = 2) out vec4 fragColor2 in the shader code", "Available via layout(location = 3) out vec4 fragColor3 in the shader code"], "output_matchtypes": null, "name": "GLSLShader", "display_name": "GLSL Shader", "description": "Apply GLSL ES fragment shaders to images. u_resolution (vec2) is always available.", "python_module": "comfy_extras.nodes_glsl", "category": "image/shader", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": true}, "LoraLoaderBypass": {"input": {"required": {"model": ["MODEL", {"tooltip": "The diffusion model the LoRA will be applied to."}], "clip": ["CLIP", {"tooltip": "The CLIP model the LoRA will be applied to."}], "lora_name": [[], {"tooltip": "The name of the LoRA."}], "strength_model": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01, "tooltip": "How strongly to modify the diffusion model. This value can be negative."}], "strength_clip": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01, "tooltip": "How strongly to modify the CLIP model. This value can be negative."}]}}, "input_order": {"required": ["model", "clip", "lora_name", "strength_model", "strength_clip"]}, "is_input_list": false, "output": ["MODEL", "CLIP"], "output_is_list": [false, false], "output_name": ["MODEL", "CLIP"], "name": "LoraLoaderBypass", "display_name": "Load LoRA (Bypass) (For debugging)", "description": "Apply LoRA in bypass mode. Unlike regular LoRA, this doesn't modify model weights - instead it injects the LoRA computation during forward pass. Useful for training scenarios.", "python_module": "comfy_extras.nodes_lora_debug", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The modified diffusion model.", "The modified CLIP model."], "experimental": true, "search_aliases": []}, "LoraLoaderBypassModelOnly": {"input": {"required": {"model": ["MODEL"], "lora_name": [[]], "strength_model": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "lora_name", "strength_model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "LoraLoaderBypassModelOnly", "display_name": "Load LoRA (Bypass, Model Only) (for debugging)", "description": "Apply LoRA in bypass mode. Unlike regular LoRA, this doesn't modify model weights - instead it injects the LoRA computation during forward pass. Useful for training scenarios.", "python_module": "comfy_extras.nodes_lora_debug", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The modified diffusion model.", "The modified CLIP model."], "experimental": true, "search_aliases": []}, "TextGenerate": {"input": {"required": {"clip": ["CLIP", {}], "prompt": ["STRING", {"default": "", "multiline": true, "dynamicPrompts": true}], "max_length": ["INT", {"default": 512, "min": 1, "max": 32768}], "sampling_mode": ["COMFY_DYNAMICCOMBO_V3", {"display_name": "Sampling Mode", "options": [{"key": "on", "inputs": {"required": {"temperature": ["FLOAT", {"default": 0.7, "min": 0.01, "max": 2.0, "step": 1e-06}], "top_k": ["INT", {"default": 64, "min": 0, "max": 1000}], "top_p": ["FLOAT", {"default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}], "min_p": ["FLOAT", {"default": 0.05, "min": 0.0, "max": 1.0, "step": 0.01}], "repetition_penalty": ["FLOAT", {"default": 1.05, "min": 0.0, "max": 5.0, "step": 0.01}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}]}, "optional": {"presence_penalty": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 5.0, "step": 0.01}]}}}, {"key": "off", "inputs": {"required": {}}}]}]}, "optional": {"image": ["IMAGE", {}], "video": ["IMAGE", {"tooltip": "Video frames as image batch. Assumed to be 24 FPS; subsampled to 1 FPS internally."}], "audio": ["AUDIO", {}], "thinking": ["BOOLEAN", {"tooltip": "Operate in thinking mode if the model supports it.", "default": false}], "use_default_template": ["BOOLEAN", {"tooltip": "Use the built in system prompt/template if the model has one.", "advanced": true, "default": true}]}}, "input_order": {"required": ["clip", "prompt", "max_length", "sampling_mode"], "optional": ["image", "video", "audio", "thinking", "use_default_template"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["generated_text"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextGenerate", "display_name": "Generate Text", "description": "", "python_module": "comfy_extras.nodes_textgen", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["LLM", "gemma"], "essentials_category": null, "has_intermediate_output": false}, "TextGenerateLTX2Prompt": {"input": {"required": {"clip": ["CLIP", {}], "prompt": ["STRING", {"default": "", "multiline": true, "dynamicPrompts": true}], "max_length": ["INT", {"default": 512, "min": 1, "max": 32768}], "sampling_mode": ["COMFY_DYNAMICCOMBO_V3", {"display_name": "Sampling Mode", "options": [{"key": "on", "inputs": {"required": {"temperature": ["FLOAT", {"default": 0.7, "min": 0.01, "max": 2.0, "step": 1e-06}], "top_k": ["INT", {"default": 64, "min": 0, "max": 1000}], "top_p": ["FLOAT", {"default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}], "min_p": ["FLOAT", {"default": 0.05, "min": 0.0, "max": 1.0, "step": 0.01}], "repetition_penalty": ["FLOAT", {"default": 1.05, "min": 0.0, "max": 5.0, "step": 0.01}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}]}, "optional": {"presence_penalty": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 5.0, "step": 0.01}]}}}, {"key": "off", "inputs": {"required": {}}}]}]}, "optional": {"image": ["IMAGE", {}], "video": ["IMAGE", {"tooltip": "Video frames as image batch. Assumed to be 24 FPS; subsampled to 1 FPS internally."}], "audio": ["AUDIO", {}], "thinking": ["BOOLEAN", {"tooltip": "Operate in thinking mode if the model supports it.", "default": false}], "use_default_template": ["BOOLEAN", {"tooltip": "Use the built in system prompt/template if the model has one.", "advanced": true, "default": true}]}}, "input_order": {"required": ["clip", "prompt", "max_length", "sampling_mode"], "optional": ["image", "video", "audio", "thinking", "use_default_template"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["generated_text"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextGenerateLTX2Prompt", "display_name": "Generate LTX2 Prompt", "description": "", "python_module": "comfy_extras.nodes_textgen", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["prompt enhance", "LLM", "gemma"], "essentials_category": null, "has_intermediate_output": false}, "ColorToRGBInt": {"input": {"required": {"color": ["COLOR", {"default": "#ffffff", "socketless": true}]}}, "input_order": {"required": ["color"]}, "is_input_list": false, "output": ["INT", "COLOR"], "output_is_list": [false, false], "output_name": ["rgb_int", "hex"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ColorToRGBInt", "display_name": "Color Picker", "description": "Return a color RGB integer value and hexadecimal representation.", "python_module": "comfy_extras.nodes_color", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CreateList": {"input": {"required": {"inputs": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"input": ["COMFY_MATCHTYPE_V3", {"template": {"template_id": "type", "allowed_types": "*"}}]}}, "prefix": "input", "min": 1, "max": 10}}]}}, "input_order": {"required": ["inputs"]}, "is_input_list": true, "output": ["COMFY_MATCHTYPE_V3"], "output_is_list": [true], "output_name": ["list"], "output_tooltips": [null], "output_matchtypes": ["type"], "name": "CreateList", "display_name": "Create List", "description": "", "python_module": "comfy_extras.nodes_toolkit", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["Image Iterator", "Text Iterator", "Iterator"], "essentials_category": null, "has_intermediate_output": false}, "NAGuidance": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to apply NAG to."}], "nag_scale": ["FLOAT", {"tooltip": "The guidance scale factor. Higher values push further from the negative prompt.", "default": 5.0, "min": 0.0, "max": 50.0, "step": 0.1}], "nag_alpha": ["FLOAT", {"tooltip": "Blending factor for the normalized attention. 1.0 is full replacement, 0.0 is no effect.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "nag_tau": ["FLOAT", {"default": 1.5, "min": 1.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "nag_scale", "nag_alpha", "nag_tau"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The patched model with NAG enabled."], "output_matchtypes": null, "name": "NAGuidance", "display_name": "Normalized Attention Guidance", "description": "Applies Normalized Attention Guidance to models, enabling negative prompts on distilled/schnell models.", "python_module": "comfy_extras.nodes_nag", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SDPoseKeypointExtractor": {"input": {"required": {"model": ["MODEL", {}], "vae": ["VAE", {}], "image": ["IMAGE", {}], "batch_size": ["INT", {"default": 16, "min": 1, "max": 10000, "step": 1}]}, "optional": {"bboxes": ["BOUNDING_BOX", {"tooltip": "Optional bounding boxes for more accurate detections. Required for multi-person detection.", "default": {"x": 0, "y": 0, "width": 512, "height": 512}, "socketless": true, "forceInput": true}]}}, "input_order": {"required": ["model", "vae", "image", "batch_size"], "optional": ["bboxes"]}, "is_input_list": false, "output": ["POSE_KEYPOINT"], "output_is_list": [false], "output_name": ["keypoints"], "output_tooltips": ["Keypoints in OpenPose frame format (canvas_width, canvas_height, people)"], "output_matchtypes": null, "name": "SDPoseKeypointExtractor", "display_name": "SDPose Keypoint Extractor", "description": "Extract pose keypoints from images using the SDPose model: https://huggingface.co/Comfy-Org/SDPose/tree/main/checkpoints", "python_module": "comfy_extras.nodes_sdpose", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["openpose", "pose detection", "preprocessor", "keypoints", "sdpose"], "essentials_category": null, "has_intermediate_output": false}, "SDPoseDrawKeypoints": {"input": {"required": {"keypoints": ["POSE_KEYPOINT", {}], "draw_body": ["BOOLEAN", {"default": true}], "draw_hands": ["BOOLEAN", {"default": true}], "draw_face": ["BOOLEAN", {"default": true}], "draw_feet": ["BOOLEAN", {"default": false}], "stick_width": ["INT", {"default": 4, "min": 1, "max": 10, "step": 1}], "face_point_size": ["INT", {"default": 3, "min": 1, "max": 10, "step": 1}], "score_threshold": ["FLOAT", {"default": 0.3, "min": 0.0, "max": 1.0, "step": 0.01}], "draw_head": ["BOOLEAN", {"default": true}]}}, "input_order": {"required": ["keypoints", "draw_body", "draw_hands", "draw_face", "draw_feet", "stick_width", "face_point_size", "score_threshold", "draw_head"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "SDPoseDrawKeypoints", "display_name": "SDPose Draw Keypoints", "description": "", "python_module": "comfy_extras.nodes_sdpose", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["openpose", "pose detection", "preprocessor", "keypoints", "pose"], "essentials_category": null, "has_intermediate_output": false}, "SDPoseFaceBBoxes": {"input": {"required": {"keypoints": ["POSE_KEYPOINT", {}], "scale": ["FLOAT", {"tooltip": "Multiplier for the bounding box area around each detected face.", "default": 1.5, "min": 1.0, "max": 10.0, "step": 0.1}], "force_square": ["BOOLEAN", {"tooltip": "Expand the shorter bbox axis so the crop region is always square.", "default": true}]}}, "input_order": {"required": ["keypoints", "scale", "force_square"]}, "is_input_list": false, "output": ["BOUNDING_BOX"], "output_is_list": [false], "output_name": ["bboxes"], "output_tooltips": ["Face bounding boxes per frame, compatible with SDPoseKeypointExtractor bboxes input."], "output_matchtypes": null, "name": "SDPoseFaceBBoxes", "display_name": "SDPose Face Bounding Boxes", "description": "", "python_module": "comfy_extras.nodes_sdpose", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["face bbox", "face bounding box", "pose", "keypoints"], "essentials_category": null, "has_intermediate_output": false}, "CropByBBoxes": {"input": {"required": {"image": ["IMAGE", {}], "bboxes": ["BOUNDING_BOX", {"default": {"x": 0, "y": 0, "width": 512, "height": 512}, "socketless": true, "forceInput": true}], "output_width": ["INT", {"tooltip": "Width each crop is resized to.", "default": 512, "min": 64, "max": 4096, "step": 8}], "output_height": ["INT", {"tooltip": "Height each crop is resized to.", "default": 512, "min": 64, "max": 4096, "step": 8}], "padding": ["INT", {"tooltip": "Extra padding in pixels added on each side of the bbox before cropping.", "default": 0, "min": 0, "max": 1024, "step": 1}], "keep_aspect": ["COMBO", {"tooltip": "Whether to stretch the crop to fit the output size, or pad with black pixels to preserve aspect ratio.", "default": "stretch", "multiselect": false, "options": ["stretch", "pad"]}]}}, "input_order": {"required": ["image", "bboxes", "output_width", "output_height", "padding", "keep_aspect"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": ["All crops stacked into a single image batch."], "output_matchtypes": null, "name": "CropByBBoxes", "display_name": "Crop By Bounding Boxes", "description": "Crop and resize regions from the input image batch based on provided bounding boxes.", "python_module": "comfy_extras.nodes_sdpose", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["crop", "face crop", "bbox crop", "pose", "bounding box"], "essentials_category": null, "has_intermediate_output": false}, "ComfyMathExpression": {"input": {"required": {"expression": ["STRING", {"default": "a + b", "multiline": true}], "values": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"value": ["FLOAT,INT,BOOLEAN", {}]}}, "names": ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"], "min": 1}}]}}, "input_order": {"required": ["expression", "values"]}, "is_input_list": false, "output": ["FLOAT", "INT", "BOOLEAN"], "output_is_list": [false, false, false], "output_name": ["FLOAT", "INT", "BOOL"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "ComfyMathExpression", "display_name": "Math Expression", "description": "", "python_module": "comfy_extras.nodes_math", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["expression", "formula", "calculate", "calculator", "eval", "math"], "essentials_category": null, "has_intermediate_output": false}, "ComfyNumberConvert": {"input": {"required": {"value": ["INT,FLOAT,STRING,BOOLEAN", {"display_name": "value"}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["FLOAT", "INT"], "output_is_list": [false, false], "output_name": ["FLOAT", "INT"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ComfyNumberConvert", "display_name": "Convert Number", "description": "", "python_module": "comfy_extras.nodes_number_convert", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["int to float", "float to int", "number convert", "int2float", "float2int", "cast", "parse number", "string to number", "bool to int"], "essentials_category": null, "has_intermediate_output": false}, "Painter": {"input": {"required": {"mask": ["STRING", {"widgetType": "PAINTER", "image_upload": true, "default": "", "socketless": true, "multiline": false}], "width": ["INT", {"hidden": true, "default": 512, "socketless": true, "min": 64, "max": 4096, "step": 64}], "height": ["INT", {"hidden": true, "default": 512, "socketless": true, "min": 64, "max": 4096, "step": 64}], "bg_color": ["COLOR", {"default": "#000000", "socketless": true}]}, "optional": {"image": ["IMAGE", {"tooltip": "Optional base image to paint over"}]}}, "input_order": {"required": ["mask", "width", "height", "bg_color"], "optional": ["image"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Painter", "display_name": "Painter", "description": "", "python_module": "comfy_extras.nodes_painter", "category": "image", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": true}, "CurveEditor": {"input": {"required": {"curve": ["CURVE", {"default": {"points": [[0.0, 0.0], [1.0, 1.0]], "interpolation": "monotone_cubic"}, "socketless": true}]}, "optional": {"histogram": ["HISTOGRAM", {}]}}, "input_order": {"required": ["curve"], "optional": ["histogram"]}, "is_input_list": false, "output": ["CURVE"], "output_is_list": [false], "output_name": ["curve"], "output_tooltips": [null], "output_matchtypes": null, "name": "CurveEditor", "display_name": "Curve Editor", "description": "", "python_module": "comfy_extras.nodes_curve", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageHistogram": {"input": {"required": {"image": ["IMAGE", {}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["HISTOGRAM", "HISTOGRAM", "HISTOGRAM", "HISTOGRAM", "HISTOGRAM"], "output_is_list": [false, false, false, false, false], "output_name": ["rgb", "luminance", "red", "green", "blue"], "output_tooltips": [null, null, null, null, null], "output_matchtypes": null, "name": "ImageHistogram", "display_name": "Image Histogram", "description": "", "python_module": "comfy_extras.nodes_curve", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LoadBackgroundRemovalModel": {"input": {"required": {"bg_removal_name": ["COMBO", {"tooltip": "The model used to remove backgrounds from images", "multiselect": false, "options": []}]}}, "input_order": {"required": ["bg_removal_name"]}, "is_input_list": false, "output": ["BACKGROUND_REMOVAL"], "output_is_list": [false], "output_name": ["bg_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "LoadBackgroundRemovalModel", "display_name": "Load Background Removal Model", "description": "", "python_module": "comfy_extras.nodes_bg_removal", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RemoveBackground": {"input": {"required": {"bg_removal_model": ["BACKGROUND_REMOVAL", {"tooltip": "Background removal model used to generate the mask"}], "image": ["IMAGE", {"tooltip": "Input image to remove the background from"}]}}, "input_order": {"required": ["bg_removal_model", "image"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["mask"], "output_tooltips": ["Generated foreground mask"], "output_matchtypes": null, "name": "RemoveBackground", "display_name": "Remove Background", "description": "Generates a foreground mask to remove the background from an image using a background removal model.", "python_module": "comfy_extras.nodes_bg_removal", "category": "image/background removal", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RTDETR_detect": {"input": {"required": {"model": ["MODEL", {"display_name": "model"}], "image": ["IMAGE", {"display_name": "image"}], "threshold": ["FLOAT", {"display_name": "threshold", "default": 0.5}], "class_name": ["COMBO", {"tooltip": "Filter detections by class. Set to 'all' to disable filtering.", "default": "all", "multiselect": false, "options": ["all", "person", "bicycle", "car", "motorcycle", "airplane", "bus", "train", "truck", "boat", "traffic light", "fire hydrant", "stop sign", "parking meter", "bench", "bird", "cat", "dog", "horse", "sheep", "cow", "elephant", "bear", "zebra", "giraffe", "backpack", "umbrella", "handbag", "tie", "suitcase", "frisbee", "skis", "snowboard", "sports ball", "kite", "baseball bat", "baseball glove", "skateboard", "surfboard", "tennis racket", "bottle", "wine glass", "cup", "fork", "knife", "spoon", "bowl", "banana", "apple", "sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza", "donut", "cake", "chair", "couch", "potted plant", "bed", "dining table", "toilet", "tv", "laptop", "mouse", "remote", "keyboard", "cell phone", "microwave", "oven", "toaster", "sink", "refrigerator", "book", "clock", "vase", "scissors", "teddy bear", "hair drier", "toothbrush"]}], "max_detections": ["INT", {"display_name": "max_detections", "tooltip": "Maximum number of detections to return per image. In order of descending confidence score.", "default": 100}]}}, "input_order": {"required": ["model", "image", "threshold", "class_name", "max_detections"]}, "is_input_list": false, "output": ["BOUNDING_BOX"], "output_is_list": [false], "output_name": ["bboxes"], "output_tooltips": [null], "output_matchtypes": null, "name": "RTDETR_detect", "display_name": "Run Real-Time Detection (RT-DETR)", "description": "", "python_module": "comfy_extras.nodes_rtdetr", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["bbox", "bounding box", "object detection", "coco"], "essentials_category": null, "has_intermediate_output": false}, "DrawBBoxes": {"input": {"required": {"bboxes": ["BOUNDING_BOX", {"default": {"x": 0, "y": 0, "width": 512, "height": 512}, "socketless": true, "forceInput": true}]}, "optional": {"image": ["IMAGE", {}]}}, "input_order": {"required": ["bboxes"], "optional": ["image"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["out_image"], "output_tooltips": [null], "output_matchtypes": null, "name": "DrawBBoxes", "display_name": "Draw BBoxes", "description": "", "python_module": "comfy_extras.nodes_rtdetr", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["bbox", "bounding box", "object detection", "rt_detr", "visualize detections", "coco"], "essentials_category": null, "has_intermediate_output": false}, "FrameInterpolationModelLoader": {"input": {"required": {"model_name": ["COMBO", {"tooltip": "Select a frame interpolation model to load. Models must be placed in the 'frame_interpolation' folder.", "multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["INTERP_MODEL"], "output_is_list": [false], "output_name": ["INTERP_MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "FrameInterpolationModelLoader", "display_name": "Load Frame Interpolation Model", "description": "", "python_module": "comfy_extras.nodes_frame_interpolation", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FrameInterpolate": {"input": {"required": {"interp_model": ["INTERP_MODEL", {}], "images": ["IMAGE", {}], "multiplier": ["INT", {"default": 2, "min": 2, "max": 16}]}}, "input_order": {"required": ["interp_model", "images", "multiplier"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FrameInterpolate", "display_name": "Run Frame Interpolation Model", "description": "", "python_module": "comfy_extras.nodes_frame_interpolation", "category": "video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["rife", "film", "frame interpolation", "slow motion", "interpolate frames", "vfi"], "essentials_category": null, "has_intermediate_output": false}, "SAM3_Detect": {"input": {"required": {"model": ["MODEL", {"display_name": "model"}], "image": ["IMAGE", {"display_name": "image"}], "threshold": ["FLOAT", {"display_name": "threshold", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "refine_iterations": ["INT", {"display_name": "refine_iterations", "tooltip": "SAM decoder refinement passes (0=use raw detector masks)", "default": 2, "min": 0, "max": 5}], "individual_masks": ["BOOLEAN", {"display_name": "individual_masks", "tooltip": "Output per-object masks instead of union", "default": false}]}, "optional": {"conditioning": ["CONDITIONING", {"display_name": "conditioning", "tooltip": "Text conditioning from CLIPTextEncode"}], "bboxes": ["BOUNDING_BOX", {"display_name": "bboxes", "tooltip": "Bounding boxes to segment within", "default": {"x": 0, "y": 0, "width": 512, "height": 512}, "socketless": true, "forceInput": true}], "positive_coords": ["STRING", {"display_name": "positive_coords", "tooltip": "Positive point prompts as JSON [{\"x\": int, \"y\": int}, ...] (pixel coords)", "forceInput": true, "multiline": false}], "negative_coords": ["STRING", {"display_name": "negative_coords", "tooltip": "Negative point prompts as JSON [{\"x\": int, \"y\": int}, ...] (pixel coords)", "forceInput": true, "multiline": false}]}}, "input_order": {"required": ["model", "image", "threshold", "refine_iterations", "individual_masks"], "optional": ["conditioning", "bboxes", "positive_coords", "negative_coords"]}, "is_input_list": false, "output": ["MASK", "BOUNDING_BOX"], "output_is_list": [false, false], "output_name": ["masks", "bboxes"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SAM3_Detect", "display_name": "SAM3 Detect", "description": "", "python_module": "comfy_extras.nodes_sam3", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["sam3", "segment anything", "open vocabulary", "text detection", "segment"], "essentials_category": null, "has_intermediate_output": false}, "SAM3_VideoTrack": {"input": {"required": {"images": ["IMAGE", {"display_name": "images", "tooltip": "Video frames as batched images"}], "model": ["MODEL", {"display_name": "model"}], "detection_threshold": ["FLOAT", {"display_name": "detection_threshold", "tooltip": "Score threshold for text-prompted detection.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "max_objects": ["INT", {"display_name": "max_objects", "tooltip": "Max tracked objects. Initial masks count toward this limit. 0 uses the internal cap of 64.", "default": 4, "min": 0, "max": 64}], "detect_interval": ["INT", {"display_name": "detect_interval", "tooltip": "Run detection every N frames (1=every frame). Higher values save compute.", "default": 1, "min": 1}]}, "optional": {"initial_mask": ["MASK", {"display_name": "initial_mask", "tooltip": "Mask(s) for the first frame to track (one per object)"}], "conditioning": ["CONDITIONING", {"display_name": "conditioning", "tooltip": "Text conditioning for detecting new objects during tracking"}]}}, "input_order": {"required": ["images", "model", "detection_threshold", "max_objects", "detect_interval"], "optional": ["initial_mask", "conditioning"]}, "is_input_list": false, "output": ["SAM3_TRACK_DATA"], "output_is_list": [false], "output_name": ["track_data"], "output_tooltips": [null], "output_matchtypes": null, "name": "SAM3_VideoTrack", "display_name": "Run SAM3 Video Track", "description": "", "python_module": "comfy_extras.nodes_sam3", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["sam3", "video", "track", "propagate"], "essentials_category": null, "has_intermediate_output": false}, "SAM3_TrackPreview": {"input": {"required": {"track_data": ["SAM3_TRACK_DATA", {"display_name": "track_data"}], "opacity": ["FLOAT", {"display_name": "opacity", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.05}], "fps": ["FLOAT", {"display_name": "fps", "default": 24.0, "min": 1.0, "max": 120.0, "step": 1.0}]}, "optional": {"images": ["IMAGE", {"display_name": "images"}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["track_data", "opacity", "fps"], "optional": ["images"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SAM3_TrackPreview", "display_name": "SAM3 Track Preview", "description": "", "python_module": "comfy_extras.nodes_sam3", "category": "image/detection", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SAM3_TrackToMask": {"input": {"required": {"track_data": ["SAM3_TRACK_DATA", {"display_name": "track_data"}], "object_indices": ["STRING", {"display_name": "object_indices", "tooltip": "Comma-separated object indices to include (e.g. '0,2,3'). Empty = all objects.", "default": "", "multiline": false}]}}, "input_order": {"required": ["track_data", "object_indices"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["masks"], "output_tooltips": [null], "output_matchtypes": null, "name": "SAM3_TrackToMask", "display_name": "SAM3 Track to Mask", "description": "", "python_module": "comfy_extras.nodes_sam3", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanSCAILToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 512, "min": 32, "max": 16384, "step": 32}], "height": ["INT", {"default": 896, "min": 32, "max": 16384, "step": 32}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "pose_strength": ["FLOAT", {"tooltip": "Strength of the pose latent.", "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "pose_start": ["FLOAT", {"tooltip": "Start step of the pose conditioning.", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}], "pose_end": ["FLOAT", {"tooltip": "End step of the pose conditioning.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "video_frame_offset": ["INT", {"tooltip": "Cumulative output frame this chunk begins at. Wire from the previous chunk's video_frame_offset output.", "default": 0, "min": 0, "max": 16384, "step": 1}], "previous_frame_count": ["INT", {"tooltip": "Tail frames of previous_frames to anchor. SCAIL-2 trained at 5 (81-frame chunks, 76-frame step).", "default": 5, "min": 1, "max": 16384, "step": 4}]}, "optional": {"pose_video": ["IMAGE", {"tooltip": "Video used for pose conditioning. Will be downscaled to half the resolution of the main video."}], "pose_video_mask": ["IMAGE", {"tooltip": "SCAIL-2 only. Colored per-identity SAM3 mask video at the same resolution as pose_video."}], "replacement_mode": ["BOOLEAN", {"tooltip": "SCAIL-2 only. False = Animation Mode (pose_video_mask should have black background). True = Replacement Mode (pose_video_mask should have white background).", "default": false}], "reference_image": ["IMAGE", {"tooltip": "Reference image. The first image is the primary reference (composite all identities onto it). SCAIL-2: extra batch images are used as additional views (back view, close-up, occluded background), each needing a matching reference_image_mask in that identity's color."}], "reference_image_mask": ["IMAGE", {"tooltip": "SCAIL-2 only. Colored reference mask, batch matching reference_image (first = primary reference mask, rest = identity masks for the additional reference_image)."}], "clip_vision_output": ["CLIP_VISION_OUTPUT", {"tooltip": "CLIP vision features for conditioning. Model is trained with stretch resize to aspect ratio."}], "previous_frames": ["IMAGE", {"tooltip": "SCAIL-2 only. Full decoded output of the previous chunk. Only the last previous_frame_count are used as the extension anchor."}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size", "pose_strength", "pose_start", "pose_end", "video_frame_offset", "previous_frame_count"], "optional": ["pose_video", "pose_video_mask", "replacement_mode", "reference_image", "reference_image_mask", "clip_vision_output", "previous_frames"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT", "INT"], "output_is_list": [false, false, false, false], "output_name": ["positive", "negative", "latent", "video_frame_offset"], "output_tooltips": [null, null, "Empty latent of the generation size.", "Adjusted offset + length. Wire into the next chunk."], "output_matchtypes": null, "name": "WanSCAILToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_scail", "category": "model/conditioning/wan/scail", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SCAIL2ColoredMask": {"input": {"required": {"driving_track_data": ["SAM3_TRACK_DATA", {"tooltip": "SAM3 track of the driving pose video. Will be rendered into the pose_video_mask output."}], "object_indices": ["STRING", {"tooltip": "Comma-separated list of person indices to include (e.g. '0,2,3'). Applied to both reference and pose video masks. Empty = all.", "default": "", "multiline": false}], "sort_by": ["COMBO", {"tooltip": "Order in which palette colors are assigned to the tracked objects (applied to both reference and pose video so each identity keeps the same color). Objects that appear in earlier frames always come first; within a frame, left_to_right = leftmost object (by centroid at first appearance) gets the first color, area = biggest object (by mask area at first appearance) gets the first color; none = keep SAM3's order.", "default": "left_to_right", "multiselect": false, "options": ["none", "left_to_right", "area"]}], "replacement_mode": ["BOOLEAN", {"tooltip": "False = Animation Mode (pose_video_mask has black background, reference_image_mask has white background). True = Replacement Mode (pose_video_mask has white background, reference_image_mask has black background).", "default": false}]}, "optional": {"ref_track_data": ["SAM3_TRACK_DATA,MASK", {"display_name": "reference_masks", "tooltip": "SAM3 track of the reference image(s) (one identity per object, colored in batch order), or a plain MASK of the reference subject (rendered as a single identity)."}]}}, "input_order": {"required": ["driving_track_data", "object_indices", "sort_by", "replacement_mode"], "optional": ["ref_track_data"]}, "is_input_list": false, "output": ["IMAGE", "IMAGE"], "output_is_list": [false, false], "output_name": ["pose_video_mask", "reference_image_mask"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SCAIL2ColoredMask", "display_name": "Create SCAIL-2 Colored Mask", "description": "", "python_module": "comfy_extras.nodes_scail", "category": "model/conditioning/wan/scail", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpticalFlowLoader": {"input": {"required": {"model_name": ["COMBO", {"tooltip": "Optical flow model to load. Files must be placed in the 'optical_flow' folder. Today only torchvision's raft_large.pth is supported.", "multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["OPTICAL_FLOW"], "output_is_list": [false], "output_name": ["OPTICAL_FLOW"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpticalFlowLoader", "display_name": "Load Optical Flow Model", "description": "", "python_module": "comfy_extras.nodes_void", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VOIDQuadmaskPreprocess": {"input": {"required": {"mask": ["MASK", {}], "dilate_width": ["INT", {"tooltip": "Dilation radius for the primary mask region (0 = no dilation)", "default": 0, "min": 0, "max": 50, "step": 1}]}}, "input_order": {"required": ["mask", "dilate_width"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["quadmask"], "output_tooltips": [null], "output_matchtypes": null, "name": "VOIDQuadmaskPreprocess", "display_name": "VOID Quadmask Preprocessor", "description": "", "python_module": "comfy_extras.nodes_void", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VOIDInpaintConditioning": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "video": ["IMAGE", {"tooltip": "Source video frames [T, H, W, 3]"}], "quadmask": ["MASK", {"tooltip": "Preprocessed quadmask from VOIDQuadmaskPreprocess [T, H, W]"}], "width": ["INT", {"default": 672, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 384, "min": 16, "max": 16384, "step": 8}], "length": ["INT", {"tooltip": "Number of pixel frames to process. For CogVideoX-Fun-V1.5 (patch_size_t=2), latent_t must be even \u2014 lengths that produce odd latent_t are rounded down (e.g. 49 \u2192 45).", "default": 45, "min": 1, "max": 16384, "step": 1}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["positive", "negative", "vae", "video", "quadmask", "width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "VOIDInpaintConditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_void", "category": "model/conditioning/void", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VOIDWarpedNoise": {"input": {"required": {"optical_flow": ["OPTICAL_FLOW", {"tooltip": "Optical flow model from OpticalFlowLoader (RAFT-large)."}], "video": ["IMAGE", {"tooltip": "Pass 1 output video frames [T, H, W, 3]"}], "width": ["INT", {"default": 672, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 384, "min": 16, "max": 16384, "step": 8}], "length": ["INT", {"tooltip": "Number of pixel frames. Rounded down to make latent_t even (patch_size_t=2 requirement), e.g. 49 \u2192 45.", "default": 45, "min": 1, "max": 16384, "step": 1}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["optical_flow", "video", "width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["warped_noise"], "output_tooltips": [null], "output_matchtypes": null, "name": "VOIDWarpedNoise", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_void", "category": "model/latent/void", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VOIDWarpedNoiseSource": {"input": {"required": {"warped_noise": ["LATENT", {"tooltip": "Warped noise latent from VOIDWarpedNoise"}]}}, "input_order": {"required": ["warped_noise"]}, "is_input_list": false, "output": ["NOISE"], "output_is_list": [false], "output_name": ["NOISE"], "output_tooltips": [null], "output_matchtypes": null, "name": "VOIDWarpedNoiseSource", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_void", "category": "model/latent/void", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VOIDSampler": {"input": {"required": {}}, "input_order": {"required": []}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "VOIDSampler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_void", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanDancerVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"tooltip": "The number of frames in the generated video. Should stay 149 for WanDancer.", "default": 149, "min": 1, "max": 16384, "step": 4}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {"tooltip": "The CLIP vision embeds for the first frame."}], "clip_vision_output_ref": ["CLIP_VISION_OUTPUT", {"tooltip": "The CLIP vision embeds for the reference image."}], "start_image": ["IMAGE", {"tooltip": "The initial image(s) to be encoded, can be any number of frames."}], "mask": ["MASK", {"tooltip": "Image conditioning mask for the start image(s). White is kept, black is generated. Used for the local generations."}], "audio_encoder_output": ["AUDIO_ENCODER_OUTPUT", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length"], "optional": ["clip_vision_output", "clip_vision_output_ref", "start_image", "mask", "audio_encoder_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, "Empty latent."], "output_matchtypes": null, "name": "WanDancerVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wandancer", "category": "model/conditioning/wan/dancer", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanDancerEncodeAudio": {"input": {"required": {"audio": ["AUDIO", {}], "video_frames": ["INT", {"default": 149, "min": 1, "max": 16384, "step": 4}], "audio_inject_scale": ["FLOAT", {"tooltip": "The scale for the audio features when injected into the video model.", "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["audio", "video_frames", "audio_inject_scale"]}, "is_input_list": false, "output": ["AUDIO_ENCODER_OUTPUT", "STRING"], "output_is_list": [false, false], "output_name": ["audio_encoder_output", "fps_string"], "output_tooltips": [null, "The calculated fps based on the audio length and the number of video frames. Used in the prompt."], "output_matchtypes": null, "name": "WanDancerEncodeAudio", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wandancer", "category": "model/conditioning/wan/dancer", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanDancerPadKeyframes": {"input": {"required": {"images": ["IMAGE", {}], "segment_length": ["INT", {"tooltip": "Length of this segment (usually 149 frames)", "default": 149, "min": 1, "max": 10000}], "segment_index": ["INT", {"tooltip": "Which segment this is (0 for first, 1 for second, etc.)", "default": 0, "min": 0, "max": 100}], "audio": ["AUDIO", {"tooltip": "Audio to calculate total output frames from and extract segment audio."}]}}, "input_order": {"required": ["images", "segment_length", "segment_index", "audio"]}, "is_input_list": false, "output": ["IMAGE", "MASK", "AUDIO"], "output_is_list": [false, false, false], "output_name": ["keyframes_sequence", "keyframes_mask", "audio_segment"], "output_tooltips": ["Padded keyframe sequence", "Mask indicating valid frames", "Audio segment for this video segment"], "output_matchtypes": null, "name": "WanDancerPadKeyframes", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wandancer", "category": "image/video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanDancerPadKeyframesList": {"input": {"required": {"images": ["IMAGE", {}], "segment_length": ["INT", {"tooltip": "Length of each segment (usually 149 frames)", "default": 149, "min": 1, "max": 10000}], "num_segments": ["INT", {"tooltip": "How many padded segments to emit as lists.", "default": 1, "min": 1, "max": 100}], "audio": ["AUDIO", {"tooltip": "Audio to slice for each emitted segment."}]}}, "input_order": {"required": ["images", "segment_length", "num_segments", "audio"]}, "is_input_list": false, "output": ["IMAGE", "MASK", "AUDIO"], "output_is_list": [true, true, true], "output_name": ["keyframes_sequence", "keyframes_mask", "audio_segment"], "output_tooltips": ["Padded keyframe sequences", "Masks indicating valid frames", "Audio segment for each video segment"], "output_matchtypes": null, "name": "WanDancerPadKeyframesList", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wandancer", "category": "image/video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyHiDreamO1LatentImage": {"input": {"required": {"width": ["INT", {"default": 2048, "min": 64, "max": 4096, "step": 32}], "height": ["INT", {"default": 2048, "min": 64, "max": 4096, "step": 32}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyHiDreamO1LatentImage", "display_name": "Empty HiDream-O1 Latent Image", "description": "Empty pixel-space latent for HiDream-O1-Image. The model was trained at ~4 megapixels; lower resolutions go off-distribution and quality regresses noticeably. Trained resolutions: 2048x2048, 2304x1728, 1728x2304, 2560x1440, 1440x2560, 2496x1664, 1664x2496, 3104x1312, 1312x3104, 2304x1792, 1792x2304.", "python_module": "comfy_extras.nodes_hidream_o1", "category": "model/latent/hidream", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HiDreamO1ReferenceImages": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Reference images. 1 image = instruction edit; 2-10 images = multi reference.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 1}}]}}, "input_order": {"required": ["positive", "negative", "images"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "HiDreamO1ReferenceImages", "display_name": "HiDream-O1 Reference Images", "description": "Attach 1-10 reference images to conditioning, one for edit instructionor multiple for subject-driven personalization.", "python_module": "comfy_extras.nodes_hidream_o1", "category": "model/conditioning/hidream", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HiDreamO1PatchSeamSmoothing": {"input": {"required": {"model": ["MODEL", {}], "start_percent": ["FLOAT", {"tooltip": "Sampling progress (0=start, 1=end) at which the blend turns ON.", "default": 0.8, "min": 0.0, "max": 1.0, "step": 0.01}], "end_percent": ["FLOAT", {"tooltip": "Sampling progress at which the blend turns OFF.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "pattern": ["COMBO", {"tooltip": "Shift layout. single_shift: one pass at the natural patch grid + others offset. symmetric: all passes off-grid, shifts split around origin.", "default": "single_shift", "multiselect": false, "options": ["single_shift", "symmetric"]}], "passes": ["COMBO", {"tooltip": "Number of passes per gated step. 2/4 = fixed. ramp_*: pass count increases as sampling approaches end (more smoothing where seams are most visible).", "default": "2", "multiselect": false, "options": ["2", "4", "ramp_2_4", "ramp_2_4_8"]}], "blend": ["COMBO", {"tooltip": "average: equal-weight mean. window: Hann-windowed weighting favoring each pass away from its patch boundaries. median: per-pixel median, rejects wraparound-outlier passes.", "default": "average", "multiselect": false, "options": ["average", "window", "median"]}], "strength": ["FLOAT", {"tooltip": "Interpolation between the natural-grid pred (0) and the averaged result (1).", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "start_percent", "end_percent", "pattern", "passes", "blend", "strength"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "HiDreamO1PatchSeamSmoothing", "display_name": "HiDream-O1 Patch Seam Smoothing", "description": "Average the model output across multiple shifted patch-grid positions during the late portion of sampling. Cancels seams.", "python_module": "comfy_extras.nodes_hidream_o1", "category": "model/patch/hidream", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveGLB": {"input": {"required": {"mesh": ["MESH,FILE_3D_GLB,FILE_3D_GLTF,FILE_3D_OBJ,FILE_3D_FBX,FILE_3D_STL,FILE_3D_USDZ,FILE_3D_PLY,FILE_3D_SPLAT,FILE_3D_SPZ,FILE_3D_KSPLAT,FILE_3D_SPLAT_ANY,FILE_3D_POINT_CLOUD_ANY,FILE_3D", {"tooltip": "Mesh or 3D file to save"}], "filename_prefix": ["STRING", {"default": "3d/ComfyUI", "multiline": false}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["mesh", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveGLB", "display_name": "Save 3D Model", "description": "", "python_module": "comfy_extras.nodes_save_3d", "category": "3d", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export 3d model", "save mesh"], "essentials_category": "Basics", "has_intermediate_output": false}, "LoadMoGeModel": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["MOGE_MODEL"], "output_is_list": [false], "output_name": ["MOGE_MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "LoadMoGeModel", "display_name": "Load MoGe Model", "description": "", "python_module": "comfy_extras.nodes_moge", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MoGeInference": {"input": {"required": {"moge_model": ["MOGE_MODEL", {}], "image": ["IMAGE", {}], "resolution_level": ["INT", {"tooltip": "0 = fastest, 9 = most detail.", "default": 9, "min": 0, "max": 9}], "fov_x_degrees": ["FLOAT", {"tooltip": "Horizontal field of view of the source camera. Sets the focal length used to unproject the depth map into 3D. 0 = auto-recover from the predicted points.", "advanced": true, "default": 0.0, "min": 0.0, "max": 170.0, "step": 0.1}], "batch_size": ["INT", {"tooltip": "Images per inference call. Lower if you OOM on a long video / image set.", "default": 4, "min": 1, "max": 64}], "force_projection": ["BOOLEAN", {"advanced": true, "default": true}], "apply_mask": ["BOOLEAN", {"tooltip": "Set masked-out (sky / invalid) pixels to inf in points and depth so meshing culls them. Disable to keep the raw predicted geometry everywhere; the mask is still returned separately.", "advanced": true, "default": true}]}}, "input_order": {"required": ["moge_model", "image", "resolution_level", "fov_x_degrees", "batch_size", "force_projection", "apply_mask"]}, "is_input_list": false, "output": ["MOGE_GEOMETRY"], "output_is_list": [false], "output_name": ["moge_geometry"], "output_tooltips": [null], "output_matchtypes": null, "name": "MoGeInference", "display_name": "Run MoGe Inference", "description": "Run MoGe on a single image to estimate depth and geometry.", "python_module": "comfy_extras.nodes_moge", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["moge", "depth", "geometry", "depth estimation", "geometry estimation"], "essentials_category": null, "has_intermediate_output": false}, "MoGePanoramaInference": {"input": {"required": {"moge_model": ["MOGE_MODEL", {}], "image": ["IMAGE", {"tooltip": "Equirectangular panorama (any aspect)."}], "resolution_level": ["INT", {"tooltip": "Per-view detail (0 = fastest, 9 = most detailed).", "default": 9, "min": 0, "max": 9}], "split_resolution": ["INT", {"tooltip": "Resolution of each perspective split.", "default": 512, "min": 256, "max": 1024}], "merge_resolution": ["INT", {"tooltip": "Long-side resolution of the merged equirect distance map.", "default": 1920, "min": 256, "max": 8192}], "batch_size": ["INT", {"tooltip": "Views per inference batch (12 splits total).", "default": 4, "min": 1, "max": 12}]}}, "input_order": {"required": ["moge_model", "image", "resolution_level", "split_resolution", "merge_resolution", "batch_size"]}, "is_input_list": false, "output": ["MOGE_GEOMETRY"], "output_is_list": [false], "output_name": ["moge_geometry"], "output_tooltips": [null], "output_matchtypes": null, "name": "MoGePanoramaInference", "display_name": "Run MoGe Panorama Inference", "description": "Run MoGe on an equirectangular panorama by splitting it into 12 perspective views, running inference on each, and merging the results into a single depth map.", "python_module": "comfy_extras.nodes_moge", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["moge", "panorama", "depth", "geometry", "depth estimation", "geometry estimation"], "essentials_category": null, "has_intermediate_output": false}, "MoGeRender": {"input": {"required": {"moge_geometry": ["MOGE_GEOMETRY", {}], "output": ["COMBO", {"tooltip": "DirectX vs OpenGL controls the normal-map green-channel convention. DirectX: green = -Y down (Unreal). OpenGL: green = +Y up (Blender, Substance, Unity, glTF).", "default": "depth", "multiselect": false, "options": ["depth", "depth_colored", "normal_opengl", "normal_directx", "mask"]}]}}, "input_order": {"required": ["moge_geometry", "output"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MoGeRender", "display_name": "Render MoGe Geometry", "description": "Render a depth map or normal map from geometry data", "python_module": "comfy_extras.nodes_moge", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["moge", "render", "geometry", "depth", "normal"], "essentials_category": null, "has_intermediate_output": false}, "MoGePointMapToMesh": {"input": {"required": {"moge_geometry": ["MOGE_GEOMETRY", {}], "batch_index": ["INT", {"tooltip": "Which image of a batched MoGe geometry to mesh. Per-image vertex counts differ, so batches can't be stacked into a single MESH.", "default": 0, "min": 0, "max": 4096}], "decimation": ["INT", {"tooltip": "Vertex stride; 1 = full resolution.", "default": 1, "min": 1, "max": 8}], "discontinuity_threshold": ["FLOAT", {"tooltip": "Drop pixels whose 3x3 depth span exceeds this fraction. 0 = off.", "default": 0.04, "min": 0.0, "max": 1.0, "step": 0.01}], "texture": ["BOOLEAN", {"tooltip": "Carry the source image through as the baseColor texture.", "default": true}]}}, "input_order": {"required": ["moge_geometry", "batch_index", "decimation", "discontinuity_threshold", "texture"]}, "is_input_list": false, "output": ["MESH"], "output_is_list": [false], "output_name": ["MESH"], "output_tooltips": [null], "output_matchtypes": null, "name": "MoGePointMapToMesh", "display_name": "Convert MoGe Point Map to Mesh", "description": "Convert a MoGe point map into a 3D mesh.", "python_module": "comfy_extras.nodes_moge", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["moge", "mesh", "geometry", "point map"], "essentials_category": null, "has_intermediate_output": false}, "LoadMediaPipeFaceLandmarker": {"input": {"required": {"model_name": ["COMBO", {"tooltip": "Face detection model from models/detection/.", "multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["FACE_DETECTION_MODEL"], "output_is_list": [false], "output_name": ["FACE_DETECTION_MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "LoadMediaPipeFaceLandmarker", "display_name": "Load Face Detection Model (MediaPipe)", "description": "", "python_module": "comfy_extras.nodes_mediapipe", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["face", "facial", "mediapipe", "face landmark", "face mesh", "blazeface", "face detection"], "essentials_category": null, "has_intermediate_output": false}, "MediaPipeFaceLandmarker": {"input": {"required": {"face_detection_model": ["FACE_DETECTION_MODEL", {}], "image": ["IMAGE", {}], "detector_variant": ["COMBO", {"tooltip": "Face detector range. 'short' is tuned for close-up faces (within ~2 m of the camera); 'full' covers farther / smaller faces (up to ~5 m) but is slower. 'both' runs both detectors and keeps whichever found more faces per frame (~2\u00d7 detection cost).", "default": "short", "multiselect": false, "options": ["short", "full", "both"]}], "num_faces": ["INT", {"tooltip": "Maximum faces to return per frame. 0 = no cap (return all detected).", "default": 1, "min": 0, "max": 16, "step": 1}], "min_confidence": ["FLOAT", {"tooltip": "BlazeFace score threshold. Lower to catch small/occluded faces.", "advanced": true, "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "missing_frame_fallback": ["COMBO", {"tooltip": "Per-frame behaviour when detection fails in a batch. 'empty' leaves the frame faceless. 'previous' copies the most recent successful detection. 'interpolate' lerps landmarks/bbox/blendshapes between bracketing successful frames. Multi-face: pairs faces across frames by greedy bbox-centre NN.", "advanced": true, "default": "empty", "multiselect": false, "options": ["empty", "previous", "interpolate"]}]}}, "input_order": {"required": ["face_detection_model", "image", "detector_variant", "num_faces", "min_confidence", "missing_frame_fallback"]}, "is_input_list": false, "output": ["FACE_LANDMARKS", "BOUNDING_BOX"], "output_is_list": [false, false], "output_name": ["face_landmarks", "bboxes"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "MediaPipeFaceLandmarker", "display_name": "Detect Face Landmarks (MediaPipe)", "description": "Detects facial landmarks using MediaPipe model.", "python_module": "comfy_extras.nodes_mediapipe", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["face", "facial", "mediapipe", "face landmark", "face mesh", "blazeface", "face detection"], "essentials_category": null, "has_intermediate_output": false}, "MediaPipeFaceMeshVisualize": {"input": {"required": {"face_landmarks": ["FACE_LANDMARKS", {}], "connections": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "'all' = oval+eyes+brows+lips+irises+nose. 'fill' = solid face_oval polygon (silhouette mask). 'custom' = toggle each feature individually (including 'tesselation', the full 2547-edge wireframe).", "options": [{"key": "all", "inputs": {"required": {}}}, {"key": "fill", "inputs": {"required": {}}}, {"key": "custom", "inputs": {"required": {"face_oval": ["BOOLEAN", {"tooltip": "Draw the 'face_oval' connection set.", "default": true}], "lips": ["BOOLEAN", {"tooltip": "Draw the 'lips' connection set.", "default": true}], "left_eye": ["BOOLEAN", {"tooltip": "Draw the 'left_eye' connection set.", "default": true}], "right_eye": ["BOOLEAN", {"tooltip": "Draw the 'right_eye' connection set.", "default": true}], "left_eyebrow": ["BOOLEAN", {"tooltip": "Draw the 'left_eyebrow' connection set.", "default": true}], "right_eyebrow": ["BOOLEAN", {"tooltip": "Draw the 'right_eyebrow' connection set.", "default": true}], "irises": ["BOOLEAN", {"tooltip": "Draw the 'irises' connection set.", "default": true}], "nose": ["BOOLEAN", {"tooltip": "Draw the 'nose' connection set.", "default": true}], "tesselation": ["BOOLEAN", {"tooltip": "Draw the 'tesselation' connection set.", "default": false}]}}}]}], "color": ["COLOR", {"default": "#00ff00", "socketless": true}], "thickness": ["INT", {"tooltip": "Edge line thickness in pixels. 0 disables edge drawing.", "default": 1, "min": 0, "max": 8, "step": 1}], "point_size": ["INT", {"tooltip": "Landmark dot radius in pixels. 0 disables point drawing.", "default": 2, "min": 0, "max": 16, "step": 1}]}, "optional": {"image": ["IMAGE", {"tooltip": "If not connected, a black canvas will be used."}]}}, "input_order": {"required": ["face_landmarks", "connections", "color", "thickness", "point_size"], "optional": ["image"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MediaPipeFaceMeshVisualize", "display_name": "Visualize Face Landmarks (MediaPipe)", "description": "Draws face landmarks mesh on the input image.", "python_module": "comfy_extras.nodes_mediapipe", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["face", "facial", "mediapipe", "face landmark", "face mesh", "blazeface", "face detection", "visualize"], "essentials_category": null, "has_intermediate_output": false}, "MediaPipeFaceMask": {"input": {"required": {"face_landmarks": ["FACE_LANDMARKS", {}], "regions": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "'all' = union of face_oval+lips+eyes+irises (which collapses to face_oval since it encloses the rest). 'custom' = toggle each region individually for combos like lips+eyes.", "options": [{"key": "all", "inputs": {"required": {}}}, {"key": "custom", "inputs": {"required": {"face_oval": ["BOOLEAN", {"tooltip": "Include the 'face_oval' region in the mask.", "default": true}], "lips": ["BOOLEAN", {"tooltip": "Include the 'lips' region in the mask.", "default": false}], "left_eye": ["BOOLEAN", {"tooltip": "Include the 'left_eye' region in the mask.", "default": false}], "right_eye": ["BOOLEAN", {"tooltip": "Include the 'right_eye' region in the mask.", "default": false}], "irises": ["BOOLEAN", {"tooltip": "Include the 'irises' region in the mask.", "default": false}]}}}]}]}}, "input_order": {"required": ["face_landmarks", "regions"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "MediaPipeFaceMask", "display_name": "Draw Face Mask (MediaPipe)", "description": "Draws a mask from face landmarks.", "python_module": "comfy_extras.nodes_mediapipe", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["face", "facial", "mediapipe", "face mask", "blazeface", "face detection", "visualize"], "essentials_category": null, "has_intermediate_output": false}, "SplatToFile3D": {"input": {"required": {"splat": ["SPLAT", {}], "format": ["COMBO", {"tooltip": "ply: standard 3D Gaussian Splat with full spherical harmonics. ksplat: mkkellogg SplatBuffer (level 0, uncompressed), base color only spz: Niantic gzip-compressed (~10x smaller), base color only ", "multiselect": false, "options": ["ply", "ksplat", "spz"]}]}}, "input_order": {"required": ["splat", "format"]}, "is_input_list": false, "output": ["FILE_3D_SPLAT_ANY"], "output_is_list": [false], "output_name": ["model_3d"], "output_tooltips": [null], "output_matchtypes": null, "name": "SplatToFile3D", "display_name": "Create 3D File (from Splat)", "description": "Serialize a gaussian splat to a File3D object for Save / Preview 3D nodes. Supports one item per batch only.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["gaussian to ply", "splat to file", "export gaussian"], "essentials_category": null, "has_intermediate_output": false}, "File3DToSplat": {"input": {"required": {"model_3d": ["FILE_3D,FILE_3D_SPLAT_ANY,FILE_3D_PLY,FILE_3D_SPLAT,FILE_3D_KSPLAT,FILE_3D_SPZ", {"tooltip": "A gaussian splat 3D file"}]}}, "input_order": {"required": ["model_3d"]}, "is_input_list": false, "output": ["SPLAT"], "output_is_list": [false], "output_name": ["splat"], "output_tooltips": [null], "output_matchtypes": null, "name": "File3DToSplat", "display_name": "Get Splat", "description": "Parse a splat File3D into a gaussian splat. Inverse of Create 3D File (from Splat). Supported format: PLY, SPLAT, KSPLAT, SPZ. PLY carries full spherical harmonics, the other formats are base color only. Format is auto-detected from the file contents.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["load splat", "ply to splat", "import splat", "file to splat"], "essentials_category": null, "has_intermediate_output": false}, "RenderSplat": {"input": {"required": {"splat": ["SPLAT", {}], "width": ["INT", {"default": 1024, "min": 64, "max": 2048, "step": 8}], "height": ["INT", {"default": 1024, "min": 64, "max": 2048, "step": 8}], "frames": ["INT", {"tooltip": "-1, 0, 1 = single still image; >1 = turntable, the camera orbits over a full 360 turn (works with any camera_info). Negative value orbits the other way.", "default": 1, "min": -240, "max": 240}], "splat_scale": ["FLOAT", {"tooltip": "Multiplier on each splat's projected footprint (lower = crisper points, higher = softer/fuller surface).", "advanced": true, "default": 1.0, "min": 0.1, "max": 5.0, "step": 0.05}], "sharpen": ["FLOAT", {"tooltip": "Sharpen overlapping splats: 1.0 = physically-correct blend; higher biases each pixel toward its dominant (nearest) splat for crisper texture, without shrinking splats or opening gaps. Non-physical above 1.", "default": 2.0, "min": 1.0, "max": 8.0, "step": 0.5}], "headlight_shading": ["FLOAT", {"tooltip": "Diffuse shading from a light at the camera (headlight), using the splat surfel normals: darkens surfaces that turn away from view to reveal form/curvature. 0 = flat albedo, 1 = strongest shading.", "advanced": true, "default": 0.0, "min": 0.0, "max": 3.0, "step": 0.05}], "opacity_threshold": ["FLOAT", {"tooltip": "Cull gaussians with opacity below this (removes faint floaters).", "advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}], "render_style": ["COMBO", {"tooltip": "What the image output shows: color, clay (neutral-albedo shaded), depth (near=bright), normal (OpenGL normal map).", "multiselect": false, "options": ["color", "clay", "depth", "normal"]}], "background": ["COLOR", {"default": "#000000", "socketless": true}]}, "optional": {"bg_image": ["IMAGE", {"tooltip": "Optional background plate composited behind the splat (overrides the solid background colour). Resized to the render size; a batch is used per frame, a single image for all. color/clay only."}], "camera_info": ["LOAD3D_CAMERA", {"tooltip": "Camera to render from - a Load3D / Preview3D camera or a Create Camera Info node. If empty, the splat is auto-framed from a default 3/4 view."}]}}, "input_order": {"required": ["splat", "width", "height", "frames", "splat_scale", "sharpen", "headlight_shading", "opacity_threshold", "render_style", "background"], "optional": ["bg_image", "camera_info"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["image", "mask"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "RenderSplat", "display_name": "Render Splat", "description": "Render a gaussian splat as an image with an anisotropic EWA rasterizer (oriented elliptical splats, antialiased, depth-sorted front-to-back). The camera comes from a camera_info input (Load / Preview 3D, or a Create Camera Info node); leave it empty to auto-frame the splat. Set frames greater than 1 for a turntable batch of images to feed a Video node.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["splat to image", "render splat", "gaussian turntable"], "essentials_category": null, "has_intermediate_output": false}, "CreateCameraInfo": {"input": {"required": {"mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "How to define the camera: orbit angles, an explicit position, or a position + quaternion.", "options": [{"key": "orbit", "inputs": {"required": {"yaw": ["FLOAT", {"default": 35.0, "min": -360.0, "max": 360.0, "step": 1.0}], "pitch": ["FLOAT", {"default": 30.0, "min": -89.0, "max": 89.0, "step": 1.0}], "distance": ["FLOAT", {"tooltip": "Camera distance from the target.", "default": 4.0, "min": 0.01, "max": 1000.0, "step": 0.01}]}}}, {"key": "look_at", "inputs": {"required": {"position_x": ["FLOAT", {"tooltip": "Camera position in world space (right-handed, Y-up).", "default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "position_y": ["FLOAT", {"default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "position_z": ["FLOAT", {"default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}]}}}, {"key": "quaternion", "inputs": {"required": {"position_x": ["FLOAT", {"tooltip": "Camera position in world space (right-handed, Y-up).", "default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "position_y": ["FLOAT", {"default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "position_z": ["FLOAT", {"default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "quat_x": ["FLOAT", {"default": 0.0, "min": -1.0, "max": 1.0, "step": 0.001}], "quat_y": ["FLOAT", {"default": 0.0, "min": -1.0, "max": 1.0, "step": 0.001}], "quat_z": ["FLOAT", {"default": 0.0, "min": -1.0, "max": 1.0, "step": 0.001}], "quat_w": ["FLOAT", {"tooltip": "Camera world-rotation quaternion (three.js: looks down local -Z). Normalized for you.", "default": 1.0, "min": -1.0, "max": 1.0, "step": 0.001}]}}}]}], "target_x": ["FLOAT", {"tooltip": "Look-at point (orbit pivot / aim). In orbit mode, move it to pan/translate the whole camera. Ignored in quaternion mode. Defaults to the origin.", "advanced": true, "default": 0.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "target_y": ["FLOAT", {"advanced": true, "default": 0.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "target_z": ["FLOAT", {"advanced": true, "default": 0.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "roll": ["FLOAT", {"tooltip": "Camera roll about the view axis, degrees.", "default": 0.0, "min": -180.0, "max": 180.0, "step": 1.0}], "fov": ["FLOAT", {"tooltip": "Vertical field of view in degrees.", "default": 35.0, "min": 1.0, "max": 120.0, "step": 1.0}], "zoom": ["FLOAT", {"tooltip": "Digital zoom (focal-length multiplier). >1 zooms in without moving the camera.", "default": 1.0, "min": 0.01, "max": 100.0, "step": 0.01}], "camera_type": ["COMBO", {"tooltip": "Projection used by Render Splat: perspective (foreshortening) or orthographic (parallel).", "multiselect": false, "options": ["perspective", "orthographic"]}]}}, "input_order": {"required": ["mode", "target_x", "target_y", "target_z", "roll", "fov", "zoom", "camera_type"]}, "is_input_list": false, "output": ["LOAD3D_CAMERA"], "output_is_list": [false], "output_name": ["camera_info"], "output_tooltips": [null], "output_matchtypes": null, "name": "CreateCameraInfo", "display_name": "Create Camera Info", "description": "Build a camera_infoMode 'orbit' aims with yaw/pitch/distance around the target; 'look_at' places the camera at world position. Coordinates are the viewer's world space (right-handed,Y-up).", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["camera position", "make camera info", "orbit camera", "look at camera"], "essentials_category": null, "has_intermediate_output": false}, "TransformSplat": {"input": {"required": {"splat": ["SPLAT", {}], "translate_x": ["FLOAT", {"default": 0.0, "min": -100.0, "max": 100.0, "step": 0.01}], "translate_y": ["FLOAT", {"default": 0.0, "min": -100.0, "max": 100.0, "step": 0.01}], "translate_z": ["FLOAT", {"default": 0.0, "min": -100.0, "max": 100.0, "step": 0.01}], "rotate_x": ["FLOAT", {"default": 0.0, "min": -360.0, "max": 360.0, "step": 1.0}], "rotate_y": ["FLOAT", {"default": 0.0, "min": -360.0, "max": 360.0, "step": 1.0}], "rotate_z": ["FLOAT", {"default": 0.0, "min": -360.0, "max": 360.0, "step": 1.0}], "scale_x": ["FLOAT", {"default": 1.0, "min": 0.01, "max": 100.0, "step": 0.01}], "scale_y": ["FLOAT", {"default": 1.0, "min": 0.01, "max": 100.0, "step": 0.01}], "scale_z": ["FLOAT", {"default": 1.0, "min": 0.01, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["splat", "translate_x", "translate_y", "translate_z", "rotate_x", "rotate_y", "rotate_z", "scale_x", "scale_y", "scale_z"]}, "is_input_list": false, "output": ["SPLAT"], "output_is_list": [false], "output_name": ["splat"], "output_tooltips": [null], "output_matchtypes": null, "name": "TransformSplat", "display_name": "Transform Splat", "description": "Translate, rotate, and scale a gaussian splat. Non-uniform scale also reshapes every individual splat, slower process.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["move splat", "rotate splat", "scale splat", "gaussian transform"], "essentials_category": null, "has_intermediate_output": false}, "GetSplatCount": {"input": {"required": {"splat": ["SPLAT", {}]}, "hidden": {"unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["splat"], "hidden": ["unique_id"]}, "is_input_list": false, "output": ["SPLAT", "INT"], "output_is_list": [false, false], "output_name": ["splat", "count"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "GetSplatCount", "display_name": "Get Splat Count", "description": "Returns the number of splats summed across the batch.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["splat count", "gaussian count", "number of splats", "splat info"], "essentials_category": null, "has_intermediate_output": false}, "MergeSplat": {"input": {"required": {"splats": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"splat": ["SPLAT", {}]}}, "prefix": "splat", "min": 2, "max": 32}}]}}, "input_order": {"required": ["splats"]}, "is_input_list": false, "output": ["SPLAT"], "output_is_list": [false], "output_name": ["splat"], "output_tooltips": [null], "output_matchtypes": null, "name": "MergeSplat", "display_name": "Merge Splats", "description": "Concatenate any number of gaussian splats into one. Unioning several decodes of the same latent at different seeds densifies the surface, this can improve surface quality when meshing.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["union splat", "densify gaussian", "combine splat", "merge gaussian"], "essentials_category": null, "has_intermediate_output": false}, "SplatToMesh": {"input": {"required": {"splat": ["SPLAT", {}], "resolution": ["INT", {"tooltip": "Density-grid resolution along the longest axis. Higher = finer surface, more VRAM/time (grows with resolution^3).", "default": 384, "min": 64, "max": 768, "step": 16}], "kernel": ["INT", {"tooltip": "Max splat half-width in voxels. Each gaussian is rasterized over a window sized to its own 3-sigma, capped here - small surfels stay cheap, large ones aren't truncated. Raise if sparse splats leave gaps.", "default": 5, "min": 1, "max": 8}], "smooth": ["INT", {"tooltip": "Taubin mesh-smoothing iterations. Smooths the surface without shrinking it (volume-preserving), unlike blurring the density. 0 = raw surface.", "advanced": true, "default": 0, "min": 0, "max": 60}], "level": ["FLOAT", {"tooltip": "Iso-surface level. Auto-picked by Otsu; this biases it (1.0 = auto, lower = fatter/more-connected surface, higher = thinner/tighter).", "default": 0.4, "min": 0.0, "max": 2.0, "step": 0.01}], "min_component": ["INT", {"tooltip": "Drop connected components smaller than this many vertices (0 = keep all). Removes detached floater blobs and the inner shell of the double wall.", "advanced": true, "default": 500, "min": 0, "max": 100000, "step": 50}], "min_opacity": ["FLOAT", {"tooltip": "Ignore gaussians fainter than this before meshing.", "advanced": true, "default": 0.02, "min": 0.0, "max": 1.0, "step": 0.01}], "color_sharpen": ["FLOAT", {"tooltip": "Crisp up the vertex texture: 1.0 = physically-correct blend; higher biases each voxel's colour toward its dominant gaussian instead of averaging neighbours (de-smears the texture). Colour only - geometry is unchanged.", "default": 2.0, "min": 1.0, "max": 8.0, "step": 0.5}]}}, "input_order": {"required": ["splat", "resolution", "kernel", "smooth", "level", "min_component", "min_opacity", "color_sharpen"]}, "is_input_list": false, "output": ["MESH"], "output_is_list": [false], "output_name": ["mesh"], "output_tooltips": [null], "output_matchtypes": null, "name": "SplatToMesh", "display_name": "Extract Mesh from Splat", "description": "Extract a coloured mesh from a gaussian splat.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["splat to mesh", "gaussian surface nets", "splat surface", "mesh splat"], "essentials_category": null, "has_intermediate_output": false}, "TripoSplatPreprocessImage": {"input": {"required": {"image": ["IMAGE", {}], "mask": ["MASK", {}], "erode_radius": ["INT", {"tooltip": "Erode the alpha matte by this pixel radius before cropping (avoids border bleed).", "default": 1, "min": 0, "max": 16}], "size": ["INT", {"tooltip": "Square image size. The model is trained at 1024; other sizes run but are off-distribution.", "default": 1024, "min": 256, "max": 4096, "step": 16}]}}, "input_order": {"required": ["image", "mask", "erode_radius", "size"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["image"], "output_tooltips": [null], "output_matchtypes": null, "name": "TripoSplatPreprocessImage", "display_name": "TripoSplat Preprocess Image", "description": "Crop center each image to a square canvas on a black background and add padding.", "python_module": "comfy_extras.nodes_triposplat", "category": "model/conditioning/triposplat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoSplatConditioning": {"input": {"required": {"clip_vision": ["CLIP_VISION", {"tooltip": "DINOv3 ViT-H/16+ image encoder"}], "vae": ["VAE", {"tooltip": "Flux2 VAE"}], "image": ["IMAGE", {}]}}, "input_order": {"required": ["clip_vision", "vae", "image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, "The fixed size noise target (latent +camera)."], "output_matchtypes": null, "name": "TripoSplatConditioning", "display_name": "TripoSplat Conditioning", "description": "Encode the image with DINOv3 and the Flux2 VAE into TripoSplat positive/negative conditioning, and create the fixed size noise target (latent + camera) for the KSampler", "python_module": "comfy_extras.nodes_triposplat", "category": "model/conditioning/triposplat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VAEDecodeTripoSplat": {"input": {"required": {"samples": ["LATENT", {}], "vae": ["VAE", {"tooltip": "TripoSplat VAE decoder"}], "num_gaussians": ["INT", {"tooltip": "Number of gaussians to produce (rounded to a multiple of 32). 262144 matches the octree's point density; higher oversamples the same points (denser, but no new detail) and costs proportionally more VRAM/time.", "default": 262144, "min": 32768, "max": 1048576, "step": 32}], "seed": ["INT", {"tooltip": "Seeds the octree point sampler (global RNG) for deterministic decodes.", "default": 0, "min": 0, "max": 18446744073709551615}]}}, "input_order": {"required": ["samples", "vae", "num_gaussians", "seed"]}, "is_input_list": false, "output": ["SPLAT"], "output_is_list": [false], "output_name": ["splat"], "output_tooltips": [null], "output_matchtypes": null, "name": "VAEDecodeTripoSplat", "display_name": "TripoSplat Decode", "description": "Decode the sampled TripoSplat latent into a 3D gaussian splat. Modify the number of gaussians to vary the density.", "python_module": "comfy_extras.nodes_triposplat", "category": "3d/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoSplatSamplingPreview": {"input": {"required": {"model": ["MODEL", {}], "vae": ["VAE", {"tooltip": "TripoSplat VAE decoder"}], "octree_level": ["INT", {"tooltip": "Octree depth for the preview decode (lower = cheaper/coarser).", "advanced": true, "default": 5, "min": 2, "max": 8}], "num_gaussians": ["INT", {"tooltip": "Number of gaussians to produce for the preview (rounded to a multiple of 32).", "default": 16384, "min": 1024, "max": 262144, "step": 32}], "yaw": ["FLOAT", {"tooltip": "Preview camera yaw in degrees.", "advanced": true, "default": 90.0, "min": -360.0, "max": 360.0, "step": 1.0}], "pitch": ["FLOAT", {"tooltip": "Preview camera pitch in degrees.", "advanced": true, "default": 15.0, "min": -89.0, "max": 89.0, "step": 1.0}], "point_size": ["INT", {"tooltip": "Maximum splat radius in pixels. Each gaussian is sized from its scale and capped here; lower = finer/pointier, higher = chunkier.", "default": 3, "min": 1, "max": 16}]}}, "input_order": {"required": ["model", "vae", "octree_level", "num_gaussians", "yaw", "pitch", "point_size"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "TripoSplatSamplingPreview", "display_name": "TripoSplat Sampling Preview", "description": "Patch the TripoSplat model for the standard Ksampler node to show a live decoded gaussian splat preview at each step.", "python_module": "comfy_extras.nodes_triposplat", "category": "3d/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LoadDA3Model": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": []}], "weight_dtype": ["COMBO", {"default": "default", "multiselect": false, "options": ["default", "fp16", "bf16", "fp32"]}]}}, "input_order": {"required": ["model_name", "weight_dtype"]}, "is_input_list": false, "output": ["DA3_MODEL"], "output_is_list": [false], "output_name": ["DA3_MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "LoadDA3Model", "display_name": "Load Depth Anything 3", "description": "", "python_module": "comfy_extras.nodes_depth_anything_3", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "DA3Inference": {"input": {"required": {"da3_model": ["DA3_MODEL", {}], "image": ["IMAGE", {}], "resolution": ["INT", {"tooltip": "Resolution the model runs at (longest side, multiple of 14).\nLower = faster / less VRAM.\nHigher = more detail.\nOutput is upsampled back to the original size.", "default": 504, "min": 140, "max": 2520, "step": 14}], "resize_method": ["COMBO", {"tooltip": "upper_bound_resize: scale so the longest side = resolution (caps memory, default).\nlower_bound_resize: scale so the shortest side = resolution (preserves more detail on tall/wide images, uses more memory).", "default": "upper_bound_resize", "multiselect": false, "options": ["upper_bound_resize", "lower_bound_resize"]}], "mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "mono: single view image (works with any model variant).\nmultiview: all images processed together for geometric consistency + camera pose (for Small/Base models only).", "options": [{"key": "mono", "inputs": {"required": {}}}, {"key": "multiview", "inputs": {"required": {"ref_view_strategy": ["COMBO", {"tooltip": "Which view acts as the geometric anchor.\n- saddle_balanced: the view most 'average' across all others (best general choice).\n- saddle_sim_range: the view most visually distinct from the others.\n- first / middle: fixed positional picks.", "default": "saddle_balanced", "multiselect": false, "options": ["saddle_balanced", "saddle_sim_range", "first", "middle"]}], "pose_method": ["COMBO", {"tooltip": "How the camera field-of-view is estimated (for Small/Base models only).\n- cam_dec: learned from image features.\n- ray_pose: derived geometrically from the model's 3D ray output.\nAffects perspective correctness of the 3D output. Try both if results look distorted.", "default": "cam_dec", "multiselect": false, "options": ["cam_dec", "ray_pose"]}]}}}]}]}}, "input_order": {"required": ["da3_model", "image", "resolution", "resize_method", "mode"]}, "is_input_list": false, "output": ["DA3_GEOMETRY"], "output_is_list": [false], "output_name": ["da3_geometry"], "output_tooltips": ["Dictionary of non-normalized tensors.\nAlways has the keys: depth, image, mode.\nOptional keys: sky (for Mono/Metric), confidence (for Small/Base), extrinsics + intrinsics (for multi-view)."], "output_matchtypes": null, "name": "DA3Inference", "display_name": "Run Depth Anything 3", "description": "Run Depth Anything 3 on an image. In multi-view mode each image is treated as a separate view of the same scene.", "python_module": "comfy_extras.nodes_depth_anything_3", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["depth", "geometry", "da3", "depth anything", "monocular", "pointmap", "sky", "3d", "metric depth", "disparity"], "essentials_category": null, "has_intermediate_output": false}, "DA3Render": {"input": {"required": {"da3_geometry": ["DA3_GEOMETRY", {}], "output": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "- depth: normalised greyscale depth image.\n- depth_colored: depth mapped through the Turbo colormap.\n- sky_mask: sky probability in [0, 1] (for Mono/Metric models only).\n- confidence: normalised depth confidence (for Small/Base models only).", "options": [{"key": "depth", "inputs": {"required": {"normalization": ["COMBO", {"tooltip": "- v2_style: mean/std normalisation for perceptually balanced results (default).\n- min_max: stretches the full depth range to [0, 1] for maximum contrast.\n- raw: no scaling,preserves metric units for Metric model.", "default": "v2_style", "multiselect": false, "options": ["v2_style", "min_max", "raw"]}], "apply_sky_clip": ["BOOLEAN", {"tooltip": "Clip sky-region depth to the 99th percentile of foreground depth before normalisation. Requires a sky key in the da3_geometry input (for Mono/Metric models only).", "default": false}]}}}, {"key": "depth_colored", "inputs": {"required": {"normalization": ["COMBO", {"tooltip": "- v2_style: mean/std normalisation for perceptually balanced results (default).\n- min_max: stretches the full depth range to [0, 1] for maximum contrast.\n- raw: no scaling,preserves metric units for Metric model.", "default": "v2_style", "multiselect": false, "options": ["v2_style", "min_max", "raw"]}], "apply_sky_clip": ["BOOLEAN", {"tooltip": "Clip sky-region depth to the 99th percentile of foreground depth before normalisation. Requires a sky key in the da3_geometry input (for Mono/Metric models only).", "default": false}]}}}, {"key": "sky_mask", "inputs": {"required": {"colored": ["BOOLEAN", {"tooltip": "Apply the Turbo colormap to the sky mask.", "default": false}]}}}, {"key": "confidence", "inputs": {"required": {"colored": ["BOOLEAN", {"tooltip": "Apply the Turbo colormap to the confidence map.", "default": false}]}}}]}]}}, "input_order": {"required": ["da3_geometry", "output"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "DA3Render", "display_name": "Render Depth Anything 3", "description": "Render a depth map, confidence map, or sky mask from Depth Anything 3 geometry data.", "python_module": "comfy_extras.nodes_depth_anything_3", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "DA3GeometryToMesh": {"input": {"required": {"da3_geometry": ["DA3_GEOMETRY", {}], "batch_index": ["INT", {"tooltip": "Which image of a batch to convert. Per-image vertex counts differ so batches cannot be stacked.", "default": 0, "min": 0, "max": 4096}], "decimation": ["INT", {"tooltip": "Vertex stride. 1 = full resolution, 2 = half, etc.", "default": 1, "min": 1, "max": 8}], "discontinuity_threshold": ["FLOAT", {"tooltip": "Drop triangles whose 3x3 depth span exceeds this fraction. 0 = off.", "default": 0.04, "min": 0.0, "max": 1.0, "step": 0.01}], "confidence_threshold": ["FLOAT", {"tooltip": "Exclude pixels whose per-image normalised confidence is below this value (0 = keep all, 1 = keep only the single most confident pixel). Used when the geometry has a confidence map (Small/Base models).", "default": 0.1, "min": 0.0, "max": 1.0, "step": 0.01}], "use_sky_mask": ["BOOLEAN", {"tooltip": "Exclude sky-probability pixels (sky >= 0.5) from the mesh. Used when the geometry has a sky map (Mono/Metric models).", "default": true}], "texture": ["BOOLEAN", {"tooltip": "Use the source image as a base color texture.", "default": true}]}}, "input_order": {"required": ["da3_geometry", "batch_index", "decimation", "discontinuity_threshold", "confidence_threshold", "use_sky_mask", "texture"]}, "is_input_list": false, "output": ["MESH"], "output_is_list": [false], "output_name": ["MESH"], "output_tooltips": [null], "output_matchtypes": null, "name": "DA3GeometryToMesh", "display_name": "Convert DA3 Geometry to Mesh", "description": "Convert a depth map into a triangulated 3D mesh.", "python_module": "comfy_extras.nodes_depth_anything_3", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["da3", "depth anything", "mesh", "geometry", "3d", "triangulate"], "essentials_category": null, "has_intermediate_output": false}, "SeedNode": {"input": {"required": {"seed": ["INT", {"min": 0, "max": 9223372036854775807, "control_after_generate": "fixed"}]}}, "input_order": {"required": ["seed"]}, "is_input_list": false, "output": ["INT"], "output_is_list": [false], "output_name": ["seed"], "output_tooltips": [null], "output_matchtypes": null, "name": "SeedNode", "display_name": "Seed", "description": "", "python_module": "comfy_extras.nodes_seed", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["seed", "random"], "essentials_category": null, "has_intermediate_output": false}, "ClaudeNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text input to the model.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The Claude model used to generate the response.", "options": [{"key": "Opus 4.7", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate (includes reasoning tokens when enabled).", "advanced": true, "default": 32768, "min": 4096, "max": 64000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7 and any model when reasoning_effort is set.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "reasoning_effort": ["COMBO", {"tooltip": "Extended thinking effort. 'off' disables reasoning.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "Opus 4.6", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate (includes reasoning tokens when enabled).", "advanced": true, "default": 32768, "min": 4096, "max": 64000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7 and any model when reasoning_effort is set.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "reasoning_effort": ["COMBO", {"tooltip": "Extended thinking effort. 'off' disables reasoning.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "Sonnet 4.6", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate (includes reasoning tokens when enabled).", "advanced": true, "default": 32768, "min": 4096, "max": 64000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7 and any model when reasoning_effort is set.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "reasoning_effort": ["COMBO", {"tooltip": "Extended thinking effort. 'off' disables reasoning.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "Sonnet 4.5", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate (includes reasoning tokens when enabled).", "advanced": true, "default": 32768, "min": 4096, "max": 64000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7 and any model when reasoning_effort is set.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "reasoning_effort": ["COMBO", {"tooltip": "Extended thinking effort. 'off' disables reasoning.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "Haiku 4.5", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate (includes reasoning tokens when enabled).", "advanced": true, "default": 32768, "min": 4096, "max": 64000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7 and any model when reasoning_effort is set.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional image(s) to use as context for the model. Up to 20 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}, "optional": {"system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate the model's behavior.", "advanced": true, "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed", "images"], "optional": ["system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "ClaudeNode", "display_name": "Anthropic Claude", "description": "Generate text responses with Anthropic's Claude models. Provide a text prompt and optionally one or more images for multimodal context.", "python_module": "comfy_api_nodes.nodes_anthropic", "category": "partner/text/Anthropic", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $contains($m, \"opus\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.005, 0.025],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"sonnet\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.003, 0.015],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"haiku\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.001, 0.005],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : {\"type\":\"text\", \"text\":\"Token-based\"}\n )\n "}, "search_aliases": null, "essentials_category": "Text Generation", "has_intermediate_output": false}, "BeebleSwitchXVideoEdit": {"input": {"required": {"video": ["VIDEO", {}], "prompt": ["STRING", {"tooltip": "Text description of the desired output (max 2000 chars). At least one of 'prompt' or 'reference_image' is required.", "default": "", "multiline": true}], "alpha_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Controls how SwitchX decides what to keep vs. regenerate. 'auto' isolates the main subject automatically. 'fill' regenerates the entire frame while preserving geometry. 'select' propagates a first-frame keyframe across the clip. 'custom' uses a per-frame alpha matte you provide.", "options": [{"key": "auto", "inputs": {"required": {}}}, {"key": "fill", "inputs": {"required": {}}}, {"key": "select", "inputs": {"required": {"alpha_keyframe": ["MASK", {"tooltip": "First-frame keyframe mask. Beeble propagates this across the video."}]}}}, {"key": "custom", "inputs": {"required": {"alpha_mask": ["MASK", {"tooltip": "Per-frame grayscale mask covering the entire video. Must have the same frame count as the source. Connect a MASK output from SAM3_TrackToMask or similar."}]}}}]}], "max_resolution": ["COMBO", {"tooltip": "Maximum output resolution.", "default": "1080p", "multiselect": false, "options": ["1080p", "720p"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"reference_image": ["IMAGE", {"tooltip": "Reference image whose look (background, lighting, costume) the result should adopt. At least one of 'reference_image' or 'prompt' is required."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "prompt", "alpha_mode", "max_resolution", "seed"], "optional": ["reference_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "VIDEO"], "output_is_list": [false, false], "output_name": ["video", "alpha"], "output_tooltips": [null, "The alpha matte Beeble used. Empty for 'fill' mode, which has no separate matte."], "output_matchtypes": null, "name": "BeebleSwitchXVideoEdit", "display_name": "Beeble SwitchX Video Edit", "description": "Edit a video with Beeble SwitchX. Switches anything in the scene (background, lighting, costume) while preserving the original subject's pixels and motion. Provide a reference image and/or text prompt to describe the new look. Max 240 frames, max ~2.77MP per frame.", "python_module": "comfy_api_nodes.nodes_beeble", "category": "partner/video/Beeble", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "max_resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rate := widgets.max_resolution = \"1080p\" ? 0.429 : 0.143;\n {\"type\":\"usd\",\"usd\": $rate, \"format\":{\"suffix\":\"/30 frames\"}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BeebleSwitchXImageEdit": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Text description of the desired output (max 2000 chars). At least one of 'prompt' or 'reference_image' is required.", "default": "", "multiline": true}], "alpha_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Controls how SwitchX decides what to keep vs. regenerate. 'auto' isolates the main subject automatically. 'fill' regenerates the entire frame while preserving geometry. 'select' propagates a first-frame keyframe across the clip. 'custom' uses a per-frame alpha matte you provide.", "options": [{"key": "auto", "inputs": {"required": {}}}, {"key": "fill", "inputs": {"required": {}}}, {"key": "select", "inputs": {"required": {"alpha_keyframe": ["MASK", {"tooltip": "Grayscale keyframe mask."}]}}}, {"key": "custom", "inputs": {"required": {"alpha_mask": ["MASK", {"tooltip": "Grayscale mask to apply."}]}}}]}], "max_resolution": ["COMBO", {"tooltip": "Maximum output resolution.", "default": "1080p", "multiselect": false, "options": ["1080p", "720p"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"reference_image": ["IMAGE", {"tooltip": "Reference image whose look (background, lighting, costume) the result should adopt. At least one of 'reference_image' or 'prompt' is required."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "alpha_mode", "max_resolution", "seed"], "optional": ["reference_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["image", "alpha"], "output_tooltips": [null, "The alpha matte Beeble used. Empty for 'fill' mode, which has no separate matte."], "output_matchtypes": null, "name": "BeebleSwitchXImageEdit", "display_name": "Beeble SwitchX Image Edit", "description": "Edit a single image with Beeble SwitchX. Switches anything in the scene (background, lighting, costume) while preserving the original subject's pixels. Provide a reference image and/or text prompt to describe the new look. Max ~2.77MP.", "python_module": "comfy_api_nodes.nodes_beeble", "category": "partner/image/Beeble", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "max_resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rate := widgets.max_resolution = \"1080p\" ? 0.429 : 0.143;\n {\"type\":\"usd\",\"usd\": $rate}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxProUltraImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation, but results are nondeterministic (same seed will not produce exactly the same result).", "advanced": true, "default": false}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "aspect_ratio": ["STRING", {"tooltip": "Aspect ratio of image; must be between 1:4 and 4:1.", "default": "16:9", "multiline": false}], "raw": ["BOOLEAN", {"tooltip": "When True, generate less processed, more natural-looking images.", "default": false}]}, "optional": {"image_prompt": ["IMAGE", {}], "image_prompt_strength": ["FLOAT", {"tooltip": "Blend between the prompt and the image prompt.", "default": 0.1, "min": 0.0, "max": 1.0, "step": 0.01}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "prompt_upsampling", "seed", "aspect_ratio", "raw"], "optional": ["image_prompt", "image_prompt_strength"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxProUltraImageNode", "display_name": "Flux 1.1 [pro] Ultra Image", "description": "Generates images using Flux Pro 1.1 Ultra via api based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.06}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxKontextProImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation - specify what and how to edit.", "default": "", "multiline": true}], "aspect_ratio": ["STRING", {"tooltip": "Aspect ratio of image; must be between 1:4 and 4:1.", "default": "16:9", "multiline": false}], "guidance": ["FLOAT", {"tooltip": "Guidance strength for the image generation process", "default": 3.0, "min": 0.1, "max": 99.0, "step": 0.1}], "steps": ["INT", {"tooltip": "Number of steps for the image generation process", "default": 50, "min": 1, "max": 150}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 1234, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation, but results are nondeterministic (same seed will not produce exactly the same result).", "advanced": true, "default": false}]}, "optional": {"input_image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "aspect_ratio", "guidance", "steps", "seed", "prompt_upsampling"], "optional": ["input_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxKontextProImageNode", "display_name": "Flux.1 Kontext [pro] Image", "description": "Edits images using Flux.1 Kontext [pro] via api based on prompt and aspect ratio.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxKontextMaxImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation - specify what and how to edit.", "default": "", "multiline": true}], "aspect_ratio": ["STRING", {"tooltip": "Aspect ratio of image; must be between 1:4 and 4:1.", "default": "16:9", "multiline": false}], "guidance": ["FLOAT", {"tooltip": "Guidance strength for the image generation process", "default": 3.0, "min": 0.1, "max": 99.0, "step": 0.1}], "steps": ["INT", {"tooltip": "Number of steps for the image generation process", "default": 50, "min": 1, "max": 150}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 1234, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation, but results are nondeterministic (same seed will not produce exactly the same result).", "advanced": true, "default": false}]}, "optional": {"input_image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "aspect_ratio", "guidance", "steps", "seed", "prompt_upsampling"], "optional": ["input_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxKontextMaxImageNode", "display_name": "Flux.1 Kontext [max] Image", "description": "Edits images using Flux.1 Kontext [pro] via api based on prompt and aspect ratio.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxProExpandNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation, but results are nondeterministic (same seed will not produce exactly the same result).", "advanced": true, "default": false}], "top": ["INT", {"tooltip": "Number of pixels to expand at the top of the image", "default": 0, "min": 0, "max": 2048}], "bottom": ["INT", {"tooltip": "Number of pixels to expand at the bottom of the image", "default": 0, "min": 0, "max": 2048}], "left": ["INT", {"tooltip": "Number of pixels to expand at the left of the image", "default": 0, "min": 0, "max": 2048}], "right": ["INT", {"tooltip": "Number of pixels to expand at the right of the image", "default": 0, "min": 0, "max": 2048}], "guidance": ["FLOAT", {"tooltip": "Guidance strength for the image generation process", "default": 60, "min": 1.5, "max": 100}], "steps": ["INT", {"tooltip": "Number of steps for the image generation process", "default": 50, "min": 15, "max": 50}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "prompt_upsampling", "top", "bottom", "left", "right", "guidance", "steps", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxProExpandNode", "display_name": "Flux.1 Expand Image", "description": "Outpaints image based on prompt.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.05}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxProFillNode": {"input": {"required": {"image": ["IMAGE", {}], "mask": ["MASK", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation, but results are nondeterministic (same seed will not produce exactly the same result).", "advanced": true, "default": false}], "guidance": ["FLOAT", {"tooltip": "Guidance strength for the image generation process", "default": 60, "min": 1.5, "max": 100}], "steps": ["INT", {"tooltip": "Number of steps for the image generation process", "default": 50, "min": 15, "max": 50}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "mask", "prompt", "prompt_upsampling", "guidance", "steps", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxProFillNode", "display_name": "Flux.1 Fill Image", "description": "Inpaints image based on mask and prompt.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.05}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxEraseNode": {"input": {"required": {"image": ["IMAGE", {}], "mask": ["MASK", {"tooltip": "White areas are removed; black areas are preserved."}], "dilate_pixels": ["INT", {"tooltip": "Expands the mask boundaries to ensure clean coverage of the object's edges.", "default": 10, "min": 0, "max": 25}]}, "optional": {"seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "mask", "dilate_pixels"], "optional": ["seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxEraseNode", "display_name": "Flux Erase Image", "description": "Removes the masked object from an image and reconstructs the background. Paint the mask over what you want to erase.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"range_usd\",\"min_usd\":0.03,\"max_usd\":0.06,\"format\":{\"approximate\":true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxVTONode": {"input": {"required": {"person": ["IMAGE", {"tooltip": "Image of the person to dress."}], "garment": ["IMAGE", {"tooltip": "Image of the garment to apply."}], "prompt": ["STRING", {"tooltip": "Optional natural-language styling instruction (e.g. how the garment should fit).", "default": "", "multiline": true}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["person", "garment", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxVTONode", "display_name": "Flux Virtual Try-On", "description": "Virtual try-on: dresses the person in the provided garment.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"range_usd\",\"min_usd\":0.0375,\"max_usd\":0.075,\"format\":{\"approximate\":true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Flux2ProImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation or edit", "default": "", "multiline": true}], "width": ["INT", {"default": 1024, "min": 256, "max": 2048, "step": 32}], "height": ["INT", {"default": 768, "min": 256, "max": 2048, "step": 32}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation.", "advanced": true, "default": true}]}, "optional": {"images": ["IMAGE", {"tooltip": "Up to 9 images to be used as references."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "width", "height", "seed", "prompt_upsampling"], "optional": ["images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Flux2ProImageNode", "display_name": "Flux.2 [pro] Image", "description": "Generates images synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "width", "type": "INT"}, {"name": "height", "type": "INT"}], "inputs": ["images"], "input_groups": []}, "expr": "\n (\n $MP := 1024 * 1024;\n $outMP := $max([1, $floor(((widgets.width * widgets.height) + $MP - 1) / $MP)]);\n $outputCost := 0.03 + 0.015 * ($outMP - 1);\n inputs.images.connected\n ? {\n \"type\":\"range_usd\",\n \"min_usd\": $outputCost + 0.015,\n \"max_usd\": $outputCost + 0.12,\n \"format\": { \"approximate\": true }\n }\n : {\"type\":\"usd\",\"usd\": $outputCost}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Flux2MaxImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation or edit", "default": "", "multiline": true}], "width": ["INT", {"default": 1024, "min": 256, "max": 2048, "step": 32}], "height": ["INT", {"default": 768, "min": 256, "max": 2048, "step": 32}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation.", "advanced": true, "default": true}]}, "optional": {"images": ["IMAGE", {"tooltip": "Up to 9 images to be used as references."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "width", "height", "seed", "prompt_upsampling"], "optional": ["images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Flux2MaxImageNode", "display_name": "Flux.2 [max] Image", "description": "Generates images synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "width", "type": "INT"}, {"name": "height", "type": "INT"}], "inputs": ["images"], "input_groups": []}, "expr": "\n (\n $MP := 1024 * 1024;\n $outMP := $max([1, $floor(((widgets.width * widgets.height) + $MP - 1) / $MP)]);\n $outputCost := 0.07 + 0.03 * ($outMP - 1);\n\n inputs.images.connected\n ? {\n \"type\":\"range_usd\",\n \"min_usd\": $outputCost + 0.03,\n \"max_usd\": $outputCost + 0.24,\n \"format\": { \"approximate\": true }\n }\n : {\"type\":\"usd\",\"usd\": $outputCost}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Flux2ImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation or edit", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Flux.2 [pro]", "inputs": {"required": {"width": ["INT", {"default": 1024, "min": 256, "max": 2048, "step": 32}], "height": ["INT", {"default": 768, "min": 256, "max": 2048, "step": 32}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image-to-image generation. Up to 8 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}, {"key": "Flux.2 [max]", "inputs": {"required": {"width": ["INT", {"default": 1024, "min": 256, "max": 2048, "step": 32}], "height": ["INT", {"default": 768, "min": 256, "max": 2048, "step": 32}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image-to-image generation. Up to 8 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}]}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Flux2ImageNode", "display_name": "Flux.2 Image", "description": "Generate images via Flux.2 [pro] or Flux.2 [max] from a prompt and optional reference images.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.width", "type": "INT"}, {"name": "model.height", "type": "INT"}], "inputs": [], "input_groups": ["model.images"]}, "expr": "\n (\n $isMax := widgets.model = \"flux.2 [max]\";\n $MP := 1024 * 1024;\n $w := $lookup(widgets, \"model.width\");\n $h := $lookup(widgets, \"model.height\");\n $outMP := $max([1, $floor((($w * $h) + $MP - 1) / $MP)]);\n $outputCost := $isMax\n ? (0.07 + 0.03 * ($outMP - 1))\n : (0.03 + 0.015 * ($outMP - 1));\n $refMin := $isMax ? 0.03 : 0.015;\n $refMax := $isMax ? 0.24 : 0.12;\n $hasRefs := $lookup(inputGroups, \"model.images\") > 0;\n $hasRefs\n ? {\n \"type\": \"range_usd\",\n \"min_usd\": $outputCost + $refMin,\n \"max_usd\": $outputCost + $refMax,\n \"format\": { \"approximate\": true }\n }\n : {\"type\": \"usd\", \"usd\": $outputCost}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BriaImageEditNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["FIBO"]}], "image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Instruction to edit image", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"default": "", "multiline": true}], "structured_prompt": ["STRING", {"tooltip": "A string containing the structured edit prompt in JSON format. Use this instead of usual prompt for precise, programmatic control.", "default": "", "multiline": true}], "seed": ["INT", {"default": 1, "min": 1, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "guidance_scale": ["FLOAT", {"tooltip": "Higher value makes the image follow the prompt more closely.", "default": 3, "min": 3, "max": 5, "step": 0.01, "display": "number"}], "steps": ["INT", {"default": 50, "min": 20, "max": 50, "step": 1, "display": "number"}], "moderation": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Moderation settings", "options": [{"key": "false", "inputs": {"required": {}}}, {"key": "true", "inputs": {"required": {"prompt_content_moderation": ["BOOLEAN", {"default": false}], "visual_input_moderation": ["BOOLEAN", {"default": false}], "visual_output_moderation": ["BOOLEAN", {"default": true}]}}}]}]}, "optional": {"mask": ["MASK", {"tooltip": "If omitted, the edit applies to the entire image."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "prompt", "negative_prompt", "structured_prompt", "seed", "guidance_scale", "steps", "moderation"], "optional": ["mask"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "STRING"], "output_is_list": [false, false], "output_name": ["IMAGE", "structured_prompt"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "BriaImageEditNode", "display_name": "Bria FIBO Image Edit", "description": "Edit images using Bria latest model", "python_module": "comfy_api_nodes.nodes_bria", "category": "partner/image/Bria", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.04}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BriaRemoveImageBackground": {"input": {"required": {"image": ["IMAGE", {}], "moderation": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Moderation settings", "options": [{"key": "false", "inputs": {"required": {}}}, {"key": "true", "inputs": {"required": {"visual_input_moderation": ["BOOLEAN", {"default": false}], "visual_output_moderation": ["BOOLEAN", {"default": true}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "moderation", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "BriaRemoveImageBackground", "display_name": "Bria Remove Image Background", "description": "Remove the background from an image using Bria RMBG 2.0.", "python_module": "comfy_api_nodes.nodes_bria", "category": "partner/image/Bria", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.018}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BriaRemoveVideoBackground": {"input": {"required": {"video": ["VIDEO", {}], "background_color": ["COMBO", {"tooltip": "Background color for the output video.", "multiselect": false, "options": ["Black", "White", "Gray", "Red", "Green", "Blue", "Yellow", "Cyan", "Magenta", "Orange"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "background_color", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "BriaRemoveVideoBackground", "display_name": "Bria Remove Video Background", "description": "Remove the background from a video using Bria. ", "python_module": "comfy_api_nodes.nodes_bria", "category": "partner/video/Bria", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.0042,\"format\":{\"suffix\":\"/second\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BriaVideoGreenScreen": {"input": {"required": {"video": ["VIDEO", {}], "green_shade": ["COMBO", {"tooltip": "Solid chroma-key shade applied behind the foreground: broadcast_green (#00B140), chroma_green (#00FF00), or blue_screen (#0000FF).", "multiselect": false, "options": ["broadcast_green", "chroma_green", "blue_screen"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "green_shade", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "BriaVideoGreenScreen", "display_name": "Bria Video Green Screen", "description": "Replace a video's background with a solid chroma-key screen using Bria.", "python_module": "comfy_api_nodes.nodes_bria", "category": "partner/video/Bria", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.0042,\"format\":{\"suffix\":\"/second\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BriaVideoReplaceBackground": {"input": {"required": {"video": ["VIDEO", {"tooltip": "Foreground video whose background is replaced."}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "optional": {"background_image": ["IMAGE", {"tooltip": "Background image to composite behind the foreground. Provide either a background image or a background video, not both."}], "background_video": ["VIDEO", {"tooltip": "Background video to composite behind the foreground. Provide either a background image or a background video, not both."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "seed"], "optional": ["background_image", "background_video"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "BriaVideoReplaceBackground", "display_name": "Bria Video Replace Background", "description": "Replace a video's background with a supplied image or video using Bria. The output keeps the foreground's resolution and frame rate; a background with a different aspect ratio is stretched to fit, so match it for undistorted results.", "python_module": "comfy_api_nodes.nodes_bria", "category": "partner/video/Bria", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.0042,\"format\":{\"suffix\":\"/second\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BriaTransparentVideoBackground": {"input": {"required": {"video": ["VIDEO", {}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["images", "mask"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "BriaTransparentVideoBackground", "display_name": "Bria Remove Video Background (Transparent)", "description": "Remove the background from a video using Bria and return the cut-out frames plus an alpha mask. Connect both to a compositing node, or feed them to Save WEBM to write a transparent video.", "python_module": "comfy_api_nodes.nodes_bria", "category": "partner/video/Bria", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.0042,\"format\":{\"suffix\":\"/second\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceImageNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["seedream-3-0-t2i-250415"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the image", "multiline": true}], "size_preset": ["COMBO", {"tooltip": "Pick a recommended size. Select Custom to use the width and height below", "multiselect": false, "options": ["1024x1024 (1:1)", "864x1152 (3:4)", "1152x864 (4:3)", "1280x720 (16:9)", "720x1280 (9:16)", "832x1248 (2:3)", "1248x832 (3:2)", "1512x648 (21:9)", "2048x2048 (1:1)", "Custom"]}], "width": ["INT", {"tooltip": "Custom width for image. Value is working only if `size_preset` is set to `Custom`", "default": 1024, "min": 512, "max": 2048, "step": 64}], "height": ["INT", {"tooltip": "Custom height for image. Value is working only if `size_preset` is set to `Custom`", "default": 1024, "min": 512, "max": 2048, "step": 64}]}, "optional": {"seed": ["INT", {"tooltip": "Seed to use for generation", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "guidance_scale": ["FLOAT", {"tooltip": "Higher value makes the image follow the prompt more closely", "default": 2.5, "min": 1.0, "max": 10.0, "step": 0.01, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the image", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "size_preset", "width", "height"], "optional": ["seed", "guidance_scale", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceImageNode", "display_name": "ByteDance Image", "description": "Generate images using ByteDance models via api based on prompt", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/image/ByteDance", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.03}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceSeedreamNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["seedream 5.0 lite", "seedream-4-5-251128", "seedream-4-0-250828"]}], "prompt": ["STRING", {"tooltip": "Text prompt for creating or editing an image.", "default": "", "multiline": true}], "size_preset": ["COMBO", {"tooltip": "Pick a recommended size. Select Custom to use the width and height below.", "multiselect": false, "options": ["2048x2048 (1:1)", "2304x1728 (4:3)", "1728x2304 (3:4)", "2560x1440 (16:9)", "1440x2560 (9:16)", "2496x1664 (3:2)", "1664x2496 (2:3)", "3024x1296 (21:9)", "3072x3072 (1:1)", "4096x4096 (1:1)", "Custom"]}]}, "optional": {"image": ["IMAGE", {"tooltip": "Input image(s) for image-to-image generation. Reference image(s) for single or multi-reference generation."}], "width": ["INT", {"tooltip": "Custom width for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 6240, "step": 2}], "height": ["INT", {"tooltip": "Custom height for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 4992, "step": 2}], "sequential_image_generation": ["COMBO", {"tooltip": "Group image generation mode. 'disabled' generates a single image. 'auto' lets the model decide whether to generate multiple related images (e.g., story scenes, character variations).", "multiselect": false, "options": ["disabled", "auto"]}], "max_images": ["INT", {"tooltip": "Maximum number of images to generate when sequential_image_generation='auto'. Total images (input + generated) cannot exceed 15.", "default": 1, "min": 1, "max": 15, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the image.", "advanced": true, "default": false}], "fail_on_partial": ["BOOLEAN", {"tooltip": "If enabled, abort execution if any requested images are missing or return an error.", "advanced": true, "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "size_preset"], "optional": ["image", "width", "height", "sequential_image_generation", "max_images", "seed", "watermark", "fail_on_partial"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceSeedreamNode", "display_name": "ByteDance Seedream 4.5 & 5.0", "description": "Unified text-to-image generation and precise single-sentence editing at up to 4K resolution.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/image/ByteDance", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $price := $contains(widgets.model, \"5.0 lite\") ? 0.035 :\n $contains(widgets.model, \"4-5\") ? 0.04 : 0.03;\n {\n \"type\":\"usd\",\n \"usd\": $price,\n \"format\": { \"suffix\":\" x images/Run\", \"approximate\": true }\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceSeedreamNodeV2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for creating or editing an image.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "seedream 5.0 lite", "inputs": {"required": {"size_preset": ["COMBO", {"tooltip": "Pick a recommended size. Select Custom to use the width and height below.", "multiselect": false, "options": ["(2K) 2048x2048 (1:1)", "(2K) 1728x2304 (3:4)", "(2K) 2304x1728 (4:3)", "(2K) 2848x1600 (16:9)", "(2K) 1600x2848 (9:16)", "(2K) 1664x2496 (2:3)", "(2K) 2496x1664 (3:2)", "(2K) 3136x1344 (21:9)", "(3K) 3072x3072 (1:1)", "(3K) 2592x3456 (3:4)", "(3K) 3456x2592 (4:3)", "(3K) 4096x2304 (16:9)", "(3K) 2304x4096 (9:16)", "(3K) 2496x3744 (2:3)", "(3K) 3744x2496 (3:2)", "(3K) 4704x2016 (21:9)", "(4K) 4096x4096 (1:1)", "(4K) 3520x4704 (3:4)", "(4K) 4704x3520 (4:3)", "(4K) 5504x3040 (16:9)", "(4K) 3040x5504 (9:16)", "(4K) 3328x4992 (2:3)", "(4K) 4992x3328 (3:2)", "(4K) 6240x2656 (21:9)", "Custom"]}], "width": ["INT", {"tooltip": "Custom width for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 6240, "step": 2}], "height": ["INT", {"tooltip": "Custom height for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 4992, "step": 2}], "max_images": ["INT", {"tooltip": "Maximum number of images to generate. With 1, exactly one image is produced. With >1, the model generates between 1 and max_images related images (e.g., story scenes, character variations). Total images (input + generated) cannot exceed 15.", "default": 1, "min": 1, "max": 14, "step": 1, "display": "number"}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image-to-image or multi-reference generation. Up to 14 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14"], "min": 0}}], "fail_on_partial": ["BOOLEAN", {"tooltip": "If enabled, abort execution if any requested images are missing or return an error.", "advanced": true, "default": false}]}}}, {"key": "seedream-4-5-251128", "inputs": {"required": {"size_preset": ["COMBO", {"tooltip": "Pick a recommended size. Select Custom to use the width and height below.", "multiselect": false, "options": ["(2K) 2048x2048 (1:1)", "(2K) 1728x2304 (3:4)", "(2K) 2304x1728 (4:3)", "(2K) 2848x1600 (16:9)", "(2K) 1600x2848 (9:16)", "(2K) 1664x2496 (2:3)", "(2K) 2496x1664 (3:2)", "(2K) 3136x1344 (21:9)", "(4K) 4096x4096 (1:1)", "(4K) 3520x4704 (3:4)", "(4K) 4704x3520 (4:3)", "(4K) 5504x3040 (16:9)", "(4K) 3040x5504 (9:16)", "(4K) 3328x4992 (2:3)", "(4K) 4992x3328 (3:2)", "(4K) 6240x2656 (21:9)", "Custom"]}], "width": ["INT", {"tooltip": "Custom width for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 6240, "step": 2}], "height": ["INT", {"tooltip": "Custom height for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 4992, "step": 2}], "max_images": ["INT", {"tooltip": "Maximum number of images to generate. With 1, exactly one image is produced. With >1, the model generates between 1 and max_images related images (e.g., story scenes, character variations). Total images (input + generated) cannot exceed 15.", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image-to-image or multi-reference generation. Up to 10 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 0}}], "fail_on_partial": ["BOOLEAN", {"tooltip": "If enabled, abort execution if any requested images are missing or return an error.", "advanced": true, "default": false}]}}}, {"key": "seedream-4-0-250828", "inputs": {"required": {"size_preset": ["COMBO", {"tooltip": "Pick a recommended size. Select Custom to use the width and height below.", "multiselect": false, "options": ["(1K) 1024x1024 (1:1)", "(1K) 864x1152 (3:4)", "(1K) 1152x864 (4:3)", "(1K) 1312x736 (16:9)", "(1K) 736x1312 (9:16)", "(1K) 832x1248 (2:3)", "(1K) 1248x832 (3:2)", "(1K) 1568x672 (21:9)", "(2K) 2048x2048 (1:1)", "(2K) 1728x2304 (3:4)", "(2K) 2304x1728 (4:3)", "(2K) 2848x1600 (16:9)", "(2K) 1600x2848 (9:16)", "(2K) 1664x2496 (2:3)", "(2K) 2496x1664 (3:2)", "(2K) 3136x1344 (21:9)", "(4K) 4096x4096 (1:1)", "(4K) 3520x4704 (3:4)", "(4K) 4704x3520 (4:3)", "(4K) 5504x3040 (16:9)", "(4K) 3040x5504 (9:16)", "(4K) 3328x4992 (2:3)", "(4K) 4992x3328 (3:2)", "(4K) 6240x2656 (21:9)", "Custom"]}], "width": ["INT", {"tooltip": "Custom width for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 6240, "step": 2}], "height": ["INT", {"tooltip": "Custom height for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 4992, "step": 2}], "max_images": ["INT", {"tooltip": "Maximum number of images to generate. With 1, exactly one image is produced. With >1, the model generates between 1 and max_images related images (e.g., story scenes, character variations). Total images (input + generated) cannot exceed 15.", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image-to-image or multi-reference generation. Up to 10 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 0}}], "fail_on_partial": ["BOOLEAN", {"tooltip": "If enabled, abort execution if any requested images are missing or return an error.", "advanced": true, "default": false}]}}}]}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the image.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceSeedreamNodeV2", "display_name": "ByteDance Seedream 4.5 & 5.0", "description": "Unified text-to-image generation and precise single-sentence editing at up to 4K resolution.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/image/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $price := $contains(widgets.model, \"5.0 lite\") ? 0.035 :\n $contains(widgets.model, \"4-5\") ? 0.04 : 0.03;\n {\n \"type\":\"usd\",\n \"usd\": $price,\n \"format\": { \"suffix\":\" x images/Run\", \"approximate\": true }\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceTextToVideoNode": {"input": {"required": {"model": ["COMBO", {"default": "seedance-1-0-pro-fast-251015", "multiselect": false, "options": ["seedance-1-5-pro-251215", "seedance-1-0-pro-250528", "seedance-1-0-lite-t2v-250428", "seedance-1-0-pro-fast-251015"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the video.", "multiline": true}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 5, "min": 3, "max": 12, "step": 1, "display": "slider"}]}, "optional": {"seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "camera_fixed": ["BOOLEAN", {"tooltip": "Specifies whether to fix the camera. The platform appends an instruction to fix the camera to your prompt, but does not guarantee the actual effect.", "advanced": true, "default": false}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the video.", "advanced": true, "default": false}], "generate_audio": ["BOOLEAN", {"tooltip": "This parameter is ignored for any model except seedance-1-5-pro.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "resolution", "aspect_ratio", "duration"], "optional": ["seed", "camera_fixed", "watermark", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceTextToVideoNode", "display_name": "ByteDance Text to Video", "description": "Generate video using ByteDance models via api based on prompt", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $priceByModel := {\n \"seedance-1-5-pro\": {\n \"480p\":[0.12,0.12],\n \"720p\":[0.26,0.26],\n \"1080p\":[0.58,0.59]\n },\n \"seedance-1-0-pro\": {\n \"480p\":[0.23,0.24],\n \"720p\":[0.51,0.56],\n \"1080p\":[1.18,1.22]\n },\n \"seedance-1-0-pro-fast\": {\n \"480p\":[0.09,0.1],\n \"720p\":[0.21,0.23],\n \"1080p\":[0.47,0.49]\n },\n \"seedance-1-0-lite\": {\n \"480p\":[0.17,0.18],\n \"720p\":[0.37,0.41],\n \"1080p\":[0.85,0.88]\n }\n };\n $model := widgets.model;\n $modelKey :=\n $contains($model, \"seedance-1-5-pro\") ? \"seedance-1-5-pro\" :\n $contains($model, \"seedance-1-0-pro-fast\") ? \"seedance-1-0-pro-fast\" :\n $contains($model, \"seedance-1-0-pro\") ? \"seedance-1-0-pro\" :\n \"seedance-1-0-lite\";\n $resolution := widgets.resolution;\n $resKey :=\n $contains($resolution, \"1080\") ? \"1080p\" :\n $contains($resolution, \"720\") ? \"720p\" :\n \"480p\";\n $modelPrices := $lookup($priceByModel, $modelKey);\n $baseRange := $lookup($modelPrices, $resKey);\n $min10s := $baseRange[0];\n $max10s := $baseRange[1];\n $scale := widgets.duration / 10;\n $audioMultiplier := ($modelKey = \"seedance-1-5-pro\" and widgets.generate_audio) ? 2 : 1;\n $minCost := $min10s * $scale * $audioMultiplier;\n $maxCost := $max10s * $scale * $audioMultiplier;\n ($minCost = $maxCost)\n ? {\"type\":\"usd\",\"usd\": $minCost, \"format\": { \"approximate\": true }}\n : {\"type\":\"range_usd\",\"min_usd\": $minCost, \"max_usd\": $maxCost, \"format\": { \"approximate\": true }}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceImageToVideoNode": {"input": {"required": {"model": ["COMBO", {"default": "seedance-1-0-pro-fast-251015", "multiselect": false, "options": ["seedance-1-5-pro-251215", "seedance-1-0-pro-250528", "seedance-1-0-lite-i2v-250428", "seedance-1-0-pro-fast-251015"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the video.", "multiline": true}], "image": ["IMAGE", {"tooltip": "First frame to be used for the video."}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["adaptive", "16:9", "4:3", "1:1", "3:4", "9:16", "21:9"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 5, "min": 3, "max": 12, "step": 1, "display": "slider"}]}, "optional": {"seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "camera_fixed": ["BOOLEAN", {"tooltip": "Specifies whether to fix the camera. The platform appends an instruction to fix the camera to your prompt, but does not guarantee the actual effect.", "advanced": true, "default": false}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the video.", "advanced": true, "default": false}], "generate_audio": ["BOOLEAN", {"tooltip": "This parameter is ignored for any model except seedance-1-5-pro.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "image", "resolution", "aspect_ratio", "duration"], "optional": ["seed", "camera_fixed", "watermark", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceImageToVideoNode", "display_name": "ByteDance Image to Video", "description": "Generate video using ByteDance models via api based on image and prompt", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $priceByModel := {\n \"seedance-1-5-pro\": {\n \"480p\":[0.12,0.12],\n \"720p\":[0.26,0.26],\n \"1080p\":[0.58,0.59]\n },\n \"seedance-1-0-pro\": {\n \"480p\":[0.23,0.24],\n \"720p\":[0.51,0.56],\n \"1080p\":[1.18,1.22]\n },\n \"seedance-1-0-pro-fast\": {\n \"480p\":[0.09,0.1],\n \"720p\":[0.21,0.23],\n \"1080p\":[0.47,0.49]\n },\n \"seedance-1-0-lite\": {\n \"480p\":[0.17,0.18],\n \"720p\":[0.37,0.41],\n \"1080p\":[0.85,0.88]\n }\n };\n $model := widgets.model;\n $modelKey :=\n $contains($model, \"seedance-1-5-pro\") ? \"seedance-1-5-pro\" :\n $contains($model, \"seedance-1-0-pro-fast\") ? \"seedance-1-0-pro-fast\" :\n $contains($model, \"seedance-1-0-pro\") ? \"seedance-1-0-pro\" :\n \"seedance-1-0-lite\";\n $resolution := widgets.resolution;\n $resKey :=\n $contains($resolution, \"1080\") ? \"1080p\" :\n $contains($resolution, \"720\") ? \"720p\" :\n \"480p\";\n $modelPrices := $lookup($priceByModel, $modelKey);\n $baseRange := $lookup($modelPrices, $resKey);\n $min10s := $baseRange[0];\n $max10s := $baseRange[1];\n $scale := widgets.duration / 10;\n $audioMultiplier := ($modelKey = \"seedance-1-5-pro\" and widgets.generate_audio) ? 2 : 1;\n $minCost := $min10s * $scale * $audioMultiplier;\n $maxCost := $max10s * $scale * $audioMultiplier;\n ($minCost = $maxCost)\n ? {\"type\":\"usd\",\"usd\": $minCost, \"format\": { \"approximate\": true }}\n : {\"type\":\"range_usd\",\"min_usd\": $minCost, \"max_usd\": $maxCost, \"format\": { \"approximate\": true }}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceFirstLastFrameNode": {"input": {"required": {"model": ["COMBO", {"default": "seedance-1-0-lite-i2v-250428", "multiselect": false, "options": ["seedance-1-5-pro-251215", "seedance-1-0-pro-250528", "seedance-1-0-lite-i2v-250428"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the video.", "multiline": true}], "first_frame": ["IMAGE", {"tooltip": "First frame to be used for the video."}], "last_frame": ["IMAGE", {"tooltip": "Last frame to be used for the video."}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["adaptive", "16:9", "4:3", "1:1", "3:4", "9:16", "21:9"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 5, "min": 3, "max": 12, "step": 1, "display": "slider"}]}, "optional": {"seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "camera_fixed": ["BOOLEAN", {"tooltip": "Specifies whether to fix the camera. The platform appends an instruction to fix the camera to your prompt, but does not guarantee the actual effect.", "advanced": true, "default": false}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the video.", "advanced": true, "default": false}], "generate_audio": ["BOOLEAN", {"tooltip": "This parameter is ignored for any model except seedance-1-5-pro.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "first_frame", "last_frame", "resolution", "aspect_ratio", "duration"], "optional": ["seed", "camera_fixed", "watermark", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceFirstLastFrameNode", "display_name": "ByteDance First-Last-Frame to Video", "description": "Generate video using prompt and first and last frames.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $priceByModel := {\n \"seedance-1-5-pro\": {\n \"480p\":[0.12,0.12],\n \"720p\":[0.26,0.26],\n \"1080p\":[0.58,0.59]\n },\n \"seedance-1-0-pro\": {\n \"480p\":[0.23,0.24],\n \"720p\":[0.51,0.56],\n \"1080p\":[1.18,1.22]\n },\n \"seedance-1-0-pro-fast\": {\n \"480p\":[0.09,0.1],\n \"720p\":[0.21,0.23],\n \"1080p\":[0.47,0.49]\n },\n \"seedance-1-0-lite\": {\n \"480p\":[0.17,0.18],\n \"720p\":[0.37,0.41],\n \"1080p\":[0.85,0.88]\n }\n };\n $model := widgets.model;\n $modelKey :=\n $contains($model, \"seedance-1-5-pro\") ? \"seedance-1-5-pro\" :\n $contains($model, \"seedance-1-0-pro-fast\") ? \"seedance-1-0-pro-fast\" :\n $contains($model, \"seedance-1-0-pro\") ? \"seedance-1-0-pro\" :\n \"seedance-1-0-lite\";\n $resolution := widgets.resolution;\n $resKey :=\n $contains($resolution, \"1080\") ? \"1080p\" :\n $contains($resolution, \"720\") ? \"720p\" :\n \"480p\";\n $modelPrices := $lookup($priceByModel, $modelKey);\n $baseRange := $lookup($modelPrices, $resKey);\n $min10s := $baseRange[0];\n $max10s := $baseRange[1];\n $scale := widgets.duration / 10;\n $audioMultiplier := ($modelKey = \"seedance-1-5-pro\" and widgets.generate_audio) ? 2 : 1;\n $minCost := $min10s * $scale * $audioMultiplier;\n $maxCost := $max10s * $scale * $audioMultiplier;\n ($minCost = $maxCost)\n ? {\"type\":\"usd\",\"usd\": $minCost, \"format\": { \"approximate\": true }}\n : {\"type\":\"range_usd\",\"min_usd\": $minCost, \"max_usd\": $maxCost, \"format\": { \"approximate\": true }}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceImageReferenceNode": {"input": {"required": {"model": ["COMBO", {"default": "seedance-1-0-lite-i2v-250428", "multiselect": false, "options": ["seedance-1-0-pro-250528", "seedance-1-0-lite-i2v-250428"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the video.", "multiline": true}], "images": ["IMAGE", {"tooltip": "One to four images."}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video.", "multiselect": false, "options": ["480p", "720p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["adaptive", "16:9", "4:3", "1:1", "3:4", "9:16", "21:9"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 5, "min": 3, "max": 12, "step": 1, "display": "slider"}]}, "optional": {"seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the video.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "images", "resolution", "aspect_ratio", "duration"], "optional": ["seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceImageReferenceNode", "display_name": "ByteDance Reference Images to Video", "description": "Generate video using prompt and reference images.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $priceByModel := {\n \"seedance-1-0-pro\": {\n \"480p\":[0.23,0.24],\n \"720p\":[0.51,0.56]\n },\n \"seedance-1-0-lite\": {\n \"480p\":[0.17,0.18],\n \"720p\":[0.37,0.41]\n }\n };\n $model := widgets.model;\n $modelKey :=\n $contains($model, \"seedance-1-0-pro\") ? \"seedance-1-0-pro\" :\n \"seedance-1-0-lite\";\n $resolution := widgets.resolution;\n $resKey :=\n $contains($resolution, \"720\") ? \"720p\" :\n \"480p\";\n $modelPrices := $lookup($priceByModel, $modelKey);\n $baseRange := $lookup($modelPrices, $resKey);\n $min10s := $baseRange[0];\n $max10s := $baseRange[1];\n $scale := widgets.duration / 10;\n $minCost := $min10s * $scale;\n $maxCost := $max10s * $scale;\n ($minCost = $maxCost)\n ? {\"type\":\"usd\",\"usd\": $minCost}\n : {\"type\":\"range_usd\",\"min_usd\": $minCost, \"max_usd\": $maxCost}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDance2TextToVideoNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Seedance 2.0 for maximum quality; Seedance 2.0 Fast for speed optimization.", "options": [{"key": "Seedance 2.0", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p", "4k"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "16:9", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}]}}}, {"key": "Seedance 2.0 Fast", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "16:9", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add a watermark to the video.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDance2TextToVideoNode", "display_name": "ByteDance Seedance 2.0 Text to Video", "description": "Generate video using Seedance 2.0 models based on a text prompt.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rate480 := 10044;\n $rate720 := 21600;\n $rate1080 := 48800;\n $rate4k := 195200;\n $m := widgets.model;\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $pricePer1K := $res = \"4k\" ? 0.00572 :\n $res = \"1080p\" ? 0.011011 :\n $contains($m, \"fast\") ? 0.008008 : 0.01001;\n $rate := $res = \"4k\" ? $rate4k :\n $res = \"1080p\" ? $rate1080 :\n $res = \"720p\" ? $rate720 :\n $rate480;\n $cost := $dur * $rate * $pricePer1K / 1000;\n {\"type\": \"usd\", \"usd\": $cost, \"format\": {\"approximate\": true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDance2FirstLastFrameNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Seedance 2.0 for maximum quality; Seedance 2.0 Fast for speed optimization.", "options": [{"key": "Seedance 2.0", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p", "4k"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "adaptive", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}]}}}, {"key": "Seedance 2.0 Fast", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "adaptive", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add a watermark to the video.", "advanced": true, "default": false}]}, "optional": {"first_frame": ["IMAGE", {"tooltip": "First frame image for the video."}], "last_frame": ["IMAGE", {"tooltip": "Last frame image for the video."}], "first_frame_asset_id": ["STRING", {"tooltip": "Seedance asset_id to use as the first frame. Mutually exclusive with the first_frame image input.", "default": "", "multiline": false}], "last_frame_asset_id": ["STRING", {"tooltip": "Seedance asset_id to use as the last frame. Mutually exclusive with the last_frame image input.", "default": "", "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "seed", "watermark"], "optional": ["first_frame", "last_frame", "first_frame_asset_id", "last_frame_asset_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDance2FirstLastFrameNode", "display_name": "ByteDance Seedance 2.0 First-Last-Frame to Video", "description": "Generate video using Seedance 2.0 from a first frame image and optional last frame image.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rate480 := 10044;\n $rate720 := 21600;\n $rate1080 := 48800;\n $rate4k := 195200;\n $m := widgets.model;\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $pricePer1K := $res = \"4k\" ? 0.00572 :\n $res = \"1080p\" ? 0.011011 :\n $contains($m, \"fast\") ? 0.008008 : 0.01001;\n $rate := $res = \"4k\" ? $rate4k :\n $res = \"1080p\" ? $rate1080 :\n $res = \"720p\" ? $rate720 :\n $rate480;\n $cost := $dur * $rate * $pricePer1K / 1000;\n {\"type\": \"usd\", \"usd\": $cost, \"format\": {\"approximate\": true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDance2ReferenceNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Seedance 2.0 for maximum quality; Seedance 2.0 Fast for speed optimization.", "options": [{"key": "Seedance 2.0", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p", "4k"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "adaptive", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9"], "min": 0}}], "reference_videos": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3"], "min": 0}}], "reference_audios": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_audio": ["AUDIO", {}]}}, "names": ["audio_1", "audio_2", "audio_3"], "min": 0}}], "reference_assets": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_asset": ["STRING", {"forceInput": true, "multiline": false}]}}, "names": ["asset_1", "asset_2", "asset_3", "asset_4", "asset_5", "asset_6", "asset_7", "asset_8", "asset_9"], "min": 0}}]}, "optional": {"auto_downscale": ["BOOLEAN", {"tooltip": "Automatically downscale reference videos that exceed the model's pixel budget for the selected resolution. Aspect ratio is preserved; videos already within limits are untouched.", "default": true}], "auto_upscale": ["BOOLEAN", {"tooltip": "Automatically upscale reference videos that are below the model's minimum pixel count for the selected resolution. Aspect ratio is preserved; videos already meeting the minimum are untouched. Note: upscaling a low-resolution source does not add real detail and may produce lower-quality generations.", "advanced": true, "default": false}]}}}, {"key": "Seedance 2.0 Fast", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "adaptive", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9"], "min": 0}}], "reference_videos": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3"], "min": 0}}], "reference_audios": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_audio": ["AUDIO", {}]}}, "names": ["audio_1", "audio_2", "audio_3"], "min": 0}}], "reference_assets": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_asset": ["STRING", {"forceInput": true, "multiline": false}]}}, "names": ["asset_1", "asset_2", "asset_3", "asset_4", "asset_5", "asset_6", "asset_7", "asset_8", "asset_9"], "min": 0}}]}, "optional": {"auto_downscale": ["BOOLEAN", {"tooltip": "Automatically downscale reference videos that exceed the model's pixel budget for the selected resolution. Aspect ratio is preserved; videos already within limits are untouched.", "default": true}], "auto_upscale": ["BOOLEAN", {"tooltip": "Automatically upscale reference videos that are below the model's minimum pixel count for the selected resolution. Aspect ratio is preserved; videos already meeting the minimum are untouched. Note: upscaling a low-resolution source does not add real detail and may produce lower-quality generations.", "advanced": true, "default": false}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add a watermark to the video.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDance2ReferenceNode", "display_name": "ByteDance Seedance 2.0 Reference to Video", "description": "Generate, edit, or extend video using Seedance 2.0 with reference images, videos, and audio. Supports multimodal reference, video editing, and video extension.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": ["model.reference_videos"]}, "expr": "\n (\n $rate480 := 10044;\n $rate720 := 21600;\n $rate1080 := 48800;\n $rate4k := 195200;\n $m := widgets.model;\n $hasVideo := $lookup(inputGroups, \"model.reference_videos\") > 0;\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $noVideoPricePer1K := $res = \"4k\" ? 0.00572 :\n $res = \"1080p\" ? 0.011011 :\n $contains($m, \"fast\") ? 0.008008 : 0.01001;\n $videoPricePer1K := $res = \"4k\" ? 0.003432 :\n $res = \"1080p\" ? 0.006721 :\n $contains($m, \"fast\") ? 0.004719 : 0.006149;\n $rate := $res = \"4k\" ? $rate4k :\n $res = \"1080p\" ? $rate1080 :\n $res = \"720p\" ? $rate720 :\n $rate480;\n $noVideoCost := $dur * $rate * $noVideoPricePer1K / 1000;\n $minVideoFactor := $ceil($dur * 5 / 3);\n $minVideoCost := $minVideoFactor * $rate * $videoPricePer1K / 1000;\n $maxVideoCost := (15 + $dur) * $rate * $videoPricePer1K / 1000;\n $hasVideo\n ? {\n \"type\": \"range_usd\",\n \"min_usd\": $minVideoCost,\n \"max_usd\": $maxVideoCost,\n \"format\": {\"approximate\": true}\n }\n : {\n \"type\": \"usd\",\n \"usd\": $noVideoCost,\n \"format\": {\"approximate\": true}\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceCreateImageAsset": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Image to register as a personal asset."}], "group_id": ["STRING", {"tooltip": "Reuse an existing Seedance asset group ID to skip repeated human verification for the same person. Leave empty to run real-person authentication in the browser and create a new group.", "default": "", "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "group_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["STRING", "STRING"], "output_is_list": [false, false], "output_name": ["asset_id", "group_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ByteDanceCreateImageAsset", "display_name": "ByteDance Create Image Asset", "description": "Create a Seedance 2.0 personal image asset. Uploads the input image and registers it in the given asset group. If group_id is empty, runs a real-person H5 authentication flow to create a new group before adding the asset.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/image/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceCreateVideoAsset": {"input": {"required": {"video": ["VIDEO", {"tooltip": "Video to register as a personal asset."}], "group_id": ["STRING", {"tooltip": "Reuse an existing Seedance asset group ID to skip repeated human verification for the same person. Leave empty to run real-person authentication in the browser and create a new group.", "default": "", "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["video", "group_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["STRING", "STRING"], "output_is_list": [false, false], "output_name": ["asset_id", "group_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ByteDanceCreateVideoAsset", "display_name": "ByteDance Create Video Asset", "description": "Create a Seedance 2.0 personal video asset. Uploads the input video and registers it in the given asset group. If group_id is empty, runs a real-person H5 authentication flow to create a new group before adding the asset.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceSeedNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text input to the model.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The Seed model used to generate the response.", "options": [{"key": "Seed 2.0 Pro", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional image(s) to use as context for the model. Up to 20 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional video(s) to use as context for the model. Up to 4 videos.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, higher values are more random.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.01}]}}}, {"key": "Seed 2.0 Lite", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional image(s) to use as context for the model. Up to 20 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional video(s) to use as context for the model. Up to 4 videos.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, higher values are more random.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.01}]}}}, {"key": "Seed 2.0 Mini", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional image(s) to use as context for the model. Up to 20 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional video(s) to use as context for the model. Up to 4 videos.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, higher values are more random.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.01}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate the model's behavior.", "advanced": true, "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "optional": ["system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceSeedNode", "display_name": "ByteDance Seed", "description": "Generate text responses with ByteDance's Seed 2.0 models. Provide a text prompt and optionally one or more images or videos for multimodal context.", "python_module": "comfy_api_nodes.nodes_bytedance_llm", "category": "partner/text/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $contains($m, \"mini\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.00025, 0.0009],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"lite\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.0003, 0.002],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"pro\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.0005, 0.003],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : {\"type\":\"text\", \"text\":\"Token-based\"}\n )\n "}, "search_aliases": null, "essentials_category": "Text Generation", "has_intermediate_output": false}, "ElevenLabsSpeechToText": {"input": {"required": {"audio": ["AUDIO", {"tooltip": "Audio to transcribe."}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for transcription.", "options": [{"key": "scribe_v2", "inputs": {"required": {"tag_audio_events": ["BOOLEAN", {"tooltip": "Annotate sounds like (laughter), (music), etc. in transcript.", "default": false}], "diarize": ["BOOLEAN", {"tooltip": "Annotate which speaker is talking.", "default": false}], "diarization_threshold": ["FLOAT", {"tooltip": "Speaker separation sensitivity. Lower values are more sensitive to speaker changes.", "default": 0.22, "min": 0.1, "max": 0.4, "step": 0.01, "display": "slider"}], "temperature": ["FLOAT", {"tooltip": "Randomness control. 0.0 uses model default. Higher values increase randomness.", "default": 0.0, "min": 0.0, "max": 2.0, "step": 0.01, "display": "slider"}], "timestamps_granularity": ["COMBO", {"tooltip": "Timing precision for transcript words.", "default": "word", "multiselect": false, "options": ["word", "character", "none"]}]}}}]}], "language_code": ["STRING", {"tooltip": "ISO-639-1 or ISO-639-3 language code (e.g., 'en', 'es', 'fra'). Leave empty for automatic detection.", "default": "", "multiline": false}], "num_speakers": ["INT", {"tooltip": "Maximum number of speakers to predict. Set to 0 for automatic detection.", "default": 0, "min": 0, "max": 32, "display": "slider"}], "seed": ["INT", {"tooltip": "Seed for reproducibility (determinism not guaranteed).", "default": 1, "min": 0, "max": 2147483647}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["audio", "model", "language_code", "num_speakers", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["text", "language_code", "words_json"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "ElevenLabsSpeechToText", "display_name": "ElevenLabs Speech to Text", "description": "Transcribe audio to text. Supports automatic language detection, speaker diarization, and audio event tagging.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.0073,\"format\":{\"approximate\":true,\"suffix\":\"/minute\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsVoiceSelector": {"input": {"required": {"voice": ["COMBO", {"tooltip": "Choose a voice from the predefined ElevenLabs voices.", "multiselect": false, "options": ["Roger (male, american)", "Sarah (female, american)", "Laura (female, american)", "Charlie (male, australian)", "George (male, british)", "Callum (male, american)", "River (neutral, american)", "Harry (male, american)", "Liam (male, american)", "Alice (female, british)", "Matilda (female, american)", "Will (male, american)", "Jessica (female, american)", "Eric (male, american)", "Bella (female, american)", "Chris (male, american)", "Brian (male, american)", "Daniel (male, british)", "Lily (female, british)", "Adam (male, american)", "Bill (male, american)"]}]}}, "input_order": {"required": ["voice"]}, "is_input_list": false, "output": ["ELEVENLABS_VOICE"], "output_is_list": [false], "output_name": ["voice"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsVoiceSelector", "display_name": "ElevenLabs Voice Selector", "description": "Select a predefined ElevenLabs voice for text-to-speech generation.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsTextToSpeech": {"input": {"required": {"voice": ["ELEVENLABS_VOICE", {"tooltip": "Voice to use for speech synthesis. Connect from Voice Selector or Instant Voice Clone."}], "text": ["STRING", {"tooltip": "The text to convert to speech.", "default": "", "multiline": true}], "stability": ["FLOAT", {"tooltip": "Voice stability. Lower values give broader emotional range, higher values produce more consistent but potentially monotonous speech.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "apply_text_normalization": ["COMBO", {"tooltip": "Text normalization mode. 'auto' lets the system decide, 'on' always applies normalization, 'off' skips it.", "multiselect": false, "options": ["auto", "on", "off"]}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for text-to-speech.", "options": [{"key": "eleven_multilingual_v2", "inputs": {"required": {"speed": ["FLOAT", {"tooltip": "Speech speed. 1.0 is normal, <1.0 slower, >1.0 faster.", "default": 1.0, "min": 0.7, "max": 1.3, "step": 0.01, "display": "slider"}], "similarity_boost": ["FLOAT", {"tooltip": "Similarity boost. Higher values make the voice more similar to the original.", "default": 0.75, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "use_speaker_boost": ["BOOLEAN", {"tooltip": "Boost similarity to the original speaker voice.", "default": false}], "style": ["FLOAT", {"tooltip": "Style exaggeration. Higher values increase stylistic expression but may reduce stability.", "default": 0.0, "min": 0.0, "max": 0.2, "step": 0.01, "display": "slider"}]}}}, {"key": "eleven_v3", "inputs": {"required": {"speed": ["FLOAT", {"tooltip": "Speech speed. 1.0 is normal, <1.0 slower, >1.0 faster.", "default": 1.0, "min": 0.7, "max": 1.3, "step": 0.01, "display": "slider"}], "similarity_boost": ["FLOAT", {"tooltip": "Similarity boost. Higher values make the voice more similar to the original.", "default": 0.75, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}]}}}]}], "language_code": ["STRING", {"tooltip": "ISO-639-1 or ISO-639-3 language code (e.g., 'en', 'es', 'fra'). Leave empty for automatic detection.", "default": "", "multiline": false}], "seed": ["INT", {"tooltip": "Seed for reproducibility (determinism not guaranteed).", "default": 1, "min": 0, "max": 2147483647}], "output_format": ["COMBO", {"tooltip": "Audio output format.", "multiselect": false, "options": ["mp3_44100_192", "opus_48000_192"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["voice", "text", "stability", "apply_text_normalization", "model", "language_code", "seed", "output_format"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsTextToSpeech", "display_name": "ElevenLabs Text to Speech", "description": "Convert text to speech.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.24,\"format\":{\"approximate\":true,\"suffix\":\"/1K chars\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsAudioIsolation": {"input": {"required": {"audio": ["AUDIO", {"tooltip": "Audio to process for background noise removal."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsAudioIsolation", "display_name": "ElevenLabs Voice Isolation", "description": "Remove background noise from audio, isolating vocals or speech.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.24,\"format\":{\"approximate\":true,\"suffix\":\"/minute\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsTextToSoundEffects": {"input": {"required": {"text": ["STRING", {"tooltip": "Text description of the sound effect to generate.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for sound effect generation.", "options": [{"key": "eleven_sfx_v2", "inputs": {"required": {"duration": ["FLOAT", {"tooltip": "Duration of generated sound in seconds.", "default": 5.0, "min": 0.5, "max": 30.0, "step": 0.1, "display": "slider"}], "loop": ["BOOLEAN", {"tooltip": "Create a smoothly looping sound effect.", "default": false}], "prompt_influence": ["FLOAT", {"tooltip": "How closely generation follows the prompt. Higher values make the sound follow the text more closely.", "default": 0.3, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}]}}}]}], "output_format": ["COMBO", {"tooltip": "Audio output format.", "multiselect": false, "options": ["mp3_44100_192", "opus_48000_192"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["text", "model", "output_format"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsTextToSoundEffects", "display_name": "ElevenLabs Text to Sound Effects", "description": "Generate sound effects from text descriptions.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.14,\"format\":{\"approximate\":true,\"suffix\":\"/minute\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsInstantVoiceClone": {"input": {"required": {"files": ["COMFY_AUTOGROW_V3", {"tooltip": "Audio recordings for voice cloning.", "template": {"input": {"required": {"audio": ["AUDIO", {}]}}, "prefix": "audio", "min": 1, "max": 8}}], "remove_background_noise": ["BOOLEAN", {"tooltip": "Remove background noise from voice samples using audio isolation.", "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["files", "remove_background_noise"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["ELEVENLABS_VOICE"], "output_is_list": [false], "output_name": ["voice"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsInstantVoiceClone", "display_name": "ElevenLabs Instant Voice Clone", "description": "Create a cloned voice from audio samples. Provide 1-8 audio recordings of the voice to clone.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.15}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsSpeechToSpeech": {"input": {"required": {"voice": ["ELEVENLABS_VOICE", {"tooltip": "Target voice for the transformation. Connect from Voice Selector or Instant Voice Clone."}], "audio": ["AUDIO", {"tooltip": "Source audio to transform."}], "stability": ["FLOAT", {"tooltip": "Voice stability. Lower values give broader emotional range, higher values produce more consistent but potentially monotonous speech.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for speech-to-speech transformation.", "options": [{"key": "eleven_multilingual_sts_v2", "inputs": {"required": {"speed": ["FLOAT", {"tooltip": "Speech speed. 1.0 is normal, <1.0 slower, >1.0 faster.", "default": 1.0, "min": 0.7, "max": 1.3, "step": 0.01, "display": "slider"}], "similarity_boost": ["FLOAT", {"tooltip": "Similarity boost. Higher values make the voice more similar to the original.", "default": 0.75, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "use_speaker_boost": ["BOOLEAN", {"tooltip": "Boost similarity to the original speaker voice.", "default": false}], "style": ["FLOAT", {"tooltip": "Style exaggeration. Higher values increase stylistic expression but may reduce stability.", "default": 0.0, "min": 0.0, "max": 0.2, "step": 0.01, "display": "slider"}]}}}, {"key": "eleven_english_sts_v2", "inputs": {"required": {"speed": ["FLOAT", {"tooltip": "Speech speed. 1.0 is normal, <1.0 slower, >1.0 faster.", "default": 1.0, "min": 0.7, "max": 1.3, "step": 0.01, "display": "slider"}], "similarity_boost": ["FLOAT", {"tooltip": "Similarity boost. Higher values make the voice more similar to the original.", "default": 0.75, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "use_speaker_boost": ["BOOLEAN", {"tooltip": "Boost similarity to the original speaker voice.", "default": false}], "style": ["FLOAT", {"tooltip": "Style exaggeration. Higher values increase stylistic expression but may reduce stability.", "default": 0.0, "min": 0.0, "max": 0.2, "step": 0.01, "display": "slider"}]}}}]}], "output_format": ["COMBO", {"tooltip": "Audio output format.", "multiselect": false, "options": ["mp3_44100_192", "opus_48000_192"]}], "seed": ["INT", {"tooltip": "Seed for reproducibility.", "default": 0, "min": 0, "max": 4294967295}], "remove_background_noise": ["BOOLEAN", {"tooltip": "Remove background noise from input audio using audio isolation.", "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["voice", "audio", "stability", "model", "output_format", "seed", "remove_background_noise"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsSpeechToSpeech", "display_name": "ElevenLabs Speech to Speech", "description": "Transform speech from one voice to another while preserving the original content and emotion.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.24,\"format\":{\"approximate\":true,\"suffix\":\"/minute\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsTextToDialogue": {"input": {"required": {"stability": ["FLOAT", {"tooltip": "Voice stability. Lower values give broader emotional range, higher values produce more consistent but potentially monotonous speech.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.5, "display": "slider"}], "apply_text_normalization": ["COMBO", {"tooltip": "Text normalization mode. 'auto' lets the system decide, 'on' always applies normalization, 'off' skips it.", "multiselect": false, "options": ["auto", "on", "off"]}], "model": ["COMBO", {"tooltip": "Model to use for dialogue generation.", "multiselect": false, "options": ["eleven_v3"]}], "inputs": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Number of dialogue entries.", "options": [{"key": "1", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "2", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "3", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "4", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "5", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "6", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}], "text6": ["STRING", {"tooltip": "Text content for dialogue entry 6.", "default": "", "multiline": true}], "voice6": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 6. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "7", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}], "text6": ["STRING", {"tooltip": "Text content for dialogue entry 6.", "default": "", "multiline": true}], "voice6": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 6. Connect from Voice Selector or Instant Voice Clone."}], "text7": ["STRING", {"tooltip": "Text content for dialogue entry 7.", "default": "", "multiline": true}], "voice7": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 7. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "8", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}], "text6": ["STRING", {"tooltip": "Text content for dialogue entry 6.", "default": "", "multiline": true}], "voice6": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 6. Connect from Voice Selector or Instant Voice Clone."}], "text7": ["STRING", {"tooltip": "Text content for dialogue entry 7.", "default": "", "multiline": true}], "voice7": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 7. Connect from Voice Selector or Instant Voice Clone."}], "text8": ["STRING", {"tooltip": "Text content for dialogue entry 8.", "default": "", "multiline": true}], "voice8": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 8. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "9", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}], "text6": ["STRING", {"tooltip": "Text content for dialogue entry 6.", "default": "", "multiline": true}], "voice6": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 6. Connect from Voice Selector or Instant Voice Clone."}], "text7": ["STRING", {"tooltip": "Text content for dialogue entry 7.", "default": "", "multiline": true}], "voice7": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 7. Connect from Voice Selector or Instant Voice Clone."}], "text8": ["STRING", {"tooltip": "Text content for dialogue entry 8.", "default": "", "multiline": true}], "voice8": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 8. Connect from Voice Selector or Instant Voice Clone."}], "text9": ["STRING", {"tooltip": "Text content for dialogue entry 9.", "default": "", "multiline": true}], "voice9": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 9. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "10", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}], "text6": ["STRING", {"tooltip": "Text content for dialogue entry 6.", "default": "", "multiline": true}], "voice6": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 6. Connect from Voice Selector or Instant Voice Clone."}], "text7": ["STRING", {"tooltip": "Text content for dialogue entry 7.", "default": "", "multiline": true}], "voice7": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 7. Connect from Voice Selector or Instant Voice Clone."}], "text8": ["STRING", {"tooltip": "Text content for dialogue entry 8.", "default": "", "multiline": true}], "voice8": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 8. Connect from Voice Selector or Instant Voice Clone."}], "text9": ["STRING", {"tooltip": "Text content for dialogue entry 9.", "default": "", "multiline": true}], "voice9": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 9. Connect from Voice Selector or Instant Voice Clone."}], "text10": ["STRING", {"tooltip": "Text content for dialogue entry 10.", "default": "", "multiline": true}], "voice10": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 10. Connect from Voice Selector or Instant Voice Clone."}]}}}]}], "language_code": ["STRING", {"tooltip": "ISO-639-1 or ISO-639-3 language code (e.g., 'en', 'es', 'fra'). Leave empty for automatic detection.", "default": "", "multiline": false}], "seed": ["INT", {"tooltip": "Seed for reproducibility.", "default": 1, "min": 0, "max": 4294967295}], "output_format": ["COMBO", {"tooltip": "Audio output format.", "multiselect": false, "options": ["mp3_44100_192", "opus_48000_192"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["stability", "apply_text_normalization", "model", "inputs", "language_code", "seed", "output_format"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsTextToDialogue", "display_name": "ElevenLabs Text to Dialogue", "description": "Generate multi-speaker dialogue from text. Each dialogue entry has its own text and voice.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.24,\"format\":{\"approximate\":true,\"suffix\":\"/1K chars\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text inputs to the model, used to generate a response. You can include detailed instructions, questions, or context for the model.", "default": "", "multiline": true}], "model": ["COMBO", {"tooltip": "The Gemini model to use for generating responses.", "default": "gemini-3-1-pro", "multiselect": false, "options": ["gemini-2.5-pro", "gemini-2.5-flash", "gemini-3-pro-preview", "gemini-3-1-pro", "gemini-3-1-flash-lite"]}], "seed": ["INT", {"tooltip": "When seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used.", "default": 42, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"images": ["IMAGE", {"tooltip": "Optional image(s) to use as context for the model. To include multiple images, you can use the Batch Images node."}], "audio": ["AUDIO", {"tooltip": "Optional audio to use as context for the model."}], "video": ["VIDEO", {"tooltip": "Optional video to use as context for the model."}], "files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."}], "system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate an AI's behavior.", "advanced": true, "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "optional": ["images", "audio", "video", "files", "system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "GeminiNode", "display_name": "Google Gemini", "description": "Generate text responses with Google's Gemini AI model. You can provide multiple types of inputs (text, images, audio, video) as context for generating more relevant and meaningful responses.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/text/Gemini", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $contains($m, \"gemini-2.5-flash\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.0003, 0.0025],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\"}\n }\n : $contains($m, \"gemini-2.5-pro\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.00125, 0.01],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : ($contains($m, \"gemini-3-pro-preview\") or $contains($m, \"gemini-3-1-pro\")) ? {\n \"type\": \"list_usd\",\n \"usd\": [0.002, 0.012],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gemini-3-1-flash-lite\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.00025, 0.0015],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : {\"type\":\"text\", \"text\":\"Token-based\"}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiNodeV2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text input to the model. Include detailed instructions, questions, or context.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The Gemini model used to generate the response.", "options": [{"key": "Gemini 3.1 Pro", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional image(s) to use as context for the model. Up to 16 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16"], "min": 0}}], "audio": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional audio clip to use as context for the model.", "template": {"input": {"required": {"audio": ["AUDIO", {}]}}, "names": ["audio_1"], "min": 0}}], "video": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional video clip to use as context for the model.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1"], "min": 0}}], "thinking_level": ["COMBO", {"tooltip": "How hard the model reasons internally before answering. HIGH improves quality on difficult tasks but costs more (thinking) tokens and is slower.", "default": "HIGH", "multiselect": false, "options": ["LOW", "HIGH"]}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. Lower is more focused/deterministic, higher is more creative.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.01}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling: sample from the smallest token set whose cumulative probability reaches top_p.", "advanced": true, "default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}], "max_output_tokens": ["INT", {"tooltip": "Maximum tokens to generate, including the model's internal thinking. With thinking_level HIGH, a low value can leave no room for the answer; raise this if responses come back empty or truncated. The model stops early when finished, so a higher cap costs nothing extra for short replies.", "advanced": true, "default": 32768, "min": 16, "max": 65536}]}, "optional": {"files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Input Files node."}]}}}, {"key": "Gemini 3.1 Flash-Lite", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional image(s) to use as context for the model. Up to 16 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16"], "min": 0}}], "audio": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional audio clip to use as context for the model.", "template": {"input": {"required": {"audio": ["AUDIO", {}]}}, "names": ["audio_1"], "min": 0}}], "video": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional video clip to use as context for the model.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1"], "min": 0}}], "thinking_level": ["COMBO", {"tooltip": "How hard the model reasons internally before answering. HIGH improves quality on difficult tasks but costs more (thinking) tokens and is slower.", "default": "LOW", "multiselect": false, "options": ["LOW", "HIGH"]}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. Lower is more focused/deterministic, higher is more creative.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.01}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling: sample from the smallest token set whose cumulative probability reaches top_p.", "advanced": true, "default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}], "max_output_tokens": ["INT", {"tooltip": "Maximum tokens to generate, including the model's internal thinking. With thinking_level HIGH, a low value can leave no room for the answer; raise this if responses come back empty or truncated. The model stops early when finished, so a higher cap costs nothing extra for short replies.", "advanced": true, "default": 32768, "min": 16, "max": 65536}]}, "optional": {"files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Input Files node."}]}}}]}], "seed": ["INT", {"tooltip": "Seed for sampling. Set to 0 for a random seed. Deterministic output isn't guaranteed.", "default": 42, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate the model's behavior.", "advanced": true, "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "optional": ["system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "GeminiNodeV2", "display_name": "Google Gemini", "description": "Generate text responses with Google's Gemini models. Provide a text prompt and, optionally, one or more images, audio clips, videos, or files as multimodal context.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/text/Gemini", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $contains($m, \"lite\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.00025, 0.0015],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n } : {\n \"type\": \"list_usd\",\n \"usd\": [0.002, 0.012],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n )\n "}, "search_aliases": null, "essentials_category": "Text Generation", "has_intermediate_output": false}, "GeminiImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for generation", "default": "", "multiline": true}], "model": ["COMBO", {"tooltip": "The Gemini model to use for generating responses.", "multiselect": false, "options": ["gemini-2.5-flash-image"]}], "seed": ["INT", {"tooltip": "When seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used.", "default": 42, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"images": ["IMAGE", {"tooltip": "Optional image(s) to use as context for the model. To include multiple images, you can use the Batch Images node."}], "files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."}], "aspect_ratio": ["COMBO", {"tooltip": "Defaults to matching the output image size to that of your input image, or otherwise generates 1:1 squares.", "default": "auto", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9"]}], "response_modalities": ["COMBO", {"tooltip": "Choose 'IMAGE' for image-only output, or 'IMAGE+TEXT' to return both the generated image and a text response.", "advanced": true, "multiselect": false, "options": ["IMAGE+TEXT", "IMAGE"]}], "system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate an AI's behavior.", "advanced": true, "default": "You are an expert image-generation engine. You must ALWAYS produce an image.\nInterpret all user input\u2014regardless of format, intent, or abstraction\u2014as literal visual directives for image composition.\nIf a prompt is conversational or lacks specific visual details, you must creatively invent a concrete visual scenario that depicts the concept.\nPrioritize generating the visual representation above any text, formatting, or conversational requests.", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "optional": ["images", "files", "aspect_ratio", "response_modalities", "system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "STRING"], "output_is_list": [false, false], "output_name": ["IMAGE", "STRING"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "GeminiImageNode", "display_name": "Nano Banana (Google Gemini Image)", "description": "Edit images synchronously via Google API.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/image/Gemini", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.039,\"format\":{\"suffix\":\"/Image (1K)\",\"approximate\":true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiImage2Node": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt describing the image to generate or the edits to apply. Include any constraints, styles, or details the model should follow.", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["gemini-3-pro-image-preview", "Nano Banana 2 (Gemini 3.1 Flash Image)"]}], "seed": ["INT", {"tooltip": "When the seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used.", "default": 42, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "aspect_ratio": ["COMBO", {"tooltip": "If set to 'auto', matches your input image's aspect ratio; if no image is provided, a 16:9 square is usually generated.", "default": "auto", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9"]}], "resolution": ["COMBO", {"tooltip": "Target output resolution. For 2K/4K the native Gemini upscaler is used.", "multiselect": false, "options": ["1K", "2K", "4K"]}], "response_modalities": ["COMBO", {"tooltip": "Choose 'IMAGE' for image-only output, or 'IMAGE+TEXT' to return both the generated image and a text response.", "advanced": true, "multiselect": false, "options": ["IMAGE+TEXT", "IMAGE"]}]}, "optional": {"images": ["IMAGE", {"tooltip": "Optional reference image(s). To include multiple images, use the Batch Images node (up to 14)."}], "files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."}], "system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate an AI's behavior.", "advanced": true, "default": "You are an expert image-generation engine. You must ALWAYS produce an image.\nInterpret all user input\u2014regardless of format, intent, or abstraction\u2014as literal visual directives for image composition.\nIf a prompt is conversational or lacks specific visual details, you must creatively invent a concrete visual scenario that depicts the concept.\nPrioritize generating the visual representation above any text, formatting, or conversational requests.", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed", "aspect_ratio", "resolution", "response_modalities"], "optional": ["images", "files", "system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "STRING"], "output_is_list": [false, false], "output_name": ["IMAGE", "STRING"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "GeminiImage2Node", "display_name": "Nano Banana Pro (Google Gemini Image)", "description": "Generate or edit images synchronously via Google Vertex API.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/image/Gemini", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $r := widgets.resolution;\n $isFlash := $contains($m, \"nano banana 2\");\n $flashPrices := {\"1k\": 0.0696, \"2k\": 0.1014, \"4k\": 0.154};\n $proPrices := {\"1k\": 0.134, \"2k\": 0.134, \"4k\": 0.24};\n $prices := $isFlash ? $flashPrices : $proPrices;\n {\"type\":\"usd\",\"usd\": $lookup($prices, $r), \"format\":{\"suffix\":\"/Image\",\"approximate\":true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiNanoBanana2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt describing the image to generate or the edits to apply. Include any constraints, styles, or details the model should follow.", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["Nano Banana 2 (Gemini 3.1 Flash Image)"]}], "seed": ["INT", {"tooltip": "When the seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used.", "default": 42, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "aspect_ratio": ["COMBO", {"tooltip": "If set to 'auto', matches your input image's aspect ratio; if no image is provided, a 16:9 square is usually generated.", "default": "auto", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9"]}], "resolution": ["COMBO", {"tooltip": "Target output resolution. For 2K/4K the native Gemini upscaler is used.", "multiselect": false, "options": ["1K", "2K", "4K"]}], "response_modalities": ["COMBO", {"advanced": true, "multiselect": false, "options": ["IMAGE", "IMAGE+TEXT"]}], "thinking_level": ["COMBO", {"multiselect": false, "options": ["MINIMAL", "HIGH"]}]}, "optional": {"images": ["IMAGE", {"tooltip": "Optional reference image(s). To include multiple images, use the Batch Images node (up to 14)."}], "files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."}], "system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate an AI's behavior.", "advanced": true, "default": "You are an expert image-generation engine. You must ALWAYS produce an image.\nInterpret all user input\u2014regardless of format, intent, or abstraction\u2014as literal visual directives for image composition.\nIf a prompt is conversational or lacks specific visual details, you must creatively invent a concrete visual scenario that depicts the concept.\nPrioritize generating the visual representation above any text, formatting, or conversational requests.", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed", "aspect_ratio", "resolution", "response_modalities", "thinking_level"], "optional": ["images", "files", "system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "STRING", "IMAGE"], "output_is_list": [false, false, false], "output_name": ["IMAGE", "STRING", "thought_image"], "output_tooltips": [null, null, "First image from the model's thinking process. Only available with thinking_level HIGH and IMAGE+TEXT modality."], "output_matchtypes": null, "name": "GeminiNanoBanana2", "display_name": "Nano Banana 2", "description": "Generate or edit images synchronously via Google Vertex API.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/image/Gemini", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $r := widgets.resolution;\n $isFlash := $contains($m, \"nano banana 2\");\n $flashPrices := {\"1k\": 0.0696, \"2k\": 0.1014, \"4k\": 0.154};\n $proPrices := {\"1k\": 0.134, \"2k\": 0.134, \"4k\": 0.24};\n $prices := $isFlash ? $flashPrices : $proPrices;\n {\"type\":\"usd\",\"usd\": $lookup($prices, $r), \"format\":{\"suffix\":\"/Image\",\"approximate\":true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiNanoBanana2V2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt describing the image to generate or the edits to apply. Include any constraints, styles, or details the model should follow.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Nano Banana 2 (Gemini 3.1 Flash Image)", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "If set to 'auto', matches your input image's aspect ratio; if no image is provided, a 16:9 square is usually generated.", "default": "auto", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9", "1:4", "4:1", "8:1", "1:8"]}], "resolution": ["COMBO", {"tooltip": "Target output resolution. For 2K/4K the native Gemini upscaler is used.", "multiselect": false, "options": ["1K", "2K", "4K"]}], "thinking_level": ["COMBO", {"multiselect": false, "options": ["MINIMAL", "HIGH"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s). Up to 14 images total.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14"], "min": 0}}]}, "optional": {"files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."}]}}}]}], "seed": ["INT", {"tooltip": "When the seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used.", "default": 42, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "response_modalities": ["COMBO", {"advanced": true, "multiselect": false, "options": ["IMAGE", "IMAGE+TEXT"]}]}, "optional": {"system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate an AI's behavior.", "advanced": true, "default": "You are an expert image-generation engine. You must ALWAYS produce an image.\nInterpret all user input\u2014regardless of format, intent, or abstraction\u2014as literal visual directives for image composition.\nIf a prompt is conversational or lacks specific visual details, you must creatively invent a concrete visual scenario that depicts the concept.\nPrioritize generating the visual representation above any text, formatting, or conversational requests.", "multiline": true}], "temperature": ["FLOAT", {"tooltip": "Controls randomness in generation. Lower is more focused/deterministic.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.01}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling threshold. Lower is more focused, higher more diverse.", "advanced": true, "default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed", "response_modalities"], "optional": ["system_prompt", "temperature", "top_p"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "STRING", "IMAGE"], "output_is_list": [false, false, false], "output_name": ["IMAGE", "STRING", "thought_image"], "output_tooltips": [null, null, "First image from the model's thinking process. Only available with thinking_level HIGH and IMAGE+TEXT modality."], "output_matchtypes": null, "name": "GeminiNanoBanana2V2", "display_name": "Nano Banana 2", "description": "Generate or edit images synchronously via Google Vertex API.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/image/Gemini", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $r := $lookup(widgets, \"model.resolution\");\n $prices := {\"1k\": 0.0696, \"2k\": 0.1014, \"4k\": 0.154};\n {\"type\":\"usd\",\"usd\": $lookup($prices, $r), \"format\":{\"suffix\":\"/Image\",\"approximate\":true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiInputFiles": {"input": {"required": {"file": ["COMBO", {"tooltip": "Input files to include as context for the model. Only accepts text (.txt) and PDF (.pdf) files for now.", "multiselect": false, "options": []}]}, "optional": {"GEMINI_INPUT_FILES": ["GEMINI_INPUT_FILES", {"tooltip": "An optional additional file(s) to batch together with the file loaded from this node. Allows chaining of input files so that a single message can include multiple input files."}]}}, "input_order": {"required": ["file"], "optional": ["GEMINI_INPUT_FILES"]}, "is_input_list": false, "output": ["GEMINI_INPUT_FILES"], "output_is_list": [false], "output_name": ["GEMINI_INPUT_FILES"], "output_tooltips": [null], "output_matchtypes": null, "name": "GeminiInputFiles", "display_name": "Gemini Input Files", "description": "Loads and prepares input files to include as inputs for Gemini LLM nodes. The files will be read by the Gemini model when generating a response. The contents of the text file count toward the token limit. \ud83d\udec8 TIP: Can be chained together with other Gemini Input File nodes.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/text/Gemini", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokImageNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["grok-imagine-image-quality", "grok-imagine-image-pro", "grok-imagine-image"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the image", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9", "9:19.5", "19.5:9", "9:20", "20:9", "1:2", "2:1"]}], "number_of_images": ["INT", {"tooltip": "Number of images to generate", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "aspect_ratio", "number_of_images", "seed"], "optional": ["resolution"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokImageNode", "display_name": "Grok Image", "description": "Generate images using Grok based on a text prompt", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/image/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "number_of_images", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rate := widgets.model = \"grok-imagine-image-quality\"\n ? (widgets.resolution = \"1k\" ? 0.05 : 0.07)\n : ($contains(widgets.model, \"pro\") ? 0.07 : 0.02);\n {\"type\":\"usd\",\"usd\": $rate * widgets.number_of_images}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokImageEditNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["grok-imagine-image-quality", "grok-imagine-image-pro", "grok-imagine-image"]}], "image": ["IMAGE", {"display_name": "images"}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the image", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K"]}], "number_of_images": ["INT", {"tooltip": "Number of edited images to generate", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"aspect_ratio": ["COMBO", {"tooltip": "Only allowed when multiple images are connected to the image input.", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9", "9:19.5", "19.5:9", "9:20", "20:9", "1:2", "2:1"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "prompt", "resolution", "number_of_images", "seed"], "optional": ["aspect_ratio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokImageEditNode", "display_name": "Grok Image Edit", "description": "Modify an existing image based on a text prompt", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/image/Grok", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "number_of_images", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $isQualityModel := widgets.model = \"grok-imagine-image-quality\";\n $isPro := $contains(widgets.model, \"pro\");\n $rate := $isQualityModel\n ? (widgets.resolution = \"1k\" ? 0.05 : 0.07)\n : ($isPro ? 0.07 : 0.02);\n $base := $isQualityModel ? 0.01 : 0.002;\n $output := $rate * widgets.number_of_images;\n $isPro\n ? {\"type\":\"usd\",\"usd\": $base + $output}\n : {\"type\":\"range_usd\",\"min_usd\": $base + $output, \"max_usd\": 3 * $base + $output}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokImageEditNodeV2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "The text prompt used to generate the image", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "grok-imagine-image-quality", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Reference image(s) to edit. Up to 3 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3"], "min": 1}}], "resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K"]}], "number_of_images": ["INT", {"tooltip": "Number of edited images to generate", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "aspect_ratio": ["COMBO", {"tooltip": "Only allowed when multiple images are connected.", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9", "9:19.5", "19.5:9", "9:20", "20:9", "1:2", "2:1"]}]}}}, {"key": "grok-imagine-image-pro", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Reference image to edit.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1"], "min": 1}}], "resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K"]}], "number_of_images": ["INT", {"tooltip": "Number of edited images to generate", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}]}}}, {"key": "grok-imagine-image", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Reference image(s) to edit. Up to 3 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3"], "min": 1}}], "resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K"]}], "number_of_images": ["INT", {"tooltip": "Number of edited images to generate", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "aspect_ratio": ["COMBO", {"tooltip": "Only allowed when multiple images are connected.", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9", "9:19.5", "19.5:9", "9:20", "20:9", "1:2", "2:1"]}]}}}]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokImageEditNodeV2", "display_name": "Grok Image Edit", "description": "Modify an existing image based on a text prompt", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/image/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.number_of_images", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $isQualityModel := widgets.model = \"grok-imagine-image-quality\";\n $isPro := $contains(widgets.model, \"pro\");\n $res := $lookup(widgets, \"model.resolution\");\n $n := $lookup(widgets, \"model.number_of_images\");\n $rate := $isQualityModel\n ? ($res = \"1k\" ? 0.05 : 0.07)\n : ($isPro ? 0.07 : 0.02);\n $base := $isQualityModel ? 0.01 : 0.002;\n $output := $rate * $n;\n $isPro\n ? {\"type\":\"usd\",\"usd\": $base + $output}\n : {\"type\":\"range_usd\",\"min_usd\": $base + $output, \"max_usd\": 3 * $base + $output}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokVideoNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "grok-imagine-video-1.5 currently always requires an input image.", "multiselect": false, "options": ["grok-imagine-video", "grok-imagine-video-1.5"]}], "prompt": ["STRING", {"tooltip": "Text description of the desired video.", "multiline": true}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video. 1080p is only available for grok-imagine-video-1.5.", "multiselect": false, "options": ["480p", "720p", "1080p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["auto", "16:9", "4:3", "3:2", "1:1", "2:3", "3:4", "9:16"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 6, "min": 1, "max": 15, "step": 1, "display": "slider"}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"image": ["IMAGE", {"tooltip": "Optional starting image for grok-imagine-video. Required for grok-imagine-video-1.5."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "resolution", "aspect_ratio", "duration", "seed"], "optional": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokVideoNode", "display_name": "Grok Video", "description": "Generate video from a prompt or an image", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/video/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": ["image"], "input_groups": []}, "expr": "\n (\n $is15 := $contains(widgets.model, \"1.5\");\n $rate := $is15\n ? (widgets.resolution = \"1080p\" ? 0.25 : (widgets.resolution = \"720p\" ? 0.14 : 0.08))\n : (widgets.resolution = \"720p\" ? 0.07 : 0.05);\n $imgCost := $is15 ? 0.01 : 0.002;\n $base := $rate * widgets.duration;\n $total := inputs.image.connected ? $base + $imgCost : $base;\n {\"type\":\"usd\",\"usd\": $is15 ? $total * 1.43 : $total}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokVideoReferenceNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the desired video.", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The model to use for video generation.", "options": [{"key": "grok-imagine-video", "inputs": {"required": {"reference_images": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 7 reference images to guide the video generation.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "reference_", "min": 1, "max": 7}}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video.", "multiselect": false, "options": ["480p", "720p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["16:9", "4:3", "3:2", "1:1", "2:3", "3:4", "9:16"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 6, "min": 2, "max": 10, "step": 1, "display": "slider"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokVideoReferenceNode", "display_name": "Grok Reference-to-Video", "description": "Generate video guided by reference images as style and content references.", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/video/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model.duration", "type": "INT"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": ["model.reference_images"]}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $refs := $lookup(inputGroups, \"model.reference_images\");\n $rate := $res = \"720p\" ? 0.07 : 0.05;\n $price := ($rate * $dur + 0.002 * $refs) * 1.43;\n {\"type\":\"usd\",\"usd\": $price}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokVideoEditNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["grok-imagine-video"]}], "prompt": ["STRING", {"tooltip": "Text description of the desired video.", "multiline": true}], "video": ["VIDEO", {"tooltip": "Maximum supported duration is 8.7 seconds and 50MB file size."}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "video", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokVideoEditNode", "display_name": "Grok Video Edit", "description": "Edit an existing video based on a text prompt.", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/video/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.06, \"format\": {\"suffix\": \"/sec\", \"approximate\": true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokVideoExtendNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of what should happen next in the video.", "multiline": true}], "video": ["VIDEO", {"tooltip": "Source video to extend. MP4 format, 2-15 seconds."}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The model to use for video extension.", "options": [{"key": "grok-imagine-video", "inputs": {"required": {"duration": ["INT", {"tooltip": "Length of the extension in seconds.", "default": 8, "min": 2, "max": 10, "step": 1, "display": "slider"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "video", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokVideoExtendNode", "display_name": "Grok Video Extend", "description": "Extend an existing video with a seamless continuation based on a text prompt.", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/video/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $dur := $lookup(widgets, \"model.duration\");\n {\n \"type\": \"range_usd\",\n \"min_usd\": (0.02 + 0.05 * $dur) * 1.43,\n \"max_usd\": (0.15 + 0.05 * $dur) * 1.43\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HitPawGeneralImageEnhance": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["generative_portrait", "generative"]}], "image": ["IMAGE", {}], "upscale_factor": ["COMBO", {"multiselect": false, "options": [1, 2, 4]}], "auto_downscale": ["BOOLEAN", {"tooltip": "Automatically downscale input image if output would exceed the limit.", "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "upscale_factor", "auto_downscale"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "HitPawGeneralImageEnhance", "display_name": "HitPaw General Image Enhance", "description": "Upscale low-resolution images to super-resolution, eliminate artifacts and noise. Maximum output: 32 megapixels.", "python_module": "comfy_api_nodes.nodes_hitpaw", "category": "partner/image/HitPaw", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"generative_portrait\": {\"min\": 0.02, \"max\": 0.06},\n \"generative\": {\"min\": 0.05, \"max\": 0.15}\n };\n $price := $lookup($prices, widgets.model);\n {\n \"type\": \"range_usd\",\n \"min_usd\": $price.min,\n \"max_usd\": $price.max\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HitPawVideoEnhance": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Portrait Restore Model (1x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "Portrait Restore Model (2x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "General Restore Model (1x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "General Restore Model (2x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "General Restore Model (4x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "Ultra HD Model (2x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "Generative Model (1x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD"]}]}}}]}], "video": ["VIDEO", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "video"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "HitPawVideoEnhance", "display_name": "HitPaw Video Enhance", "description": "Upscale low-resolution videos to high resolution, eliminate artifacts and noise. Prices shown are per second of video.", "python_module": "comfy_api_nodes.nodes_hitpaw", "category": "partner/video/HitPaw", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := $lookup(widgets, \"model\");\n $res := $lookup(widgets, \"model.resolution\");\n $standard_model_prices := {\n \"original\": {\"min\": 0.01, \"max\": 0.198},\n \"720p\": {\"min\": 0.01, \"max\": 0.06},\n \"1080p\": {\"min\": 0.015, \"max\": 0.09},\n \"2k/qhd\": {\"min\": 0.02, \"max\": 0.117},\n \"4k/uhd\": {\"min\": 0.025, \"max\": 0.152},\n \"8k\": {\"min\": 0.033, \"max\": 0.198}\n };\n $ultra_hd_model_prices := {\n \"original\": {\"min\": 0.015, \"max\": 0.264},\n \"720p\": {\"min\": 0.015, \"max\": 0.092},\n \"1080p\": {\"min\": 0.02, \"max\": 0.12},\n \"2k/qhd\": {\"min\": 0.026, \"max\": 0.156},\n \"4k/uhd\": {\"min\": 0.034, \"max\": 0.203},\n \"8k\": {\"min\": 0.044, \"max\": 0.264}\n };\n $generative_model_prices := {\n \"original\": {\"min\": 0.015, \"max\": 0.338},\n \"720p\": {\"min\": 0.008, \"max\": 0.090},\n \"1080p\": {\"min\": 0.05, \"max\": 0.15},\n \"2k/qhd\": {\"min\": 0.038, \"max\": 0.225},\n \"4k/uhd\": {\"min\": 0.056, \"max\": 0.338}\n };\n $prices := $contains($m, \"ultra hd\") ? $ultra_hd_model_prices :\n $contains($m, \"generative\") ? $generative_model_prices :\n $standard_model_prices;\n $price := $lookup($prices, $res);\n {\n \"type\": \"range_usd\",\n \"min_usd\": $price.min,\n \"max_usd\": $price.max,\n \"format\": {\"approximate\": true, \"suffix\": \"/second\"}\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TencentTextToModelNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "The LowPoly option is unavailable for the `3.1` model.", "multiselect": false, "options": ["3.0", "3.1"]}], "prompt": ["STRING", {"tooltip": "Supports up to 1024 characters.", "default": "", "multiline": true}], "face_count": ["INT", {"default": 500000, "min": 3000, "max": 1500000}], "generate_type": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Normal", "inputs": {"required": {"pbr": ["BOOLEAN", {"default": false}]}}}, {"key": "LowPoly", "inputs": {"required": {"polygon_type": ["COMBO", {"multiselect": false, "options": ["triangle", "quadrilateral"]}], "pbr": ["BOOLEAN", {"default": false}]}}}, {"key": "Geometry", "inputs": {"required": {}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "prompt", "face_count", "generate_type", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB", "FILE_3D_OBJ", "IMAGE"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "GLB", "OBJ", "texture_image"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "TencentTextToModelNode", "display_name": "Hunyuan3D: Text to Model", "description": "", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "generate_type", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "generate_type.pbr", "type": "BOOLEAN"}, {"name": "face_count", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $base := widgets.generate_type = \"normal\" ? 25 : widgets.generate_type = \"lowpoly\" ? 30 : 15;\n $pbr := $lookup(widgets, \"generate_type.pbr\") ? 10 : 0;\n $face := widgets.face_count != 500000 ? 10 : 0;\n {\"type\":\"usd\",\"usd\": ($base + $pbr + $face) * 0.02}\n )\n "}, "search_aliases": null, "essentials_category": "3D", "has_intermediate_output": false}, "TencentImageToModelNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "The LowPoly option is unavailable for the `3.1` model.", "multiselect": false, "options": ["3.0", "3.1"]}], "image": ["IMAGE", {}], "face_count": ["INT", {"default": 500000, "min": 3000, "max": 1500000}], "generate_type": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Normal", "inputs": {"required": {"pbr": ["BOOLEAN", {"default": false}]}}}, {"key": "LowPoly", "inputs": {"required": {"polygon_type": ["COMBO", {"multiselect": false, "options": ["triangle", "quadrilateral"]}], "pbr": ["BOOLEAN", {"default": false}]}}}, {"key": "Geometry", "inputs": {"required": {}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "optional": {"image_left": ["IMAGE", {}], "image_right": ["IMAGE", {}], "image_back": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "image", "face_count", "generate_type", "seed"], "optional": ["image_left", "image_right", "image_back"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB", "FILE_3D_OBJ", "IMAGE", "IMAGE", "IMAGE", "IMAGE"], "output_is_list": [false, false, false, false, false, false, false], "output_name": ["model_file", "GLB", "OBJ", "texture_image", "optional_metallic", "optional_normal", "optional_roughness"], "output_tooltips": [null, null, null, null, null, null, null], "output_matchtypes": null, "name": "TencentImageToModelNode", "display_name": "Hunyuan3D: Image(s) to Model", "description": "", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "generate_type", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "generate_type.pbr", "type": "BOOLEAN"}, {"name": "face_count", "type": "INT"}], "inputs": ["image_left", "image_right", "image_back"], "input_groups": []}, "expr": "\n (\n $base := widgets.generate_type = \"normal\" ? 25 : widgets.generate_type = \"lowpoly\" ? 30 : 15;\n $multiview := (\n inputs.image_left.connected or inputs.image_right.connected or inputs.image_back.connected\n ) ? 10 : 0;\n $pbr := $lookup(widgets, \"generate_type.pbr\") ? 10 : 0;\n $face := widgets.face_count != 500000 ? 10 : 0;\n {\"type\":\"usd\",\"usd\": ($base + $multiview + $pbr + $face) * 0.02}\n )\n "}, "search_aliases": null, "essentials_category": "3D", "has_intermediate_output": false}, "TencentModelTo3DUVNode": {"input": {"required": {"model_3d": ["FILE_3D_GLB,FILE_3D_OBJ,FILE_3D_FBX,FILE_3D", {"tooltip": "Input 3D model (GLB, OBJ, or FBX)"}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 1, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_3d", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["FILE_3D_OBJ", "FILE_3D_FBX", "IMAGE"], "output_is_list": [false, false, false], "output_name": ["OBJ", "FBX", "uv_image"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TencentModelTo3DUVNode", "display_name": "Hunyuan3D: Model to UV", "description": "Perform UV unfolding on a 3D model to generate UV texture. Input model must have less than 30000 faces.", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.2}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Tencent3DTextureEditNode": {"input": {"required": {"model_3d": ["FILE_3D_FBX,FILE_3D", {"tooltip": "3D model in FBX format. Model should have less than 100000 faces."}], "prompt": ["STRING", {"tooltip": "Describes texture editing. Supports up to 1024 UTF-8 characters.", "default": "", "multiline": true}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_3d", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["FILE_3D_GLB", "FILE_3D_OBJ", "IMAGE"], "output_is_list": [false, false, false], "output_name": ["GLB", "OBJ", "texture_image"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "Tencent3DTextureEditNode", "display_name": "Hunyuan3D: 3D Texture Edit", "description": "After inputting the 3D model, perform 3D model texture redrawing.", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.6}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Tencent3DPartNode": {"input": {"required": {"model_3d": ["FILE_3D_FBX,FILE_3D", {"tooltip": "3D model in FBX format. Model should have less than 30000 faces."}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_3d", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["FILE_3D_FBX"], "output_is_list": [false], "output_name": ["FBX"], "output_tooltips": [null], "output_matchtypes": null, "name": "Tencent3DPartNode", "display_name": "Hunyuan3D: 3D Part", "description": "Automatically perform component identification and generation based on the model structure.", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.6}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TencentSmartTopologyNode": {"input": {"required": {"model_3d": ["FILE_3D_GLB,FILE_3D_OBJ,FILE_3D", {"tooltip": "Input 3D model (GLB or OBJ)"}], "polygon_type": ["COMBO", {"tooltip": "Surface composition type.", "multiselect": false, "options": ["triangle", "quadrilateral"]}], "face_level": ["COMBO", {"tooltip": "Polygon reduction level.", "multiselect": false, "options": ["medium", "high", "low"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_3d", "polygon_type", "face_level", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["FILE_3D_OBJ"], "output_is_list": [false], "output_name": ["OBJ"], "output_tooltips": [null], "output_matchtypes": null, "name": "TencentSmartTopologyNode", "display_name": "Hunyuan3D: Smart Topology", "description": "Perform smart retopology on a 3D model. Supports GLB/OBJ formats; max 200MB; recommended for high-poly models.", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":1.0}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "IdeogramV1": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "turbo": ["BOOLEAN", {"tooltip": "Whether to use turbo mode (faster generation, potentially lower quality)", "default": false}]}, "optional": {"aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio for image generation.", "default": "1:1", "multiselect": false, "options": ["1:1", "4:3", "3:4", "16:9", "9:16", "2:1", "1:2", "3:2", "2:3", "4:5", "5:4"]}], "magic_prompt_option": ["COMBO", {"tooltip": "Determine if MagicPrompt should be used in generation", "advanced": true, "default": "AUTO", "multiselect": false, "options": ["AUTO", "ON", "OFF"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "negative_prompt": ["STRING", {"tooltip": "Description of what to exclude from the image", "default": "", "multiline": true}], "num_images": ["INT", {"default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "turbo"], "optional": ["aspect_ratio", "magic_prompt_option", "seed", "negative_prompt", "num_images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "IdeogramV1", "display_name": "Ideogram V1", "description": "Generates images using the Ideogram V1 model.", "python_module": "comfy_api_nodes.nodes_ideogram", "category": "partner/image/Ideogram", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "num_images", "type": "INT"}, {"name": "turbo", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $n := widgets.num_images;\n $base := (widgets.turbo = true) ? 0.0286 : 0.0858;\n {\"type\":\"usd\",\"usd\": $round($base * $n, 2)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "IdeogramV2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "turbo": ["BOOLEAN", {"tooltip": "Whether to use turbo mode (faster generation, potentially lower quality)", "default": false}]}, "optional": {"aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio for image generation. Ignored if resolution is not set to AUTO.", "default": "1:1", "multiselect": false, "options": ["1:1", "4:3", "3:4", "16:9", "9:16", "2:1", "1:2", "3:2", "2:3", "4:5", "5:4"]}], "resolution": ["COMBO", {"tooltip": "The resolution for image generation. If not set to AUTO, this overrides the aspect_ratio setting.", "default": "Auto", "multiselect": false, "options": ["Auto", "512 x 1536", "576 x 1408", "576 x 1472", "576 x 1536", "640 x 1024", "640 x 1344", "640 x 1408", "640 x 1472", "640 x 1536", "704 x 1152", "704 x 1216", "704 x 1280", "704 x 1344", "704 x 1408", "704 x 1472", "720 x 1280", "736 x 1312", "768 x 1024", "768 x 1088", "768 x 1152", "768 x 1216", "768 x 1232", "768 x 1280", "768 x 1344", "832 x 960", "832 x 1024", "832 x 1088", "832 x 1152", "832 x 1216", "832 x 1248", "864 x 1152", "896 x 960", "896 x 1024", "896 x 1088", "896 x 1120", "896 x 1152", "960 x 832", "960 x 896", "960 x 1024", "960 x 1088", "1024 x 640", "1024 x 768", "1024 x 832", "1024 x 896", "1024 x 960", "1024 x 1024", "1088 x 768", "1088 x 832", "1088 x 896", "1088 x 960", "1120 x 896", "1152 x 704", "1152 x 768", "1152 x 832", "1152 x 864", "1152 x 896", "1216 x 704", "1216 x 768", "1216 x 832", "1232 x 768", "1248 x 832", "1280 x 704", "1280 x 720", "1280 x 768", "1280 x 800", "1312 x 736", "1344 x 640", "1344 x 704", "1344 x 768", "1408 x 576", "1408 x 640", "1408 x 704", "1472 x 576", "1472 x 640", "1472 x 704", "1536 x 512", "1536 x 576", "1536 x 640"]}], "magic_prompt_option": ["COMBO", {"tooltip": "Determine if MagicPrompt should be used in generation", "advanced": true, "default": "AUTO", "multiselect": false, "options": ["AUTO", "ON", "OFF"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "style_type": ["COMBO", {"tooltip": "Style type for generation (V2 only)", "advanced": true, "default": "NONE", "multiselect": false, "options": ["AUTO", "GENERAL", "REALISTIC", "DESIGN", "RENDER_3D", "ANIME"]}], "negative_prompt": ["STRING", {"tooltip": "Description of what to exclude from the image", "default": "", "multiline": true}], "num_images": ["INT", {"default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "turbo"], "optional": ["aspect_ratio", "resolution", "magic_prompt_option", "seed", "style_type", "negative_prompt", "num_images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "IdeogramV2", "display_name": "Ideogram V2", "description": "Generates images using the Ideogram V2 model.", "python_module": "comfy_api_nodes.nodes_ideogram", "category": "partner/image/Ideogram", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "num_images", "type": "INT"}, {"name": "turbo", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $n := widgets.num_images;\n $base := (widgets.turbo = true) ? 0.0715 : 0.1144;\n {\"type\":\"usd\",\"usd\": $round($base * $n, 2)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "IdeogramV3": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation or editing", "default": "", "multiline": true}]}, "optional": {"image": ["IMAGE", {"tooltip": "Optional reference image for image editing."}], "mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced)"}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio for image generation. Ignored if resolution is not set to Auto.", "default": "1:1", "multiselect": false, "options": ["1:3", "3:1", "1:2", "2:1", "9:16", "16:9", "10:16", "16:10", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "1:1"]}], "resolution": ["COMBO", {"tooltip": "The resolution for image generation. If not set to Auto, this overrides the aspect_ratio setting.", "default": "Auto", "multiselect": false, "options": ["Auto", "512x1536", "576x1408", "576x1472", "576x1536", "640x1344", "640x1408", "640x1472", "640x1536", "704x1152", "704x1216", "704x1280", "704x1344", "704x1408", "704x1472", "736x1312", "768x1088", "768x1216", "768x1280", "768x1344", "800x1280", "832x960", "832x1024", "832x1088", "832x1152", "832x1216", "832x1248", "864x1152", "896x960", "896x1024", "896x1088", "896x1120", "896x1152", "960x832", "960x896", "960x1024", "960x1088", "1024x832", "1024x896", "1024x960", "1024x1024", "1088x768", "1088x832", "1088x896", "1088x960", "1120x896", "1152x704", "1152x832", "1152x864", "1152x896", "1216x704", "1216x768", "1216x832", "1248x832", "1280x704", "1280x768", "1280x800", "1312x736", "1344x640", "1344x704", "1344x768", "1408x576", "1408x640", "1408x704", "1472x576", "1472x640", "1472x704", "1536x512", "1536x576", "1536x640"]}], "magic_prompt_option": ["COMBO", {"tooltip": "Determine if MagicPrompt should be used in generation", "advanced": true, "default": "AUTO", "multiselect": false, "options": ["AUTO", "ON", "OFF"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "num_images": ["INT", {"default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}], "rendering_speed": ["COMBO", {"tooltip": "Controls the trade-off between generation speed and quality", "advanced": true, "default": "DEFAULT", "multiselect": false, "options": ["DEFAULT", "TURBO", "QUALITY"]}], "character_image": ["IMAGE", {"tooltip": "Image to use as character reference."}], "character_mask": ["MASK", {"tooltip": "Optional mask for character reference image."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt"], "optional": ["image", "mask", "aspect_ratio", "resolution", "magic_prompt_option", "seed", "num_images", "rendering_speed", "character_image", "character_mask"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "IdeogramV3", "display_name": "Ideogram V3", "description": "Generates images using the Ideogram V3 model. Supports both regular image generation from text prompts and image editing with mask.", "python_module": "comfy_api_nodes.nodes_ideogram", "category": "partner/image/Ideogram", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "rendering_speed", "type": "COMBO"}, {"name": "num_images", "type": "INT"}], "inputs": ["character_image"], "input_groups": []}, "expr": "\n (\n $n := widgets.num_images;\n $speed := widgets.rendering_speed;\n $hasChar := inputs.character_image.connected;\n $base :=\n $contains($speed,\"quality\") ? ($hasChar ? 0.286 : 0.1287) :\n $contains($speed,\"default\") ? ($hasChar ? 0.2145 : 0.0858) :\n $contains($speed,\"turbo\") ? ($hasChar ? 0.143 : 0.0429) :\n 0.0858;\n {\"type\":\"usd\",\"usd\": $round($base * $n, 2)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "IdeogramV4": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the image generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"default": "Auto", "multiselect": false, "options": ["Auto", "2048x2048 (1:1)", "1440x2880 (1:2)", "2880x1440 (2:1)", "1664x2496 (2:3)", "2496x1664 (3:2)", "1792x2240 (4:5)", "2240x1792 (5:4)", "1440x2560 (9:16)", "2560x1440 (16:9)", "1600x2560 (5:8)", "2560x1600 (8:5)", "1728x2304 (3:4)", "2304x1728 (4:3)", "1296x3168 (9:22)", "3168x1296 (22:9)", "1152x2944 (9:23)", "2944x1152 (23:9)", "1248x3328 (3:8)", "3328x1248 (8:3)", "1280x3072 (5:12)", "3072x1280 (12:5)"]}], "rendering_speed": ["COMBO", {"tooltip": "Controls the trade-off between generation speed and quality.", "default": "DEFAULT", "multiselect": false, "options": ["DEFAULT", "TURBO", "QUALITY"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "resolution", "rendering_speed", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "IdeogramV4", "display_name": "Ideogram V4", "description": "Generates images using the Ideogram 4.0 model from a text prompt.", "python_module": "comfy_api_nodes.nodes_ideogram", "category": "partner/image/Ideogram", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "rendering_speed", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $speed := widgets.rendering_speed;\n $price :=\n $contains($speed,\"turbo\") ? 0.0429 :\n $contains($speed,\"quality\") ? 0.143 :\n 0.0858;\n {\"type\":\"usd\",\"usd\": $price}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingCameraControls": {"input": {"required": {"camera_control_type": ["COMBO", {"multiselect": false, "options": ["simple", "down_back", "forward_up", "right_turn_forward", "left_turn_forward"]}], "horizontal_movement": ["FLOAT", {"tooltip": "Controls camera's movement along horizontal axis (x-axis). Negative indicates left, positive indicates right", "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}], "vertical_movement": ["FLOAT", {"tooltip": "Controls camera's movement along vertical axis (y-axis). Negative indicates downward, positive indicates upward.", "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}], "pan": ["FLOAT", {"tooltip": "Controls camera's rotation in vertical plane (x-axis). Negative indicates downward rotation, positive indicates upward rotation.", "default": 0.5, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}], "tilt": ["FLOAT", {"tooltip": "Controls camera's rotation in horizontal plane (y-axis). Negative indicates left rotation, positive indicates right rotation.", "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}], "roll": ["FLOAT", {"tooltip": "Controls camera's rolling amount (z-axis). Negative indicates counterclockwise, positive indicates clockwise.", "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}], "zoom": ["FLOAT", {"tooltip": "Controls change in camera's focal length. Negative indicates narrower field of view, positive indicates wider field of view.", "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}]}}, "input_order": {"required": ["camera_control_type", "horizontal_movement", "vertical_movement", "pan", "tilt", "roll", "zoom"]}, "is_input_list": false, "output": ["CAMERA_CONTROL"], "output_is_list": [false], "output_name": ["camera_control"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingCameraControls", "display_name": "Kling Camera Controls", "description": "Allows specifying configuration options for Kling Camera Controls and motion control effects.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingTextToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "cfg_scale": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "mode": ["COMBO", {"tooltip": "The configuration to use for the video generation following the format: mode / duration / model_name.", "default": "pro mode / 5s duration / kling-v2-5-turbo", "multiselect": false, "options": ["standard mode / 5s duration / kling-v1-6", "standard mode / 10s duration / kling-v1-6", "pro mode / 5s duration / kling-v2-master", "pro mode / 10s duration / kling-v2-master", "standard mode / 5s duration / kling-v2-master", "standard mode / 10s duration / kling-v2-master", "pro mode / 5s duration / kling-v2-1-master", "pro mode / 10s duration / kling-v2-1-master", "pro mode / 5s duration / kling-v2-5-turbo", "pro mode / 10s duration / kling-v2-5-turbo"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "negative_prompt", "cfg_scale", "aspect_ratio", "mode"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingTextToVideoNode", "display_name": "Kling Text to Video", "description": "Kling Text to Video Node", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.mode;\n $contains($m,\"v2-5-turbo\")\n ? ($contains($m,\"10\") ? {\"type\":\"usd\",\"usd\":0.7} : {\"type\":\"usd\",\"usd\":0.35})\n : $contains($m,\"v2-1-master\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":2.8} : {\"type\":\"usd\",\"usd\":1.4})\n : $contains($m,\"v2-master\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":2.8} : {\"type\":\"usd\",\"usd\":1.4})\n : $contains($m,\"v1-6\")\n ? (\n $contains($m,\"pro\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.56} : {\"type\":\"usd\",\"usd\":0.28})\n )\n : $contains($m,\"v1\")\n ? (\n $contains($m,\"pro\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.28} : {\"type\":\"usd\",\"usd\":0.14})\n )\n : {\"type\":\"usd\",\"usd\":0.14}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingImage2VideoNode": {"input": {"required": {"start_frame": ["IMAGE", {"tooltip": "The reference image used to generate the video."}], "prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "model_name": ["COMBO", {"default": "kling-v2-master", "multiselect": false, "options": ["kling-v1", "kling-v1-5", "kling-v1-6", "kling-v2-master", "kling-v2-1", "kling-v2-1-master", "kling-v2-5-turbo"]}], "cfg_scale": ["FLOAT", {"default": 0.8, "min": 0.0, "max": 1.0}], "mode": ["COMBO", {"default": "std", "multiselect": false, "options": ["std", "pro"]}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "duration": ["COMBO", {"default": "5", "multiselect": false, "options": ["5", "10"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["start_frame", "prompt", "negative_prompt", "model_name", "cfg_scale", "mode", "aspect_ratio", "duration"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingImage2VideoNode", "display_name": "Kling Image(First Frame) to Video", "description": "", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $mode := widgets.mode;\n $model := widgets.model_name;\n $dur := widgets.duration;\n $contains($model,\"v2-5-turbo\")\n ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.7} : {\"type\":\"usd\",\"usd\":0.35})\n : ($contains($model,\"v2-1-master\") or $contains($model,\"v2-master\"))\n ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":2.8} : {\"type\":\"usd\",\"usd\":1.4})\n : ($contains($model,\"v2-1\") or $contains($model,\"v1-6\") or $contains($model,\"v1-5\"))\n ? (\n $contains($mode,\"pro\")\n ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.56} : {\"type\":\"usd\",\"usd\":0.28})\n )\n : $contains($model,\"v1\")\n ? (\n $contains($mode,\"pro\")\n ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.28} : {\"type\":\"usd\",\"usd\":0.14})\n )\n : {\"type\":\"usd\",\"usd\":0.14}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingCameraControlI2VNode": {"input": {"required": {"start_frame": ["IMAGE", {"tooltip": "Reference Image - URL or Base64 encoded string, cannot exceed 10MB, resolution not less than 300*300px, aspect ratio between 1:2.5 ~ 2.5:1. Base64 should not include data:image prefix."}], "prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "cfg_scale": ["FLOAT", {"default": 0.75, "min": 0.0, "max": 1.0}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "camera_control": ["CAMERA_CONTROL", {"tooltip": "Can be created using the Kling Camera Controls node. Controls the camera movement and motion during the video generation."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["start_frame", "prompt", "negative_prompt", "cfg_scale", "aspect_ratio", "camera_control"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingCameraControlI2VNode", "display_name": "Kling Image to Video (Camera Control)", "description": "Transform still images into cinematic videos with professional camera movements that simulate real-world cinematography. Control virtual camera actions including zoom, rotation, pan, tilt, and first-person view, while maintaining focus on your original image.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.49}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingCameraControlT2VNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "cfg_scale": ["FLOAT", {"default": 0.75, "min": 0.0, "max": 1.0}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "camera_control": ["CAMERA_CONTROL", {"tooltip": "Can be created using the Kling Camera Controls node. Controls the camera movement and motion during the video generation."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "negative_prompt", "cfg_scale", "aspect_ratio", "camera_control"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingCameraControlT2VNode", "display_name": "Kling Text to Video (Camera Control)", "description": "Transform text into cinematic videos with professional camera movements that simulate real-world cinematography. Control virtual camera actions including zoom, rotation, pan, tilt, and first-person view, while maintaining focus on your original text.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.14}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingStartEndFrameNode": {"input": {"required": {"start_frame": ["IMAGE", {"tooltip": "Reference Image - URL or Base64 encoded string, cannot exceed 10MB, resolution not less than 300*300px, aspect ratio between 1:2.5 ~ 2.5:1. Base64 should not include data:image prefix."}], "end_frame": ["IMAGE", {"tooltip": "Reference Image - End frame control. URL or Base64 encoded string, cannot exceed 10MB, resolution not less than 300*300px. Base64 should not include data:image prefix."}], "prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "cfg_scale": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "mode": ["COMBO", {"tooltip": "The configuration to use for the video generation following the format: mode / duration / model_name.", "default": "pro mode / 5s duration / kling-v2-5-turbo", "multiselect": false, "options": ["pro mode / 5s duration / kling-v1-5", "pro mode / 10s duration / kling-v1-5", "pro mode / 5s duration / kling-v1-6", "pro mode / 10s duration / kling-v1-6", "pro mode / 5s duration / kling-v2-1", "pro mode / 10s duration / kling-v2-1", "pro mode / 5s duration / kling-v2-5-turbo", "pro mode / 10s duration / kling-v2-5-turbo"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["start_frame", "end_frame", "prompt", "negative_prompt", "cfg_scale", "aspect_ratio", "mode"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingStartEndFrameNode", "display_name": "Kling Start-End Frame to Video", "description": "Generate a video sequence that transitions between your provided start and end images. The node creates all frames in between, producing a smooth transformation from the first frame to the last.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.mode;\n $contains($m,\"v2-5-turbo\")\n ? ($contains($m,\"10\") ? {\"type\":\"usd\",\"usd\":0.7} : {\"type\":\"usd\",\"usd\":0.35})\n : $contains($m,\"v2-1\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : $contains($m,\"v2-master\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":2.8} : {\"type\":\"usd\",\"usd\":1.4})\n : $contains($m,\"v1-6\")\n ? (\n $contains($m,\"pro\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.56} : {\"type\":\"usd\",\"usd\":0.28})\n )\n : $contains($m,\"v1\")\n ? (\n $contains($m,\"pro\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.28} : {\"type\":\"usd\",\"usd\":0.14})\n )\n : {\"type\":\"usd\",\"usd\":0.14}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingVideoExtendNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Positive text prompt for guiding the video extension", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt for elements to avoid in the extended video", "multiline": true}], "cfg_scale": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0}], "video_id": ["STRING", {"tooltip": "The ID of the video to be extended. Supports videos generated by text-to-video, image-to-video, and previous video extension operations. Cannot exceed 3 minutes total duration after extension.", "forceInput": true, "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "negative_prompt", "cfg_scale", "video_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingVideoExtendNode", "display_name": "Kling Video Extend", "description": "Kling Video Extend Node. Extend videos made by other Kling nodes. The video_id is created by using other Kling Nodes.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.28}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingLipSyncAudioToVideoNode": {"input": {"required": {"video": ["VIDEO", {}], "audio": ["AUDIO", {}], "voice_language": ["COMBO", {"default": "en", "multiselect": false, "options": ["zh", "en"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "audio", "voice_language"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingLipSyncAudioToVideoNode", "display_name": "Kling Lip Sync Video with Audio", "description": "Kling Lip Sync Audio to Video Node. Syncs mouth movements in a video file to the audio content of an audio file. When using, ensure that the audio contains clearly distinguishable vocals and that the video contains a distinct face. The audio file should not be larger than 5MB. The video file should not be larger than 100MB, should have height/width between 720px and 1920px, and should be between 2s and 10s in length.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.1,\"format\":{\"approximate\":true}}"}, "search_aliases": null, "essentials_category": "Video Generation", "has_intermediate_output": false}, "KlingLipSyncTextToVideoNode": {"input": {"required": {"video": ["VIDEO", {}], "text": ["STRING", {"tooltip": "Text Content for Lip-Sync Video Generation. Required when mode is text2video. Maximum length is 120 characters.", "multiline": true}], "voice": ["COMBO", {"default": "Melody", "multiselect": false, "options": ["Melody", "Sunny", "Sage", "Ace", "Blossom", "Peppy", "Dove", "Shine", "Anchor", "Lyric", "Tender", "Siren", "Zippy", "Bud", "Sprite", "Candy", "Beacon", "Rock", "Titan", "Grace", "Helen", "Lore", "Crag", "Prattle", "Hearth", "The Reader", "Commercial Lady", "\u9633\u5149\u5c11\u5e74", "\u61c2\u4e8b\u5c0f\u5f1f", "\u8fd0\u52a8\u5c11\u5e74", "\u9752\u6625\u5c11\u5973", "\u6e29\u67d4\u5c0f\u59b9", "\u5143\u6c14\u5c11\u5973", "\u9633\u5149\u7537\u751f", "\u5e7d\u9ed8\u5c0f\u54e5", "\u6587\u827a\u5c0f\u54e5", "\u751c\u7f8e\u90bb\u5bb6", "\u6e29\u67d4\u59d0\u59d0", "\u804c\u573a\u5973\u9752", "\u6d3b\u6cfc\u7537\u7ae5", "\u4fcf\u76ae\u5973\u7ae5", "\u7a33\u91cd\u8001\u7238", "\u6e29\u67d4\u5988\u5988", "\u4e25\u8083\u4e0a\u53f8", "\u4f18\u96c5\u8d35\u5987", "\u6148\u7965\u7237\u7237", "\u5520\u53e8\u7237\u7237", "\u5520\u53e8\u5976\u5976", "\u548c\u853c\u5976\u5976", "\u4e1c\u5317\u8001\u94c1", "\u91cd\u5e86\u5c0f\u4f19", "\u56db\u5ddd\u59b9\u5b50", "\u6f6e\u6c55\u5927\u53d4", "\u53f0\u6e7e\u7537\u751f", "\u897f\u5b89\u638c\u67dc", "\u5929\u6d25\u59d0\u59d0", "\u65b0\u95fb\u64ad\u62a5\u7537", "\u8bd1\u5236\u7247\u7537", "\u6492\u5a07\u5973\u53cb", "\u5200\u7247\u70df\u55d3", "\u4e56\u5de7\u6b63\u592a"]}], "voice_speed": ["FLOAT", {"tooltip": "Speech Rate. Valid range: 0.8~2.0, accurate to one decimal place.", "advanced": true, "default": 1, "min": 0.8, "max": 2.0, "display": "slider"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "text", "voice", "voice_speed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingLipSyncTextToVideoNode", "display_name": "Kling Lip Sync Video with Text", "description": "Kling Lip Sync Text to Video Node. Syncs mouth movements in a video file to a text prompt. The video file should not be larger than 100MB, should have height/width between 720px and 1920px, and should be between 2s and 10s in length.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.1,\"format\":{\"approximate\":true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingVirtualTryOnNode": {"input": {"required": {"human_image": ["IMAGE", {}], "cloth_image": ["IMAGE", {}], "model_name": ["COMBO", {"default": "kolors-virtual-try-on-v1", "multiselect": false, "options": ["kolors-virtual-try-on-v1", "kolors-virtual-try-on-v1-5"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["human_image", "cloth_image", "model_name"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingVirtualTryOnNode", "display_name": "Kling Virtual Try On", "description": "Kling Virtual Try On Node. Input a human image and a cloth image to try on the cloth on the human. You can merge multiple clothing item pictures into one image with a white background.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/image/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.7}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingImageGenerationNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "image_type": ["COMBO", {"advanced": true, "multiselect": false, "options": ["subject", "face"]}], "image_fidelity": ["FLOAT", {"tooltip": "Reference intensity for user-uploaded images", "advanced": true, "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "human_fidelity": ["FLOAT", {"tooltip": "Subject reference similarity", "advanced": true, "default": 0.45, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3", "kling-v2", "kling-v1-5"]}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4", "3:2", "2:3", "21:9"]}], "n": ["INT", {"tooltip": "Number of generated images", "default": 1, "min": 1, "max": 9}]}, "optional": {"image": ["IMAGE", {}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "negative_prompt", "image_type", "image_fidelity", "human_fidelity", "model_name", "aspect_ratio", "n"], "optional": ["image", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingImageGenerationNode", "display_name": "Kling 3.0 Image", "description": "Kling Image Generation Node. Generate an image from a text prompt with an optional reference image.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/image/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model_name", "type": "COMBO"}, {"name": "n", "type": "INT"}], "inputs": ["image"], "input_groups": []}, "expr": "\n (\n $m := widgets.model_name;\n $base :=\n $contains($m,\"kling-v1-5\")\n ? (inputs.image.connected ? 0.028 : 0.014)\n : $contains($m,\"kling-v3\") ? 0.028 : 0.014;\n {\"type\":\"usd\",\"usd\": $base * widgets.n}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingSingleImageVideoEffectNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": " Reference Image. URL or Base64 encoded string (without data:image prefix). File size cannot exceed 10MB, resolution not less than 300*300px, aspect ratio between 1:2.5 ~ 2.5:1"}], "effect_scene": ["COMBO", {"multiselect": false, "options": ["bloombloom", "dizzydizzy", "fuzzyfuzzy", "squish", "expansion"]}], "model_name": ["COMBO", {"multiselect": false, "options": ["kling-v1-6"]}], "duration": ["COMBO", {"multiselect": false, "options": ["5", "10"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "effect_scene", "model_name", "duration"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingSingleImageVideoEffectNode", "display_name": "Kling Video Effects", "description": "Achieve different special effects when generating a video based on the effect_scene.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "effect_scene", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n ($contains(widgets.effect_scene,\"dizzydizzy\") or $contains(widgets.effect_scene,\"bloombloom\"))\n ? {\"type\":\"usd\",\"usd\":0.49}\n : {\"type\":\"usd\",\"usd\":0.28}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingDualCharacterVideoEffectNode": {"input": {"required": {"image_left": ["IMAGE", {"tooltip": "Left side image"}], "image_right": ["IMAGE", {"tooltip": "Right side image"}], "effect_scene": ["COMBO", {"multiselect": false, "options": ["hug", "kiss", "heart_gesture"]}], "model_name": ["COMBO", {"default": "kling-v1", "multiselect": false, "options": ["kling-v1", "kling-v1-5", "kling-v1-6"]}], "mode": ["COMBO", {"default": "std", "multiselect": false, "options": ["std", "pro"]}], "duration": ["COMBO", {"multiselect": false, "options": ["5", "10"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image_left", "image_right", "effect_scene", "model_name", "mode", "duration"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING"], "output_is_list": [false, false], "output_name": ["VIDEO", "duration"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "KlingDualCharacterVideoEffectNode", "display_name": "Kling Dual Character Video Effects", "description": "Achieve different special effects when generating a video based on the effect_scene. First image will be positioned on left side, second on right side of the composite.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $mode := widgets.mode;\n $model := widgets.model_name;\n $dur := widgets.duration;\n ($contains($model,\"v1-6\") or $contains($model,\"v1-5\"))\n ? (\n $contains($mode,\"pro\")\n ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.56} : {\"type\":\"usd\",\"usd\":0.28})\n )\n : $contains($model,\"v1\")\n ? (\n $contains($mode,\"pro\")\n ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.28} : {\"type\":\"usd\",\"usd\":0.14})\n )\n : {\"type\":\"usd\",\"usd\":0.14}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingOmniProTextToVideoNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-video-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions. Ignored when storyboards are enabled.", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "display": "slider"}]}, "optional": {"resolution": ["COMBO", {"default": "1080p", "multiselect": false, "options": ["4k", "1080p", "720p"]}], "storyboards": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generate a series of video segments with individual prompts and durations. Ignored for o1 model.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "1 storyboard", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "2 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "3 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "4 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "5 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "6 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_6_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 6. Max 512 characters.", "default": "", "multiline": true}], "storyboard_6_duration": ["INT", {"tooltip": "Duration for storyboard segment 6 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}]}], "generate_audio": ["BOOLEAN", {"default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "prompt", "aspect_ratio", "duration"], "optional": ["resolution", "storyboards", "generate_audio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProTextToVideoNode", "display_name": "Kling 3.0 Omni Text to Video", "description": "Use text prompts to generate videos with the latest Kling model.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := widgets.resolution;\n $mode := $res = \"4k\" ? \"4k\" : ($res = \"720p\" ? \"std\" : \"pro\");\n $isV3 := $contains(widgets.model_name, \"v3\");\n $audio := $isV3 and widgets.generate_audio;\n $rates := $audio\n ? {\"std\": 0.112, \"pro\": 0.14, \"4k\": 0.42}\n : {\"std\": 0.084, \"pro\": 0.112, \"4k\": 0.42};\n {\"type\":\"usd\",\"usd\": $lookup($rates, $mode) * widgets.duration}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingOmniProFirstLastFrameNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-video-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions. Ignored when storyboards are enabled.", "multiline": true}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "display": "slider"}], "first_frame": ["IMAGE", {}]}, "optional": {"end_frame": ["IMAGE", {"tooltip": "An optional end frame for the video. This cannot be used simultaneously with 'reference_images'. Does not work with storyboards."}], "reference_images": ["IMAGE", {"tooltip": "Up to 6 additional reference images."}], "resolution": ["COMBO", {"default": "1080p", "multiselect": false, "options": ["4k", "1080p", "720p"]}], "storyboards": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generate a series of video segments with individual prompts and durations. Only supported for kling-v3-omni.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "1 storyboard", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "2 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "3 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "4 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "5 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "6 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_6_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 6. Max 512 characters.", "default": "", "multiline": true}], "storyboard_6_duration": ["INT", {"tooltip": "Duration for storyboard segment 6 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}]}], "generate_audio": ["BOOLEAN", {"tooltip": "Generate audio for the video. Only supported for kling-v3-omni.", "default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "prompt", "duration", "first_frame"], "optional": ["end_frame", "reference_images", "resolution", "storyboards", "generate_audio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProFirstLastFrameNode", "display_name": "Kling 3.0 Omni First-Last-Frame to Video", "description": "Use a start frame, an optional end frame, or reference images with the latest Kling model.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := widgets.resolution;\n $mode := $res = \"4k\" ? \"4k\" : ($res = \"720p\" ? \"std\" : \"pro\");\n $isV3 := $contains(widgets.model_name, \"v3\");\n $audio := $isV3 and widgets.generate_audio;\n $rates := $audio\n ? {\"std\": 0.112, \"pro\": 0.14, \"4k\": 0.42}\n : {\"std\": 0.084, \"pro\": 0.112, \"4k\": 0.42};\n {\"type\":\"usd\",\"usd\": $lookup($rates, $mode) * widgets.duration}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingOmniProImageToVideoNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-video-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions. Ignored when storyboards are enabled.", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "display": "slider"}], "reference_images": ["IMAGE", {"tooltip": "Up to 7 reference images."}]}, "optional": {"resolution": ["COMBO", {"default": "1080p", "multiselect": false, "options": ["4k", "1080p", "720p"]}], "storyboards": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generate a series of video segments with individual prompts and durations. Only supported for kling-v3-omni.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "1 storyboard", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "2 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "3 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "4 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "5 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "6 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_6_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 6. Max 512 characters.", "default": "", "multiline": true}], "storyboard_6_duration": ["INT", {"tooltip": "Duration for storyboard segment 6 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}]}], "generate_audio": ["BOOLEAN", {"tooltip": "Generate audio for the video. Only supported for kling-v3-omni.", "default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "prompt", "aspect_ratio", "duration", "reference_images"], "optional": ["resolution", "storyboards", "generate_audio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProImageToVideoNode", "display_name": "Kling 3.0 Omni Image to Video", "description": "Use up to 7 reference images to generate a video with the latest Kling model.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := widgets.resolution;\n $mode := $res = \"4k\" ? \"4k\" : ($res = \"720p\" ? \"std\" : \"pro\");\n $isV3 := $contains(widgets.model_name, \"v3\");\n $audio := $isV3 and widgets.generate_audio;\n $rates := $audio\n ? {\"std\": 0.112, \"pro\": 0.14, \"4k\": 0.42}\n : {\"std\": 0.084, \"pro\": 0.112, \"4k\": 0.42};\n {\"type\":\"usd\",\"usd\": $lookup($rates, $mode) * widgets.duration}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingOmniProVideoToVideoNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-video-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions.", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "duration": ["INT", {"default": 3, "min": 3, "max": 10, "display": "slider"}], "reference_video": ["VIDEO", {"tooltip": "Video to use as a reference."}], "keep_original_sound": ["BOOLEAN", {"default": true}]}, "optional": {"reference_images": ["IMAGE", {"tooltip": "Up to 4 additional reference images."}], "resolution": ["COMBO", {"multiselect": false, "options": ["1080p", "720p"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "prompt", "aspect_ratio", "duration", "reference_video", "keep_original_sound"], "optional": ["reference_images", "resolution", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProVideoToVideoNode", "display_name": "Kling 3.0 Omni Video to Video", "description": "Use a video and up to 4 reference images to generate a video with the latest Kling model.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $mode := (widgets.resolution = \"720p\") ? \"std\" : \"pro\";\n $rates := {\"std\": 0.126, \"pro\": 0.168};\n {\"type\":\"usd\",\"usd\": $lookup($rates, $mode) * widgets.duration}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingOmniProEditVideoNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-video-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions.", "multiline": true}], "video": ["VIDEO", {"tooltip": "Video for editing. The output video length will be the same."}], "keep_original_sound": ["BOOLEAN", {"default": true}]}, "optional": {"reference_images": ["IMAGE", {"tooltip": "Up to 4 additional reference images."}], "resolution": ["COMBO", {"multiselect": false, "options": ["1080p", "720p"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "prompt", "video", "keep_original_sound"], "optional": ["reference_images", "resolution", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProEditVideoNode", "display_name": "Kling 3.0 Omni Edit Video", "description": "Edit an existing video with the latest model from Kling.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $mode := (widgets.resolution = \"720p\") ? \"std\" : \"pro\";\n $rates := {\"std\": 0.126, \"pro\": 0.168};\n {\"type\":\"usd\",\"usd\": $lookup($rates, $mode), \"format\":{\"suffix\":\"/second\"}}\n )\n "}, "search_aliases": null, "essentials_category": "Video Generation", "has_intermediate_output": false}, "KlingOmniProImageNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-image-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the image content. This can include both positive and negative descriptions.", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K", "4K"]}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4", "3:2", "2:3", "21:9"]}], "series_amount": ["COMBO", {"tooltip": "Generate a series of images. Not supported for kling-image-o1.", "multiselect": false, "options": ["disabled", "2", "3", "4", "5", "6", "7", "8", "9"]}]}, "optional": {"reference_images": ["IMAGE", {"tooltip": "Up to 10 additional reference images."}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "prompt", "resolution", "aspect_ratio", "series_amount"], "optional": ["reference_images", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProImageNode", "display_name": "Kling 3.0 Omni Image", "description": "Create or edit images with the latest model from Kling.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/image/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}, {"name": "series_amount", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\"1k\": 0.028, \"2k\": 0.028, \"4k\": 0.056};\n $base := $lookup($prices, widgets.resolution);\n $isO1 := widgets.model_name = \"kling-image-o1\";\n $mult := ($isO1 or widgets.series_amount = \"disabled\") ? 1 : $number(widgets.series_amount);\n {\"type\":\"usd\",\"usd\": $base * $mult}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingTextToVideoWithAudio": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v2-6"]}], "prompt": ["STRING", {"tooltip": "Positive text prompt.", "multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["pro"]}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "duration": ["COMBO", {"multiselect": false, "options": [5, 10]}], "generate_audio": ["BOOLEAN", {"advanced": true, "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "prompt", "mode", "aspect_ratio", "duration", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingTextToVideoWithAudio", "display_name": "Kling 2.6 Text to Video with Audio", "description": "", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.07 * widgets.duration * (widgets.generate_audio ? 2 : 1)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingImageToVideoWithAudio": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v2-6"]}], "start_frame": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Positive text prompt.", "multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["pro"]}], "duration": ["COMBO", {"multiselect": false, "options": [5, 10]}], "generate_audio": ["BOOLEAN", {"advanced": true, "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "start_frame", "prompt", "mode", "duration", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingImageToVideoWithAudio", "display_name": "Kling 2.6 Image(First Frame) to Video with Audio", "description": "", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.07 * widgets.duration * (widgets.generate_audio ? 2 : 1)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingMotionControl": {"input": {"required": {"prompt": ["STRING", {"multiline": true}], "reference_image": ["IMAGE", {}], "reference_video": ["VIDEO", {"tooltip": "Motion reference video used to drive movement/expression.\nDuration limits depend on character_orientation:\n - image: 3\u201310s (max 10s)\n - video: 3\u201330s (max 30s)"}], "keep_original_sound": ["BOOLEAN", {"default": true}], "character_orientation": ["COMBO", {"tooltip": "Controls where the character's facing/orientation comes from.\nvideo: movements, expressions, camera moves, and orientation follow the motion reference video (other details via prompt).\nimage: movements and expressions still follow the motion reference video, but the character orientation matches the reference image (camera/other details via prompt).", "multiselect": false, "options": ["video", "image"]}], "mode": ["COMBO", {"multiselect": false, "options": ["pro", "std"]}]}, "optional": {"model": ["COMBO", {"multiselect": false, "options": ["kling-v3", "kling-v2-6"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "reference_image", "reference_video", "keep_original_sound", "character_orientation", "mode"], "optional": ["model"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingMotionControl", "display_name": "Kling Motion Control", "description": "", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}, {"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"kling-v3\": {\"std\": 0.126, \"pro\": 0.168},\n \"kling-v2-6\": {\"std\": 0.07, \"pro\": 0.112}\n };\n $modelPrices := $lookup($prices, widgets.model);\n {\"type\":\"usd\",\"usd\": $lookup($modelPrices, widgets.mode), \"format\":{\"suffix\":\"/second\"}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingVideoNode": {"input": {"required": {"multi_shot": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generate a series of video segments with individual prompts and durations.", "options": [{"key": "disabled", "inputs": {"required": {"prompt": ["STRING", {"default": "", "multiline": true}], "negative_prompt": ["STRING", {"default": "", "multiline": true}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "display": "slider"}]}}}, {"key": "1 storyboard", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "2 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "3 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "4 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "5 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "6 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_6_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 6. Max 512 characters.", "default": "", "multiline": true}], "storyboard_6_duration": ["INT", {"tooltip": "Duration for storyboard segment 6 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}]}], "generate_audio": ["BOOLEAN", {"tooltip": "'kling-3.0-turbo' always generates native audio, so the audio toggle is ignored.", "default": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model and generation settings.", "options": [{"key": "kling-v3", "inputs": {"required": {"resolution": ["COMBO", {"default": "1080p", "multiselect": false, "options": ["4k", "1080p", "720p"]}], "aspect_ratio": ["COMBO", {"tooltip": "Ignored in image-to-video mode.", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}]}}}, {"key": "kling-3.0-turbo", "inputs": {"required": {"resolution": ["COMBO", {"default": "720p", "multiselect": false, "options": ["1080p", "720p"]}], "aspect_ratio": ["COMBO", {"tooltip": "Ignored in image-to-video mode.", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "optional": {"start_frame": ["IMAGE", {"tooltip": "Optional start frame image. When connected, switches to image-to-video mode."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["multi_shot", "generate_audio", "model", "seed"], "optional": ["start_frame"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingVideoNode", "display_name": "Kling 3.0 Video", "description": "Generate videos with Kling V3. Supports text-to-video and image-to-video with optional storyboard multi-prompt and audio generation.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}, {"name": "multi_shot", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "multi_shot.duration", "type": "INT"}, {"name": "multi_shot.storyboard_1_duration", "type": "INT"}, {"name": "multi_shot.storyboard_2_duration", "type": "INT"}, {"name": "multi_shot.storyboard_3_duration", "type": "INT"}, {"name": "multi_shot.storyboard_4_duration", "type": "INT"}, {"name": "multi_shot.storyboard_5_duration", "type": "INT"}, {"name": "multi_shot.storyboard_6_duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $ms := widgets.multi_shot;\n $isSb := $ms != \"disabled\";\n $n := $isSb ? $number($substring($ms, 0, 1)) : 0;\n $d1 := $lookup(widgets, \"multi_shot.storyboard_1_duration\");\n $d2 := $n >= 2 ? $lookup(widgets, \"multi_shot.storyboard_2_duration\") : 0;\n $d3 := $n >= 3 ? $lookup(widgets, \"multi_shot.storyboard_3_duration\") : 0;\n $d4 := $n >= 4 ? $lookup(widgets, \"multi_shot.storyboard_4_duration\") : 0;\n $d5 := $n >= 5 ? $lookup(widgets, \"multi_shot.storyboard_5_duration\") : 0;\n $d6 := $n >= 6 ? $lookup(widgets, \"multi_shot.storyboard_6_duration\") : 0;\n $dur := $isSb ? $d1 + $d2 + $d3 + $d4 + $d5 + $d6 : $lookup(widgets, \"multi_shot.duration\");\n widgets.model = \"kling-3.0-turbo\"\n ? {\"type\":\"usd\",\"usd\": ($res = \"1080p\" ? 0.14 : 0.112) * $dur}\n : (\n $rates := {\n \"4k\": {\"off\": 0.42, \"on\": 0.42},\n \"1080p\": {\"off\": 0.112, \"on\": 0.168},\n \"720p\": {\"off\": 0.084, \"on\": 0.126}\n };\n $audio := widgets.generate_audio ? \"on\" : \"off\";\n $rate := $lookup($lookup($rates, $res), $audio);\n {\"type\":\"usd\",\"usd\": $rate * $dur}\n )\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingFirstLastFrameNode": {"input": {"required": {"prompt": ["STRING", {"default": "", "multiline": true}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "display": "slider"}], "first_frame": ["IMAGE", {}], "end_frame": ["IMAGE", {}], "generate_audio": ["BOOLEAN", {"default": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model and generation settings.", "options": [{"key": "kling-v3", "inputs": {"required": {"resolution": ["COMBO", {"default": "1080p", "multiselect": false, "options": ["4k", "1080p", "720p"]}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "duration", "first_frame", "end_frame", "generate_audio", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingFirstLastFrameNode", "display_name": "Kling 3.0 First-Last-Frame to Video", "description": "Generate videos with Kling V3 using first and last frames.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model.resolution", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}, {"name": "duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rates := {\n \"4k\": {\"off\": 0.42, \"on\": 0.42},\n \"1080p\": {\"off\": 0.112, \"on\": 0.168},\n \"720p\": {\"off\": 0.084, \"on\": 0.126}\n };\n $res := $lookup(widgets, \"model.resolution\");\n $audio := widgets.generate_audio ? \"on\" : \"off\";\n $rate := $lookup($lookup($rates, $res), $audio);\n {\"type\":\"usd\",\"usd\": $rate * widgets.duration}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingAvatarNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Avatar reference image. Width and height must be at least 300px. Aspect ratio must be between 1:2.5 and 2.5:1."}], "sound_file": ["AUDIO", {"tooltip": "Audio input. Must be between 2 and 300 seconds in duration."}], "mode": ["COMBO", {"multiselect": false, "options": ["std", "pro"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "optional": {"prompt": ["STRING", {"tooltip": "Optional prompt to define avatar actions, emotions, and camera movements.", "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "sound_file", "mode", "seed"], "optional": ["prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingAvatarNode", "display_name": "Kling Avatar 2.0", "description": "Generate broadcast-style digital human videos from a single photo and an audio file.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\"std\": 0.056, \"pro\": 0.112};\n {\"type\":\"usd\",\"usd\": $lookup($prices, widgets.mode), \"format\":{\"suffix\":\"/second\"}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Krea2ImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the image.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Krea 2 Medium is best for expressive illustrations; Krea 2 Large is best for expressive photorealism.", "options": [{"key": "Krea 2 Medium", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Output aspect ratio.", "multiselect": false, "options": ["1:1", "4:3", "3:2", "16:9", "2.35:1", "4:5", "2:3", "9:16"]}], "resolution": ["COMBO", {"tooltip": "Resolution scale.", "multiselect": false, "options": ["1K"]}], "creativity": ["COMBO", {"tooltip": "Prompt interpretation strength: raw stays closest to the prompt; high is most creative.", "default": "medium", "multiselect": false, "options": ["raw", "low", "medium", "high"]}]}, "optional": {"moodboard_id": ["STRING", {"tooltip": "Optional Krea moodboard UUID (e.g. from the Krea website). Leave empty to disable. Only one moodboard is supported per request.", "default": "", "multiline": false}], "moodboard_strength": ["FLOAT", {"tooltip": "Moodboard influence; ignored when moodboard_id is empty.", "default": 0.35, "min": -0.5, "max": 1.5, "step": 0.05}], "style_reference": ["KREA_STYLE_REF", {"tooltip": "Optional chain of style references (max 10) from Krea 2 Style Reference nodes."}]}}}, {"key": "Krea 2 Medium Turbo", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Output aspect ratio.", "multiselect": false, "options": ["1:1", "4:3", "3:2", "16:9", "2.35:1", "4:5", "2:3", "9:16"]}], "resolution": ["COMBO", {"tooltip": "Resolution scale.", "multiselect": false, "options": ["1K"]}], "creativity": ["COMBO", {"tooltip": "Prompt interpretation strength: raw stays closest to the prompt; high is most creative.", "default": "medium", "multiselect": false, "options": ["raw", "low", "medium", "high"]}]}, "optional": {"moodboard_id": ["STRING", {"tooltip": "Optional Krea moodboard UUID (e.g. from the Krea website). Leave empty to disable. Only one moodboard is supported per request.", "default": "", "multiline": false}], "moodboard_strength": ["FLOAT", {"tooltip": "Moodboard influence; ignored when moodboard_id is empty.", "default": 0.35, "min": -0.5, "max": 1.5, "step": 0.05}], "style_reference": ["KREA_STYLE_REF", {"tooltip": "Optional chain of style references (max 10) from Krea 2 Style Reference nodes."}]}}}, {"key": "Krea 2 Large", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Output aspect ratio.", "multiselect": false, "options": ["1:1", "4:3", "3:2", "16:9", "2.35:1", "4:5", "2:3", "9:16"]}], "resolution": ["COMBO", {"tooltip": "Resolution scale.", "multiselect": false, "options": ["1K"]}], "creativity": ["COMBO", {"tooltip": "Prompt interpretation strength: raw stays closest to the prompt; high is most creative.", "default": "medium", "multiselect": false, "options": ["raw", "low", "medium", "high"]}]}, "optional": {"moodboard_id": ["STRING", {"tooltip": "Optional Krea moodboard UUID (e.g. from the Krea website). Leave empty to disable. Only one moodboard is supported per request.", "default": "", "multiline": false}], "moodboard_strength": ["FLOAT", {"tooltip": "Moodboard influence; ignored when moodboard_id is empty.", "default": 0.35, "min": -0.5, "max": 1.5, "step": 0.05}], "style_reference": ["KREA_STYLE_REF", {"tooltip": "Optional chain of style references (max 10) from Krea 2 Style Reference nodes."}]}}}]}], "seed": ["INT", {"tooltip": "Random seed for reproducibility.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Krea2ImageNode", "display_name": "Krea 2 Image", "description": "Generate images via Krea 2 \u2014 pick Medium (expressive illustrations) or Large (expressive photorealism). Supports an optional moodboard and up to 10 chained image style references.", "python_module": "comfy_api_nodes.nodes_krea", "category": "partner/image/Krea", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.moodboard_id", "type": "STRING"}], "inputs": ["model.style_reference"], "input_groups": []}, "expr": "\n (\n $rates := {\n \"krea 2 medium turbo\": {\"text\": 0.015, \"style\": 0.0175, \"moodboard\": 0.02},\n \"krea 2 medium\": {\"text\": 0.03, \"style\": 0.035, \"moodboard\": 0.04},\n \"krea 2 large\": {\"text\": 0.06, \"style\": 0.065, \"moodboard\": 0.07}\n };\n $r := $lookup($rates, widgets.model);\n $hasMoodboard := $length($lookup(widgets, \"model.moodboard_id\")) > 0;\n $hasStyle := $lookup(inputs, \"model.style_reference\").connected;\n $usd := $hasMoodboard ? $r.moodboard : ($hasStyle ? $r.style : $r.text);\n {\"type\":\"usd\",\"usd\": $usd}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Krea2StyleReferenceNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Reference image whose style influences the generation."}], "strength": ["FLOAT", {"tooltip": "Reference strength; negative values invert the style influence.", "default": 1.0, "min": -2.0, "max": 2.0, "step": 0.05}]}, "optional": {"style_reference": ["KREA_STYLE_REF", {"tooltip": "Optional incoming chain of style references; this node appends one more."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "strength"], "optional": ["style_reference"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["KREA_STYLE_REF"], "output_is_list": [false], "output_name": ["style_reference"], "output_tooltips": [null], "output_matchtypes": null, "name": "Krea2StyleReferenceNode", "display_name": "Krea 2 Style Reference", "description": "Add an image style reference to a Krea 2 generation. Chain multiple Krea 2 Style Reference nodes (max 10) and feed the final `style_reference` output into Krea 2 Image. Each image is uploaded to ComfyAPI storage and passed as URL.", "python_module": "comfy_api_nodes.nodes_krea", "category": "partner/image/Krea", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LtxvApiTextToVideo": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["LTX-2 (Pro)", "LTX-2 (Fast)"]}], "prompt": ["STRING", {"default": "", "multiline": true}], "duration": ["COMBO", {"default": 8, "multiselect": false, "options": [6, 8, 10, 12, 14, 16, 18, 20]}], "resolution": ["COMBO", {"multiselect": false, "options": ["1920x1080", "2560x1440", "3840x2160"]}], "fps": ["COMBO", {"default": 25, "multiselect": false, "options": [25, 50]}]}, "optional": {"generate_audio": ["BOOLEAN", {"tooltip": "When true, the generated video will include AI-generated audio matching the scene.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "duration", "resolution", "fps"], "optional": ["generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LtxvApiTextToVideo", "display_name": "LTXV Text To Video", "description": "Professional-quality videos with customizable duration and resolution.", "python_module": "comfy_api_nodes.nodes_ltxv", "category": "partner/video/LTXV", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"ltx-2 (pro)\": {\"1920x1080\":0.06,\"2560x1440\":0.12,\"3840x2160\":0.24},\n \"ltx-2 (fast)\": {\"1920x1080\":0.04,\"2560x1440\":0.08,\"3840x2160\":0.16}\n };\n $modelPrices := $lookup($prices, $lowercase(widgets.model));\n $pps := $lookup($modelPrices, widgets.resolution);\n {\"type\":\"usd\",\"usd\": $pps * widgets.duration}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LtxvApiImageToVideo": {"input": {"required": {"image": ["IMAGE", {"tooltip": "First frame to be used for the video."}], "model": ["COMBO", {"multiselect": false, "options": ["LTX-2 (Pro)", "LTX-2 (Fast)"]}], "prompt": ["STRING", {"default": "", "multiline": true}], "duration": ["COMBO", {"default": 8, "multiselect": false, "options": [6, 8, 10, 12, 14, 16, 18, 20]}], "resolution": ["COMBO", {"multiselect": false, "options": ["1920x1080", "2560x1440", "3840x2160"]}], "fps": ["COMBO", {"default": 25, "multiselect": false, "options": [25, 50]}]}, "optional": {"generate_audio": ["BOOLEAN", {"tooltip": "When true, the generated video will include AI-generated audio matching the scene.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "model", "prompt", "duration", "resolution", "fps"], "optional": ["generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LtxvApiImageToVideo", "display_name": "LTXV Image To Video", "description": "Professional-quality videos with customizable duration and resolution based on start image.", "python_module": "comfy_api_nodes.nodes_ltxv", "category": "partner/video/LTXV", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"ltx-2 (pro)\": {\"1920x1080\":0.06,\"2560x1440\":0.12,\"3840x2160\":0.24},\n \"ltx-2 (fast)\": {\"1920x1080\":0.04,\"2560x1440\":0.08,\"3840x2160\":0.16}\n };\n $modelPrices := $lookup($prices, $lowercase(widgets.model));\n $pps := $lookup($modelPrices, widgets.resolution);\n {\"type\":\"usd\",\"usd\": $pps * widgets.duration}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["photon-1", "photon-flash-1"]}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["1:1", "16:9", "9:16", "4:3", "3:4", "21:9", "9:21"]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "style_image_weight": ["FLOAT", {"tooltip": "Weight of style image. Ignored if no style_image provided.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}, "optional": {"image_luma_ref": ["LUMA_REF", {"tooltip": "Luma Reference node connection to influence generation with input images; up to 4 images can be considered."}], "style_image": ["IMAGE", {"tooltip": "Style reference image; only 1 image will be used."}], "character_image": ["IMAGE", {"tooltip": "Character reference images; can be a batch of multiple, up to 4 images can be considered."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "aspect_ratio", "seed", "style_image_weight"], "optional": ["image_luma_ref", "style_image", "character_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaImageNode", "display_name": "Luma Text to Image", "description": "Generates images synchronously based on prompt and aspect ratio.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/image/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $contains($m,\"photon-flash-1\")\n ? {\"type\":\"usd\",\"usd\":0.0027}\n : $contains($m,\"photon-1\")\n ? {\"type\":\"usd\",\"usd\":0.0104}\n : {\"type\":\"usd\",\"usd\":0.0246}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaImageModifyNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "image_weight": ["FLOAT", {"tooltip": "Weight of the image; the closer to 1.0, the less the image will be modified.", "default": 0.1, "min": 0.0, "max": 0.98, "step": 0.01}], "model": ["COMBO", {"multiselect": false, "options": ["photon-1", "photon-flash-1"]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "image_weight", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaImageModifyNode", "display_name": "Luma Image to Image", "description": "Modifies images synchronously based on prompt and aspect ratio.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/image/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $contains($m,\"photon-flash-1\")\n ? {\"type\":\"usd\",\"usd\":0.0027}\n : $contains($m,\"photon-1\")\n ? {\"type\":\"usd\",\"usd\":0.0104}\n : {\"type\":\"usd\",\"usd\":0.0246}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the video generation", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["ray-2", "ray-flash-2", "ray-1-6"]}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["1:1", "16:9", "9:16", "4:3", "3:4", "21:9", "9:21"]}], "resolution": ["COMBO", {"default": "540p", "multiselect": false, "options": ["540p", "720p", "1080p", "4k"]}], "duration": ["COMBO", {"multiselect": false, "options": ["5s", "9s"]}], "loop": ["BOOLEAN", {"default": false}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"luma_concepts": ["LUMA_CONCEPTS", {"tooltip": "Optional Camera Concepts to dictate camera motion via the Luma Concepts node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "aspect_ratio", "resolution", "duration", "loop", "seed"], "optional": ["luma_concepts"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaVideoNode", "display_name": "Luma Text to Video", "description": "Generates videos synchronously based on prompt and output_size.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\n \"ray-flash-2\": {\n \"5s\": {\"4k\":3.13,\"1080p\":0.79,\"720p\":0.34,\"540p\":0.2},\n \"9s\": {\"4k\":5.65,\"1080p\":1.42,\"720p\":0.61,\"540p\":0.36}\n },\n \"ray-2\": {\n \"5s\": {\"4k\":9.11,\"1080p\":2.27,\"720p\":1.02,\"540p\":0.57},\n \"9s\": {\"4k\":16.4,\"1080p\":4.1,\"720p\":1.83,\"540p\":1.03}\n }\n };\n\n $m := widgets.model;\n $d := widgets.duration;\n $r := widgets.resolution;\n\n $modelKey :=\n $contains($m,\"ray-flash-2\") ? \"ray-flash-2\" :\n $contains($m,\"ray-2\") ? \"ray-2\" :\n $contains($m,\"ray-1-6\") ? \"ray-1-6\" :\n \"other\";\n\n $durKey := $contains($d,\"5s\") ? \"5s\" : $contains($d,\"9s\") ? \"9s\" : \"\";\n $resKey :=\n $contains($r,\"4k\") ? \"4k\" :\n $contains($r,\"1080p\") ? \"1080p\" :\n $contains($r,\"720p\") ? \"720p\" :\n $contains($r,\"540p\") ? \"540p\" : \"\";\n\n $modelPrices := $lookup($p, $modelKey);\n $durPrices := $lookup($modelPrices, $durKey);\n $v := $lookup($durPrices, $resKey);\n\n $price :=\n ($modelKey = \"ray-1-6\") ? 0.5 :\n ($modelKey = \"other\") ? 0.79 :\n ($exists($v) ? $v : 0.79);\n\n {\"type\":\"usd\",\"usd\": $price}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaImageToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the video generation", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["ray-2", "ray-flash-2", "ray-1-6"]}], "resolution": ["COMBO", {"default": "540p", "multiselect": false, "options": ["540p", "720p", "1080p", "4k"]}], "duration": ["COMBO", {"multiselect": false, "options": ["5s", "9s"]}], "loop": ["BOOLEAN", {"default": false}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"first_image": ["IMAGE", {"tooltip": "First frame of generated video."}], "last_image": ["IMAGE", {"tooltip": "Last frame of generated video."}], "luma_concepts": ["LUMA_CONCEPTS", {"tooltip": "Optional Camera Concepts to dictate camera motion via the Luma Concepts node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "resolution", "duration", "loop", "seed"], "optional": ["first_image", "last_image", "luma_concepts"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaImageToVideoNode", "display_name": "Luma Image to Video", "description": "Generates videos synchronously based on prompt, input images, and output_size.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\n \"ray-flash-2\": {\n \"5s\": {\"4k\":3.13,\"1080p\":0.79,\"720p\":0.34,\"540p\":0.2},\n \"9s\": {\"4k\":5.65,\"1080p\":1.42,\"720p\":0.61,\"540p\":0.36}\n },\n \"ray-2\": {\n \"5s\": {\"4k\":9.11,\"1080p\":2.27,\"720p\":1.02,\"540p\":0.57},\n \"9s\": {\"4k\":16.4,\"1080p\":4.1,\"720p\":1.83,\"540p\":1.03}\n }\n };\n\n $m := widgets.model;\n $d := widgets.duration;\n $r := widgets.resolution;\n\n $modelKey :=\n $contains($m,\"ray-flash-2\") ? \"ray-flash-2\" :\n $contains($m,\"ray-2\") ? \"ray-2\" :\n $contains($m,\"ray-1-6\") ? \"ray-1-6\" :\n \"other\";\n\n $durKey := $contains($d,\"5s\") ? \"5s\" : $contains($d,\"9s\") ? \"9s\" : \"\";\n $resKey :=\n $contains($r,\"4k\") ? \"4k\" :\n $contains($r,\"1080p\") ? \"1080p\" :\n $contains($r,\"720p\") ? \"720p\" :\n $contains($r,\"540p\") ? \"540p\" : \"\";\n\n $modelPrices := $lookup($p, $modelKey);\n $durPrices := $lookup($modelPrices, $durKey);\n $v := $lookup($durPrices, $resKey);\n\n $price :=\n ($modelKey = \"ray-1-6\") ? 0.5 :\n ($modelKey = \"other\") ? 0.79 :\n ($exists($v) ? $v : 0.79);\n\n {\"type\":\"usd\",\"usd\": $price}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaReferenceNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Image to use as reference."}], "weight": ["FLOAT", {"tooltip": "Weight of image reference.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}, "optional": {"luma_ref": ["LUMA_REF", {}]}}, "input_order": {"required": ["image", "weight"], "optional": ["luma_ref"]}, "is_input_list": false, "output": ["LUMA_REF"], "output_is_list": [false], "output_name": ["luma_ref"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaReferenceNode", "display_name": "Luma Reference", "description": "Holds an image and weight for use with Luma Generate Image node.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/image/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaConceptsNode": {"input": {"required": {"concept1": ["COMBO", {"multiselect": false, "options": ["None", "truck_left", "pan_right", "pedestal_down", "low_angle", "pedestal_up", "selfie", "pan_left", "roll_right", "zoom_in", "over_the_shoulder", "orbit_right", "orbit_left", "static", "tiny_planet", "high_angle", "bolt_cam", "dolly_zoom", "overhead", "zoom_out", "handheld", "roll_left", "pov", "aerial_drone", "push_in", "crane_down", "truck_right", "tilt_down", "elevator_doors", "tilt_up", "ground_level", "pull_out", "aerial", "crane_up", "eye_level"]}], "concept2": ["COMBO", {"multiselect": false, "options": ["None", "truck_left", "pan_right", "pedestal_down", "low_angle", "pedestal_up", "selfie", "pan_left", "roll_right", "zoom_in", "over_the_shoulder", "orbit_right", "orbit_left", "static", "tiny_planet", "high_angle", "bolt_cam", "dolly_zoom", "overhead", "zoom_out", "handheld", "roll_left", "pov", "aerial_drone", "push_in", "crane_down", "truck_right", "tilt_down", "elevator_doors", "tilt_up", "ground_level", "pull_out", "aerial", "crane_up", "eye_level"]}], "concept3": ["COMBO", {"multiselect": false, "options": ["None", "truck_left", "pan_right", "pedestal_down", "low_angle", "pedestal_up", "selfie", "pan_left", "roll_right", "zoom_in", "over_the_shoulder", "orbit_right", "orbit_left", "static", "tiny_planet", "high_angle", "bolt_cam", "dolly_zoom", "overhead", "zoom_out", "handheld", "roll_left", "pov", "aerial_drone", "push_in", "crane_down", "truck_right", "tilt_down", "elevator_doors", "tilt_up", "ground_level", "pull_out", "aerial", "crane_up", "eye_level"]}], "concept4": ["COMBO", {"multiselect": false, "options": ["None", "truck_left", "pan_right", "pedestal_down", "low_angle", "pedestal_up", "selfie", "pan_left", "roll_right", "zoom_in", "over_the_shoulder", "orbit_right", "orbit_left", "static", "tiny_planet", "high_angle", "bolt_cam", "dolly_zoom", "overhead", "zoom_out", "handheld", "roll_left", "pov", "aerial_drone", "push_in", "crane_down", "truck_right", "tilt_down", "elevator_doors", "tilt_up", "ground_level", "pull_out", "aerial", "crane_up", "eye_level"]}]}, "optional": {"luma_concepts": ["LUMA_CONCEPTS", {"tooltip": "Optional Camera Concepts to add to the ones chosen here."}]}}, "input_order": {"required": ["concept1", "concept2", "concept3", "concept4"], "optional": ["luma_concepts"]}, "is_input_list": false, "output": ["LUMA_CONCEPTS"], "output_is_list": [false], "output_name": ["luma_concepts"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaConceptsNode", "display_name": "Luma Concepts", "description": "Camera Concepts for use with Luma Text to Video and Luma Image to Video nodes.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaImageNode2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the desired image. 1\u20136000 characters.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for generation.", "options": [{"key": "uni-1", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Output image aspect ratio. 'auto' lets the model pick based on the prompt.", "default": "auto", "multiselect": false, "options": ["auto", "3:1", "2:1", "16:9", "3:2", "1:1", "2:3", "9:16", "1:2", "1:3"]}], "style": ["COMBO", {"tooltip": "Style preset. 'auto' picks based on the prompt; 'manga' applies a manga/anime aesthetic and requires a portrait aspect ratio (2:3, 9:16, 1:2, 1:3).", "default": "auto", "multiselect": false, "options": ["auto", "manga"]}], "web_search": ["BOOLEAN", {"tooltip": "Search the web for visual references before generating.", "default": false}]}, "optional": {"image_ref": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 9 reference images for style/content guidance.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9"], "min": 0}}]}}}, {"key": "uni-1-max", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Output image aspect ratio. 'auto' lets the model pick based on the prompt.", "default": "auto", "multiselect": false, "options": ["auto", "3:1", "2:1", "16:9", "3:2", "1:1", "2:3", "9:16", "1:2", "1:3"]}], "style": ["COMBO", {"tooltip": "Style preset. 'auto' picks based on the prompt; 'manga' applies a manga/anime aesthetic and requires a portrait aspect ratio (2:3, 9:16, 1:2, 1:3).", "default": "auto", "multiselect": false, "options": ["auto", "manga"]}], "web_search": ["BOOLEAN", {"tooltip": "Search the web for visual references before generating.", "default": false}]}, "optional": {"image_ref": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 9 reference images for style/content guidance.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9"], "min": 0}}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaImageNode2", "display_name": "Luma UNI-1 Image", "description": "Generate images from text using the Luma UNI-1 model.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/image/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": ["model.image_ref"]}, "expr": "\n (\n $m := widgets.model;\n $refs := $lookup(inputGroups, \"model.image_ref\");\n $base := $m = \"uni-1-max\" ? 0.1 : 0.0404;\n {\"type\":\"usd\",\"usd\": $round($base + 0.003 * $refs, 4)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaImageEditNode2": {"input": {"required": {"source": ["IMAGE", {"tooltip": "Source image to edit."}], "prompt": ["STRING", {"tooltip": "Description of the desired edit. 1\u20136000 characters.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for editing.", "options": [{"key": "uni-1", "inputs": {"required": {"style": ["COMBO", {"tooltip": "Style preset. 'auto' picks based on the prompt; 'manga' applies a manga/anime aesthetic and requires a portrait aspect ratio (2:3, 9:16, 1:2, 1:3).", "default": "auto", "multiselect": false, "options": ["auto", "manga"]}], "web_search": ["BOOLEAN", {"tooltip": "Search the web for visual references before generating.", "default": false}]}, "optional": {"image_ref": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 8 reference images for style/content guidance.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}, {"key": "uni-1-max", "inputs": {"required": {"style": ["COMBO", {"tooltip": "Style preset. 'auto' picks based on the prompt; 'manga' applies a manga/anime aesthetic and requires a portrait aspect ratio (2:3, 9:16, 1:2, 1:3).", "default": "auto", "multiselect": false, "options": ["auto", "manga"]}], "web_search": ["BOOLEAN", {"tooltip": "Search the web for visual references before generating.", "default": false}]}, "optional": {"image_ref": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 8 reference images for style/content guidance.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["source", "prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaImageEditNode2", "display_name": "Luma UNI-1 Image Edit", "description": "Edit an existing image with a text prompt using the Luma UNI-1 model.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/image/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": ["model.image_ref"]}, "expr": "\n (\n $m := widgets.model;\n $refs := $lookup(inputGroups, \"model.image_ref\");\n $base := $m = \"uni-1-max\" ? 0.103 : 0.0434;\n {\"type\":\"usd\",\"usd\": $round($base + 0.003 * $refs, 4)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaRay32TextToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the video generation.", "default": "", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4", "21:9"]}], "resolution": ["COMBO", {"default": "720p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "duration": ["COMBO", {"multiselect": false, "options": ["5s", "10s"]}], "loop": ["BOOLEAN", {"tooltip": "Make the video loop seamlessly. Only available with 5s duration.", "default": false}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "aspect_ratio", "resolution", "duration", "loop", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING"], "output_is_list": [false, false], "output_name": ["VIDEO", "generation_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LumaRay32TextToVideoNode", "display_name": "Luma Ray 3.2 Text to Video", "description": "Generate a video from a text prompt using Luma's Ray 3.2 model.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\n \"360p\": {\"5s\": 0.06, \"10s\": 0.18},\n \"540p\": {\"5s\": 0.15, \"10s\": 0.45},\n \"720p\": {\"5s\": 0.3, \"10s\": 0.9},\n \"1080p\": {\"5s\": 1.2, \"10s\": 3.6}\n };\n {\"type\": \"usd\", \"usd\": $lookup($lookup($p, widgets.resolution), widgets.duration)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaRay32ImageToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"default": "720p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "loop": ["BOOLEAN", {"tooltip": "Make the video loop seamlessly. Not available when an end_frame is set.", "default": false}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"start_frame": ["IMAGE", {"tooltip": "First frame of the generated video."}], "end_frame": ["IMAGE", {"tooltip": "Last frame of the generated video."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "resolution", "loop", "seed"], "optional": ["start_frame", "end_frame"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING"], "output_is_list": [false, false], "output_name": ["VIDEO", "generation_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LumaRay32ImageToVideoNode", "display_name": "Luma Ray 3.2 Image to Video", "description": "Generate a video from a start and/or end frame using Luma's Ray 3.2 model. Image-anchored generations are always 5 seconds.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\"360p\": 0.06, \"540p\": 0.15, \"720p\": 0.3, \"1080p\": 1.2};\n {\"type\": \"usd\", \"usd\": $lookup($p, widgets.resolution)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaRay32KeyframeNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Guide image to place at the chosen moment of the output video."}], "position": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "How to place this image on the output video's timeline.", "options": [{"key": "Fraction of duration (0.0-1.0)", "inputs": {"required": {"fraction": ["FLOAT", {"tooltip": "Where in the output video this image applies (0.0 = start, 1.0 = end).", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01, "display": "number"}]}}}, {"key": "Absolute time (seconds)", "inputs": {"required": {"seconds": ["FLOAT", {"tooltip": "Time in seconds from the start of the output video where this image applies.", "default": 0.0, "min": 0.0, "max": 10.0, "step": 0.1, "display": "number"}]}}}]}]}, "optional": {"keyframes": ["LUMA_RAY32_KEYFRAME", {"tooltip": "Optional earlier keyframes to chain with this one."}]}}, "input_order": {"required": ["image", "position"], "optional": ["keyframes"]}, "is_input_list": false, "output": ["LUMA_RAY32_KEYFRAME"], "output_is_list": [false], "output_name": ["keyframes"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaRay32KeyframeNode", "display_name": "Luma Ray 3.2 Keyframe", "description": "Anchor a guide image to a position on the Ray 3.2 output video timeline. Connect this to the 'keyframes' input of the Luma Ray 3.2 Keyframes to Video node; chain several together via the optional 'keyframes' input below.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaRay32KeyframesToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"default": "720p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "duration": ["COMBO", {"multiselect": false, "options": ["5s", "10s"]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "keyframes": ["LUMA_RAY32_KEYFRAME", {"tooltip": "Keyframe sequence from Luma Ray 3.2 Keyframe nodes (at least 2)."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "resolution", "duration", "seed", "keyframes"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING"], "output_is_list": [false, false], "output_name": ["VIDEO", "generation_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LumaRay32KeyframesToVideoNode", "display_name": "Luma Ray 3.2 Keyframes to Video", "description": "Generate a video that interpolates through a sequence of guide images, each anchored to a position on the timeline, using Luma Ray 3.2. Build the sequence with Luma Ray 3.2 Keyframe nodes (at least 2).", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\n \"360p\": {\"5s\": 0.06, \"10s\": 0.18},\n \"540p\": {\"5s\": 0.15, \"10s\": 0.45},\n \"720p\": {\"5s\": 0.3, \"10s\": 0.9},\n \"1080p\": {\"5s\": 1.2, \"10s\": 3.6}\n };\n {\"type\": \"usd\", \"usd\": $lookup($lookup($p, widgets.resolution), widgets.duration)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaRay32VideoEditNode": {"input": {"required": {"video": ["VIDEO", {"tooltip": "Source video to edit. Up to 18 seconds."}], "prompt": ["STRING", {"tooltip": "Describes the desired edit.", "default": "", "multiline": true}], "resolution": ["COMBO", {"default": "720p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "strength": ["COMBO", {"tooltip": "How strongly to preserve vs. reimagine the source. 'auto' lets Ray 3.2 choose; adhere_* preserves the most, flex_* is balanced, reimagine_* changes the most.", "default": "auto", "multiselect": false, "options": ["auto", "adhere_1", "adhere_2", "adhere_3", "flex_1", "flex_2", "flex_3", "reimagine_1", "reimagine_2", "reimagine_3"]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "prompt", "resolution", "strength", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING"], "output_is_list": [false, false], "output_name": ["VIDEO", "generation_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LumaRay32VideoEditNode", "display_name": "Luma Ray 3.2 Video Edit", "description": "Re-render an existing video under a new prompt using Luma Ray 3.2 (restyle, relight, add or remove elements) while keeping the original motion. Source video up to 18 seconds; the edited video keeps the source's length.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\n \"360p\": {\"min\": 0.54, \"max\": 1.08},\n \"540p\": {\"min\": 0.72, \"max\": 1.44},\n \"720p\": {\"min\": 1.08, \"max\": 2.16},\n \"1080p\": {\"min\": 2.16, \"max\": 4.32}\n };\n $r := $lookup($p, widgets.resolution);\n {\"type\": \"range_usd\", \"min_usd\": $r.min, \"max_usd\": $r.max, \"format\": {\"note\": \"(by source length)\"}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaRay32VideoReframeNode": {"input": {"required": {"video": ["VIDEO", {"tooltip": "Source video to reframe. Up to 30 seconds."}], "prompt": ["STRING", {"tooltip": "Describes how the newly exposed canvas areas should be filled.", "default": "", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4", "21:9"]}], "resolution": ["COMBO", {"default": "720p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "prompt", "aspect_ratio", "resolution", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING"], "output_is_list": [false, false], "output_name": ["VIDEO", "generation_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LumaRay32VideoReframeNode", "display_name": "Luma Ray 3.2 Video Reframe", "description": "Change the aspect ratio of an existing video, using Luma Ray 3.2 to fill the newly exposed canvas areas. Source video up to 30 seconds. Billed per second of output.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\"360p\": 0.03, \"540p\": 0.06, \"720p\": 0.12, \"1080p\": 0.36};\n {\"type\": \"usd\", \"usd\": $lookup($p, widgets.resolution), \"format\": {\"suffix\": \"/second\"}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaRay32ExtendVideoNode": {"input": {"required": {"source_generation_id": ["STRING", {"tooltip": "generation_id of the prior Ray 3.2 video to extend. Connect the generation_id output of another Luma Ray 3.2 node.", "default": "", "multiline": false}], "direction": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Forward continues after the prior clip; backward is prepended before it.", "options": [{"key": "Forward (continue after)", "inputs": {"required": {"loop": ["BOOLEAN", {"tooltip": "Loop the extended video seamlessly (forward extend only).", "default": false}]}}}, {"key": "Backward (lead-in before)", "inputs": {"required": {}}}]}], "prompt": ["STRING", {"tooltip": "Text prompt for the new content.", "default": "", "multiline": true}], "resolution": ["COMBO", {"default": "720p", "multiselect": false, "options": ["540p", "720p", "1080p"]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["source_generation_id", "direction", "prompt", "resolution", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING"], "output_is_list": [false, false], "output_name": ["VIDEO", "generation_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LumaRay32ExtendVideoNode", "display_name": "Luma Ray 3.2 Extend Video", "description": "Extend a previous Ray 3.2 generation forward (continue after it) or backward (lead-in before it). Connect the generation_id output of a prior Luma Ray 3.2 node. Extensions are always 5 seconds.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\"360p\": 0.06, \"540p\": 0.15, \"720p\": 0.3, \"1080p\": 1.2};\n {\"type\": \"usd\", \"usd\": $lookup($p, widgets.resolution)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MagnificImageUpscalerCreativeNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"default": "", "multiline": true}], "scale_factor": ["COMBO", {"multiselect": false, "options": ["2x", "4x", "8x", "16x"]}], "optimized_for": ["COMBO", {"multiselect": false, "options": ["standard", "soft_portraits", "hard_portraits", "art_n_illustration", "videogame_assets", "nature_n_landscapes", "films_n_photography", "3d_renders", "science_fiction_n_horror"]}], "creativity": ["INT", {"default": 0, "min": -10, "max": 10, "display": "slider"}], "hdr": ["INT", {"tooltip": "The level of definition and detail.", "default": 0, "min": -10, "max": 10, "display": "slider"}], "resemblance": ["INT", {"tooltip": "The level of resemblance to the original image.", "default": 0, "min": -10, "max": 10, "display": "slider"}], "fractality": ["INT", {"tooltip": "The strength of the prompt and intricacy per square pixel.", "default": 0, "min": -10, "max": 10, "display": "slider"}], "engine": ["COMBO", {"advanced": true, "multiselect": false, "options": ["automatic", "magnific_illusio", "magnific_sharpy", "magnific_sparkle"]}], "auto_downscale": ["BOOLEAN", {"tooltip": "Automatically downscale input image if output would exceed maximum pixel limit.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "scale_factor", "optimized_for", "creativity", "hdr", "resemblance", "fractality", "engine", "auto_downscale"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MagnificImageUpscalerCreativeNode", "display_name": "Magnific Image Upscale (Creative)", "description": "Prompt\u2011guided enhancement, stylization, and 2x/4x/8x/16x upscaling. Maximum output: 25.3 megapixels.", "python_module": "comfy_api_nodes.nodes_magnific", "category": "partner/image/Magnific", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "scale_factor", "type": "COMBO"}, {"name": "auto_downscale", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $ad := widgets.auto_downscale;\n $mins := $ad\n ? {\"2x\": 0.172, \"4x\": 0.343, \"8x\": 0.515, \"16x\": 0.515}\n : {\"2x\": 0.172, \"4x\": 0.343, \"8x\": 0.515, \"16x\": 0.844};\n $maxs := {\"2x\": 0.515, \"4x\": 0.844, \"8x\": 1.015, \"16x\": 1.187};\n {\n \"type\": \"range_usd\",\n \"min_usd\": $lookup($mins, widgets.scale_factor),\n \"max_usd\": $lookup($maxs, widgets.scale_factor),\n \"format\": { \"approximate\": true }\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MagnificImageUpscalerPreciseV2Node": {"input": {"required": {"image": ["IMAGE", {}], "scale_factor": ["COMBO", {"multiselect": false, "options": ["2x", "4x", "8x", "16x"]}], "flavor": ["COMBO", {"tooltip": "Processing style: sublime for general use, photo for photographs, photo_denoiser for noisy photos.", "multiselect": false, "options": ["sublime", "photo", "photo_denoiser"]}], "sharpen": ["INT", {"tooltip": "Image sharpness intensity. Higher values increase edge definition and clarity.", "default": 7, "min": 0, "max": 100, "display": "slider"}], "smart_grain": ["INT", {"tooltip": "Intelligent grain/texture enhancement to prevent the image from looking too smooth or artificial.", "default": 7, "min": 0, "max": 100, "display": "slider"}], "ultra_detail": ["INT", {"tooltip": "Controls fine detail, textures, and micro-details added during upscaling.", "default": 30, "min": 0, "max": 100, "display": "slider"}], "auto_downscale": ["BOOLEAN", {"tooltip": "Automatically downscale input image if output would exceed maximum resolution.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "scale_factor", "flavor", "sharpen", "smart_grain", "ultra_detail", "auto_downscale"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MagnificImageUpscalerPreciseV2Node", "display_name": "Magnific Image Upscale (Precise V2)", "description": "High-fidelity upscaling with fine control over sharpness, grain, and detail. Maximum output: 10060\u00d710060 pixels.", "python_module": "comfy_api_nodes.nodes_magnific", "category": "partner/image/Magnific", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "scale_factor", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $mins := {\"2x\": 0.172, \"4x\": 0.343, \"8x\": 0.515, \"16x\": 0.844};\n $maxs := {\"2x\": 2.045, \"4x\": 2.545, \"8x\": 2.889, \"16x\": 3.06};\n {\n \"type\": \"range_usd\",\n \"min_usd\": $lookup($mins, widgets.scale_factor),\n \"max_usd\": $lookup($maxs, widgets.scale_factor),\n \"format\": { \"approximate\": true }\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MagnificImageStyleTransferNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "The image to apply style transfer to."}], "reference_image": ["IMAGE", {"tooltip": "The reference image to extract style from."}], "prompt": ["STRING", {"default": "", "multiline": true}], "style_strength": ["INT", {"tooltip": "Percentage of style strength.", "default": 100, "min": 0, "max": 100, "display": "slider"}], "structure_strength": ["INT", {"tooltip": "Maintains the structure of the original image.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "flavor": ["COMBO", {"tooltip": "Style transfer flavor.", "multiselect": false, "options": ["faithful", "gen_z", "psychedelia", "detaily", "clear", "donotstyle", "donotstyle_sharp"]}], "engine": ["COMBO", {"tooltip": "Processing engine selection.", "advanced": true, "multiselect": false, "options": ["balanced", "definio", "illusio", "3d_cartoon", "colorful_anime", "caricature", "real", "super_real", "softy"]}], "portrait_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Enable portrait mode for facial enhancements.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "enabled", "inputs": {"required": {"portrait_style": ["COMBO", {"tooltip": "Visual style applied to portrait images.", "multiselect": false, "options": ["standard", "pop", "super_pop"]}], "portrait_beautifier": ["COMBO", {"tooltip": "Facial beautification intensity on portraits.", "multiselect": false, "options": ["none", "beautify_face", "beautify_face_max"]}]}}}]}], "fixed_generation": ["BOOLEAN", {"tooltip": "When disabled, expect each generation to introduce a degree of randomness, leading to more diverse outcomes.", "advanced": true, "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "reference_image", "prompt", "style_strength", "structure_strength", "flavor", "engine", "portrait_mode", "fixed_generation"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MagnificImageStyleTransferNode", "display_name": "Magnific Image Style Transfer", "description": "Transfer the style from a reference image to your input image.", "python_module": "comfy_api_nodes.nodes_magnific", "category": "partner/image/Magnific", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.11}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MagnificImageRelightNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "The image to relight."}], "prompt": ["STRING", {"tooltip": "Descriptive guidance for lighting. Supports emphasis notation (1-1.4).", "default": "", "multiline": true}], "light_transfer_strength": ["INT", {"tooltip": "Intensity of light transfer application.", "default": 100, "min": 0, "max": 100, "display": "slider"}], "style": ["COMBO", {"tooltip": "Stylistic output preference.", "multiselect": false, "options": ["standard", "darker_but_realistic", "clean", "smooth", "brighter", "contrasted_n_hdr", "just_composition"]}], "interpolate_from_original": ["BOOLEAN", {"tooltip": "Restricts generation freedom to match original more closely.", "advanced": true, "default": false}], "change_background": ["BOOLEAN", {"tooltip": "Modifies background based on prompt/reference.", "advanced": true, "default": true}], "preserve_details": ["BOOLEAN", {"tooltip": "Maintains texture and fine details from original.", "advanced": true, "default": true}], "advanced_settings": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Fine-tuning options for advanced lighting control.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "enabled", "inputs": {"required": {"whites": ["INT", {"tooltip": "Adjusts the brightest tones in the image.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "blacks": ["INT", {"tooltip": "Adjusts the darkest tones in the image.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "brightness": ["INT", {"tooltip": "Overall brightness adjustment.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "contrast": ["INT", {"tooltip": "Contrast adjustment.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "saturation": ["INT", {"tooltip": "Color saturation adjustment.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "engine": ["COMBO", {"tooltip": "Processing engine selection.", "multiselect": false, "options": ["automatic", "balanced", "cool", "real", "illusio", "fairy", "colorful_anime", "hard_transform", "softy"]}], "transfer_light_a": ["COMBO", {"tooltip": "The intensity of light transfer.", "multiselect": false, "options": ["automatic", "low", "medium", "normal", "high", "high_on_faces"]}], "transfer_light_b": ["COMBO", {"tooltip": "Also modifies light transfer intensity. Can be combined with the previous control for varied effects.", "multiselect": false, "options": ["automatic", "composition", "straight", "smooth_in", "smooth_out", "smooth_both", "reverse_both", "soft_in", "soft_out", "soft_mid", "style_shift", "strong_shift"]}], "fixed_generation": ["BOOLEAN", {"tooltip": "Ensures consistent output with the same settings.", "default": true}]}}}]}]}, "optional": {"reference_image": ["IMAGE", {"tooltip": "Optional reference image to transfer lighting from."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "light_transfer_strength", "style", "interpolate_from_original", "change_background", "preserve_details", "advanced_settings"], "optional": ["reference_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MagnificImageRelightNode", "display_name": "Magnific Image Relight", "description": "Relight an image with lighting adjustments and optional reference-based light transfer.", "python_module": "comfy_api_nodes.nodes_magnific", "category": "partner/image/Magnific", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.11}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MagnificImageSkinEnhancerNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "The portrait image to enhance."}], "sharpen": ["INT", {"tooltip": "Sharpening intensity level.", "default": 0, "min": 0, "max": 100, "display": "slider"}], "smart_grain": ["INT", {"tooltip": "Smart grain intensity level.", "default": 2, "min": 0, "max": 100, "display": "slider"}], "mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Processing mode: creative for artistic enhancement, faithful for preserving original appearance, flexible for targeted optimization.", "options": [{"key": "creative", "inputs": {"required": {}}}, {"key": "faithful", "inputs": {"required": {"skin_detail": ["INT", {"tooltip": "Skin detail enhancement level.", "default": 80, "min": 0, "max": 100, "display": "slider"}]}}}, {"key": "flexible", "inputs": {"required": {"optimized_for": ["COMBO", {"tooltip": "Enhancement optimization target.", "multiselect": false, "options": ["enhance_skin", "improve_lighting", "enhance_everything", "transform_to_real", "no_make_up"]}]}}}]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "sharpen", "smart_grain", "mode"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MagnificImageSkinEnhancerNode", "display_name": "Magnific Image Skin Enhancer", "description": "Skin enhancement for portraits with multiple processing modes.", "python_module": "comfy_api_nodes.nodes_magnific", "category": "partner/image/Magnific", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rates := {\"creative\": 0.29, \"faithful\": 0.37, \"flexible\": 0.45};\n {\"type\":\"usd\",\"usd\": $lookup($rates, widgets.mode)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyTextToModelNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["latest"]}], "prompt": ["STRING", {"default": "", "multiline": true}], "style": ["COMBO", {"multiselect": false, "options": ["realistic", "sculpture"]}], "should_remesh": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "When set to false, returns an unprocessed triangular mesh.", "options": [{"key": "true", "inputs": {"required": {"topology": ["COMBO", {"multiselect": false, "options": ["triangle", "quad"]}], "target_polycount": ["INT", {"default": 300000, "min": 100, "max": 300000, "display": "number"}]}}}, {"key": "false", "inputs": {"required": {}}}]}], "symmetry_mode": ["COMBO", {"advanced": true, "multiselect": false, "options": ["auto", "on", "off"]}], "pose_mode": ["COMBO", {"tooltip": "Specify the pose mode for the generated model.", "advanced": true, "multiselect": false, "options": ["", "A-pose", "T-pose"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "prompt", "style", "should_remesh", "symmetry_mode", "pose_mode", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MESHY_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "meshy_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyTextToModelNode", "display_name": "Meshy: Text to Model", "description": "", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.8}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyRefineNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["latest"]}], "meshy_task_id": ["MESHY_TASK_ID", {}], "enable_pbr": ["BOOLEAN", {"tooltip": "Generate PBR Maps (metallic, roughness, normal) in addition to the base color. Note: this should be set to false when using Sculpture style, as Sculpture style generates its own set of PBR maps.", "advanced": true, "default": false}], "texture_prompt": ["STRING", {"tooltip": "Provide a text prompt to guide the texturing process. Maximum 600 characters. Cannot be used at the same time as 'texture_image'.", "default": "", "multiline": true}]}, "optional": {"texture_image": ["IMAGE", {"tooltip": "Only one of 'texture_image' or 'texture_prompt' may be used at the same time."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "meshy_task_id", "enable_pbr", "texture_prompt"], "optional": ["texture_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MESHY_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "meshy_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyRefineNode", "display_name": "Meshy: Refine Draft Model", "description": "Refine a previously created draft model.", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyImageToModelNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["latest"]}], "image": ["IMAGE", {}], "should_remesh": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "When set to false, returns an unprocessed triangular mesh.", "options": [{"key": "true", "inputs": {"required": {"topology": ["COMBO", {"multiselect": false, "options": ["triangle", "quad"]}], "target_polycount": ["INT", {"default": 300000, "min": 100, "max": 300000, "display": "number"}]}}}, {"key": "false", "inputs": {"required": {}}}]}], "symmetry_mode": ["COMBO", {"multiselect": false, "options": ["auto", "on", "off"]}], "should_texture": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Determines whether textures are generated. Setting it to false skips the texture phase and returns a mesh without textures.", "options": [{"key": "true", "inputs": {"required": {"enable_pbr": ["BOOLEAN", {"tooltip": "Generate PBR Maps (metallic, roughness, normal) in addition to the base color.", "default": false}], "texture_prompt": ["STRING", {"tooltip": "Provide a text prompt to guide the texturing process. Maximum 600 characters. Cannot be used at the same time as 'texture_image'.", "default": "", "multiline": true}]}, "optional": {"texture_image": ["IMAGE", {"tooltip": "Only one of 'texture_image' or 'texture_prompt' may be used at the same time."}]}}}, {"key": "false", "inputs": {"required": {}}}]}], "pose_mode": ["COMBO", {"tooltip": "Specify the pose mode for the generated model.", "advanced": true, "multiselect": false, "options": ["", "A-pose", "T-pose"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "image", "should_remesh", "symmetry_mode", "should_texture", "pose_mode", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MESHY_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "meshy_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyImageToModelNode", "display_name": "Meshy: Image to Model", "description": "", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "should_texture", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\"true\": 1.2, \"false\": 0.8};\n {\"type\":\"usd\",\"usd\": $lookup($prices, widgets.should_texture)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyMultiImageToModelNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["latest"]}], "images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image", "min": 2, "max": 4}}], "should_remesh": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "When set to false, returns an unprocessed triangular mesh.", "options": [{"key": "true", "inputs": {"required": {"topology": ["COMBO", {"multiselect": false, "options": ["triangle", "quad"]}], "target_polycount": ["INT", {"default": 300000, "min": 100, "max": 300000, "display": "number"}]}}}, {"key": "false", "inputs": {"required": {}}}]}], "symmetry_mode": ["COMBO", {"advanced": true, "multiselect": false, "options": ["auto", "on", "off"]}], "should_texture": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Determines whether textures are generated. Setting it to false skips the texture phase and returns a mesh without textures.", "options": [{"key": "true", "inputs": {"required": {"enable_pbr": ["BOOLEAN", {"tooltip": "Generate PBR Maps (metallic, roughness, normal) in addition to the base color.", "default": false}], "texture_prompt": ["STRING", {"tooltip": "Provide a text prompt to guide the texturing process. Maximum 600 characters. Cannot be used at the same time as 'texture_image'.", "default": "", "multiline": true}]}, "optional": {"texture_image": ["IMAGE", {"tooltip": "Only one of 'texture_image' or 'texture_prompt' may be used at the same time."}]}}}, {"key": "false", "inputs": {"required": {}}}]}], "pose_mode": ["COMBO", {"tooltip": "Specify the pose mode for the generated model.", "advanced": true, "multiselect": false, "options": ["", "A-pose", "T-pose"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "images", "should_remesh", "symmetry_mode", "should_texture", "pose_mode", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MESHY_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "meshy_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyMultiImageToModelNode", "display_name": "Meshy: Multi-Image to Model", "description": "", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "should_texture", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\"true\": 0.6, \"false\": 0.2};\n {\"type\":\"usd\",\"usd\": $lookup($prices, widgets.should_texture)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyRigModelNode": {"input": {"required": {"meshy_task_id": ["MESHY_TASK_ID", {}], "height_meters": ["FLOAT", {"tooltip": "The approximate height of the character model in meters. This aids in scaling and rigging accuracy.", "default": 1.7, "min": 0.1, "max": 15.0}]}, "optional": {"texture_image": ["IMAGE", {"tooltip": "The model's UV-unwrapped base color texture image."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["meshy_task_id", "height_meters"], "optional": ["texture_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MESHY_RIGGED_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "rig_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyRigModelNode", "display_name": "Meshy: Rig Model", "description": "Provides a rigged character in standard formats. Auto-rigging is currently not suitable for untextured meshes, non-humanoid assets, or humanoid assets with unclear limb and body structure.", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.2}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyAnimateModelNode": {"input": {"required": {"rig_task_id": ["MESHY_RIGGED_TASK_ID", {}], "action_id": ["INT", {"tooltip": "Visit https://docs.meshy.ai/en/api/animation-library for a list of available values.", "default": 0, "min": 0, "max": 696}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["rig_task_id", "action_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false], "output_name": ["model_file", "GLB", "FBX"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "MeshyAnimateModelNode", "display_name": "Meshy: Animate Model", "description": "Apply a specific animation action to a previously rigged character.", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.12}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyTextureNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["latest"]}], "meshy_task_id": ["MESHY_TASK_ID", {}], "enable_original_uv": ["BOOLEAN", {"tooltip": "Use the original UV of the model instead of generating new UVs. When enabled, Meshy preserves existing textures from the uploaded model. If the model has no original UV, the quality of the output might not be as good.", "advanced": true, "default": true}], "pbr": ["BOOLEAN", {"advanced": true, "default": false}], "text_style_prompt": ["STRING", {"tooltip": "Describe your desired texture style of the object using text. Maximum 600 characters.Maximum 600 characters. Cannot be used at the same time as 'image_style'.", "default": "", "multiline": true}]}, "optional": {"image_style": ["IMAGE", {"tooltip": "A 2d image to guide the texturing process. Can not be used at the same time with 'text_style_prompt'."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "meshy_task_id", "enable_original_uv", "pbr", "text_style_prompt"], "optional": ["image_style"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "meshy_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyTextureNode", "display_name": "Meshy: Texture Model", "description": "", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MinimaxTextToVideoNode": {"input": {"required": {"prompt_text": ["STRING", {"tooltip": "Text prompt to guide the video generation", "default": "", "multiline": true}], "model": ["COMBO", {"tooltip": "Model to use for video generation", "default": "T2V-01", "multiselect": false, "options": ["T2V-01", "T2V-01-Director"]}]}, "optional": {"seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "step": 1, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt_text", "model"], "optional": ["seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "MinimaxTextToVideoNode", "display_name": "MiniMax Text to Video", "description": "Generates videos synchronously based on a prompt, and optional parameters.", "python_module": "comfy_api_nodes.nodes_minimax", "category": "partner/video/MiniMax", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.43}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MinimaxImageToVideoNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Image to use as first frame of video generation"}], "prompt_text": ["STRING", {"tooltip": "Text prompt to guide the video generation", "default": "", "multiline": true}], "model": ["COMBO", {"tooltip": "Model to use for video generation", "default": "I2V-01", "multiselect": false, "options": ["I2V-01-Director", "I2V-01", "I2V-01-live"]}]}, "optional": {"seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "step": 1, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt_text", "model"], "optional": ["seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "MinimaxImageToVideoNode", "display_name": "MiniMax Image to Video", "description": "Generates videos synchronously based on an image and prompt, and optional parameters.", "python_module": "comfy_api_nodes.nodes_minimax", "category": "partner/video/MiniMax", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.43}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MinimaxHailuoVideoNode": {"input": {"required": {"prompt_text": ["STRING", {"tooltip": "Text prompt to guide the video generation.", "default": "", "multiline": true}]}, "optional": {"seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "step": 1, "control_after_generate": true}], "first_frame_image": ["IMAGE", {"tooltip": "Optional image to use as the first frame to generate a video."}], "prompt_optimizer": ["BOOLEAN", {"tooltip": "Optimize prompt to improve generation quality when needed.", "default": true}], "duration": ["COMBO", {"tooltip": "The length of the output video in seconds.", "default": 6, "multiselect": false, "options": [6, 10]}], "resolution": ["COMBO", {"tooltip": "The dimensions of the video display. 1080p is 1920x1080, 768p is 1366x768.", "default": "768P", "multiselect": false, "options": ["768P", "1080P"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt_text"], "optional": ["seed", "first_frame_image", "prompt_optimizer", "duration", "resolution"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "MinimaxHailuoVideoNode", "display_name": "MiniMax Hailuo Video", "description": "Generates videos from prompt, with optional start frame using the new MiniMax Hailuo-02 model.", "python_module": "comfy_api_nodes.nodes_minimax", "category": "partner/video/MiniMax", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"768p\": {\"6\": 0.28, \"10\": 0.56},\n \"1080p\": {\"6\": 0.49}\n };\n $resPrices := $lookup($prices, $lowercase(widgets.resolution));\n $price := $lookup($resPrices, $string(widgets.duration));\n {\"type\":\"usd\",\"usd\": $price ? $price : 0.43}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIDalle2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for DALL\u00b7E", "default": "", "multiline": true}]}, "optional": {"seed": ["INT", {"tooltip": "not implemented yet in backend", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "size": ["COMBO", {"tooltip": "Image size", "default": "1024x1024", "multiselect": false, "options": ["256x256", "512x512", "1024x1024"]}], "n": ["INT", {"tooltip": "How many images to generate", "default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}], "image": ["IMAGE", {"tooltip": "Optional reference image for image editing."}], "mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced)"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt"], "optional": ["seed", "size", "n", "image", "mask"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIDalle2", "display_name": "OpenAI DALL\u00b7E 2", "description": "Generates images synchronously via OpenAI's DALL\u00b7E 2 endpoint.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/image/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "size", "type": "COMBO"}, {"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $size := widgets.size;\n $nRaw := widgets.n;\n $n := ($nRaw != null and $nRaw != 0) ? $nRaw : 1;\n\n $base :=\n $contains($size, \"256x256\") ? 0.016 :\n $contains($size, \"512x512\") ? 0.018 :\n 0.02;\n\n {\"type\":\"usd\",\"usd\": $round($base * $n, 3)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIDalle3": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for DALL\u00b7E", "default": "", "multiline": true}]}, "optional": {"seed": ["INT", {"tooltip": "not implemented yet in backend", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "quality": ["COMBO", {"tooltip": "Image quality", "default": "standard", "multiselect": false, "options": ["standard", "hd"]}], "style": ["COMBO", {"tooltip": "Vivid causes the model to lean towards generating hyper-real and dramatic images. Natural causes the model to produce more natural, less hyper-real looking images.", "default": "natural", "multiselect": false, "options": ["natural", "vivid"]}], "size": ["COMBO", {"tooltip": "Image size", "default": "1024x1024", "multiselect": false, "options": ["1024x1024", "1024x1792", "1792x1024"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt"], "optional": ["seed", "quality", "style", "size"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIDalle3", "display_name": "OpenAI DALL\u00b7E 3", "description": "Generates images synchronously via OpenAI's DALL\u00b7E 3 endpoint.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/image/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "size", "type": "COMBO"}, {"name": "quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $size := widgets.size;\n $q := widgets.quality;\n $hd := $contains($q, \"hd\");\n\n $price :=\n $contains($size, \"1024x1024\")\n ? ($hd ? 0.08 : 0.04)\n : (($contains($size, \"1792x1024\") or $contains($size, \"1024x1792\"))\n ? ($hd ? 0.12 : 0.08)\n : 0.04);\n\n {\"type\":\"usd\",\"usd\": $price}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIGPTImage1": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for GPT Image", "default": "", "multiline": true}]}, "optional": {"seed": ["INT", {"tooltip": "not implemented yet in backend", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "quality": ["COMBO", {"tooltip": "Image quality, affects cost and generation time.", "default": "low", "multiselect": false, "options": ["low", "medium", "high"]}], "background": ["COMBO", {"tooltip": "Return image with or without background", "default": "auto", "multiselect": false, "options": ["auto", "opaque", "transparent"]}], "size": ["COMBO", {"tooltip": "Image size. Select 'Custom' to use the custom width and height (GPT Image 2 only).", "default": "auto", "multiselect": false, "options": ["auto", "1024x1024", "1024x1536", "1536x1024", "2048x2048", "2048x1152", "1152x2048", "3840x2160", "2160x3840", "Custom"]}], "n": ["INT", {"tooltip": "How many images to generate", "default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}], "image": ["IMAGE", {"tooltip": "Optional reference image for image editing."}], "mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced)"}], "model": ["COMBO", {"default": "gpt-image-2", "multiselect": false, "options": ["gpt-image-1", "gpt-image-1.5", "gpt-image-2"]}], "custom_width": ["INT", {"tooltip": "Used only when `size` is 'Custom'. Must be a multiple of 16 (GPT Image 2 only).", "default": 1024, "min": 1024, "max": 3840, "step": 16}], "custom_height": ["INT", {"tooltip": "Used only when `size` is 'Custom'. Must be a multiple of 16 (GPT Image 2 only).", "default": 1024, "min": 1024, "max": 3840, "step": 16}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt"], "optional": ["seed", "quality", "background", "size", "n", "image", "mask", "model", "custom_width", "custom_height"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIGPTImage1", "display_name": "OpenAI GPT Image 2", "description": "Generates images synchronously via OpenAI's GPT Image endpoint.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/image/OpenAI", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "quality", "type": "COMBO"}, {"name": "n", "type": "INT"}, {"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $ranges := {\n \"gpt-image-1\": {\n \"low\": [0.011, 0.02],\n \"medium\": [0.042, 0.07],\n \"high\": [0.167, 0.25]\n },\n \"gpt-image-1.5\": {\n \"low\": [0.009, 0.02],\n \"medium\": [0.034, 0.062],\n \"high\": [0.133, 0.22]\n },\n \"gpt-image-2\": {\n \"low\": [0.0048, 0.019],\n \"medium\": [0.041, 0.168],\n \"high\": [0.165, 0.67]\n }\n };\n $range := $lookup($lookup($ranges, widgets.model), widgets.quality);\n $nRaw := widgets.n;\n $n := ($nRaw != null and $nRaw != 0) ? $nRaw : 1;\n ($n = 1)\n ? {\"type\":\"range_usd\",\"min_usd\": $range[0], \"max_usd\": $range[1], \"format\": {\"approximate\": true}}\n : {\n \"type\":\"range_usd\",\n \"min_usd\": $range[0] * $n,\n \"max_usd\": $range[1] * $n,\n \"format\": { \"suffix\": \"/Run\", \"approximate\": true }\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIGPTImageNodeV2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for GPT Image", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "gpt-image-2", "inputs": {"required": {"size": ["COMBO", {"tooltip": "Image size. Select 'Custom' to use the custom width and height.", "default": "auto", "multiselect": false, "options": ["auto", "1024x1024", "1024x1536", "1536x1024", "2048x2048", "2048x1152", "1152x2048", "3840x2160", "2160x3840", "Custom"]}], "custom_width": ["INT", {"tooltip": "Used only when `size` is 'Custom'. Must be a multiple of 16.", "default": 1024, "min": 1024, "max": 3840, "step": 16}], "custom_height": ["INT", {"tooltip": "Used only when `size` is 'Custom'. Must be a multiple of 16.", "default": 1024, "min": 1024, "max": 3840, "step": 16}], "background": ["COMBO", {"tooltip": "Return image with or without background.", "default": "auto", "multiselect": false, "options": ["auto", "opaque"]}], "quality": ["COMBO", {"tooltip": "Image quality, affects cost and generation time.", "default": "low", "multiselect": false, "options": ["low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image editing. Up to 16 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16"], "min": 0}}]}, "optional": {"mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced). Requires exactly one reference image."}]}}}, {"key": "gpt-image-1.5", "inputs": {"required": {"size": ["COMBO", {"tooltip": "Image size.", "default": "auto", "multiselect": false, "options": ["auto", "1024x1024", "1024x1536", "1536x1024"]}], "background": ["COMBO", {"tooltip": "Return image with or without background.", "default": "auto", "multiselect": false, "options": ["auto", "opaque", "transparent"]}], "quality": ["COMBO", {"tooltip": "Image quality, affects cost and generation time.", "default": "low", "multiselect": false, "options": ["low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image editing. Up to 16 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16"], "min": 0}}]}, "optional": {"mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced). Requires exactly one reference image."}]}}}, {"key": "gpt-image-1", "inputs": {"required": {"size": ["COMBO", {"tooltip": "Image size.", "default": "auto", "multiselect": false, "options": ["auto", "1024x1024", "1024x1536", "1536x1024"]}], "background": ["COMBO", {"tooltip": "Return image with or without background.", "default": "auto", "multiselect": false, "options": ["auto", "opaque", "transparent"]}], "quality": ["COMBO", {"tooltip": "Image quality, affects cost and generation time.", "default": "low", "multiselect": false, "options": ["low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image editing. Up to 16 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16"], "min": 0}}]}, "optional": {"mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced). Requires exactly one reference image."}]}}}]}], "n": ["INT", {"tooltip": "How many images to generate", "default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "not implemented yet in backend", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "n", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIGPTImageNodeV2", "display_name": "OpenAI GPT Image 2", "description": "Generates images via OpenAI's GPT Image endpoint.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/image/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.quality", "type": "COMBO"}, {"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $ranges := {\n \"gpt-image-1\": {\n \"low\": [0.011, 0.02],\n \"medium\": [0.042, 0.07],\n \"high\": [0.167, 0.25]\n },\n \"gpt-image-1.5\": {\n \"low\": [0.009, 0.02],\n \"medium\": [0.034, 0.062],\n \"high\": [0.133, 0.22]\n },\n \"gpt-image-2\": {\n \"low\": [0.0048, 0.019],\n \"medium\": [0.041, 0.168],\n \"high\": [0.165, 0.67]\n }\n };\n $range := $lookup($lookup($ranges, widgets.model), $lookup(widgets, \"model.quality\"));\n $nRaw := widgets.n;\n $n := ($nRaw != null and $nRaw != 0) ? $nRaw : 1;\n ($n = 1)\n ? {\"type\":\"range_usd\",\"min_usd\": $range[0], \"max_usd\": $range[1], \"format\": {\"approximate\": true}}\n : {\n \"type\":\"range_usd\",\n \"min_usd\": $range[0] * $n,\n \"max_usd\": $range[1] * $n,\n \"format\": { \"suffix\": \"/Run\", \"approximate\": true }\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIChatNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text inputs to the model, used to generate a response.", "default": "", "multiline": true}], "persist_context": ["BOOLEAN", {"tooltip": "This parameter is deprecated and has no effect.", "advanced": true, "default": false}], "model": ["COMBO", {"tooltip": "The model used to generate the response", "multiselect": false, "options": ["gpt-5.5-pro", "gpt-5.5", "gpt-5", "gpt-5-mini", "gpt-5-nano", "gpt-4.1", "gpt-4.1-mini", "gpt-4.1-nano", "o4-mini", "o3", "o1-pro", "o1"]}]}, "optional": {"images": ["IMAGE", {"tooltip": "Optional image(s) to use as context for the model. To include multiple images, you can use the Batch Images node."}], "files": ["OPENAI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the OpenAI Chat Input Files node."}], "advanced_options": ["OPENAI_CHAT_CONFIG", {"tooltip": "Optional configuration for the model. Accepts inputs from the OpenAI Chat Advanced Options node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "persist_context", "model"], "optional": ["images", "files", "advanced_options"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIChatNode", "display_name": "OpenAI ChatGPT", "description": "Generate text responses from an OpenAI model.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/text/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $contains($m, \"o4-mini\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.0011, 0.0044],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"o1-pro\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.15, 0.6],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"o1\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.015, 0.06],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"o3-mini\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.0011, 0.0044],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"o3\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.01, 0.04],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-4.1-nano\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.0001, 0.0004],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-4.1-mini\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.0004, 0.0016],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-4.1\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.002, 0.008],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-5.5-pro\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.03, 0.18],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-5.5\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.005, 0.03],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-5-nano\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.00005, 0.0004],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-5-mini\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.00025, 0.002],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-5\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.00125, 0.01],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : {\"type\": \"text\", \"text\": \"Token-based\"}\n )\n "}, "search_aliases": null, "essentials_category": "Text Generation", "has_intermediate_output": false}, "OpenAIInputFiles": {"input": {"required": {"file": ["COMBO", {"tooltip": "Input files to include as context for the model. Only accepts text (.txt) and PDF (.pdf) files for now.", "multiselect": false, "options": []}]}, "optional": {"OPENAI_INPUT_FILES": ["OPENAI_INPUT_FILES", {"tooltip": "An optional additional file(s) to batch together with the file loaded from this node. Allows chaining of input files so that a single message can include multiple input files."}]}}, "input_order": {"required": ["file"], "optional": ["OPENAI_INPUT_FILES"]}, "is_input_list": false, "output": ["OPENAI_INPUT_FILES"], "output_is_list": [false], "output_name": ["OPENAI_INPUT_FILES"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIInputFiles", "display_name": "OpenAI ChatGPT Input Files", "description": "Loads and prepares input files (text, pdf, etc.) to include as inputs for the OpenAI Chat Node. The files will be read by the OpenAI model when generating a response. \ud83d\udec8 TIP: Can be chained together with other OpenAI Input File nodes.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/text/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIChatConfig": {"input": {"required": {"truncation": ["COMBO", {"tooltip": "The truncation strategy to use for the model response. auto: If the context of this response and previous ones exceeds the model's context window size, the model will truncate the response to fit the context window by dropping input items in the middle of the conversation.disabled: If a model response will exceed the context window size for a model, the request will fail with a 400 error", "advanced": true, "default": "auto", "multiselect": false, "options": ["auto", "disabled"]}]}, "optional": {"max_output_tokens": ["INT", {"tooltip": "An upper bound for the number of tokens that can be generated for a response, including visible output tokens", "advanced": true, "default": 4096, "min": 16, "max": 16384}], "instructions": ["STRING", {"tooltip": "Instructions for the model on how to generate the response", "multiline": true}]}}, "input_order": {"required": ["truncation"], "optional": ["max_output_tokens", "instructions"]}, "is_input_list": false, "output": ["OPENAI_CHAT_CONFIG"], "output_is_list": [false], "output_name": ["OPENAI_CHAT_CONFIG"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIChatConfig", "display_name": "OpenAI ChatGPT Advanced Options", "description": "Allows specifying advanced configuration options for the OpenAI Chat Nodes.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/text/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenRouterLLMNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text input to the model.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The OpenRouter model used to generate the response.", "options": [{"key": "anthropic/claude-opus-4.7", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}}}, {"key": "openai/gpt-5.5-pro", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}}}, {"key": "openai/gpt-5.5", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}}}, {"key": "google/gemini-3.5-flash", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference video(s) \u2014 up to 4. Sent as URLs.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}]}}}, {"key": "x-ai/grok-4.20", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}}}, {"key": "x-ai/grok-4.3", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}}}, {"key": "deepseek/deepseek-v4-pro", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "deepseek/deepseek-v4-flash", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "deepseek/deepseek-v3.2", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "qwen/qwen3.6-max-preview", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "qwen/qwen3.6-plus", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 10. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference video(s) \u2014 up to 4. Sent as URLs.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}]}}}, {"key": "qwen/qwen3.6-flash", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 10. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference video(s) \u2014 up to 4. Sent as URLs.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}]}}}, {"key": "mistralai/mistral-large-2512", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 8. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}, {"key": "mistralai/mistral-medium-3-5", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 8. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}, {"key": "z-ai/glm-4.6", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "z-ai/glm-5", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "moonshotai/kimi-k2.6", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 10. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 0}}]}}}, {"key": "moonshotai/kimi-k2-thinking", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "perplexity/sonar-pro", "inputs": {"required": {"search_context_size": ["COMBO", {"tooltip": "How much web search context to retrieve. Larger = more grounded but slower/pricier.", "advanced": true, "default": "medium", "multiselect": false, "options": ["low", "medium", "high"]}]}}}, {"key": "perplexity/sonar-reasoning-pro", "inputs": {"required": {"search_context_size": ["COMBO", {"tooltip": "How much web search context to retrieve. Larger = more grounded but slower/pricier.", "advanced": true, "default": "medium", "multiselect": false, "options": ["low", "medium", "high"]}], "reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "perplexity/sonar-deep-research", "inputs": {"required": {"search_context_size": ["COMBO", {"tooltip": "How much web search context to retrieve. Larger = more grounded but slower/pricier.", "advanced": true, "default": "medium", "multiselect": false, "options": ["low", "medium", "high"]}], "reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}]}], "seed": ["INT", {"tooltip": "Seed for sampling. Set to 0 to omit. Most models treat this as a hint only.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate the model's behavior.", "advanced": true, "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "optional": ["system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenRouterLLMNode", "display_name": "OpenRouter LLM", "description": "Generate text responses through OpenRouter. Routes to a curated set of popular models from xAI, DeepSeek, Qwen, Mistral, Z.AI (GLM), Moonshot (Kimi), and Perplexity Sonar.", "python_module": "comfy_api_nodes.nodes_openrouter", "category": "partner/text/OpenRouter", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "(\n $rates := {\n \"anthropic/claude-opus-4.7\": [0.005, 0.025],\n \"openai/gpt-5.5-pro\": [0.03, 0.18],\n \"openai/gpt-5.5\": [0.005, 0.03],\n \"google/gemini-3.5-flash\": [0.0015, 0.009],\n \"x-ai/grok-4.20\": [0.00125, 0.0025],\n \"x-ai/grok-4.3\": [0.00125, 0.0025],\n \"deepseek/deepseek-v4-pro\": [0.000435, 0.00087],\n \"deepseek/deepseek-v4-flash\": [0.000112, 0.000224],\n \"deepseek/deepseek-v3.2\": [0.000252, 0.000378],\n \"qwen/qwen3.6-max-preview\": [0.00104, 0.00624],\n \"qwen/qwen3.6-plus\": [0.000325, 0.00195],\n \"qwen/qwen3.6-flash\": [0.0001875, 0.001125],\n \"mistralai/mistral-large-2512\": [0.0005, 0.0015],\n \"mistralai/mistral-medium-3-5\": [0.0015, 0.0075],\n \"z-ai/glm-4.6\": [0.00043, 0.00174],\n \"z-ai/glm-5\": [0.0006, 0.00192],\n \"moonshotai/kimi-k2.6\": [0.00073, 0.00349],\n \"moonshotai/kimi-k2-thinking\": [0.0006, 0.0025],\n \"perplexity/sonar-pro\": [0.003, 0.015],\n \"perplexity/sonar-reasoning-pro\": [0.002, 0.008],\n \"perplexity/sonar-deep-research\": [0.002, 0.008]\n };\n $r := $lookup($rates, widgets.model);\n $r ? {\n \"type\": \"list_usd\",\n \"usd\": $r,\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n } : {\"type\": \"text\", \"text\": \"Token-based\"}\n)"}, "search_aliases": null, "essentials_category": "Text Generation", "has_intermediate_output": false}, "PixverseTextToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the video generation", "default": "", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16"]}], "quality": ["COMBO", {"default": "540p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "duration_seconds": ["COMBO", {"multiselect": false, "options": [5, 8]}], "motion_mode": ["COMBO", {"multiselect": false, "options": ["normal", "fast"]}], "seed": ["INT", {"tooltip": "Seed for video generation.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "multiline": true}], "pixverse_template": ["PIXVERSE_TEMPLATE", {"tooltip": "An optional template to influence style of generation, created by the PixVerse Template node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "aspect_ratio", "quality", "duration_seconds", "motion_mode", "seed"], "optional": ["negative_prompt", "pixverse_template"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "PixverseTextToVideoNode", "display_name": "PixVerse Text to Video", "description": "Generates videos based on prompt and output_size.", "python_module": "comfy_api_nodes.nodes_pixverse", "category": "partner/video/PixVerse", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration_seconds", "type": "COMBO"}, {"name": "quality", "type": "COMBO"}, {"name": "motion_mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"5\": {\n \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"720p\": {\"normal\": 0.6, \"fast\": 1.2},\n \"540p\": {\"normal\": 0.45, \"fast\": 0.9},\n \"360p\": {\"normal\": 0.45, \"fast\": 0.9}\n },\n \"8\": {\n \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"720p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"540p\": {\"normal\": 0.9, \"fast\": 1.2},\n \"360p\": {\"normal\": 0.9, \"fast\": 1.2}\n }\n };\n $durPrices := $lookup($prices, $string(widgets.duration_seconds));\n $qualityPrices := $lookup($durPrices, widgets.quality);\n $price := $lookup($qualityPrices, widgets.motion_mode);\n {\"type\":\"usd\",\"usd\": $price ? $price : 0.9}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PixverseImageToVideoNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the video generation", "default": "", "multiline": true}], "quality": ["COMBO", {"default": "540p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "duration_seconds": ["COMBO", {"multiselect": false, "options": [5, 8]}], "motion_mode": ["COMBO", {"multiselect": false, "options": ["normal", "fast"]}], "seed": ["INT", {"tooltip": "Seed for video generation.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "multiline": true}], "pixverse_template": ["PIXVERSE_TEMPLATE", {"tooltip": "An optional template to influence style of generation, created by the PixVerse Template node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "quality", "duration_seconds", "motion_mode", "seed"], "optional": ["negative_prompt", "pixverse_template"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "PixverseImageToVideoNode", "display_name": "PixVerse Image to Video", "description": "Generates videos based on prompt and output_size.", "python_module": "comfy_api_nodes.nodes_pixverse", "category": "partner/video/PixVerse", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration_seconds", "type": "COMBO"}, {"name": "quality", "type": "COMBO"}, {"name": "motion_mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"5\": {\n \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"720p\": {\"normal\": 0.6, \"fast\": 1.2},\n \"540p\": {\"normal\": 0.45, \"fast\": 0.9},\n \"360p\": {\"normal\": 0.45, \"fast\": 0.9}\n },\n \"8\": {\n \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"720p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"540p\": {\"normal\": 0.9, \"fast\": 1.2},\n \"360p\": {\"normal\": 0.9, \"fast\": 1.2}\n }\n };\n $durPrices := $lookup($prices, $string(widgets.duration_seconds));\n $qualityPrices := $lookup($durPrices, widgets.quality);\n $price := $lookup($qualityPrices, widgets.motion_mode);\n {\"type\":\"usd\",\"usd\": $price ? $price : 0.9}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PixverseTransitionVideoNode": {"input": {"required": {"first_frame": ["IMAGE", {}], "last_frame": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the video generation", "default": "", "multiline": true}], "quality": ["COMBO", {"default": "540p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "duration_seconds": ["COMBO", {"multiselect": false, "options": [5, 8]}], "motion_mode": ["COMBO", {"multiselect": false, "options": ["normal", "fast"]}], "seed": ["INT", {"tooltip": "Seed for video generation.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["first_frame", "last_frame", "prompt", "quality", "duration_seconds", "motion_mode", "seed"], "optional": ["negative_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "PixverseTransitionVideoNode", "display_name": "PixVerse Transition Video", "description": "Generates videos based on prompt and output_size.", "python_module": "comfy_api_nodes.nodes_pixverse", "category": "partner/video/PixVerse", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration_seconds", "type": "COMBO"}, {"name": "quality", "type": "COMBO"}, {"name": "motion_mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"5\": {\n \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"720p\": {\"normal\": 0.6, \"fast\": 1.2},\n \"540p\": {\"normal\": 0.45, \"fast\": 0.9},\n \"360p\": {\"normal\": 0.45, \"fast\": 0.9}\n },\n \"8\": {\n \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"720p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"540p\": {\"normal\": 0.9, \"fast\": 1.2},\n \"360p\": {\"normal\": 0.9, \"fast\": 1.2}\n }\n };\n $durPrices := $lookup($prices, $string(widgets.duration_seconds));\n $qualityPrices := $lookup($durPrices, widgets.quality);\n $price := $lookup($qualityPrices, widgets.motion_mode);\n {\"type\":\"usd\",\"usd\": $price ? $price : 0.9}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PixverseTemplateNode": {"input": {"required": {"template": ["COMBO", {"multiselect": false, "options": ["Microwave", "Suit Swagger", "Anything, Robot", "Subject 3 Fever", "kiss kiss"]}]}}, "input_order": {"required": ["template"]}, "is_input_list": false, "output": ["PIXVERSE_TEMPLATE"], "output_is_list": [false], "output_name": ["pixverse_template"], "output_tooltips": [null], "output_matchtypes": null, "name": "PixverseTemplateNode", "display_name": "PixVerse Template", "description": "", "python_module": "comfy_api_nodes.nodes_pixverse", "category": "partner/video/PixVerse", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "QuiverTextToSVGNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the desired SVG output.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for SVG generation.", "options": [{"key": "arrow-1.1", "inputs": {"required": {"temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}, {"key": "arrow-1.1-max", "inputs": {"required": {"temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}, {"key": "arrow-preview", "inputs": {"required": {"temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"instructions": ["STRING", {"tooltip": "Additional style or formatting guidance.", "advanced": true, "default": "", "multiline": true}], "reference_images": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 4 reference images to guide the generation.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "ref_", "min": 0, "max": 4}}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "optional": ["instructions", "reference_images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["SVG"], "output_is_list": [false], "output_name": ["SVG"], "output_tooltips": [null], "output_matchtypes": null, "name": "QuiverTextToSVGNode", "display_name": "Quiver Text to SVG", "description": "Generate an SVG from a text prompt using Quiver AI.", "python_module": "comfy_api_nodes.nodes_quiver", "category": "partner/image/Quiver", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $contains(widgets.model, \"max\")\n ? {\"type\":\"usd\",\"usd\":0.3575}\n : $contains(widgets.model, \"preview\")\n ? {\"type\":\"usd\",\"usd\":0.429}\n : {\"type\":\"usd\",\"usd\":0.286}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "QuiverImageToSVGNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Input image to vectorize."}], "auto_crop": ["BOOLEAN", {"tooltip": "Automatically crop to the dominant subject.", "advanced": true, "default": false}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for SVG vectorization.", "options": [{"key": "arrow-1.1", "inputs": {"required": {"target_size": ["INT", {"tooltip": "Square resize target in pixels.", "advanced": true, "default": 1024, "min": 128, "max": 4096}], "temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}, {"key": "arrow-1.1-max", "inputs": {"required": {"target_size": ["INT", {"tooltip": "Square resize target in pixels.", "advanced": true, "default": 1024, "min": 128, "max": 4096}], "temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}, {"key": "arrow-preview", "inputs": {"required": {"target_size": ["INT", {"tooltip": "Square resize target in pixels.", "advanced": true, "default": 1024, "min": 128, "max": 4096}], "temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "auto_crop", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["SVG"], "output_is_list": [false], "output_name": ["SVG"], "output_tooltips": [null], "output_matchtypes": null, "name": "QuiverImageToSVGNode", "display_name": "Quiver Image to SVG", "description": "Vectorize a raster image into SVG using Quiver AI.", "python_module": "comfy_api_nodes.nodes_quiver", "category": "partner/image/Quiver", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $contains(widgets.model, \"max\")\n ? {\"type\":\"usd\",\"usd\":0.3575}\n : $contains(widgets.model, \"preview\")\n ? {\"type\":\"usd\",\"usd\":0.429}\n : {\"type\":\"usd\",\"usd\":0.286}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftTextToImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation.", "default": "", "multiline": true}], "size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "1024x1024", "multiselect": false, "options": ["1024x1024", "1365x1024", "1024x1365", "1536x1024", "1024x1536", "1820x1024", "1024x1820", "1024x2048", "2048x1024", "1434x1024", "1024x1434", "1024x1280", "1280x1024", "1024x1707", "1707x1024"]}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_style": ["RECRAFT_V3_STYLE", {}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "forceInput": true, "multiline": false}], "recraft_controls": ["RECRAFT_CONTROLS", {"tooltip": "Optional additional controls over the generation via the Recraft Controls node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "size", "n", "seed"], "optional": ["recraft_style", "negative_prompt", "recraft_controls"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftTextToImageNode", "display_name": "Recraft Text to Image", "description": "Generates images synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": $round(0.04 * widgets.n, 2)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftImageToImageNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation.", "default": "", "multiline": true}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "strength": ["FLOAT", {"tooltip": "Defines the difference with the original image, should lie in [0, 1], where 0 means almost identical, and 1 means miserable similarity.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_style": ["RECRAFT_V3_STYLE", {}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "forceInput": true, "multiline": false}], "recraft_controls": ["RECRAFT_CONTROLS", {"tooltip": "Optional additional controls over the generation via the Recraft Controls node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "n", "strength", "seed"], "optional": ["recraft_style", "negative_prompt", "recraft_controls"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftImageToImageNode", "display_name": "Recraft Image to Image", "description": "Modify image based on prompt and strength.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": $round(0.04 * widgets.n, 2)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftImageInpaintingNode": {"input": {"required": {"image": ["IMAGE", {}], "mask": ["MASK", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation.", "default": "", "multiline": true}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_style": ["RECRAFT_V3_STYLE", {}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "forceInput": true, "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "mask", "prompt", "n", "seed"], "optional": ["recraft_style", "negative_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftImageInpaintingNode", "display_name": "Recraft Image Inpainting", "description": "Modify image based on prompt and mask.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": $round(0.04 * widgets.n, 2)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftTextToVectorNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation.", "default": "", "multiline": true}], "substyle": ["COMBO", {"multiselect": false, "options": ["None", "bold_stroke", "chemistry", "colored_stencil", "contour_pop_art", "cosmics", "cutout", "depressive", "editorial", "emotional_flat", "engraving", "infographical", "line_art", "line_circuit", "linocut", "marker_outline", "mosaic", "naivector", "roundish_flat", "seamless", "segmented_colors", "sharp_contrast", "thin", "vector_photo", "vivid_shapes"]}], "size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "1024x1024", "multiselect": false, "options": ["1024x1024", "1365x1024", "1024x1365", "1536x1024", "1024x1536", "1820x1024", "1024x1820", "1024x2048", "2048x1024", "1434x1024", "1024x1434", "1024x1280", "1280x1024", "1024x1707", "1707x1024"]}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "forceInput": true, "multiline": false}], "recraft_controls": ["RECRAFT_CONTROLS", {"tooltip": "Optional additional controls over the generation via the Recraft Controls node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "substyle", "size", "n", "seed"], "optional": ["negative_prompt", "recraft_controls"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["SVG"], "output_is_list": [false], "output_name": ["SVG"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftTextToVectorNode", "display_name": "Recraft Text to Vector", "description": "Generates SVG synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": $round(0.08 * widgets.n, 2)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftVectorizeImageNode": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["SVG"], "output_is_list": [false], "output_name": ["SVG"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftVectorizeImageNode", "display_name": "Recraft Vectorize Image", "description": "Generates SVG synchronously from an input image.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.01}"}, "search_aliases": null, "essentials_category": "Image Tools", "has_intermediate_output": false}, "RecraftRemoveBackgroundNode": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "RecraftRemoveBackgroundNode", "display_name": "Recraft Remove Background", "description": "Remove background from image, and return processed image and mask.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.01}"}, "search_aliases": null, "essentials_category": "Image Tools", "has_intermediate_output": false}, "RecraftReplaceBackgroundNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation.", "default": "", "multiline": true}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_style": ["RECRAFT_V3_STYLE", {}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "forceInput": true, "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "n", "seed"], "optional": ["recraft_style", "negative_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftReplaceBackgroundNode", "display_name": "Recraft Replace Background", "description": "Replace background on image, based on provided prompt.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.04}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftCrispUpscaleNode": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftCrispUpscaleNode", "display_name": "Recraft Crisp Upscale Image", "description": "Upscale image synchronously.\nEnhances a given raster image using \u2018crisp upscale\u2019 tool, increasing image resolution, making the image sharper and cleaner.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.004}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftCreativeUpscaleNode": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftCreativeUpscaleNode", "display_name": "Recraft Creative Upscale Image", "description": "Upscale image synchronously.\nEnhances a given raster image using \u2018creative upscale\u2019 tool, boosting resolution with a focus on refining small details and faces.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.25}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftStyleV3RealisticImage": {"input": {"required": {"substyle": ["COMBO", {"multiselect": false, "options": ["None", "b_and_w", "enterprise", "evening_light", "faded_nostalgia", "forest_life", "hard_flash", "hdr", "motion_blur", "mystic_naturalism", "natural_light", "natural_tones", "organic_calm", "real_life_glow", "retro_realism", "retro_snapshot", "studio_portrait", "urban_drama", "village_realism", "warm_folk"]}]}}, "input_order": {"required": ["substyle"]}, "is_input_list": false, "output": ["RECRAFT_V3_STYLE"], "output_is_list": [false], "output_name": ["recraft_style"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftStyleV3RealisticImage", "display_name": "Recraft Style - Realistic Image", "description": "Select realistic_image style and optional substyle.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftStyleV3DigitalIllustration": {"input": {"required": {"substyle": ["COMBO", {"multiselect": false, "options": ["None", "2d_art_poster", "2d_art_poster_2", "antiquarian", "bold_fantasy", "child_book", "child_books", "cover", "crosshatch", "digital_engraving", "engraving_color", "expressionism", "freehand_details", "grain", "grain_20", "graphic_intensity", "hand_drawn", "hand_drawn_outline", "handmade_3d", "hard_comics", "infantile_sketch", "long_shadow", "modern_folk", "multicolor", "neon_calm", "noir", "nostalgic_pastel", "outline_details", "pastel_gradient", "pastel_sketch", "pixel_art", "plastic", "pop_art", "pop_renaissance", "seamless", "street_art", "tablet_sketch", "urban_glow", "urban_sketching", "vanilla_dreams", "young_adult_book", "young_adult_book_2"]}]}}, "input_order": {"required": ["substyle"]}, "is_input_list": false, "output": ["RECRAFT_V3_STYLE"], "output_is_list": [false], "output_name": ["recraft_style"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftStyleV3DigitalIllustration", "display_name": "Recraft Style - Digital Illustration", "description": "Select realistic_image style and optional substyle.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftStyleV3LogoRaster": {"input": {"required": {"substyle": ["COMBO", {"multiselect": false, "options": ["emblem_graffiti", "emblem_pop_art", "emblem_punk", "emblem_stamp", "emblem_vintage"]}]}}, "input_order": {"required": ["substyle"]}, "is_input_list": false, "output": ["RECRAFT_V3_STYLE"], "output_is_list": [false], "output_name": ["recraft_style"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftStyleV3LogoRaster", "display_name": "Recraft Style - Logo Raster", "description": "Select realistic_image style and optional substyle.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftStyleV3InfiniteStyleLibrary": {"input": {"required": {"style_id": ["STRING", {"tooltip": "UUID of style from Infinite Style Library.", "default": "", "multiline": false}]}}, "input_order": {"required": ["style_id"]}, "is_input_list": false, "output": ["RECRAFT_V3_STYLE"], "output_is_list": [false], "output_name": ["recraft_style"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftStyleV3InfiniteStyleLibrary", "display_name": "Recraft Style - Infinite Style Library", "description": "Choose style based on preexisting UUID from Recraft's Infinite Style Library.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftCreateStyleNode": {"input": {"required": {"style": ["COMBO", {"tooltip": "The base style of the generated images.", "multiselect": false, "options": ["realistic_image", "digital_illustration"]}], "images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image", "min": 1, "max": 5}}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["style", "images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["style_id"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftCreateStyleNode", "display_name": "Recraft Create Style", "description": "Create a custom style from reference images. Upload 1-5 images to use as style references. Total size of all images is limited to 5 MB.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.04}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftColorRGB": {"input": {"required": {"r": ["INT", {"tooltip": "Red value of color.", "default": 0, "min": 0, "max": 255}], "g": ["INT", {"tooltip": "Green value of color.", "default": 0, "min": 0, "max": 255}], "b": ["INT", {"tooltip": "Blue value of color.", "default": 0, "min": 0, "max": 255}]}, "optional": {"recraft_color": ["RECRAFT_COLOR", {}]}}, "input_order": {"required": ["r", "g", "b"], "optional": ["recraft_color"]}, "is_input_list": false, "output": ["RECRAFT_COLOR"], "output_is_list": [false], "output_name": ["recraft_color"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftColorRGB", "display_name": "Recraft Color RGB", "description": "Create Recraft Color by choosing specific RGB values.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftControls": {"input": {"required": {}, "optional": {"colors": ["RECRAFT_COLOR", {}], "background_color": ["RECRAFT_COLOR", {}]}}, "input_order": {"required": [], "optional": ["colors", "background_color"]}, "is_input_list": false, "output": ["RECRAFT_CONTROLS"], "output_is_list": [false], "output_name": ["recraft_controls"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftControls", "display_name": "Recraft Controls", "description": "Create Recraft Controls for customizing Recraft generation.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftV4TextToImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation. Maximum 10,000 characters.", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The model to use for generation.", "options": [{"key": "recraftv4", "inputs": {"required": {"size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "1024x1024", "multiselect": false, "options": ["1024x1024", "1536x768", "768x1536", "1280x832", "832x1280", "1216x896", "896x1216", "1152x896", "896x1152", "832x1344", "1280x896", "896x1280", "1344x768", "768x1344"]}]}}}, {"key": "recraftv4_pro", "inputs": {"required": {"size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "2048x2048", "multiselect": false, "options": ["2048x2048", "3072x1536", "1536x3072", "2560x1664", "1664x2560", "2432x1792", "1792x2432", "2304x1792", "1792x2304", "1664x2688", "1434x1024", "1024x1434", "2560x1792", "1792x2560"]}]}}}]}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_controls": ["RECRAFT_CONTROLS", {"tooltip": "Optional additional controls over the generation via the Recraft Controls node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "negative_prompt", "model", "n", "seed"], "optional": ["recraft_controls"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftV4TextToImageNode", "display_name": "Recraft V4 Text to Image", "description": "Generates images using Recraft V4 or V4 Pro models.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\"recraftv4\": 0.04, \"recraftv4_pro\": 0.25};\n {\"type\":\"usd\",\"usd\": $lookup($prices, widgets.model) * widgets.n}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftV4TextToVectorNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation. Maximum 10,000 characters.", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The model to use for generation.", "options": [{"key": "recraftv4", "inputs": {"required": {"size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "1024x1024", "multiselect": false, "options": ["1024x1024", "1536x768", "768x1536", "1280x832", "832x1280", "1216x896", "896x1216", "1152x896", "896x1152", "832x1344", "1280x896", "896x1280", "1344x768", "768x1344"]}]}}}, {"key": "recraftv4_pro", "inputs": {"required": {"size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "2048x2048", "multiselect": false, "options": ["2048x2048", "3072x1536", "1536x3072", "2560x1664", "1664x2560", "2432x1792", "1792x2432", "2304x1792", "1792x2304", "1664x2688", "1434x1024", "1024x1434", "2560x1792", "1792x2560"]}]}}}]}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_controls": ["RECRAFT_CONTROLS", {"tooltip": "Optional additional controls over the generation via the Recraft Controls node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "negative_prompt", "model", "n", "seed"], "optional": ["recraft_controls"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["SVG"], "output_is_list": [false], "output_name": ["SVG"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftV4TextToVectorNode", "display_name": "Recraft V4 Text to Vector", "description": "Generates SVG using Recraft V4 or V4 Pro models.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\"recraftv4\": 0.08, \"recraftv4_pro\": 0.30};\n {\"type\":\"usd\",\"usd\": $lookup($prices, widgets.model) * widgets.n}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReveImageCreateNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the desired image. Maximum 2560 characters.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model version to use for generation.", "options": [{"key": "reve-create@20250915", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output image.", "multiselect": false, "options": ["3:2", "16:9", "9:16", "2:3", "4:3", "3:4", "1:1"]}], "test_time_scaling": ["INT", {"tooltip": "Higher values produce better images but cost more credits.", "advanced": true, "default": 1, "min": 1, "max": 5, "step": 1}]}}}]}], "upscale": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Upscale the generated image. May add additional cost.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "enabled", "inputs": {"required": {"upscale_factor": ["INT", {"tooltip": "Upscale factor (2x, 3x, or 4x).", "default": 2, "min": 2, "max": 4, "step": 1}]}}}]}], "remove_background": ["BOOLEAN", {"tooltip": "Remove the background from the generated image. May add additional cost.", "default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "upscale", "remove_background", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReveImageCreateNode", "display_name": "Reve Image Create", "description": "Generate images from text descriptions using Reve.", "python_module": "comfy_api_nodes.nodes_reve", "category": "partner/image/Reve", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "upscale", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscale.upscale_factor", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $factor := $lookup(widgets, \"upscale.upscale_factor\");\n $fmt := {\"approximate\": true, \"note\": \"(base)\"};\n widgets.upscale = \"enabled\" ? (\n $factor = 4 ? {\"type\": \"usd\", \"usd\": 0.0762, \"format\": $fmt}\n : $factor = 3 ? {\"type\": \"usd\", \"usd\": 0.0591, \"format\": $fmt}\n : {\"type\": \"usd\", \"usd\": 0.0457, \"format\": $fmt}\n ) : {\"type\": \"usd\", \"usd\": 0.03432, \"format\": $fmt}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReveImageEditNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "The image to edit."}], "edit_instruction": ["STRING", {"tooltip": "Text description of how to edit the image. Maximum 2560 characters.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model version to use for editing.", "options": [{"key": "reve-edit@20250915", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output image.", "multiselect": false, "options": ["auto", "16:9", "9:16", "3:2", "2:3", "4:3", "3:4", "1:1"]}], "test_time_scaling": ["INT", {"tooltip": "Higher values produce better images but cost more credits.", "advanced": true, "default": 1, "min": 1, "max": 5, "step": 1}]}}}, {"key": "reve-edit-fast@20251030", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output image.", "multiselect": false, "options": ["auto", "16:9", "9:16", "3:2", "2:3", "4:3", "3:4", "1:1"]}], "test_time_scaling": ["INT", {"tooltip": "Higher values produce better images but cost more credits.", "advanced": true, "default": 1, "min": 1, "max": 5, "step": 1}]}}}]}], "upscale": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Upscale the generated image. May add additional cost.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "enabled", "inputs": {"required": {"upscale_factor": ["INT", {"tooltip": "Upscale factor (2x, 3x, or 4x).", "default": 2, "min": 2, "max": 4, "step": 1}]}}}]}], "remove_background": ["BOOLEAN", {"tooltip": "Remove the background from the generated image. May add additional cost.", "default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "edit_instruction", "model", "upscale", "remove_background", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReveImageEditNode", "display_name": "Reve Image Edit", "description": "Edit images using natural language instructions with Reve.", "python_module": "comfy_api_nodes.nodes_reve", "category": "partner/image/Reve", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscale", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscale.upscale_factor", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $fmt := {\"approximate\": true, \"note\": \"(base)\"};\n $isFast := $contains(widgets.model, \"fast\");\n $enabled := widgets.upscale = \"enabled\";\n $factor := $lookup(widgets, \"upscale.upscale_factor\");\n $isFast\n ? {\"type\": \"usd\", \"usd\": 0.01001, \"format\": $fmt}\n : $enabled ? (\n $factor = 4 ? {\"type\": \"usd\", \"usd\": 0.0991, \"format\": $fmt}\n : $factor = 3 ? {\"type\": \"usd\", \"usd\": 0.0819, \"format\": $fmt}\n : {\"type\": \"usd\", \"usd\": 0.0686, \"format\": $fmt}\n ) : {\"type\": \"usd\", \"usd\": 0.0572, \"format\": $fmt}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReveImageRemixNode": {"input": {"required": {"reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image_", "min": 1, "max": 6}}], "prompt": ["STRING", {"tooltip": "Text description of the desired image. May include XML img tags to reference specific images by index, e.g.
0,
1, etc.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model version to use for remixing.", "options": [{"key": "reve-remix@20250915", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output image.", "multiselect": false, "options": ["auto", "16:9", "9:16", "3:2", "2:3", "4:3", "3:4", "1:1"]}], "test_time_scaling": ["INT", {"tooltip": "Higher values produce better images but cost more credits.", "advanced": true, "default": 1, "min": 1, "max": 5, "step": 1}]}}}, {"key": "reve-remix-fast@20251030", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output image.", "multiselect": false, "options": ["auto", "16:9", "9:16", "3:2", "2:3", "4:3", "3:4", "1:1"]}], "test_time_scaling": ["INT", {"tooltip": "Higher values produce better images but cost more credits.", "advanced": true, "default": 1, "min": 1, "max": 5, "step": 1}]}}}]}], "upscale": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Upscale the generated image. May add additional cost.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "enabled", "inputs": {"required": {"upscale_factor": ["INT", {"tooltip": "Upscale factor (2x, 3x, or 4x).", "default": 2, "min": 2, "max": 4, "step": 1}]}}}]}], "remove_background": ["BOOLEAN", {"tooltip": "Remove the background from the generated image. May add additional cost.", "default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["reference_images", "prompt", "model", "upscale", "remove_background", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReveImageRemixNode", "display_name": "Reve Image Remix", "description": "Combine reference images with text prompts to create new images using Reve.", "python_module": "comfy_api_nodes.nodes_reve", "category": "partner/image/Reve", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscale", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscale.upscale_factor", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $fmt := {\"approximate\": true, \"note\": \"(base)\"};\n $isFast := $contains(widgets.model, \"fast\");\n $enabled := widgets.upscale = \"enabled\";\n $factor := $lookup(widgets, \"upscale.upscale_factor\");\n $isFast\n ? {\"type\": \"usd\", \"usd\": 0.01001, \"format\": $fmt}\n : $enabled ? (\n $factor = 4 ? {\"type\": \"usd\", \"usd\": 0.0991, \"format\": $fmt}\n : $factor = 3 ? {\"type\": \"usd\", \"usd\": 0.0819, \"format\": $fmt}\n : {\"type\": \"usd\", \"usd\": 0.0686, \"format\": $fmt}\n ) : {\"type\": \"usd\", \"usd\": 0.0572, \"format\": $fmt}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Regular": {"input": {"required": {"Images": ["IMAGE", {}]}, "optional": {"Seed": ["INT", {"default": 0, "min": 0, "max": 65535, "display": "number"}], "Material_Type": ["COMBO", {"default": "PBR", "multiselect": false, "options": ["PBR", "Shaded"]}], "Polygon_count": ["COMBO", {"default": "18K-Quad", "multiselect": false, "options": ["4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "200K-Triangle"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["Images"], "optional": ["Seed", "Material_Type", "Polygon_count"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB"], "output_is_list": [false, false], "output_name": ["3D Model Path", "GLB"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Rodin3D_Regular", "display_name": "Rodin 3D Generate - Regular Generate", "description": "Generate 3D Assets using Rodin API", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Detail": {"input": {"required": {"Images": ["IMAGE", {}]}, "optional": {"Seed": ["INT", {"default": 0, "min": 0, "max": 65535, "display": "number"}], "Material_Type": ["COMBO", {"default": "PBR", "multiselect": false, "options": ["PBR", "Shaded"]}], "Polygon_count": ["COMBO", {"default": "18K-Quad", "multiselect": false, "options": ["4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "200K-Triangle"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["Images"], "optional": ["Seed", "Material_Type", "Polygon_count"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB"], "output_is_list": [false, false], "output_name": ["3D Model Path", "GLB"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Rodin3D_Detail", "display_name": "Rodin 3D Generate - Detail Generate", "description": "Generate 3D Assets using Rodin API", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Smooth": {"input": {"required": {"Images": ["IMAGE", {}]}, "optional": {"Seed": ["INT", {"default": 0, "min": 0, "max": 65535, "display": "number"}], "Material_Type": ["COMBO", {"default": "PBR", "multiselect": false, "options": ["PBR", "Shaded"]}], "Polygon_count": ["COMBO", {"default": "18K-Quad", "multiselect": false, "options": ["4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "200K-Triangle"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["Images"], "optional": ["Seed", "Material_Type", "Polygon_count"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB"], "output_is_list": [false, false], "output_name": ["3D Model Path", "GLB"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Rodin3D_Smooth", "display_name": "Rodin 3D Generate - Smooth Generate", "description": "Generate 3D Assets using Rodin API", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Sketch": {"input": {"required": {"Images": ["IMAGE", {}]}, "optional": {"Seed": ["INT", {"default": 0, "min": 0, "max": 65535, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["Images"], "optional": ["Seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB"], "output_is_list": [false, false], "output_name": ["3D Model Path", "GLB"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Rodin3D_Sketch", "display_name": "Rodin 3D Generate - Sketch Generate", "description": "Generate 3D Assets using Rodin API", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Gen2": {"input": {"required": {"Images": ["IMAGE", {}], "TAPose": ["BOOLEAN", {"advanced": true, "default": false}]}, "optional": {"Seed": ["INT", {"default": 0, "min": 0, "max": 65535, "display": "number"}], "Material_Type": ["COMBO", {"default": "PBR", "multiselect": false, "options": ["PBR", "Shaded"]}], "Polygon_count": ["COMBO", {"default": "500K-Triangle", "multiselect": false, "options": ["4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "2K-Triangle", "20K-Triangle", "150K-Triangle", "500K-Triangle"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["Images", "TAPose"], "optional": ["Seed", "Material_Type", "Polygon_count"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB"], "output_is_list": [false, false], "output_name": ["3D Model Path", "GLB"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Rodin3D_Gen2", "display_name": "Rodin 3D Generate - Gen-2 Generate", "description": "Generate 3D Assets using Rodin API", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Gen25_Image": {"input": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "1-5 images. The first image is used for materials when multi-view.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image", "min": 1, "max": 5}}], "mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generation mode. Regular = balanced. Fast = 1K-20K faces for rapid prototyping. Extreme-High = 20K-2M faces with optional micro details.", "options": [{"key": "Regular", "inputs": {"required": {"tier": ["COMBO", {"tooltip": "Quality tier. Higher tiers produce higher-fidelity geometry.", "default": "Gen-2.5-High", "multiselect": false, "options": ["Gen-2.5-Low", "Gen-2.5-Medium", "Gen-2.5-High"]}], "polygon_count": ["COMBO", {"tooltip": "Preset face count. 'Default' uses the server's default for the selected tier.", "default": "Default", "multiselect": false, "options": ["Default", "4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "2K-Triangle", "20K-Triangle", "150K-Triangle", "500K-Triangle", "1M-Triangle"]}], "creative": ["BOOLEAN", {"tooltip": "Creative mode (Medium/High only). Enhances generative robustness.", "default": false}]}}}, {"key": "Fast", "inputs": {"required": {"tier": ["COMBO", {"default": "Gen-2.5-Low", "multiselect": false, "options": ["Gen-2.5-Extreme-Low", "Gen-2.5-Low", "Gen-2.5-Medium", "Gen-2.5-High"]}], "mesh_faces": ["INT", {"tooltip": "Mesh face count (1K-20K in Fast mode).", "default": 20000, "min": 1000, "max": 20000, "display": "number"}]}}}, {"key": "Extreme-High", "inputs": {"required": {"mesh_mode": ["COMBO", {"default": "Raw", "multiselect": false, "options": ["Raw", "Quad"]}], "mesh_faces": ["INT", {"tooltip": "Mesh face count. Raw mode: 20K-2M. Quad mode: keep under 200K (upstream may reject higher values).", "default": 1000000, "min": 20000, "max": 2000000, "display": "number"}], "is_micro": ["BOOLEAN", {"tooltip": "Enable micro detail (Extreme-High only).", "default": false}], "creative": ["BOOLEAN", {"tooltip": "Creative mode. Enhances generative robustness.", "default": false}]}}}]}], "material": ["COMBO", {"default": "Shaded", "multiselect": false, "options": ["PBR", "Shaded", "All", "None"]}], "geometry_file_format": ["COMBO", {"default": "glb", "multiselect": false, "options": ["glb", "fbx", "obj", "stl"]}]}, "optional": {"texture_mode": ["COMBO", {"tooltip": "Texture quality preset. 'Default' uses the server's default for the selected tier.", "default": "Default", "multiselect": false, "options": ["Default", "legacy", "extreme-low", "low", "medium", "high"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 65535, "control_after_generate": true, "display": "number"}], "TAPose": ["BOOLEAN", {"tooltip": "T/A pose for human-like models.", "advanced": true, "default": false}], "hd_texture": ["BOOLEAN", {"tooltip": "High-quality texture enhancement.", "advanced": true, "default": false}], "texture_delight": ["BOOLEAN", {"tooltip": "Remove baked lighting from textures.", "advanced": true, "default": false}], "use_original_alpha": ["BOOLEAN", {"tooltip": "Preserve image transparency.", "advanced": true, "default": false}], "addon_highpack": ["BOOLEAN", {"tooltip": "HighPack addon: 4K textures and ~16x faces in Quad mode.", "advanced": true, "default": false}], "bbox_width": ["INT", {"tooltip": "Bounding-box width (Y axis). Set to 0 with the others to skip bbox.", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "bbox_height": ["INT", {"tooltip": "Bounding-box height (Z axis).", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "bbox_length": ["INT", {"tooltip": "Bounding-box length (X axis).", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "height_cm": ["INT", {"tooltip": "Approximate model height in centimeters (0 to skip).", "advanced": true, "default": 0, "min": 0, "max": 10000, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["images", "mode", "material", "geometry_file_format"], "optional": ["texture_mode", "seed", "TAPose", "hd_texture", "texture_delight", "use_original_alpha", "addon_highpack", "bbox_width", "bbox_height", "bbox_length", "height_cm"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["FILE_3D"], "output_is_list": [false], "output_name": ["model_file"], "output_tooltips": [null], "output_matchtypes": null, "name": "Rodin3D_Gen25_Image", "display_name": "Rodin 3D Gen-2.5 - Image to 3D", "description": "Generate a 3D model from 1-5 reference images via Rodin Gen-2.5. Pick a mode (Fast / Regular / Extreme-High) to tune quality vs. cost.", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "addon_highpack", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n(\n $baseCredits := widgets.mode = \"extreme-high\" ? 1.0 : 0.5;\n $addonCredits := widgets.addon_highpack ? 1.0 : 0.0;\n $total := ($baseCredits * 1.5) + ($addonCredits * 0.8);\n {\"type\":\"usd\",\"usd\": $total}\n)\n"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Gen25_Text": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the 3D model.", "default": "", "multiline": true}], "mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generation mode. Regular = balanced. Fast = 1K-20K faces for rapid prototyping. Extreme-High = 20K-2M faces with optional micro details.", "options": [{"key": "Regular", "inputs": {"required": {"tier": ["COMBO", {"tooltip": "Quality tier. Higher tiers produce higher-fidelity geometry.", "default": "Gen-2.5-High", "multiselect": false, "options": ["Gen-2.5-Low", "Gen-2.5-Medium", "Gen-2.5-High"]}], "polygon_count": ["COMBO", {"tooltip": "Preset face count. 'Default' uses the server's default for the selected tier.", "default": "Default", "multiselect": false, "options": ["Default", "4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "2K-Triangle", "20K-Triangle", "150K-Triangle", "500K-Triangle", "1M-Triangle"]}], "creative": ["BOOLEAN", {"tooltip": "Creative mode (Medium/High only). Enhances generative robustness.", "default": false}]}}}, {"key": "Fast", "inputs": {"required": {"tier": ["COMBO", {"default": "Gen-2.5-Low", "multiselect": false, "options": ["Gen-2.5-Extreme-Low", "Gen-2.5-Low", "Gen-2.5-Medium", "Gen-2.5-High"]}], "mesh_faces": ["INT", {"tooltip": "Mesh face count (1K-20K in Fast mode).", "default": 20000, "min": 1000, "max": 20000, "display": "number"}]}}}, {"key": "Extreme-High", "inputs": {"required": {"mesh_mode": ["COMBO", {"default": "Raw", "multiselect": false, "options": ["Raw", "Quad"]}], "mesh_faces": ["INT", {"tooltip": "Mesh face count. Raw mode: 20K-2M. Quad mode: keep under 200K (upstream may reject higher values).", "default": 1000000, "min": 20000, "max": 2000000, "display": "number"}], "is_micro": ["BOOLEAN", {"tooltip": "Enable micro detail (Extreme-High only).", "default": false}], "creative": ["BOOLEAN", {"tooltip": "Creative mode. Enhances generative robustness.", "default": false}]}}}]}], "material": ["COMBO", {"default": "Shaded", "multiselect": false, "options": ["PBR", "Shaded", "All", "None"]}], "geometry_file_format": ["COMBO", {"default": "glb", "multiselect": false, "options": ["glb", "fbx", "obj", "stl"]}]}, "optional": {"texture_mode": ["COMBO", {"tooltip": "Texture quality preset. 'Default' uses the server's default for the selected tier.", "default": "Default", "multiselect": false, "options": ["Default", "legacy", "extreme-low", "low", "medium", "high"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 65535, "control_after_generate": true, "display": "number"}], "TAPose": ["BOOLEAN", {"tooltip": "T/A pose for human-like models.", "advanced": true, "default": false}], "hd_texture": ["BOOLEAN", {"tooltip": "High-quality texture enhancement.", "advanced": true, "default": false}], "texture_delight": ["BOOLEAN", {"tooltip": "Remove baked lighting from textures.", "advanced": true, "default": false}], "addon_highpack": ["BOOLEAN", {"tooltip": "HighPack addon: 4K textures and ~16x faces in Quad mode.", "advanced": true, "default": false}], "bbox_width": ["INT", {"tooltip": "Bounding-box width (Y axis). Set to 0 with the others to skip bbox.", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "bbox_height": ["INT", {"tooltip": "Bounding-box height (Z axis).", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "bbox_length": ["INT", {"tooltip": "Bounding-box length (X axis).", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "height_cm": ["INT", {"tooltip": "Approximate model height in centimeters (0 to skip).", "advanced": true, "default": 0, "min": 0, "max": 10000, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "mode", "material", "geometry_file_format"], "optional": ["texture_mode", "seed", "TAPose", "hd_texture", "texture_delight", "addon_highpack", "bbox_width", "bbox_height", "bbox_length", "height_cm"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["FILE_3D"], "output_is_list": [false], "output_name": ["model_file"], "output_tooltips": [null], "output_matchtypes": null, "name": "Rodin3D_Gen25_Text", "display_name": "Rodin 3D Gen-2.5 - Text to 3D", "description": "Generate a 3D model from a text prompt via Rodin Gen-2.5. Pick a mode (Fast / Regular / Extreme-High) to tune quality vs. cost.", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "addon_highpack", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n(\n $baseCredits := widgets.mode = \"extreme-high\" ? 1.0 : 0.5;\n $addonCredits := widgets.addon_highpack ? 1.0 : 0.0;\n $total := ($baseCredits * 1.5) + ($addonCredits * 0.8);\n {\"type\":\"usd\",\"usd\": $total}\n)\n"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayFirstLastFrameNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the generation", "default": "", "multiline": true}], "start_frame": ["IMAGE", {"tooltip": "Start frame to be used for the video"}], "end_frame": ["IMAGE", {"tooltip": "End frame to be used for the video. Supported for gen3a_turbo only."}], "duration": ["COMBO", {"multiselect": false, "options": [5, 10]}], "ratio": ["COMBO", {"multiselect": false, "options": ["768:1280", "1280:768"]}], "seed": ["INT", {"tooltip": "Random seed for generation", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "start_frame", "end_frame", "duration", "ratio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayFirstLastFrameNode", "display_name": "Runway First-Last-Frame to Video", "description": "Upload first and last keyframes, draft a prompt, and generate a video. More complex transitions, such as cases where the Last frame is completely different from the First frame, may benefit from the longer 10s duration. This would give the generation more time to smoothly transition between the two inputs. Before diving in, review these best practices to ensure that your input selections will set your generation up for success: https://help.runwayml.com/hc/en-us/articles/34170748696595-Creating-with-Keyframes-on-Gen-3.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/video/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.0715 * widgets.duration}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayImageToVideoNodeGen3a": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the generation", "default": "", "multiline": true}], "start_frame": ["IMAGE", {"tooltip": "Start frame to be used for the video"}], "duration": ["COMBO", {"multiselect": false, "options": [5, 10]}], "ratio": ["COMBO", {"multiselect": false, "options": ["768:1280", "1280:768"]}], "seed": ["INT", {"tooltip": "Random seed for generation", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "start_frame", "duration", "ratio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayImageToVideoNodeGen3a", "display_name": "Runway Image to Video (Gen3a Turbo)", "description": "Generate a video from a single starting frame using Gen3a Turbo model. Before diving in, review these best practices to ensure that your input selections will set your generation up for success: https://help.runwayml.com/hc/en-us/articles/33927968552339-Creating-with-Act-One-on-Gen-3-Alpha-and-Turbo.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/video/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.0715 * widgets.duration}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayImageToVideoNodeGen4": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the generation", "default": "", "multiline": true}], "start_frame": ["IMAGE", {"tooltip": "Start frame to be used for the video"}], "duration": ["COMBO", {"multiselect": false, "options": [5, 10]}], "ratio": ["COMBO", {"multiselect": false, "options": ["1280:720", "720:1280", "1104:832", "832:1104", "960:960", "1584:672"]}], "seed": ["INT", {"tooltip": "Random seed for generation", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "start_frame", "duration", "ratio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayImageToVideoNodeGen4", "display_name": "Runway Image to Video (Gen4 Turbo)", "description": "Generate a video from a single starting frame using Gen4 Turbo model. Before diving in, review these best practices to ensure that your input selections will set your generation up for success: https://help.runwayml.com/hc/en-us/articles/37327109429011-Creating-with-Gen-4-Video.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/video/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.0715 * widgets.duration}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayTextToImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the generation", "default": "", "multiline": true}], "ratio": ["COMBO", {"multiselect": false, "options": ["1920:1080", "1080:1920", "1024:1024", "1360:768", "1080:1080", "1168:880", "1440:1080", "1080:1440", "1808:768", "2112:912"]}]}, "optional": {"reference_image": ["IMAGE", {"tooltip": "Optional reference image to guide the generation"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "ratio"], "optional": ["reference_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayTextToImageNode", "display_name": "Runway Text to Image", "description": "Generate an image from a text prompt using Runway's Gen 4 model. You can also include reference image to guide the generation.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/image/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.11}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayAleph2VideoToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Describes what should appear in the output (1-1000 characters).", "default": "", "multiline": true}], "video": ["VIDEO", {"tooltip": "Input video to edit. Must be 2-30 seconds at 30 fps or lower."}], "seed": ["INT", {"tooltip": "Random seed for generation", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}], "public_figure_threshold": ["COMBO", {"tooltip": "Content moderation for recognizable public figures.", "default": "low", "multiselect": false, "options": ["auto", "low"]}]}, "optional": {"keyframes": ["RUNWAY_ALEPH2_KEYFRAME", {"tooltip": "Guidance images anchored to the input video, from Aleph2 Keyframe nodes (up to 5). Use keyframes or prompt images, not both."}], "prompt_images": ["RUNWAY_ALEPH2_PROMPT_IMAGE", {"tooltip": "Guidance images anchored to the output video, from Aleph2 Prompt Image nodes (up to 5). Use keyframes or prompt images, not both."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "video", "seed", "public_figure_threshold"], "optional": ["keyframes", "prompt_images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayAleph2VideoToVideoNode", "display_name": "Runway Aleph2 Video to Video", "description": "Edit a video with a text prompt using Runway's Aleph2 model. Aleph2 transforms your footage (restyle, relight, add or remove elements, change the viewpoint) while keeping the original motion and timing; the output resolution matches the input video, which must be 2-30 seconds at 30 fps or lower. Optionally steer the edit with either keyframes (anchored to the input video) or prompt images (anchored to the output video) - use one or the other, not both.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/video/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.4004, \"format\":{\"suffix\":\"/second\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayAleph2KeyframeNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "The guidance image to apply at the chosen moment of the input video."}], "timing": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "How to place this image on the input video's timeline.", "options": [{"key": "Absolute time (seconds)", "inputs": {"required": {"seconds": ["FLOAT", {"tooltip": "Time in seconds from start of the input video where this image applies.", "default": 0.0, "min": 0.0, "max": 30.0, "step": 0.1, "display": "number"}]}}}, {"key": "Fraction of duration (0.0-1.0)", "inputs": {"required": {"fraction": ["FLOAT", {"tooltip": "Where in the input video this image applies, as a fraction of its duration (0.0 = start, 1.0 = end).", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01, "display": "number"}]}}}]}]}, "optional": {"keyframes": ["RUNWAY_ALEPH2_KEYFRAME", {"tooltip": "Optional earlier keyframes to chain with this one."}]}}, "input_order": {"required": ["image", "timing"], "optional": ["keyframes"]}, "is_input_list": false, "output": ["RUNWAY_ALEPH2_KEYFRAME"], "output_is_list": [false], "output_name": ["keyframes"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayAleph2KeyframeNode", "display_name": "Runway Aleph2 Keyframe", "description": "Anchor a guidance image to a moment of the input (source) video, so Aleph2 steers the edit at that point of your footage. Connect this to the 'keyframes' input of the Runway Aleph2 Video to Video node; chain several together (up to 5) via the optional 'keyframes' input below.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/video/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayAleph2PromptImageNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "The guidance image to place at the chosen moment of the output video."}], "position": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "How to place this image on the output video's timeline.", "options": [{"key": "Absolute time (seconds)", "inputs": {"required": {"seconds": ["FLOAT", {"tooltip": "Time in seconds from start of the output video where this image applies.", "default": 0.0, "min": 0.0, "max": 30.0, "step": 0.1, "display": "number"}]}}}, {"key": "Fraction of duration (0.0-1.0)", "inputs": {"required": {"fraction": ["FLOAT", {"tooltip": "Where in the output video this image applies, as a fraction of its duration (0.0 = start, 1.0 = end).", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01, "display": "number"}]}}}]}]}, "optional": {"prompt_images": ["RUNWAY_ALEPH2_PROMPT_IMAGE", {"tooltip": "Optional earlier prompt images to chain with this one."}]}}, "input_order": {"required": ["image", "position"], "optional": ["prompt_images"]}, "is_input_list": false, "output": ["RUNWAY_ALEPH2_PROMPT_IMAGE"], "output_is_list": [false], "output_name": ["prompt_images"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayAleph2PromptImageNode", "display_name": "Runway Aleph2 Prompt Image", "description": "Anchor a guidance image to a moment of the output (result) video, to guide what the edited video looks like at that point. Connect this to the 'prompt_images' input of the Runway Aleph2 Video to Video node; chain several together (up to 5) via the optional 'prompt_images' input below.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/video/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SoniloVideoToMusic": {"input": {"required": {"video": ["VIDEO", {"tooltip": "Input video to generate music from. Maximum duration: 6 minutes."}], "prompt": ["STRING", {"tooltip": "Optional text prompt to guide music generation. Leave empty for best quality - the model will fully analyze the video content.", "default": "", "multiline": true}], "seed": ["INT", {"tooltip": "Seed for reproducibility. Currently ignored by the Sonilo service but kept for graph consistency.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "SoniloVideoToMusic", "display_name": "Sonilo Video to Music", "description": "Generate music from video content using Sonilo's AI model. Analyzes the video and creates matching music.", "python_module": "comfy_api_nodes.nodes_sonilo", "category": "partner/audio/Sonilo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.009,\"format\":{\"suffix\":\"/second\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SoniloTextToMusic": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt describing the music to generate.", "default": "", "multiline": true}], "duration": ["INT", {"tooltip": "Target duration in seconds. Maximum: 6 minutes.", "default": 30, "min": 1, "max": 360}], "seed": ["INT", {"tooltip": "Seed for reproducibility. Currently ignored by the Sonilo service but kept for graph consistency.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "duration", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "SoniloTextToMusic", "display_name": "Sonilo Text to Music", "description": "Generate music from a text prompt using Sonilo's AI model.", "python_module": "comfy_api_nodes.nodes_sonilo", "category": "partner/audio/Sonilo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.0025 * widgets.duration}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIVideoSora2": {"input": {"required": {"model": ["COMBO", {"default": "sora-2", "multiselect": false, "options": ["sora-2", "sora-2-pro"]}], "prompt": ["STRING", {"tooltip": "Guiding text; may be empty if an input image is present.", "default": "", "multiline": true}], "size": ["COMBO", {"default": "1280x720", "multiselect": false, "options": ["720x1280", "1280x720", "1024x1792", "1792x1024"]}], "duration": ["COMBO", {"default": 8, "multiselect": false, "options": [4, 8, 12]}]}, "optional": {"image": ["IMAGE", {}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "size", "duration"], "optional": ["image", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIVideoSora2", "display_name": "OpenAI Sora - Video (DEPRECATED)", "description": "OpenAI video and audio generation.\n\nDEPRECATION NOTICE: OpenAI will stop serving the Sora v2 API in September 2026. This node will be removed from ComfyUI at that time.", "python_module": "comfy_api_nodes.nodes_sora", "category": "partner/video/Sora", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "size", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $size := widgets.size;\n $dur := widgets.duration;\n $isPro := $contains($m, \"sora-2-pro\");\n $isSora2 := $contains($m, \"sora-2\");\n $isProSize := ($size = \"1024x1792\" or $size = \"1792x1024\");\n $perSec :=\n $isPro ? ($isProSize ? 0.5 : 0.3) :\n $isSora2 ? 0.1 :\n ($isProSize ? 0.5 : 0.1);\n {\"type\":\"usd\",\"usd\": $round($perSec * $dur, 2)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityStableImageUltraNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "What you wish to see in the output image. A strong, descriptive prompt that clearly defineselements, colors, and subjects will lead to better results. To control the weight of a given word use the format `(word:weight)`,where `word` is the word you'd like to control the weight of and `weight`is a value between 0 and 1. For example: `The sky was a crisp (blue:0.3) and (green:0.8)`would convey a sky that was blue and green, but more green than blue.", "default": "", "multiline": true}], "aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of generated image.", "default": "1:1", "multiselect": false, "options": ["1:1", "16:9", "9:16", "3:2", "2:3", "5:4", "4:5", "21:9", "9:21"]}], "style_preset": ["COMBO", {"tooltip": "Optional desired style of generated image.", "advanced": true, "multiselect": false, "options": ["None", "3d-model", "analog-film", "anime", "cinematic", "comic-book", "digital-art", "enhance", "fantasy-art", "isometric", "line-art", "low-poly", "modeling-compound", "neon-punk", "origami", "photographic", "pixel-art", "tile-texture"]}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"image": ["IMAGE", {}], "negative_prompt": ["STRING", {"tooltip": "A blurb of text describing what you do not wish to see in the output image. This is an advanced feature.", "advanced": true, "default": "", "forceInput": true, "multiline": false}], "image_denoise": ["FLOAT", {"tooltip": "Denoise of input image; 0.0 yields image identical to input, 1.0 is as if no image was provided at all.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "aspect_ratio", "style_preset", "seed"], "optional": ["image", "negative_prompt", "image_denoise"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityStableImageUltraNode", "display_name": "Stability AI Stable Image Ultra", "description": "Generates images synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/image/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.08}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityStableImageSD_3_5Node": {"input": {"required": {"prompt": ["STRING", {"tooltip": "What you wish to see in the output image. A strong, descriptive prompt that clearly defines elements, colors, and subjects will lead to better results.", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["sd3.5-large", "sd3.5-medium"]}], "aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of generated image.", "default": "1:1", "multiselect": false, "options": ["1:1", "16:9", "9:16", "3:2", "2:3", "5:4", "4:5", "21:9", "9:21"]}], "style_preset": ["COMBO", {"tooltip": "Optional desired style of generated image.", "advanced": true, "multiselect": false, "options": ["None", "3d-model", "analog-film", "anime", "cinematic", "comic-book", "digital-art", "enhance", "fantasy-art", "isometric", "line-art", "low-poly", "modeling-compound", "neon-punk", "origami", "photographic", "pixel-art", "tile-texture"]}], "cfg_scale": ["FLOAT", {"tooltip": "How strictly the diffusion process adheres to the prompt text (higher values keep your image closer to your prompt)", "default": 4.0, "min": 1.0, "max": 10.0, "step": 0.1}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"image": ["IMAGE", {}], "negative_prompt": ["STRING", {"tooltip": "Keywords of what you do not wish to see in the output image. This is an advanced feature.", "advanced": true, "default": "", "forceInput": true, "multiline": false}], "image_denoise": ["FLOAT", {"tooltip": "Denoise of input image; 0.0 yields image identical to input, 1.0 is as if no image was provided at all.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "aspect_ratio", "style_preset", "cfg_scale", "seed"], "optional": ["image", "negative_prompt", "image_denoise"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityStableImageSD_3_5Node", "display_name": "Stability AI Stable Diffusion 3.5 Image", "description": "Generates images synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/image/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $contains(widgets.model,\"large\")\n ? {\"type\":\"usd\",\"usd\":0.065}\n : {\"type\":\"usd\",\"usd\":0.035}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityUpscaleConservativeNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "What you wish to see in the output image. A strong, descriptive prompt that clearly defines elements, colors, and subjects will lead to better results.", "default": "", "multiline": true}], "creativity": ["FLOAT", {"tooltip": "Controls the likelihood of creating additional details not heavily conditioned by the init image.", "default": 0.35, "min": 0.2, "max": 0.5, "step": 0.01}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Keywords of what you do not wish to see in the output image. This is an advanced feature.", "advanced": true, "default": "", "forceInput": true, "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "creativity", "seed"], "optional": ["negative_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityUpscaleConservativeNode", "display_name": "Stability AI Upscale Conservative", "description": "Upscale image with minimal alterations to 4K resolution.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/image/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityUpscaleCreativeNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "What you wish to see in the output image. A strong, descriptive prompt that clearly defines elements, colors, and subjects will lead to better results.", "default": "", "multiline": true}], "creativity": ["FLOAT", {"tooltip": "Controls the likelihood of creating additional details not heavily conditioned by the init image.", "default": 0.3, "min": 0.1, "max": 0.5, "step": 0.01}], "style_preset": ["COMBO", {"tooltip": "Optional desired style of generated image.", "advanced": true, "multiselect": false, "options": ["None", "3d-model", "analog-film", "anime", "cinematic", "comic-book", "digital-art", "enhance", "fantasy-art", "isometric", "line-art", "low-poly", "modeling-compound", "neon-punk", "origami", "photographic", "pixel-art", "tile-texture"]}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Keywords of what you do not wish to see in the output image. This is an advanced feature.", "advanced": true, "default": "", "forceInput": true, "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "creativity", "style_preset", "seed"], "optional": ["negative_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityUpscaleCreativeNode", "display_name": "Stability AI Upscale Creative", "description": "Upscale image with minimal alterations to 4K resolution.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/image/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.6}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityUpscaleFastNode": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityUpscaleFastNode", "display_name": "Stability AI Upscale Fast", "description": "Quickly upscales an image via Stability API call to 4x its original size; intended for upscaling low-quality/compressed images.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/image/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.02}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityTextToAudio": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["stable-audio-2.5"]}], "prompt": ["STRING", {"default": "", "multiline": true}]}, "optional": {"duration": ["INT", {"tooltip": "Controls the duration in seconds of the generated audio.", "default": 190, "min": 1, "max": 190, "step": 1}], "seed": ["INT", {"tooltip": "The random seed used for generation.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}], "steps": ["INT", {"tooltip": "Controls the number of sampling steps.", "advanced": true, "default": 8, "min": 4, "max": 8, "step": 1}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt"], "optional": ["duration", "seed", "steps"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityTextToAudio", "display_name": "Stability AI Text To Audio", "description": "Generates high-quality music and sound effects from text descriptions.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/audio/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.2}"}, "search_aliases": null, "essentials_category": "Audio", "has_intermediate_output": false}, "StabilityAudioToAudio": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["stable-audio-2.5"]}], "prompt": ["STRING", {"default": "", "multiline": true}], "audio": ["AUDIO", {"tooltip": "Audio must be between 6 and 190 seconds long."}]}, "optional": {"duration": ["INT", {"tooltip": "Controls the duration in seconds of the generated audio.", "default": 190, "min": 1, "max": 190, "step": 1}], "seed": ["INT", {"tooltip": "The random seed used for generation.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}], "steps": ["INT", {"tooltip": "Controls the number of sampling steps.", "advanced": true, "default": 8, "min": 4, "max": 8, "step": 1}], "strength": ["FLOAT", {"tooltip": "Parameter controls how much influence the audio parameter has on the generated audio.", "default": 1, "min": 0.01, "max": 1.0, "step": 0.01, "display": "slider"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "audio"], "optional": ["duration", "seed", "steps", "strength"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityAudioToAudio", "display_name": "Stability AI Audio To Audio", "description": "Transforms existing audio samples into new high-quality compositions using text instructions.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/audio/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.2}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityAudioInpaint": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["stable-audio-2.5"]}], "prompt": ["STRING", {"default": "", "multiline": true}], "audio": ["AUDIO", {"tooltip": "Audio must be between 6 and 190 seconds long."}]}, "optional": {"duration": ["INT", {"tooltip": "Controls the duration in seconds of the generated audio.", "default": 190, "min": 1, "max": 190, "step": 1}], "seed": ["INT", {"tooltip": "The random seed used for generation.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}], "steps": ["INT", {"tooltip": "Controls the number of sampling steps.", "advanced": true, "default": 8, "min": 4, "max": 8, "step": 1}], "mask_start": ["INT", {"advanced": true, "default": 30, "min": 0, "max": 190, "step": 1}], "mask_end": ["INT", {"advanced": true, "default": 190, "min": 0, "max": 190, "step": 1}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "audio"], "optional": ["duration", "seed", "steps", "mask_start", "mask_end"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityAudioInpaint", "display_name": "Stability AI Audio Inpaint", "description": "Transforms part of existing audio sample using text instructions.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/audio/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.2}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TopazImageEnhance": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["Reimagine"]}], "image": ["IMAGE", {}]}, "optional": {"prompt": ["STRING", {"tooltip": "Optional text prompt for creative upscaling guidance.", "default": "", "multiline": true}], "subject_detection": ["COMBO", {"advanced": true, "multiselect": false, "options": ["All", "Foreground", "Background"]}], "face_enhancement": ["BOOLEAN", {"tooltip": "Enhance faces (if present) during processing.", "advanced": true, "default": true}], "face_enhancement_creativity": ["FLOAT", {"tooltip": "Set the creativity level for face enhancement.", "advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01, "display": "number"}], "face_enhancement_strength": ["FLOAT", {"tooltip": "Controls how sharp enhanced faces are relative to the background.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "display": "number"}], "crop_to_fill": ["BOOLEAN", {"tooltip": "By default, the image is letterboxed when the output aspect ratio differs. Enable to crop the image to fill the output dimensions.", "advanced": true, "default": false}], "output_width": ["INT", {"tooltip": "Zero value means to calculate automatically (usually it will be original size or output_height if specified).", "advanced": true, "default": 0, "min": 0, "max": 32000, "step": 1, "display": "number"}], "output_height": ["INT", {"tooltip": "Zero value means to output in the same height as original or output width.", "advanced": true, "default": 0, "min": 0, "max": 32000, "step": 1, "display": "number"}], "creativity": ["INT", {"default": 3, "min": 1, "max": 9, "step": 1, "display": "slider"}], "face_preservation": ["BOOLEAN", {"tooltip": "Preserve subjects' facial identity.", "advanced": true, "default": true}], "color_preservation": ["BOOLEAN", {"tooltip": "Preserve the original colors.", "advanced": true, "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image"], "optional": ["prompt", "subject_detection", "face_enhancement", "face_enhancement_creativity", "face_enhancement_strength", "crop_to_fill", "output_width", "output_height", "creativity", "face_preservation", "color_preservation"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "TopazImageEnhance", "display_name": "Topaz Image Enhance", "description": "Industry-standard upscaling and image enhancement.", "python_module": "comfy_api_nodes.nodes_topaz", "category": "partner/image/Topaz", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TopazVideoEnhance": {"input": {"required": {"video": ["VIDEO", {}], "upscaler_enabled": ["BOOLEAN", {"default": true}], "upscaler_model": ["COMBO", {"multiselect": false, "options": ["Starlight (Astra) Fast", "Starlight (Astra) Creative", "Starlight Precise 2.5"]}], "upscaler_resolution": ["COMBO", {"multiselect": false, "options": ["FullHD (1080p)", "4K (2160p)"]}]}, "optional": {"upscaler_creativity": ["COMBO", {"tooltip": "Creativity level (applies only to Starlight (Astra) Creative).", "advanced": true, "default": "low", "multiselect": false, "options": ["low", "middle", "high"]}], "interpolation_enabled": ["BOOLEAN", {"default": false}], "interpolation_model": ["COMBO", {"advanced": true, "default": "apo-8", "multiselect": false, "options": ["apo-8"]}], "interpolation_slowmo": ["INT", {"tooltip": "Slow-motion factor applied to the input video. For example, 2 makes the output twice as slow and doubles the duration.", "advanced": true, "default": 1, "min": 1, "max": 16, "display": "number"}], "interpolation_frame_rate": ["INT", {"tooltip": "Output frame rate.", "default": 60, "min": 15, "max": 240, "display": "number"}], "interpolation_duplicate": ["BOOLEAN", {"tooltip": "Analyze the input for duplicate frames and remove them.", "advanced": true, "default": false}], "interpolation_duplicate_threshold": ["FLOAT", {"tooltip": "Detection sensitivity for duplicate frames.", "advanced": true, "default": 0.01, "min": 0.001, "max": 0.1, "step": 0.001, "display": "number"}], "dynamic_compression_level": ["COMBO", {"tooltip": "CQP level.", "advanced": true, "default": "Low", "multiselect": false, "options": ["Low", "Mid", "High"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "upscaler_enabled", "upscaler_model", "upscaler_resolution"], "optional": ["upscaler_creativity", "interpolation_enabled", "interpolation_model", "interpolation_slowmo", "interpolation_frame_rate", "interpolation_duplicate", "interpolation_duplicate_threshold", "dynamic_compression_level"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "TopazVideoEnhance", "display_name": "Topaz Video Enhance (Legacy)", "description": "Breathe new life into video with powerful upscaling and recovery technology.", "python_module": "comfy_api_nodes.nodes_topaz", "category": "partner/video/Topaz", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TopazVideoEnhanceV2": {"input": {"required": {"video": ["VIDEO", {}], "upscaler_model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Astra 2", "inputs": {"required": {"upscaler_resolution": ["COMBO", {"multiselect": false, "options": ["FullHD (1080p)", "4K (2160p)"]}], "creativity": ["FLOAT", {"tooltip": "Creative strength of the upscale.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.1, "display": "slider"}], "prompt": ["STRING", {"tooltip": "Optional descriptive (not instructive) scene prompt.Capping input at 450 frames (~15s @ 30fps) when set.", "default": "", "multiline": true}], "sharp": ["FLOAT", {"tooltip": "Pre-enhance sharpness: 0.0=Gaussian blur, 0.5=passthrough (default), 1.0=USM sharpening.", "advanced": true, "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "realism": ["FLOAT", {"tooltip": "Pulls output toward photographic realism.Leave at 0 for the model default.", "advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}]}}}, {"key": "Starlight (Astra) Fast", "inputs": {"required": {"upscaler_resolution": ["COMBO", {"multiselect": false, "options": ["FullHD (1080p)", "4K (2160p)"]}]}}}, {"key": "Starlight (Astra) Creative", "inputs": {"required": {"upscaler_resolution": ["COMBO", {"multiselect": false, "options": ["FullHD (1080p)", "4K (2160p)"]}], "creativity": ["COMBO", {"tooltip": "Creative strength of the upscale.", "default": "low", "multiselect": false, "options": ["low", "middle", "high"]}]}}}, {"key": "Starlight Precise 2.5", "inputs": {"required": {"upscaler_resolution": ["COMBO", {"multiselect": false, "options": ["FullHD (1080p)", "4K (2160p)"]}]}}}, {"key": "Disabled", "inputs": {"required": {}}}]}], "interpolation_model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Disabled", "inputs": {"required": {}}}, {"key": "apo-8", "inputs": {"required": {"interpolation_frame_rate": ["INT", {"tooltip": "Output frame rate.", "default": 60, "min": 15, "max": 240, "display": "number"}], "interpolation_slowmo": ["INT", {"tooltip": "Slow-motion factor applied to the input video. For example, 2 makes the output twice as slow and doubles the duration.", "advanced": true, "default": 1, "min": 1, "max": 16, "display": "number"}], "interpolation_duplicate": ["BOOLEAN", {"tooltip": "Analyze the input for duplicate frames and remove them.", "advanced": true, "default": false}], "interpolation_duplicate_threshold": ["FLOAT", {"tooltip": "Detection sensitivity for duplicate frames.", "advanced": true, "default": 0.01, "min": 0.001, "max": 0.1, "step": 0.001, "display": "number"}]}}}]}]}, "optional": {"dynamic_compression_level": ["COMBO", {"tooltip": "CQP level.", "default": "Low", "multiselect": false, "options": ["Low", "Mid", "High"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "upscaler_model", "interpolation_model"], "optional": ["dynamic_compression_level"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "TopazVideoEnhanceV2", "display_name": "Topaz Video Enhance", "description": "Breathe new life into video with powerful upscaling and recovery technology.", "python_module": "comfy_api_nodes.nodes_topaz", "category": "partner/video/Topaz", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "upscaler_model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscaler_model.upscaler_resolution", "type": "COMBO"}, {"name": "interpolation_model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $model := $lookup(widgets, \"upscaler_model\");\n $res := $lookup(widgets, \"upscaler_model.upscaler_resolution\");\n $interp := $lookup(widgets, \"interpolation_model\");\n $is4k := $contains($res, \"4k\");\n $hasInterp := $interp != \"disabled\";\n $rates := {\n \"starlight (astra) fast\": {\"hd\": 0.43, \"uhd\": 0.85},\n \"starlight precise 2.5\": {\"hd\": 0.70, \"uhd\": 1.54},\n \"astra 2\": {\"hd\": 1.72, \"uhd\": 2.85},\n \"starlight (astra) creative\": {\"hd\": 2.25, \"uhd\": 3.99}\n };\n $surcharge := $is4k ? 0.28 : 0.14;\n $entry := $lookup($rates, $model);\n $base := $is4k ? $entry.uhd : $entry.hd;\n $hi := $base + ($hasInterp ? $surcharge : 0);\n $model = \"disabled\"\n ? {\"type\":\"text\",\"text\":\"Interpolation only\"}\n : ($hasInterp\n ? {\"type\":\"text\",\"text\":\"~\" & $string($base) & \"\u2013\" & $string($hi) & \" credits/src frame\"}\n : {\"type\":\"text\",\"text\":\"~\" & $string($base) & \" credits/src frame\"})\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoTextToModelNode": {"input": {"required": {"prompt": ["STRING", {"multiline": true}]}, "optional": {"negative_prompt": ["STRING", {"multiline": true}], "model_version": ["COMBO", {"default": "v2.5-20250123", "multiselect": false, "options": ["v3.1-20260211", "v3.0-20250812", "v2.5-20250123", "v2.0-20240919", "v1.4-20240625"]}], "style": ["COMBO", {"default": "None", "multiselect": false, "options": ["person:person2cartoon", "animal:venom", "object:clay", "object:steampunk", "object:christmas", "object:barbie", "gold", "ancient_bronze", "None"]}], "texture": ["BOOLEAN", {"default": true}], "pbr": ["BOOLEAN", {"default": true}], "image_seed": ["INT", {"advanced": true, "default": 42}], "model_seed": ["INT", {"advanced": true, "default": 42}], "texture_seed": ["INT", {"advanced": true, "default": 42}], "texture_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "face_limit": ["INT", {"advanced": true, "default": -1, "min": -1, "max": 2000000}], "quad": ["BOOLEAN", {"advanced": true, "default": false}], "geometry_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["prompt"], "optional": ["negative_prompt", "model_version", "style", "texture", "pbr", "image_seed", "model_seed", "texture_seed", "texture_quality", "face_limit", "quad", "geometry_quality"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoTextToModelNode", "display_name": "Tripo: Text to Model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model_version", "type": "COMBO"}, {"name": "texture", "type": "BOOLEAN"}, {"name": "pbr", "type": "BOOLEAN"}, {"name": "quad", "type": "BOOLEAN"}, {"name": "texture_quality", "type": "COMBO"}, {"name": "geometry_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $isV14 := $contains(widgets.model_version,\"v1.4\");\n $isV3OrLater := $contains(widgets.model_version,\"v3.\");\n $withTexture := widgets.texture or widgets.pbr;\n $isHdTexture := (widgets.texture_quality = \"detailed\");\n $isDetailedGeometry := (widgets.geometry_quality = \"detailed\");\n $credits := $isV14 ? 20 : (\n ($withTexture ? 20 : 10)\n + (widgets.quad ? 5 : 0)\n + ($isHdTexture ? 10 : 0)\n + (($isDetailedGeometry and $isV3OrLater) ? 20 : 0)\n );\n {\"type\":\"usd\",\"usd\": $round($credits * 0.01, 2), \"format\": {\"approximate\": true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoImageToModelNode": {"input": {"required": {"image": ["IMAGE", {}]}, "optional": {"model_version": ["COMBO", {"tooltip": "The model version to use for generation", "multiselect": false, "options": ["v3.1-20260211", "v3.0-20250812", "v2.5-20250123", "v2.0-20240919", "v1.4-20240625"]}], "style": ["COMBO", {"default": "None", "multiselect": false, "options": ["person:person2cartoon", "animal:venom", "object:clay", "object:steampunk", "object:christmas", "object:barbie", "gold", "ancient_bronze", "None"]}], "texture": ["BOOLEAN", {"default": true}], "pbr": ["BOOLEAN", {"default": true}], "model_seed": ["INT", {"advanced": true, "default": 42}], "orientation": ["COMBO", {"advanced": true, "default": "default", "multiselect": false, "options": ["align_image", "default"]}], "texture_seed": ["INT", {"advanced": true, "default": 42}], "texture_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_alignment": ["COMBO", {"advanced": true, "default": "original_image", "multiselect": false, "options": ["original_image", "geometry"]}], "face_limit": ["INT", {"advanced": true, "default": -1, "min": -1, "max": 500000}], "quad": ["BOOLEAN", {"advanced": true, "default": false}], "geometry_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["image"], "optional": ["model_version", "style", "texture", "pbr", "model_seed", "orientation", "texture_seed", "texture_quality", "texture_alignment", "face_limit", "quad", "geometry_quality"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoImageToModelNode", "display_name": "Tripo: Image to Model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model_version", "type": "COMBO"}, {"name": "texture", "type": "BOOLEAN"}, {"name": "pbr", "type": "BOOLEAN"}, {"name": "quad", "type": "BOOLEAN"}, {"name": "texture_quality", "type": "COMBO"}, {"name": "geometry_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $isV14 := $contains(widgets.model_version,\"v1.4\");\n $isV3OrLater := $contains(widgets.model_version,\"v3.\");\n $withTexture := widgets.texture or widgets.pbr;\n $isHdTexture := (widgets.texture_quality = \"detailed\");\n $isDetailedGeometry := (widgets.geometry_quality = \"detailed\");\n $credits := $isV14 ? 30 : (\n ($withTexture ? 30 : 20)\n + (widgets.quad ? 5 : 0)\n + ($isHdTexture ? 10 : 0)\n + (($isDetailedGeometry and $isV3OrLater) ? 20 : 0)\n );\n {\"type\":\"usd\",\"usd\": $round($credits * 0.01, 2), \"format\": {\"approximate\": true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoMultiviewToModelNode": {"input": {"required": {"image": ["IMAGE", {}]}, "optional": {"image_left": ["IMAGE", {}], "image_back": ["IMAGE", {}], "image_right": ["IMAGE", {}], "model_version": ["COMBO", {"tooltip": "The model version to use for generation", "multiselect": false, "options": ["v3.1-20260211", "v3.0-20250812", "v2.5-20250123", "v2.0-20240919", "v1.4-20240625"]}], "orientation": ["COMBO", {"advanced": true, "default": "default", "multiselect": false, "options": ["align_image", "default"]}], "texture": ["BOOLEAN", {"default": true}], "pbr": ["BOOLEAN", {"default": true}], "model_seed": ["INT", {"advanced": true, "default": 42}], "texture_seed": ["INT", {"advanced": true, "default": 42}], "texture_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_alignment": ["COMBO", {"advanced": true, "default": "original_image", "multiselect": false, "options": ["original_image", "geometry"]}], "face_limit": ["INT", {"advanced": true, "default": -1, "min": -1, "max": 500000}], "quad": ["BOOLEAN", {"tooltip": "This parameter is deprecated and does nothing.", "advanced": true, "default": false}], "geometry_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["image"], "optional": ["image_left", "image_back", "image_right", "model_version", "orientation", "texture", "pbr", "model_seed", "texture_seed", "texture_quality", "texture_alignment", "face_limit", "quad", "geometry_quality"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoMultiviewToModelNode", "display_name": "Tripo: Multiview to Model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model_version", "type": "COMBO"}, {"name": "texture", "type": "BOOLEAN"}, {"name": "pbr", "type": "BOOLEAN"}, {"name": "texture_quality", "type": "COMBO"}, {"name": "geometry_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $isV14 := $contains(widgets.model_version,\"v1.4\");\n $isV3OrLater := $contains(widgets.model_version,\"v3.\");\n $withTexture := widgets.texture or widgets.pbr;\n $isHdTexture := (widgets.texture_quality = \"detailed\");\n $isDetailedGeometry := (widgets.geometry_quality = \"detailed\");\n $credits := $isV14 ? 30 : (\n ($withTexture ? 30 : 20)\n + ($isHdTexture ? 10 : 0)\n + (($isDetailedGeometry and $isV3OrLater) ? 20 : 0)\n );\n {\"type\":\"usd\",\"usd\": $round($credits * 0.01, 2), \"format\": {\"approximate\": true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoP1TextToModelNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Up to 1024 characters.", "multiline": true}], "output_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "\"Geometry only\" returns an untextured mesh. \"Textured\" adds color/PBR maps.", "options": [{"key": "Geometry only", "inputs": {"required": {}}}, {"key": "Textured", "inputs": {"required": {"pbr": ["BOOLEAN", {"tooltip": "Include PBR maps. When on, base texture is forced on too.", "default": true}], "texture_quality": ["COMBO", {"default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_seed": ["INT", {"advanced": true, "default": 42}]}}}]}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Up to 255 characters.", "multiline": true}], "image_seed": ["INT", {"advanced": true, "default": 42}], "face_limit": ["INT", {"tooltip": "Target face count, 48-20000. -1 lets Tripo pick adaptively.", "advanced": true, "default": -1, "min": -1, "max": 20000}], "model_seed": ["INT", {"advanced": true, "default": 42}], "auto_size": ["BOOLEAN", {"tooltip": "Scale the output to approximate real-world meters.", "advanced": true, "default": false}], "export_uv": ["BOOLEAN", {"tooltip": "UV unwrap during generation. Turn off for faster geometry-only runs.", "advanced": true, "default": true}], "compress_geometry": ["BOOLEAN", {"tooltip": "Apply geometry-based compression. Decompress before editing.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "output_mode"], "optional": ["negative_prompt", "image_seed", "face_limit", "model_seed", "auto_size", "export_uv", "compress_geometry"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoP1TextToModelNode", "display_name": "Tripo P1: Text to Model", "description": "Tripo P1 text-to-3D. Optimized for low-poly, game-ready meshes with stable topology.", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "output_mode", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "output_mode.texture_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "( $mode := widgets.output_mode; $detailed := $lookup(widgets, \"output_mode.texture_quality\") = \"detailed\"; $credits := $mode = \"geometry only\" ? 30 : ($detailed ? 50 : 40); {\"type\":\"usd\",\"usd\": $credits * 0.01, \"format\": {\"approximate\": true}})"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoP1ImageToModelNode": {"input": {"required": {"image": ["IMAGE", {}], "output_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "\"Geometry only\" returns an untextured mesh. \"Textured\" adds color/PBR maps.", "options": [{"key": "Geometry only", "inputs": {"required": {}}}, {"key": "Textured", "inputs": {"required": {"pbr": ["BOOLEAN", {"tooltip": "Include PBR maps. When on, base texture is forced on too.", "default": true}], "texture_quality": ["COMBO", {"default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_alignment": ["COMBO", {"tooltip": "Prioritize visual fidelity to the source image, or alignment to the mesh geometry.", "default": "original_image", "multiselect": false, "options": ["original_image", "geometry"]}], "orientation": ["COMBO", {"tooltip": "Rotate the output to match the source image. Only applies when textured.", "default": "default", "multiselect": false, "options": ["default", "align_image"]}], "texture_seed": ["INT", {"advanced": true, "default": 42}]}}}]}]}, "optional": {"enable_image_autofix": ["BOOLEAN", {"tooltip": "Pre-process the input image for better generation quality.", "advanced": true, "default": false}], "face_limit": ["INT", {"tooltip": "Target face count, 48-20000. -1 lets Tripo pick adaptively.", "advanced": true, "default": -1, "min": -1, "max": 20000}], "model_seed": ["INT", {"advanced": true, "default": 42}], "auto_size": ["BOOLEAN", {"tooltip": "Scale the output to approximate real-world meters.", "advanced": true, "default": false}], "export_uv": ["BOOLEAN", {"tooltip": "UV unwrap during generation. Turn off for faster geometry-only runs.", "advanced": true, "default": true}], "compress_geometry": ["BOOLEAN", {"tooltip": "Apply geometry-based compression. Decompress before editing.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "output_mode"], "optional": ["enable_image_autofix", "face_limit", "model_seed", "auto_size", "export_uv", "compress_geometry"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoP1ImageToModelNode", "display_name": "Tripo P1: Image to Model", "description": "Tripo P1 image-to-3D. Optimized for low-poly, game-ready meshes.", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "output_mode", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "output_mode.texture_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "( $mode := widgets.output_mode; $detailed := $lookup(widgets, \"output_mode.texture_quality\") = \"detailed\"; $credits := $mode = \"geometry only\" ? 40 : ($detailed ? 60 : 50); {\"type\":\"usd\",\"usd\": $credits * 0.01, \"format\": {\"approximate\": true}})"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoP1MultiviewToModelNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Front view (0\u00b0). Required."}], "output_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "\"Geometry only\" returns an untextured mesh. \"Textured\" adds color/PBR maps.", "options": [{"key": "Geometry only", "inputs": {"required": {}}}, {"key": "Textured", "inputs": {"required": {"pbr": ["BOOLEAN", {"tooltip": "Include PBR maps. When on, base texture is forced on too.", "default": true}], "texture_quality": ["COMBO", {"default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_alignment": ["COMBO", {"tooltip": "Prioritize visual fidelity to the source image, or alignment to the mesh geometry.", "default": "original_image", "multiselect": false, "options": ["original_image", "geometry"]}], "orientation": ["COMBO", {"tooltip": "Rotate the output to match the source image. Only applies when textured.", "default": "default", "multiselect": false, "options": ["default", "align_image"]}], "texture_seed": ["INT", {"advanced": true, "default": 42}]}}}]}]}, "optional": {"image_left": ["IMAGE", {"tooltip": "Left view (90\u00b0), i.e. the subject's left side."}], "image_back": ["IMAGE", {"tooltip": "Back view (180\u00b0)."}], "image_right": ["IMAGE", {"tooltip": "Right view (270\u00b0), i.e. the subject's right side."}], "face_limit": ["INT", {"tooltip": "Target face count, 48-20000. -1 lets Tripo pick adaptively.", "advanced": true, "default": -1, "min": -1, "max": 20000}], "model_seed": ["INT", {"advanced": true, "default": 42}], "auto_size": ["BOOLEAN", {"tooltip": "Scale the output to approximate real-world meters.", "advanced": true, "default": false}], "export_uv": ["BOOLEAN", {"tooltip": "UV unwrap during generation. Turn off for faster geometry-only runs.", "advanced": true, "default": true}], "compress_geometry": ["BOOLEAN", {"tooltip": "Apply geometry-based compression. Decompress before editing.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "output_mode"], "optional": ["image_left", "image_back", "image_right", "face_limit", "model_seed", "auto_size", "export_uv", "compress_geometry"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoP1MultiviewToModelNode", "display_name": "Tripo P1: Multiview to Model", "description": "Tripo P1 multiview-to-3D from 2-4 reference images in [front, left, back, right] order. Front is required; any combination of the other three may be omitted.", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "output_mode", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "output_mode.texture_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "( $mode := widgets.output_mode; $detailed := $lookup(widgets, \"output_mode.texture_quality\") = \"detailed\"; $credits := $mode = \"geometry only\" ? 40 : ($detailed ? 60 : 50); {\"type\":\"usd\",\"usd\": $credits * 0.01, \"format\": {\"approximate\": true}})"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoImportModelNode": {"input": {"required": {"model_3d": ["FILE_3D_GLB,FILE_3D_FBX,FILE_3D_OBJ,FILE_3D_STL,FILE_3D", {"tooltip": "3D model to import (GLB / FBX / OBJ / STL, up to 150 MB). OBJ and STL files carry no embedded textures."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_3d"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["MODEL_TASK_ID"], "output_is_list": [false], "output_name": ["model task_id"], "output_tooltips": [null], "output_matchtypes": null, "name": "TripoImportModelNode", "display_name": "Tripo: Import Model", "description": "Import an external 3D model (e.g. from Rodin, Hunyuan3D or a local file) into Tripo to use it with Tripo's post-processing nodes: Texture, Rig, Convert. GLB is recommended: textures survive import only when embedded in the file. Note that texturing an imported model requires a texture prompt.", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"text\",\"text\":\"Free\"}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoTextureNode": {"input": {"required": {"model_task_id": ["MODEL_TASK_ID", {}]}, "optional": {"texture": ["BOOLEAN", {"default": true}], "pbr": ["BOOLEAN", {"default": true}], "texture_seed": ["INT", {"advanced": true, "default": 42}], "texture_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_alignment": ["COMBO", {"advanced": true, "default": "original_image", "multiselect": false, "options": ["original_image", "geometry"]}], "texture_prompt": ["STRING", {"tooltip": "Optional text guidance for texturing. Required in practice for imported models (Tripo: Import Model), which carry no source image to infer colors from.", "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model_task_id"], "optional": ["texture", "pbr", "texture_seed", "texture_quality", "texture_alignment", "texture_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoTextureNode", "display_name": "Tripo: Texture model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "texture_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $tq := widgets.texture_quality;\n {\"type\":\"usd\",\"usd\": ($contains($tq,\"detailed\") ? 0.2 : 0.1), \"format\": {\"approximate\": true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoRefineNode": {"input": {"required": {"model_task_id": ["MODEL_TASK_ID", {"tooltip": "Must be a v1.4 Tripo model"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model_task_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoRefineNode", "display_name": "Tripo: Refine Draft model", "description": "Refine a draft model created by v1.4 Tripo models only.", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.3, \"format\": {\"approximate\": true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoRigNode": {"input": {"required": {"original_model_task_id": ["MODEL_TASK_ID", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["original_model_task_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "RIG_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "rig task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoRigNode", "display_name": "Tripo: Rig model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.25, \"format\": {\"approximate\": true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoRetargetNode": {"input": {"required": {"original_model_task_id": ["RIG_TASK_ID", {}], "animation": ["COMBO", {"multiselect": false, "options": ["preset:idle", "preset:walk", "preset:run", "preset:dive", "preset:climb", "preset:jump", "preset:slash", "preset:shoot", "preset:hurt", "preset:fall", "preset:turn", "preset:quadruped:walk", "preset:hexapod:walk", "preset:octopod:walk", "preset:serpentine:march", "preset:aquatic:march"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["original_model_task_id", "animation"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "RETARGET_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "retarget task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoRetargetNode", "display_name": "Tripo: Retarget rigged model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.1, \"format\": {\"approximate\": true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoConversionNode": {"input": {"required": {"original_model_task_id": ["MODEL_TASK_ID,RIG_TASK_ID,RETARGET_TASK_ID", {}], "format": ["COMBO", {"multiselect": false, "options": ["GLTF", "USDZ", "FBX", "OBJ", "STL", "3MF"]}]}, "optional": {"quad": ["BOOLEAN", {"advanced": true, "default": false}], "face_limit": ["INT", {"advanced": true, "default": -1, "min": -1, "max": 2000000}], "texture_size": ["INT", {"advanced": true, "default": 4096, "min": 128, "max": 4096}], "texture_format": ["COMBO", {"advanced": true, "default": "JPEG", "multiselect": false, "options": ["BMP", "DPX", "HDR", "JPEG", "OPEN_EXR", "PNG", "TARGA", "TIFF", "WEBP"]}], "force_symmetry": ["BOOLEAN", {"advanced": true, "default": false}], "flatten_bottom": ["BOOLEAN", {"advanced": true, "default": false}], "flatten_bottom_threshold": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0}], "pivot_to_center_bottom": ["BOOLEAN", {"advanced": true, "default": false}], "scale_factor": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0}], "with_animation": ["BOOLEAN", {"advanced": true, "default": false}], "pack_uv": ["BOOLEAN", {"advanced": true, "default": false}], "bake": ["BOOLEAN", {"advanced": true, "default": false}], "part_names": ["STRING", {"advanced": true, "default": "", "multiline": false}], "fbx_preset": ["COMBO", {"advanced": true, "default": "blender", "multiselect": false, "options": ["blender", "mixamo", "3dsmax"]}], "export_vertex_colors": ["BOOLEAN", {"advanced": true, "default": false}], "export_orientation": ["COMBO", {"advanced": true, "default": "default", "multiselect": false, "options": ["align_image", "default"]}], "animate_in_place": ["BOOLEAN", {"advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["original_model_task_id", "format"], "optional": ["quad", "face_limit", "texture_size", "texture_format", "force_symmetry", "flatten_bottom", "flatten_bottom_threshold", "pivot_to_center_bottom", "scale_factor", "with_animation", "pack_uv", "bake", "part_names", "fbx_preset", "export_vertex_colors", "export_orientation", "animate_in_place"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "TripoConversionNode", "display_name": "Tripo: Convert model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "quad", "type": "BOOLEAN"}, {"name": "face_limit", "type": "INT"}, {"name": "texture_size", "type": "INT"}, {"name": "texture_format", "type": "COMBO"}, {"name": "flatten_bottom", "type": "BOOLEAN"}, {"name": "flatten_bottom_threshold", "type": "FLOAT"}, {"name": "pivot_to_center_bottom", "type": "BOOLEAN"}, {"name": "scale_factor", "type": "FLOAT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $face := (widgets.face_limit != null) ? widgets.face_limit : -1;\n $texSize := (widgets.texture_size != null) ? widgets.texture_size : 4096;\n $flatThresh := (widgets.flatten_bottom_threshold != null) ? widgets.flatten_bottom_threshold : 0;\n $scale := (widgets.scale_factor != null) ? widgets.scale_factor : 1;\n $texFmt := (widgets.texture_format != \"\" ? widgets.texture_format : \"jpeg\");\n $advanced :=\n widgets.quad or\n widgets.flatten_bottom or\n widgets.pivot_to_center_bottom or\n ($face != -1) or\n ($texSize != 4096) or\n ($flatThresh != 0) or\n ($scale != 1) or\n ($texFmt != \"jpeg\");\n {\"type\":\"usd\",\"usd\": ($advanced ? 0.1 : 0.05), \"format\": {\"approximate\": true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VeoVideoGenerationNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the video", "default": "", "multiline": true}], "aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video", "default": "16:9", "multiselect": false, "options": ["16:9", "9:16"]}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Negative text prompt to guide what to avoid in the video", "default": "", "multiline": true}], "duration_seconds": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 5, "min": 5, "max": 8, "step": 1, "display": "number"}], "enhance_prompt": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance", "advanced": true, "default": true}], "person_generation": ["COMBO", {"tooltip": "Whether to allow generating people in the video", "advanced": true, "default": "ALLOW", "multiselect": false, "options": ["ALLOW", "BLOCK"]}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}], "image": ["IMAGE", {"tooltip": "Optional reference image to guide video generation"}], "model": ["COMBO", {"tooltip": "Veo 2 model to use for video generation", "default": "veo-2.0-generate-001", "multiselect": false, "options": ["veo-2.0-generate-001"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "aspect_ratio"], "optional": ["negative_prompt", "duration_seconds", "enhance_prompt", "person_generation", "seed", "image", "model"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "VeoVideoGenerationNode", "display_name": "Google Veo 2 Video Generation", "description": "Generates videos from text prompts using Google's Veo 2 API", "python_module": "comfy_api_nodes.nodes_veo2", "category": "partner/video/Veo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration_seconds", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.5 * widgets.duration_seconds}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Veo3VideoGenerationNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the video", "default": "", "multiline": true}], "aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video", "default": "16:9", "multiselect": false, "options": ["16:9", "9:16"]}]}, "optional": {"resolution": ["COMBO", {"tooltip": "Output video resolution. 4K is not available for veo-3.1-lite and veo-3.0 models.", "default": "720p", "multiselect": false, "options": ["720p", "1080p", "4k"]}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt to guide what to avoid in the video", "default": "", "multiline": true}], "duration_seconds": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 8, "min": 4, "max": 8, "step": 2, "display": "number"}], "enhance_prompt": ["BOOLEAN", {"tooltip": "This parameter is deprecated and ignored.", "advanced": true, "default": true}], "person_generation": ["COMBO", {"tooltip": "Whether to allow generating people in the video", "advanced": true, "default": "ALLOW", "multiselect": false, "options": ["ALLOW", "BLOCK"]}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}], "image": ["IMAGE", {"tooltip": "Optional reference image to guide video generation"}], "model": ["COMBO", {"tooltip": "Veo 3 model to use for video generation", "multiselect": false, "options": ["veo-3.1-generate", "veo-3.1-fast-generate", "veo-3.1-lite", "veo-3.0-generate-001", "veo-3.0-fast-generate-001"]}], "generate_audio": ["BOOLEAN", {"tooltip": "Generate audio for the video. Supported by all Veo 3 models.", "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "aspect_ratio"], "optional": ["resolution", "negative_prompt", "duration_seconds", "enhance_prompt", "person_generation", "seed", "image", "model", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Veo3VideoGenerationNode", "display_name": "Google Veo 3 Video Generation", "description": "Generates videos from text prompts using Google's Veo 3 API", "python_module": "comfy_api_nodes.nodes_veo2", "category": "partner/video/Veo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}, {"name": "resolution", "type": "COMBO"}, {"name": "duration_seconds", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $r := widgets.resolution;\n $a := widgets.generate_audio;\n $seconds := widgets.duration_seconds;\n $pps :=\n $contains($m, \"lite\")\n ? ($r = \"1080p\" ? ($a ? 0.08 : 0.05) : ($a ? 0.05 : 0.03))\n : $contains($m, \"3.1-fast\")\n ? ($r = \"4k\" ? ($a ? 0.30 : 0.25) : $r = \"1080p\" ? ($a ? 0.12 : 0.10) : ($a ? 0.10 : 0.08))\n : $contains($m, \"3.1-generate\")\n ? ($r = \"4k\" ? ($a ? 0.60 : 0.40) : ($a ? 0.40 : 0.20))\n : $contains($m, \"3.0-fast\")\n ? ($a ? 0.15 : 0.10)\n : ($a ? 0.40 : 0.20);\n {\"type\":\"usd\",\"usd\": $pps * $seconds}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Veo3FirstLastFrameNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the video", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt to guide what to avoid in the video", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720p", "1080p", "4k"]}], "aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video", "default": "16:9", "multiselect": false, "options": ["16:9", "9:16"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 8, "min": 4, "max": 8, "step": 2, "display": "slider"}], "seed": ["INT", {"tooltip": "Seed for video generation", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}], "first_frame": ["IMAGE", {"tooltip": "Start frame"}], "last_frame": ["IMAGE", {"tooltip": "End frame"}], "model": ["COMBO", {"multiselect": false, "options": ["veo-3.1-generate", "veo-3.1-fast-generate", "veo-3.1-lite"]}], "generate_audio": ["BOOLEAN", {"tooltip": "Generate audio for the video.", "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "negative_prompt", "resolution", "aspect_ratio", "duration", "seed", "first_frame", "last_frame", "model", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Veo3FirstLastFrameNode", "display_name": "Google Veo 3 First-Last-Frame to Video", "description": "Generate video using prompt and first and last frames.", "python_module": "comfy_api_nodes.nodes_veo2", "category": "partner/video/Veo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $r := widgets.resolution;\n $ga := widgets.generate_audio;\n $seconds := widgets.duration;\n $pps :=\n $contains($m, \"lite\")\n ? ($r = \"1080p\" ? ($ga ? 0.08 : 0.05) : ($ga ? 0.05 : 0.03))\n : $contains($m, \"fast\")\n ? ($r = \"4k\" ? ($ga ? 0.30 : 0.25) : $r = \"1080p\" ? ($ga ? 0.12 : 0.10) : ($ga ? 0.10 : 0.08))\n : ($r = \"4k\" ? ($ga ? 0.60 : 0.40) : ($ga ? 0.40 : 0.20));\n {\"type\":\"usd\",\"usd\": $pps * $seconds}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduTextToVideoNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model name", "multiselect": false, "options": ["viduq1"]}], "prompt": ["STRING", {"tooltip": "A textual description for video generation", "multiline": true}]}, "optional": {"duration": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 5, "min": 5, "max": 5, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "resolution": ["COMBO", {"tooltip": "Supported values may vary by model & duration", "advanced": true, "multiselect": false, "options": ["1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt"], "optional": ["duration", "seed", "aspect_ratio", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduTextToVideoNode", "display_name": "Vidu Text To Video Generation", "description": "Generate video from a text prompt", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduImageToVideoNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model name", "multiselect": false, "options": ["viduq1"]}], "image": ["IMAGE", {"tooltip": "An image to be used as the start frame of the generated video"}]}, "optional": {"prompt": ["STRING", {"tooltip": "A textual description for video generation", "default": "", "multiline": true}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 5, "min": 5, "max": 5, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "resolution": ["COMBO", {"tooltip": "Supported values may vary by model & duration", "advanced": true, "multiselect": false, "options": ["1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image"], "optional": ["prompt", "duration", "seed", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduImageToVideoNode", "display_name": "Vidu Image To Video Generation", "description": "Generate video from image and optional prompt", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduReferenceVideoNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model name", "multiselect": false, "options": ["viduq1"]}], "images": ["IMAGE", {"tooltip": "Images to use as references to generate a video with consistent subjects (max 7 images)."}], "prompt": ["STRING", {"tooltip": "A textual description for video generation", "multiline": true}]}, "optional": {"duration": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 5, "min": 5, "max": 5, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "resolution": ["COMBO", {"tooltip": "Supported values may vary by model & duration", "advanced": true, "multiselect": false, "options": ["1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "images", "prompt"], "optional": ["duration", "seed", "aspect_ratio", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduReferenceVideoNode", "display_name": "Vidu Reference To Video Generation", "description": "Generate video from multiple images and a prompt", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduStartEndToVideoNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model name", "multiselect": false, "options": ["viduq1"]}], "first_frame": ["IMAGE", {"tooltip": "Start frame"}], "end_frame": ["IMAGE", {"tooltip": "End frame"}]}, "optional": {"prompt": ["STRING", {"tooltip": "A textual description for video generation", "multiline": true}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 5, "min": 5, "max": 5, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "resolution": ["COMBO", {"tooltip": "Supported values may vary by model & duration", "advanced": true, "multiselect": false, "options": ["1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "first_frame", "end_frame"], "optional": ["prompt", "duration", "seed", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduStartEndToVideoNode", "display_name": "Vidu Start End To Video Generation", "description": "Generate a video from start and end frames and a prompt", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu2TextToVideoNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["viduq2"]}], "prompt": ["STRING", {"tooltip": "A textual description for video generation, with a maximum length of 2000 characters.", "multiline": true}], "duration": ["INT", {"default": 5, "min": 1, "max": 10, "step": 1, "display": "slider"}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "3:4", "4:3", "1:1"]}], "resolution": ["COMBO", {"advanced": true, "multiselect": false, "options": ["720p", "1080p"]}], "background_music": ["BOOLEAN", {"tooltip": "Whether to add background music to the generated video.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "duration", "seed", "aspect_ratio", "resolution", "background_music"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu2TextToVideoNode", "display_name": "Vidu2 Text-to-Video Generation", "description": "Generate video from a text prompt", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $is1080 := widgets.resolution = \"1080p\";\n $base := $is1080 ? 0.1 : 0.075;\n $perSec := $is1080 ? 0.05 : 0.025;\n {\"type\":\"usd\",\"usd\": $base + $perSec * (widgets.duration - 1)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu2ImageToVideoNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["viduq2-pro-fast", "viduq2-pro", "viduq2-turbo"]}], "image": ["IMAGE", {"tooltip": "An image to be used as the start frame of the generated video."}], "prompt": ["STRING", {"tooltip": "An optional text prompt for video generation (max 2000 characters).", "default": "", "multiline": true}], "duration": ["INT", {"default": 5, "min": 1, "max": 10, "step": 1, "display": "slider"}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "resolution": ["COMBO", {"advanced": true, "multiselect": false, "options": ["720p", "1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame.", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "prompt", "duration", "seed", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu2ImageToVideoNode", "display_name": "Vidu2 Image-to-Video Generation", "description": "Generate a video from an image and an optional prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $d := widgets.duration;\n $is1080 := widgets.resolution = \"1080p\";\n $contains($m, \"pro-fast\")\n ? (\n $base := $is1080 ? 0.08 : 0.04;\n $perSec := $is1080 ? 0.02 : 0.01;\n {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n )\n : $contains($m, \"pro\")\n ? (\n $base := $is1080 ? 0.275 : 0.075;\n $perSec := $is1080 ? 0.075 : 0.05;\n {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n )\n : $contains($m, \"turbo\")\n ? (\n $is1080\n ? {\"type\":\"usd\",\"usd\": 0.175 + 0.05 * ($d - 1)}\n : (\n $d <= 1 ? {\"type\":\"usd\",\"usd\": 0.04}\n : $d <= 2 ? {\"type\":\"usd\",\"usd\": 0.05}\n : {\"type\":\"usd\",\"usd\": 0.05 + 0.05 * ($d - 2)}\n )\n )\n : {\"type\":\"usd\",\"usd\": 0.04}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu2ReferenceVideoNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["viduq2"]}], "subjects": ["COMFY_AUTOGROW_V3", {"tooltip": "For each subject, provide up to 3 reference images (7 images total across all subjects). Reference them in prompts via @subject{subject_id}.", "template": {"input": {"required": {"reference_images": ["IMAGE", {}]}}, "names": ["subject1", "subject2", "subject3", "subject4", "subject5", "subject6", "subject7"], "min": 1}}], "prompt": ["STRING", {"tooltip": "When enabled, the video will include generated speech and background music based on the prompt.", "multiline": true}], "audio": ["BOOLEAN", {"tooltip": "When enabled video will contain generated speech and background music based on the prompt.", "advanced": true, "default": false}], "duration": ["INT", {"default": 5, "min": 1, "max": 10, "step": 1, "display": "slider"}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "4:3", "3:4", "1:1"]}], "resolution": ["COMBO", {"advanced": true, "multiselect": false, "options": ["720p", "1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame.", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "subjects", "prompt", "audio", "duration", "seed", "aspect_ratio", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu2ReferenceVideoNode", "display_name": "Vidu2 Reference-to-Video Generation", "description": "Generate a video from multiple reference images and a prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "audio", "type": "BOOLEAN"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $is1080 := widgets.resolution = \"1080p\";\n $base := $is1080 ? 0.375 : 0.125;\n $perSec := $is1080 ? 0.05 : 0.025;\n $audioCost := widgets.audio = true ? 0.075 : 0;\n {\"type\":\"usd\",\"usd\": $base + $perSec * (widgets.duration - 1) + $audioCost}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu2StartEndToVideoNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["viduq2-pro-fast", "viduq2-pro", "viduq2-turbo"]}], "first_frame": ["IMAGE", {}], "end_frame": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt description (max 2000 characters).", "multiline": true}], "duration": ["INT", {"default": 5, "min": 2, "max": 8, "step": 1, "display": "slider"}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "resolution": ["COMBO", {"advanced": true, "multiselect": false, "options": ["720p", "1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame.", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "first_frame", "end_frame", "prompt", "duration", "seed", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu2StartEndToVideoNode", "display_name": "Vidu2 Start/End Frame-to-Video Generation", "description": "Generate a video from a start frame, an end frame, and a prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $d := widgets.duration;\n $is1080 := widgets.resolution = \"1080p\";\n $contains($m, \"pro-fast\")\n ? (\n $base := $is1080 ? 0.08 : 0.04;\n $perSec := $is1080 ? 0.02 : 0.01;\n {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n )\n : $contains($m, \"pro\")\n ? (\n $base := $is1080 ? 0.275 : 0.075;\n $perSec := $is1080 ? 0.075 : 0.05;\n {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n )\n : $contains($m, \"turbo\")\n ? (\n $is1080\n ? {\"type\":\"usd\",\"usd\": 0.175 + 0.05 * ($d - 1)}\n : (\n $d <= 2 ? {\"type\":\"usd\",\"usd\": 0.05}\n : {\"type\":\"usd\",\"usd\": 0.05 + 0.05 * ($d - 2)}\n )\n )\n : {\"type\":\"usd\",\"usd\": 0.04}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduExtendVideoNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for video extension.", "options": [{"key": "viduq2-pro", "inputs": {"required": {"duration": ["INT", {"tooltip": "Duration of the extended video in seconds.", "default": 4, "min": 1, "max": 7, "step": 1, "display": "slider"}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}]}}}, {"key": "viduq2-turbo", "inputs": {"required": {"duration": ["INT", {"tooltip": "Duration of the extended video in seconds.", "default": 4, "min": 1, "max": 7, "step": 1, "display": "slider"}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}]}}}]}], "video": ["VIDEO", {"tooltip": "The source video to extend."}], "prompt": ["STRING", {"tooltip": "An optional text prompt for the extended video (max 2000 characters).", "default": "", "multiline": true}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"end_frame": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "video", "prompt", "seed"], "optional": ["end_frame"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduExtendVideoNode", "display_name": "Vidu Video Extension", "description": "Extend an existing video by generating additional frames.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.duration", "type": "INT"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $d := $lookup(widgets, \"model.duration\");\n $res := $lookup(widgets, \"model.resolution\");\n $contains($m, \"pro\")\n ? (\n $base := $lookup({\"720p\": 0.15, \"1080p\": 0.3}, $res);\n $perSec := $lookup({\"720p\": 0.05, \"1080p\": 0.075}, $res);\n {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n )\n : (\n $base := $lookup({\"720p\": 0.075, \"1080p\": 0.2}, $res);\n $perSec := $lookup({\"720p\": 0.025, \"1080p\": 0.05}, $res);\n {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n )\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduMultiFrameVideoNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["viduq2-pro", "viduq2-turbo"]}], "start_image": ["IMAGE", {"tooltip": "The starting frame image. Aspect ratio must be between 1:4 and 4:1."}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "resolution": ["COMBO", {"multiselect": false, "options": ["720p", "1080p"]}], "frames": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Number of keyframe transitions (2-9).", "options": [{"key": "2", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "3", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "4", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "5", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt5": ["STRING", {"tooltip": "Text prompt for frame 5 transition.", "default": "", "multiline": true}], "end_image5": ["IMAGE", {"tooltip": "End frame image for segment 5. Aspect ratio must be between 1:4 and 4:1."}], "duration5": ["INT", {"tooltip": "Duration for segment 5 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "6", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt5": ["STRING", {"tooltip": "Text prompt for frame 5 transition.", "default": "", "multiline": true}], "end_image5": ["IMAGE", {"tooltip": "End frame image for segment 5. Aspect ratio must be between 1:4 and 4:1."}], "duration5": ["INT", {"tooltip": "Duration for segment 5 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt6": ["STRING", {"tooltip": "Text prompt for frame 6 transition.", "default": "", "multiline": true}], "end_image6": ["IMAGE", {"tooltip": "End frame image for segment 6. Aspect ratio must be between 1:4 and 4:1."}], "duration6": ["INT", {"tooltip": "Duration for segment 6 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "7", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt5": ["STRING", {"tooltip": "Text prompt for frame 5 transition.", "default": "", "multiline": true}], "end_image5": ["IMAGE", {"tooltip": "End frame image for segment 5. Aspect ratio must be between 1:4 and 4:1."}], "duration5": ["INT", {"tooltip": "Duration for segment 5 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt6": ["STRING", {"tooltip": "Text prompt for frame 6 transition.", "default": "", "multiline": true}], "end_image6": ["IMAGE", {"tooltip": "End frame image for segment 6. Aspect ratio must be between 1:4 and 4:1."}], "duration6": ["INT", {"tooltip": "Duration for segment 6 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt7": ["STRING", {"tooltip": "Text prompt for frame 7 transition.", "default": "", "multiline": true}], "end_image7": ["IMAGE", {"tooltip": "End frame image for segment 7. Aspect ratio must be between 1:4 and 4:1."}], "duration7": ["INT", {"tooltip": "Duration for segment 7 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "8", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt5": ["STRING", {"tooltip": "Text prompt for frame 5 transition.", "default": "", "multiline": true}], "end_image5": ["IMAGE", {"tooltip": "End frame image for segment 5. Aspect ratio must be between 1:4 and 4:1."}], "duration5": ["INT", {"tooltip": "Duration for segment 5 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt6": ["STRING", {"tooltip": "Text prompt for frame 6 transition.", "default": "", "multiline": true}], "end_image6": ["IMAGE", {"tooltip": "End frame image for segment 6. Aspect ratio must be between 1:4 and 4:1."}], "duration6": ["INT", {"tooltip": "Duration for segment 6 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt7": ["STRING", {"tooltip": "Text prompt for frame 7 transition.", "default": "", "multiline": true}], "end_image7": ["IMAGE", {"tooltip": "End frame image for segment 7. Aspect ratio must be between 1:4 and 4:1."}], "duration7": ["INT", {"tooltip": "Duration for segment 7 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt8": ["STRING", {"tooltip": "Text prompt for frame 8 transition.", "default": "", "multiline": true}], "end_image8": ["IMAGE", {"tooltip": "End frame image for segment 8. Aspect ratio must be between 1:4 and 4:1."}], "duration8": ["INT", {"tooltip": "Duration for segment 8 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "9", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt5": ["STRING", {"tooltip": "Text prompt for frame 5 transition.", "default": "", "multiline": true}], "end_image5": ["IMAGE", {"tooltip": "End frame image for segment 5. Aspect ratio must be between 1:4 and 4:1."}], "duration5": ["INT", {"tooltip": "Duration for segment 5 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt6": ["STRING", {"tooltip": "Text prompt for frame 6 transition.", "default": "", "multiline": true}], "end_image6": ["IMAGE", {"tooltip": "End frame image for segment 6. Aspect ratio must be between 1:4 and 4:1."}], "duration6": ["INT", {"tooltip": "Duration for segment 6 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt7": ["STRING", {"tooltip": "Text prompt for frame 7 transition.", "default": "", "multiline": true}], "end_image7": ["IMAGE", {"tooltip": "End frame image for segment 7. Aspect ratio must be between 1:4 and 4:1."}], "duration7": ["INT", {"tooltip": "Duration for segment 7 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt8": ["STRING", {"tooltip": "Text prompt for frame 8 transition.", "default": "", "multiline": true}], "end_image8": ["IMAGE", {"tooltip": "End frame image for segment 8. Aspect ratio must be between 1:4 and 4:1."}], "duration8": ["INT", {"tooltip": "Duration for segment 8 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt9": ["STRING", {"tooltip": "Text prompt for frame 9 transition.", "default": "", "multiline": true}], "end_image9": ["IMAGE", {"tooltip": "End frame image for segment 9. Aspect ratio must be between 1:4 and 4:1."}], "duration9": ["INT", {"tooltip": "Duration for segment 9 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "start_image", "seed", "resolution", "frames"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduMultiFrameVideoNode", "display_name": "Vidu Multi-Frame Video Generation", "description": "Generate a video with multiple keyframe transitions.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}, {"name": "frames", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "frames.duration1", "type": "INT"}, {"name": "frames.duration2", "type": "INT"}, {"name": "frames.duration3", "type": "INT"}, {"name": "frames.duration4", "type": "INT"}, {"name": "frames.duration5", "type": "INT"}, {"name": "frames.duration6", "type": "INT"}, {"name": "frames.duration7", "type": "INT"}, {"name": "frames.duration8", "type": "INT"}, {"name": "frames.duration9", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $n := $number(widgets.frames);\n $is1080 := widgets.resolution = \"1080p\";\n $d1 := $lookup(widgets, \"frames.duration1\");\n $d2 := $lookup(widgets, \"frames.duration2\");\n $d3 := $n >= 3 ? $lookup(widgets, \"frames.duration3\") : 0;\n $d4 := $n >= 4 ? $lookup(widgets, \"frames.duration4\") : 0;\n $d5 := $n >= 5 ? $lookup(widgets, \"frames.duration5\") : 0;\n $d6 := $n >= 6 ? $lookup(widgets, \"frames.duration6\") : 0;\n $d7 := $n >= 7 ? $lookup(widgets, \"frames.duration7\") : 0;\n $d8 := $n >= 8 ? $lookup(widgets, \"frames.duration8\") : 0;\n $d9 := $n >= 9 ? $lookup(widgets, \"frames.duration9\") : 0;\n $totalDuration := $d1 + $d2 + $d3 + $d4 + $d5 + $d6 + $d7 + $d8 + $d9;\n $contains($m, \"pro\")\n ? (\n $base := $is1080 ? 0.3 : 0.15;\n $perSec := $is1080 ? 0.075 : 0.05;\n {\"type\":\"usd\",\"usd\": $n * $base + $perSec * $totalDuration}\n )\n : (\n $base := $is1080 ? 0.2 : 0.075;\n $perSec := $is1080 ? 0.05 : 0.025;\n {\"type\":\"usd\",\"usd\": $n * $base + $perSec * $totalDuration}\n )\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu3TextToVideoNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for video generation.", "options": [{"key": "viduq3-pro", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["16:9", "9:16", "3:4", "4:3", "1:1"]}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}, {"key": "viduq3-turbo", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["16:9", "9:16", "3:4", "4:3", "1:1"]}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}]}], "prompt": ["STRING", {"tooltip": "A textual description for video generation, with a maximum length of 2000 characters.", "multiline": true}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu3TextToVideoNode", "display_name": "Vidu Q3 Text-to-Video Generation", "description": "Generate video from a text prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.duration", "type": "INT"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $d := $lookup(widgets, \"model.duration\");\n $contains(widgets.model, \"turbo\")\n ? (\n $rate := $lookup({\"720p\": 0.06, \"1080p\": 0.08}, $res);\n {\"type\":\"usd\",\"usd\": $rate * $d}\n )\n : (\n $rate := $lookup({\"720p\": 0.15, \"1080p\": 0.16}, $res);\n {\"type\":\"usd\",\"usd\": $rate * $d}\n )\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu3ImageToVideoNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for video generation.", "options": [{"key": "viduq3-pro", "inputs": {"required": {"resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p", "2K"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}, {"key": "viduq3-turbo", "inputs": {"required": {"resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}]}], "image": ["IMAGE", {"tooltip": "An image to be used as the start frame of the generated video."}], "prompt": ["STRING", {"tooltip": "An optional text prompt for video generation (max 2000 characters).", "default": "", "multiline": true}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu3ImageToVideoNode", "display_name": "Vidu Q3 Image-to-Video Generation", "description": "Generate a video from an image and an optional prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.duration", "type": "INT"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $d := $lookup(widgets, \"model.duration\");\n $contains(widgets.model, \"turbo\")\n ? (\n $rate := $lookup({\"720p\": 0.06, \"1080p\": 0.08}, $res);\n {\"type\":\"usd\",\"usd\": $rate * $d}\n )\n : (\n $rate := $lookup({\"720p\": 0.15, \"1080p\": 0.16, \"2k\": 0.2}, $res);\n {\"type\":\"usd\",\"usd\": $rate * $d}\n )\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu3StartEndToVideoNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for video generation.", "options": [{"key": "viduq3-pro", "inputs": {"required": {"resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}, {"key": "viduq3-turbo", "inputs": {"required": {"resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}]}], "first_frame": ["IMAGE", {}], "end_frame": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt description (max 2000 characters).", "multiline": true}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "first_frame", "end_frame", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu3StartEndToVideoNode", "display_name": "Vidu Q3 Start/End Frame-to-Video Generation", "description": "Generate a video from a start frame, an end frame, and a prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.duration", "type": "INT"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $d := $lookup(widgets, \"model.duration\");\n $contains(widgets.model, \"turbo\")\n ? (\n $rate := $lookup({\"720p\": 0.06, \"1080p\": 0.08}, $res);\n {\"type\":\"usd\",\"usd\": $rate * $d}\n )\n : (\n $rate := $lookup({\"720p\": 0.15, \"1080p\": 0.16}, $res);\n {\"type\":\"usd\",\"usd\": $rate * $d}\n )\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanTextToImageApi": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model to use.", "multiselect": false, "options": ["wan2.5-t2i-preview"]}], "prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "width": ["INT", {"default": 1024, "min": 768, "max": 1440, "step": 32}], "height": ["INT", {"default": 1024, "min": 768, "max": 1440, "step": 32}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt"], "optional": ["negative_prompt", "width", "height", "seed", "prompt_extend", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanTextToImageApi", "display_name": "Wan Text to Image", "description": "Generates an image based on a text prompt.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/image/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.03}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanImageToImageApi": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model to use.", "default": "wan2.5-i2i-preview", "multiselect": false, "options": ["wan2.5-i2i-preview"]}], "image": ["IMAGE", {"tooltip": "Single-image editing or multi-image fusion. Maximum 2 images."}], "prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "prompt"], "optional": ["negative_prompt", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanImageToImageApi", "display_name": "Wan Image to Image", "description": "Generates an image from one or two input images and a text prompt. The output image is currently fixed at 1.6 MP, and its aspect ratio matches the input image(s).", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/image/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.03}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanTextToVideoApi": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model to use.", "default": "wan2.6-t2v", "multiselect": false, "options": ["wan2.5-t2v-preview", "wan2.6-t2v"]}], "prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "size": ["COMBO", {"default": "720p: 1:1 (960x960)", "multiselect": false, "options": ["480p: 1:1 (624x624)", "480p: 16:9 (832x480)", "480p: 9:16 (480x832)", "720p: 1:1 (960x960)", "720p: 16:9 (1280x720)", "720p: 9:16 (720x1280)", "720p: 4:3 (1088x832)", "720p: 3:4 (832x1088)", "1080p: 1:1 (1440x1440)", "1080p: 16:9 (1920x1080)", "1080p: 9:16 (1080x1920)", "1080p: 4:3 (1632x1248)", "1080p: 3:4 (1248x1632)"]}], "duration": ["INT", {"tooltip": "A 15-second duration is available only for the Wan 2.6 model.", "default": 5, "min": 5, "max": 15, "step": 5, "display": "number"}], "audio": ["AUDIO", {"tooltip": "Audio must contain a clear, loud voice, without extraneous noise or background music."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "generate_audio": ["BOOLEAN", {"tooltip": "If no audio input is provided, generate audio automatically.", "advanced": true, "default": false}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}], "shot_type": ["COMBO", {"tooltip": "Specifies the shot type for the generated video, that is, whether the video is a single continuous shot or multiple shots with cuts. This parameter takes effect only when prompt_extend is True.", "advanced": true, "multiselect": false, "options": ["single", "multi"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt"], "optional": ["negative_prompt", "size", "duration", "audio", "seed", "generate_audio", "prompt_extend", "watermark", "shot_type"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanTextToVideoApi", "display_name": "Wan Text to Video", "description": "Generates a video based on a text prompt.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "size", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $ppsTable := { \"480p\": 0.05, \"720p\": 0.1, \"1080p\": 0.15 };\n $resKey := $substringBefore(widgets.size, \":\");\n $pps := $lookup($ppsTable, $resKey);\n { \"type\": \"usd\", \"usd\": $round($pps * widgets.duration, 2) }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanImageToVideoApi": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model to use.", "default": "wan2.6-i2v", "multiselect": false, "options": ["wan2.5-i2v-preview", "wan2.6-i2v"]}], "image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "resolution": ["COMBO", {"default": "720P", "multiselect": false, "options": ["480P", "720P", "1080P"]}], "duration": ["INT", {"tooltip": "Duration 15 available only for WAN2.6 model.", "default": 5, "min": 5, "max": 15, "step": 5, "display": "number"}], "audio": ["AUDIO", {"tooltip": "Audio must contain a clear, loud voice, without extraneous noise or background music."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "generate_audio": ["BOOLEAN", {"tooltip": "If no audio input is provided, generate audio automatically.", "advanced": true, "default": false}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}], "shot_type": ["COMBO", {"tooltip": "Specifies the shot type for the generated video, that is, whether the video is a single continuous shot or multiple shots with cuts. This parameter takes effect only when prompt_extend is True.", "advanced": true, "multiselect": false, "options": ["single", "multi"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "prompt"], "optional": ["negative_prompt", "resolution", "duration", "audio", "seed", "generate_audio", "prompt_extend", "watermark", "shot_type"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanImageToVideoApi", "display_name": "Wan Image to Video", "description": "Generates a video from the first frame and a text prompt.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $ppsTable := { \"480p\": 0.05, \"720p\": 0.1, \"1080p\": 0.15 };\n $pps := $lookup($ppsTable, widgets.resolution);\n { \"type\": \"usd\", \"usd\": $round($pps * widgets.duration, 2) }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanReferenceVideoApi": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["wan2.6-r2v"]}], "prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese. Use identifiers such as `character1` and `character2` to refer to the reference characters.", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "reference_videos": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_video": ["VIDEO", {}]}}, "names": ["character1", "character2", "character3"], "min": 1}}], "size": ["COMBO", {"multiselect": false, "options": ["720p: 1:1 (960x960)", "720p: 16:9 (1280x720)", "720p: 9:16 (720x1280)", "720p: 4:3 (1088x832)", "720p: 3:4 (832x1088)", "1080p: 1:1 (1440x1440)", "1080p: 16:9 (1920x1080)", "1080p: 9:16 (1080x1920)", "1080p: 4:3 (1632x1248)", "1080p: 3:4 (1248x1632)"]}], "duration": ["INT", {"default": 5, "min": 5, "max": 10, "step": 5, "display": "slider"}], "seed": ["INT", {"default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "shot_type": ["COMBO", {"tooltip": "Specifies the shot type for the generated video, that is, whether the video is a single continuous shot or multiple shots with cuts.", "advanced": true, "multiselect": false, "options": ["single", "multi"]}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "negative_prompt", "reference_videos", "size", "duration", "seed", "shot_type", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanReferenceVideoApi", "display_name": "Wan Reference to Video", "description": "Use the character and voice from input videos, combined with a prompt, to generate a new video that maintains character consistency.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "size", "type": "COMBO"}, {"name": "duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rate := $contains(widgets.size, \"1080p\") ? 0.15 : 0.10;\n $inputMin := 2 * $rate;\n $inputMax := 5 * $rate;\n $outputPrice := widgets.duration * $rate;\n {\n \"type\": \"range_usd\",\n \"min_usd\": $inputMin + $outputPrice,\n \"max_usd\": $inputMax + $outputPrice\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan2TextToVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "wan2.7-t2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "duration": ["INT", {"default": 5, "min": 2, "max": 15, "step": 1, "display": "number"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "optional": {"audio": ["AUDIO", {"tooltip": "Audio for driving video generation (e.g., lip sync, beat-matched motion). Duration: 3s-30s. If not provided, the model automatically generates matching background music or sound effects."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "seed", "prompt_extend", "watermark"], "optional": ["audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan2TextToVideoApi", "display_name": "Wan 2.7 Text to Video", "description": "Generates a video based on a text prompt using the Wan 2.7 model.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := { \"720p\": 0.1, \"1080p\": 0.15 };\n $pps := $lookup($ppsTable, $res);\n { \"type\": \"usd\", \"usd\": $pps * $dur }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan2ImageToVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "wan2.7-i2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "duration": ["INT", {"default": 5, "min": 2, "max": 15, "step": 1, "display": "number"}]}}}]}], "first_frame": ["IMAGE", {"tooltip": "First frame image. The output aspect ratio is derived from this image."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "optional": {"last_frame": ["IMAGE", {"tooltip": "Last frame image. The model generates a video transitioning from first to last frame."}], "audio": ["AUDIO", {"tooltip": "Audio for driving video generation (e.g., lip sync, beat-matched motion). Duration: 2s-30s. If not provided, the model automatically generates matching background music or sound effects."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "first_frame", "seed", "prompt_extend", "watermark"], "optional": ["last_frame", "audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan2ImageToVideoApi", "display_name": "Wan 2.7 Image to Video", "description": "Generate a video from a first-frame image, with optional last-frame image and audio.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := { \"720p\": 0.1, \"1080p\": 0.15 };\n $pps := $lookup($ppsTable, $res);\n { \"type\": \"usd\", \"usd\": $pps * $dur }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan2VideoContinuationApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "wan2.7-i2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "duration": ["INT", {"tooltip": "Total output duration in seconds. The model generates continuation to fill the remaining time after the input clip.", "default": 5, "min": 2, "max": 15, "step": 1, "display": "number"}]}}}]}], "first_clip": ["VIDEO", {"tooltip": "Input video to continue from. Duration: 2s-10s. The output aspect ratio is derived from this video."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "optional": {"last_frame": ["IMAGE", {"tooltip": "Last frame image. The continuation will transition towards this frame."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "first_clip", "seed", "prompt_extend", "watermark"], "optional": ["last_frame"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan2VideoContinuationApi", "display_name": "Wan 2.7 Video Continuation", "description": "Continue a video from where it left off, with optional last-frame control.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := { \"720p\": 0.1, \"1080p\": 0.15 };\n $pps := $lookup($ppsTable, $res);\n $outputPrice := $pps * $dur;\n {\n \"type\": \"range_usd\",\n \"min_usd\": 2 * $pps + $outputPrice,\n \"max_usd\": 5 * $pps + $outputPrice\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan2VideoEditApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "wan2.7-videoedit", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Editing instructions or style transfer requirements.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio. If not changed, approximates the input video ratio.", "multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "duration": ["COMBO", {"tooltip": "Output duration in seconds. 'auto' matches the input video duration. A specific value truncates from the start of the video.", "default": "auto", "multiselect": false, "options": ["auto", "2", "3", "4", "5", "6", "7", "8", "9", "10"]}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image1", "image2", "image3", "image4"], "min": 0}}]}}}]}], "video": ["VIDEO", {"tooltip": "The video to edit."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "audio_setting": ["COMBO", {"tooltip": "'auto': model decides whether to regenerate audio based on the prompt. 'origin': preserve the original audio from the input video.", "advanced": true, "default": "auto", "multiselect": false, "options": ["auto", "origin"]}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "video", "seed", "audio_setting", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan2VideoEditApi", "display_name": "Wan 2.7 Video Edit", "description": "Edit a video using text instructions, reference images, or style transfer.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := { \"720p\": 0.1, \"1080p\": 0.15 };\n $pps := $lookup($ppsTable, $res);\n { \"type\": \"usd\", \"usd\": $pps, \"format\": { \"suffix\": \"/second\", \"note\": \"(input + output)\" } }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan2ReferenceVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "wan2.7-r2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the video. Use identifiers such as 'character1' and 'character2' to refer to the reference characters.", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "duration": ["INT", {"default": 5, "min": 2, "max": 10, "step": 1, "display": "number"}], "reference_videos": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_video": ["VIDEO", {}]}}, "names": ["video1", "video2", "video3"], "min": 0}}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image1", "image2", "image3", "image4", "image5"], "min": 0}}]}}}]}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan2ReferenceVideoApi", "display_name": "Wan 2.7 Reference to Video", "description": "Generate a video featuring a person or object from reference materials. Supports single-character performances and multi-character interactions.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := { \"720p\": 0.1, \"1080p\": 0.15 };\n $pps := $lookup($ppsTable, $res);\n $outputPrice := $pps * $dur;\n {\n \"type\": \"range_usd\",\n \"min_usd\": $outputPrice,\n \"max_usd\": 5 * $pps + $outputPrice\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HappyHorseTextToVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "happyhorse-1.1-t2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4", "21:9", "9:21", "5:4", "4:5"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "step": 1, "display": "number"}]}}}, {"key": "happyhorse-1.0-t2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "step": 1, "display": "number"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "HappyHorseTextToVideoApi", "display_name": "HappyHorse Text to Video", "description": "Generates a video based on a text prompt using the HappyHorse model.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := $contains(widgets.model, \"1.1\")\n ? { \"720p\": 0.2002, \"1080p\": 0.2574 }\n : { \"720p\": 0.14, \"1080p\": 0.24 };\n $pps := $lookup($ppsTable, $res);\n { \"type\": \"usd\", \"usd\": $pps * $dur }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HappyHorseImageToVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "happyhorse-1.1-i2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "step": 1, "display": "number"}]}}}, {"key": "happyhorse-1.0-i2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "step": 1, "display": "number"}]}}}]}], "first_frame": ["IMAGE", {"tooltip": "First frame image. The output aspect ratio is derived from this image."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "first_frame", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "HappyHorseImageToVideoApi", "display_name": "HappyHorse Image to Video", "description": "Generate a video from a first-frame image using the HappyHorse model.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := $contains(widgets.model, \"1.1\")\n ? { \"720p\": 0.2002, \"1080p\": 0.2574 }\n : { \"720p\": 0.14, \"1080p\": 0.24 };\n $pps := $lookup($ppsTable, $res);\n { \"type\": \"usd\", \"usd\": $pps * $dur }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HappyHorseVideoEditApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "happyhorse-1.0-video-edit", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Editing instructions or style transfer requirements.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio. If not changed, approximates the input video ratio.", "multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image1", "image2", "image3", "image4", "image5"], "min": 0}}]}}}]}], "video": ["VIDEO", {"tooltip": "The video to edit."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "video", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "HappyHorseVideoEditApi", "display_name": "HappyHorse Video Edit", "description": "Edit a video using text instructions or reference images with the HappyHorse model. Output duration is 3-15s and matches the input video; inputs longer than 15s are truncated.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $ppsTable := { \"720p\": 0.14, \"1080p\": 0.24 };\n $pps := $lookup($ppsTable, $res);\n { \"type\": \"usd\", \"usd\": $pps, \"format\": { \"suffix\": \"/second\" } }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HappyHorseReferenceVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "happyhorse-1.1-r2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the video. Use identifiers such as 'character1' and 'character2' to refer to the reference characters.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4", "21:9", "9:21", "5:4", "4:5"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "step": 1, "display": "number"}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image1", "image2", "image3", "image4", "image5", "image6", "image7", "image8", "image9"], "min": 1}}]}}}, {"key": "happyhorse-1.0-r2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the video. Use identifiers such as 'character1' and 'character2' to refer to the reference characters.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "step": 1, "display": "number"}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image1", "image2", "image3", "image4", "image5", "image6", "image7", "image8", "image9"], "min": 1}}]}}}]}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "HappyHorseReferenceVideoApi", "display_name": "HappyHorse Reference to Video", "description": "Generate a video featuring a person or object from reference materials with the HappyHorse model. Supports single-character performances and multi-character interactions.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := $contains(widgets.model, \"1.1\")\n ? { \"720p\": 0.2002, \"1080p\": 0.2574 }\n : { \"720p\": 0.14, \"1080p\": 0.24 };\n $pps := $lookup($ppsTable, $res);\n { \"type\": \"usd\", \"usd\": $pps * $dur }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WavespeedFlashVSRNode": {"input": {"required": {"video": ["VIDEO", {}], "target_resolution": ["COMBO", {"multiselect": false, "options": ["720p", "1080p", "2K", "4K"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "target_resolution"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "WavespeedFlashVSRNode", "display_name": "FlashVSR Video Upscale", "description": "Fast, high-quality video upscaler that boosts resolution and restores clarity for low-resolution or blurry footage.", "python_module": "comfy_api_nodes.nodes_wavespeed", "category": "partner/video/WaveSpeed", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "target_resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $price_for_1sec := {\"720p\": 0.012, \"1080p\": 0.018, \"2k\": 0.024, \"4k\": 0.032};\n {\n \"type\":\"usd\",\n \"usd\": $lookup($price_for_1sec, widgets.target_resolution),\n \"format\":{\"suffix\": \"/second\", \"approximate\": true}\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WavespeedImageUpscaleNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["SeedVR2", "Ultimate"]}], "image": ["IMAGE", {}], "target_resolution": ["COMBO", {"multiselect": false, "options": ["2K", "4K", "8K"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "target_resolution"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "WavespeedImageUpscaleNode", "display_name": "WaveSpeed Image Upscale", "description": "Boost image resolution and quality, upscaling photos to 4K or 8K for sharp, detailed results.", "python_module": "comfy_api_nodes.nodes_wavespeed", "category": "partner/image/WaveSpeed", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\"seedvr2\": 0.01, \"ultimate\": 0.06};\n {\"type\":\"usd\", \"usd\": $lookup($prices, widgets.model)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveImageWebsocket": {"input": {"required": {"images": ["IMAGE"]}}, "input_order": {"required": ["images"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "SaveImageWebsocket", "display_name": "Save Image (Websocket)", "description": "", "python_module": "custom_nodes.websocket_image_save", "category": "image", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "UnetLoaderGGUF": {"input": {"required": {"unet_name": [["flux-2-klein-4b-Q4_K_M.gguf", "flux1-schnell-Q4_K_M.gguf", "qwen-image-Q4_K_M.gguf", "z-image-turbo-Q4_K_M.gguf"]]}}, "input_order": {"required": ["unet_name"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "UnetLoaderGGUF", "display_name": "Unet Loader (GGUF)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CLIPLoaderGGUF": {"input": {"required": {"clip_name": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "type": [["stable_diffusion", "stable_cascade", "sd3", "stable_audio", "mochi", "ltxv", "pixart", "cosmos", "lumina2", "wan", "hidream", "chroma", "ace", "omnigen2", "qwen_image", "hunyuan_image", "flux2", "ovis", "longcat_image", "cogvideox", "lens", "pixeldit", "ideogram4", "boogu", "krea2"]]}}, "input_order": {"required": ["clip_name", "type"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPLoaderGGUF", "display_name": "CLIPLoader (GGUF)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DualCLIPLoaderGGUF": {"input": {"required": {"clip_name1": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "clip_name2": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "type": [["sdxl", "sd3", "flux", "hunyuan_video", "hidream", "hunyuan_image", "hunyuan_video_15", "kandinsky5", "kandinsky5_image", "ltxv", "newbie", "ace"]]}}, "input_order": {"required": ["clip_name1", "clip_name2", "type"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "DualCLIPLoaderGGUF", "display_name": "DualCLIPLoader (GGUF)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "TripleCLIPLoaderGGUF": {"input": {"required": {"clip_name1": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "clip_name2": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "clip_name3": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]]}}, "input_order": {"required": ["clip_name1", "clip_name2", "clip_name3"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "TripleCLIPLoaderGGUF", "display_name": "TripleCLIPLoader (GGUF)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "QuadrupleCLIPLoaderGGUF": {"input": {"required": {"clip_name1": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "clip_name2": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "clip_name3": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "clip_name4": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]]}}, "input_order": {"required": ["clip_name1", "clip_name2", "clip_name3", "clip_name4"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "QuadrupleCLIPLoaderGGUF", "display_name": "QuadrupleCLIPLoader (GGUF)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "UnetLoaderGGUFAdvanced": {"input": {"required": {"unet_name": [["flux-2-klein-4b-Q4_K_M.gguf", "flux1-schnell-Q4_K_M.gguf", "qwen-image-Q4_K_M.gguf", "z-image-turbo-Q4_K_M.gguf"]], "dequant_dtype": [["default", "target", "float32", "float16", "bfloat16"], {"default": "default"}], "patch_dtype": [["default", "target", "float32", "float16", "bfloat16"], {"default": "default"}], "patch_on_device": ["BOOLEAN", {"default": false}]}}, "input_order": {"required": ["unet_name", "dequant_dtype", "patch_dtype", "patch_on_device"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "UnetLoaderGGUFAdvanced", "display_name": "Unet Loader (GGUF/Advanced)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}}
\ No newline at end of file
diff --git a/logs/oi3.json b/logs/oi3.json
deleted file mode 100644
index 56b97287c6..0000000000
--- a/logs/oi3.json
+++ /dev/null
@@ -1 +0,0 @@
-{"KSampler": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model used for denoising the input latent."}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true, "tooltip": "The random seed used for creating the noise."}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000, "tooltip": "The number of steps used in the denoising process."}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01, "tooltip": "The Classifier-Free Guidance scale balances creativity and adherence to the prompt. Higher values result in images more closely matching the prompt however too high values will negatively impact quality."}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"], {"tooltip": "The algorithm used when sampling, this can affect the quality, speed, and style of the generated output."}], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal"], {"tooltip": "The scheduler controls how noise is gradually removed to form the image."}], "positive": ["CONDITIONING", {"tooltip": "The conditioning describing the attributes you want to include in the image."}], "negative": ["CONDITIONING", {"tooltip": "The conditioning describing the attributes you want to exclude from the image."}], "latent_image": ["LATENT", {"tooltip": "The latent image to denoise."}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "The amount of denoising applied, lower values will maintain the structure of the initial image allowing for image to image sampling."}]}}, "input_order": {"required": ["model", "seed", "steps", "cfg", "sampler_name", "scheduler", "positive", "negative", "latent_image", "denoise"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "KSampler", "display_name": "KSampler", "description": "Uses the provided model, positive and negative conditioning to denoise the latent image.", "python_module": "nodes", "category": "model/sampling", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The denoised latent."], "search_aliases": ["sampler", "sample", "generate", "denoise", "diffuse", "txt2img", "img2img"]}, "CheckpointLoaderSimple": {"input": {"required": {"ckpt_name": [[], {"tooltip": "The name of the checkpoint (model) to load."}]}}, "input_order": {"required": ["ckpt_name"]}, "is_input_list": false, "output": ["MODEL", "CLIP", "VAE"], "output_is_list": [false, false, false], "output_name": ["MODEL", "CLIP", "VAE"], "name": "CheckpointLoaderSimple", "display_name": "Load Checkpoint", "description": "Loads a diffusion model checkpoint, diffusion models are used to denoise latents.", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The model used for denoising latents.", "The CLIP model used for encoding text prompts.", "The VAE model used for encoding and decoding images to and from latent space."], "search_aliases": ["load model", "checkpoint", "model loader", "load checkpoint", "ckpt", "model"]}, "CLIPTextEncode": {"input": {"required": {"text": ["STRING", {"multiline": true, "dynamicPrompts": true, "tooltip": "The text to be encoded."}], "clip": ["CLIP", {"tooltip": "The CLIP model used for encoding the text."}]}}, "input_order": {"required": ["text", "clip"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "CLIPTextEncode", "display_name": "CLIP Text Encode (Prompt)", "description": "Encodes a text prompt using a CLIP model into an embedding that can be used to guide the diffusion model towards generating specific images.", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["A conditioning containing the embedded text used to guide the diffusion model."], "search_aliases": ["text", "prompt", "text prompt", "positive prompt", "negative prompt", "encode text", "text encoder", "encode prompt"]}, "CLIPSetLastLayer": {"input": {"required": {"clip": ["CLIP"], "stop_at_clip_layer": ["INT", {"default": -1, "min": -24, "max": -1, "step": 1, "advanced": true}]}}, "input_order": {"required": ["clip", "stop_at_clip_layer"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPSetLastLayer", "display_name": "CLIP Set Last Layer", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VAEDecode": {"input": {"required": {"samples": ["LATENT", {"tooltip": "The latent to be decoded."}], "vae": ["VAE", {"tooltip": "The VAE model used for decoding the latent."}]}}, "input_order": {"required": ["samples", "vae"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "VAEDecode", "display_name": "VAE Decode", "description": "Decodes latent images back into pixel space images.", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The decoded image."], "search_aliases": ["decode", "decode latent", "latent to image", "render latent"]}, "VAEEncode": {"input": {"required": {"pixels": ["IMAGE"], "vae": ["VAE"]}}, "input_order": {"required": ["pixels", "vae"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "VAEEncode", "display_name": "VAE Encode", "description": "", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": ["encode", "encode image", "image to latent"]}, "VAEEncodeForInpaint": {"input": {"required": {"pixels": ["IMAGE"], "vae": ["VAE"], "mask": ["MASK"], "grow_mask_by": ["INT", {"default": 6, "min": 0, "max": 64, "step": 1}]}}, "input_order": {"required": ["pixels", "vae", "mask", "grow_mask_by"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "VAEEncodeForInpaint", "display_name": "VAE Encode (for Inpainting)", "description": "", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VAELoader": {"input": {"required": {"vae_name": [["flux1_ae.safetensors", "flux2_ae.safetensors", "qwen_image_vae.safetensors", "zimage_vae.safetensors", "pixel_space"]]}}, "input_order": {"required": ["vae_name"]}, "is_input_list": false, "output": ["VAE"], "output_is_list": [false], "output_name": ["VAE"], "name": "VAELoader", "display_name": "Load VAE", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "EmptyLatentImage": {"input": {"required": {"width": ["INT", {"default": 512, "min": 16, "max": 16384, "step": 8, "tooltip": "The width of the latent images in pixels."}], "height": ["INT", {"default": 512, "min": 16, "max": 16384, "step": 8, "tooltip": "The height of the latent images in pixels."}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096, "tooltip": "The number of latent images in the batch."}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "EmptyLatentImage", "display_name": "Empty Latent Image", "description": "Create a new batch of empty latent images to be denoised via sampling.", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The empty latent image batch."], "search_aliases": ["empty", "empty latent", "new latent", "create latent", "blank latent", "blank"]}, "LatentUpscale": {"input": {"required": {"samples": ["LATENT"], "upscale_method": [["nearest-exact", "bilinear", "area", "bicubic", "bislerp"]], "width": ["INT", {"default": 512, "min": 0, "max": 16384, "step": 8}], "height": ["INT", {"default": 512, "min": 0, "max": 16384, "step": 8}], "crop": [["disabled", "center"]]}}, "input_order": {"required": ["samples", "upscale_method", "width", "height", "crop"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentUpscale", "display_name": "Upscale Latent", "description": "", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": ["enlarge latent", "resize latent"]}, "LatentUpscaleBy": {"input": {"required": {"samples": ["LATENT"], "upscale_method": [["nearest-exact", "bilinear", "area", "bicubic", "bislerp"]], "scale_by": ["FLOAT", {"default": 1.5, "min": 0.01, "max": 8.0, "step": 0.01}]}}, "input_order": {"required": ["samples", "upscale_method", "scale_by"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentUpscaleBy", "display_name": "Upscale Latent By", "description": "", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": ["enlarge latent", "resize latent", "scale latent"]}, "LatentFromBatch": {"input": {"required": {"samples": ["LATENT"], "batch_index": ["INT", {"default": 0, "min": -16384, "max": 16384}], "length": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["samples", "batch_index", "length"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentFromBatch", "display_name": "Get Latent From Batch", "description": "", "python_module": "nodes", "category": "model/latent/batch", "output_node": false, "has_intermediate_output": false, "search_aliases": ["select from batch", "pick latent", "batch subset"]}, "RepeatLatentBatch": {"input": {"required": {"samples": ["LATENT"], "amount": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["samples", "amount"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "RepeatLatentBatch", "display_name": "Repeat Latent Batch", "description": "", "python_module": "nodes", "category": "model/latent/batch", "output_node": false, "has_intermediate_output": false, "search_aliases": ["duplicate latent", "clone latent"]}, "SaveImage": {"input": {"required": {"images": ["IMAGE", {"tooltip": "The images to save."}], "filename_prefix": ["STRING", {"default": "ComfyUI", "tooltip": "The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes."}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["images", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "name": "SaveImage", "display_name": "Save Image", "description": "Saves the input images to your ComfyUI output directory.", "python_module": "nodes", "category": "image", "output_node": true, "has_intermediate_output": false, "search_aliases": ["save", "save image", "export image", "output image", "write image", "download"], "essentials_category": "Basics"}, "PreviewImage": {"input": {"required": {"images": ["IMAGE"]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["images"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "name": "PreviewImage", "display_name": "Preview Image", "description": "Saves the input images to your ComfyUI output directory.", "python_module": "nodes", "category": "image", "output_node": true, "has_intermediate_output": false, "search_aliases": ["preview", "preview image", "show image", "view image", "display image", "image viewer"], "essentials_category": "Basics"}, "LoadImage": {"input": {"required": {"image": [["example.png"], {"image_upload": true}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "name": "LoadImage", "display_name": "Load Image", "description": "", "python_module": "nodes", "category": "image", "output_node": false, "has_intermediate_output": false, "search_aliases": ["load image", "open image", "import image", "image input", "upload image", "read image", "image loader"], "essentials_category": "Basics"}, "LoadImageMask": {"input": {"required": {"image": [["example.png"], {"image_upload": true}], "channel": [["alpha", "red", "green", "blue"]]}}, "input_order": {"required": ["image", "channel"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "name": "LoadImageMask", "display_name": "Load Image (as Mask)", "description": "", "python_module": "nodes", "category": "image", "output_node": false, "has_intermediate_output": false, "search_aliases": ["import mask", "alpha mask", "channel mask"], "essentials_category": "Image Tools"}, "LoadImageOutput": {"input": {"required": {"image": ["COMBO", {"image_upload": true, "image_folder": "output", "remote": {"route": "/internal/files/output", "refresh_button": true, "control_after_refresh": "first"}}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "name": "LoadImageOutput", "display_name": "Load Image (from Outputs)", "description": "Load an image from the output folder. When the refresh button is clicked, the node will update the image list and automatically select the first image, allowing for easy iteration.", "python_module": "nodes", "category": "image", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["output image", "previous generation"], "essentials_category": "Basics"}, "ImageScale": {"input": {"required": {"image": ["IMAGE"], "upscale_method": [["nearest-exact", "bilinear", "area", "bicubic", "lanczos"]], "width": ["INT", {"default": 512, "min": 0, "max": 16384, "step": 1}], "height": ["INT", {"default": 512, "min": 0, "max": 16384, "step": 1}], "crop": [["disabled", "center"]]}}, "input_order": {"required": ["image", "upscale_method", "width", "height", "crop"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ImageScale", "display_name": "Upscale Image", "description": "", "python_module": "nodes", "category": "image/upscaling", "output_node": false, "has_intermediate_output": false, "search_aliases": ["resize", "resize image", "scale image", "image resize", "zoom", "zoom in", "change size"], "essentials_category": "Image Tools"}, "ImageScaleBy": {"input": {"required": {"image": ["IMAGE"], "upscale_method": [["nearest-exact", "bilinear", "area", "bicubic", "lanczos"]], "scale_by": ["FLOAT", {"default": 1.0, "min": 0.01, "max": 8.0, "step": 0.01}]}}, "input_order": {"required": ["image", "upscale_method", "scale_by"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ImageScaleBy", "display_name": "Upscale Image By", "description": "", "python_module": "nodes", "category": "image/upscaling", "output_node": false, "has_intermediate_output": false, "search_aliases": [], "essentials_category": "Image Tools"}, "ImageInvert": {"input": {"required": {"image": ["IMAGE"]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ImageInvert", "display_name": "Invert Image Colors", "description": "", "python_module": "nodes", "category": "image/color", "output_node": false, "has_intermediate_output": false, "search_aliases": ["reverse colors"], "essentials_category": "Image Tools"}, "ImageBatch": {"input": {"required": {"image1": ["IMAGE"], "image2": ["IMAGE"]}}, "input_order": {"required": ["image1", "image2"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ImageBatch", "display_name": "Batch Images (DEPRECATED)", "description": "", "python_module": "nodes", "category": "image/batch", "output_node": false, "has_intermediate_output": false, "deprecated": true, "search_aliases": ["combine images", "merge images", "stack images"]}, "ImagePadForOutpaint": {"input": {"required": {"image": ["IMAGE"], "left": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "top": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "right": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "bottom": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "feathering": ["INT", {"default": 40, "min": 0, "max": 16384, "step": 1, "advanced": true}]}}, "input_order": {"required": ["image", "left", "top", "right", "bottom", "feathering"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "name": "ImagePadForOutpaint", "display_name": "Pad Image for Outpainting", "description": "", "python_module": "nodes", "category": "image/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["extend canvas", "expand image"]}, "EmptyImage": {"input": {"required": {"width": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "height": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "color": ["INT", {"default": 0, "min": 0, "max": 16777215, "step": 1, "display": "color"}]}}, "input_order": {"required": ["width", "height", "batch_size", "color"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "EmptyImage", "display_name": "Empty Image", "description": "", "python_module": "nodes", "category": "image", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ConditioningAverage": {"input": {"required": {"conditioning_to": ["CONDITIONING"], "conditioning_from": ["CONDITIONING"], "conditioning_to_strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning_to", "conditioning_from", "conditioning_to_strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningAverage", "display_name": "Conditioning (Average)", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["blend prompts", "interpolate conditioning", "mix prompts", "style fusion", "weighted blend"]}, "ConditioningCombine": {"input": {"required": {"conditioning_1": ["CONDITIONING"], "conditioning_2": ["CONDITIONING"]}}, "input_order": {"required": ["conditioning_1", "conditioning_2"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningCombine", "display_name": "Conditioning (Combine)", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["combine", "merge conditioning", "combine prompts", "merge prompts", "mix prompts", "add prompt"], "essentials_category": "Image Generation"}, "ConditioningConcat": {"input": {"required": {"conditioning_to": ["CONDITIONING"], "conditioning_from": ["CONDITIONING"]}}, "input_order": {"required": ["conditioning_to", "conditioning_from"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningConcat", "display_name": "Conditioning (Concat)", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ConditioningSetArea": {"input": {"required": {"conditioning": ["CONDITIONING"], "width": ["INT", {"default": 64, "min": 64, "max": 16384, "step": 8}], "height": ["INT", {"default": 64, "min": 64, "max": 16384, "step": 8}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "width", "height", "x", "y", "strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetArea", "display_name": "Conditioning (Set Area)", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["regional prompt", "area prompt", "spatial conditioning", "localized prompt"]}, "ConditioningSetAreaPercentage": {"input": {"required": {"conditioning": ["CONDITIONING"], "width": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}], "height": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}], "x": ["FLOAT", {"default": 0, "min": 0, "max": 1.0, "step": 0.01}], "y": ["FLOAT", {"default": 0, "min": 0, "max": 1.0, "step": 0.01}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "width", "height", "x", "y", "strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetAreaPercentage", "display_name": "Conditioning (Set Area with Percentage)", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ConditioningSetAreaStrength": {"input": {"required": {"conditioning": ["CONDITIONING"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetAreaStrength", "display_name": "Conditioning (Set Area Strength)", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ConditioningSetMask": {"input": {"required": {"conditioning": ["CONDITIONING"], "mask": ["MASK"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "set_cond_area": [["default", "mask bounds"]]}}, "input_order": {"required": ["conditioning", "mask", "strength", "set_cond_area"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetMask", "display_name": "Conditioning (Set Mask)", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["masked prompt", "regional inpaint conditioning", "mask conditioning"]}, "KSamplerAdvanced": {"input": {"required": {"model": ["MODEL"], "add_noise": [["enable", "disable"], {"advanced": true}], "noise_seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal"]], "positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "latent_image": ["LATENT"], "start_at_step": ["INT", {"default": 0, "min": 0, "max": 10000, "advanced": true}], "end_at_step": ["INT", {"default": 10000, "min": 0, "max": 10000, "advanced": true}], "return_with_leftover_noise": [["disable", "enable"], {"advanced": true}]}}, "input_order": {"required": ["model", "add_noise", "noise_seed", "steps", "cfg", "sampler_name", "scheduler", "positive", "negative", "latent_image", "start_at_step", "end_at_step", "return_with_leftover_noise"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "KSamplerAdvanced", "display_name": "KSampler (Advanced)", "description": "", "python_module": "nodes", "category": "model/sampling", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SetLatentNoiseMask": {"input": {"required": {"samples": ["LATENT"], "mask": ["MASK"]}}, "input_order": {"required": ["samples", "mask"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "SetLatentNoiseMask", "display_name": "Set Latent Noise Mask", "description": "", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "LatentComposite": {"input": {"required": {"samples_to": ["LATENT"], "samples_from": ["LATENT"], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "feather": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}]}}, "input_order": {"required": ["samples_to", "samples_from", "x", "y", "feather"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentComposite", "display_name": "Latent Composite", "description": "", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": ["overlay latent", "layer latent", "paste latent"]}, "LatentBlend": {"input": {"required": {"samples1": ["LATENT"], "samples2": ["LATENT"], "blend_factor": ["FLOAT", {"default": 0.5, "min": 0, "max": 1, "step": 0.01}]}}, "input_order": {"required": ["samples1", "samples2", "blend_factor"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentBlend", "display_name": "Latent Blend", "description": "", "python_module": "nodes", "category": "experimental", "output_node": false, "has_intermediate_output": false, "search_aliases": ["mix latents", "interpolate latents"]}, "LatentRotate": {"input": {"required": {"samples": ["LATENT"], "rotation": [["none", "90 degrees", "180 degrees", "270 degrees"]]}}, "input_order": {"required": ["samples", "rotation"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentRotate", "display_name": "Rotate Latent", "description": "", "python_module": "nodes", "category": "model/latent/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "LatentFlip": {"input": {"required": {"samples": ["LATENT"], "flip_method": [["x-axis: vertically", "y-axis: horizontally"]]}}, "input_order": {"required": ["samples", "flip_method"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentFlip", "display_name": "Flip Latent", "description": "", "python_module": "nodes", "category": "model/latent/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["mirror latent"]}, "LatentCrop": {"input": {"required": {"samples": ["LATENT"], "width": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 8}], "height": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 8}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}]}}, "input_order": {"required": ["samples", "width", "height", "x", "y"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentCrop", "display_name": "Crop Latent", "description": "", "python_module": "nodes", "category": "model/latent/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["trim latent", "cut latent"]}, "LoraLoader": {"input": {"required": {"model": ["MODEL", {"tooltip": "The diffusion model the LoRA will be applied to."}], "clip": ["CLIP", {"tooltip": "The CLIP model the LoRA will be applied to."}], "lora_name": [[], {"tooltip": "The name of the LoRA."}], "strength_model": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01, "tooltip": "How strongly to modify the diffusion model. This value can be negative."}], "strength_clip": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01, "tooltip": "How strongly to modify the CLIP model. This value can be negative."}]}}, "input_order": {"required": ["model", "clip", "lora_name", "strength_model", "strength_clip"]}, "is_input_list": false, "output": ["MODEL", "CLIP"], "output_is_list": [false, false], "output_name": ["MODEL", "CLIP"], "name": "LoraLoader", "display_name": "Load LoRA (Model and CLIP)", "description": "This LoRA loader is used to modify both diffusion and CLIP models, altering the way in which latents are denoised such as applying styles. Multiple LoRA nodes can be linked together.", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The modified diffusion model.", "The modified CLIP model."], "search_aliases": ["lora", "load lora", "apply lora", "lora loader", "lora model"], "essentials_category": "Image Generation"}, "CLIPLoader": {"input": {"required": {"clip_name": [["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "type": [["stable_diffusion", "stable_cascade", "sd3", "stable_audio", "mochi", "ltxv", "pixart", "cosmos", "lumina2", "wan", "hidream", "chroma", "ace", "omnigen2", "qwen_image", "hunyuan_image", "flux2", "ovis", "longcat_image", "cogvideox", "lens", "pixeldit", "ideogram4", "boogu", "krea2"]]}, "optional": {"device": [["default", "cpu"], {"advanced": true}]}}, "input_order": {"required": ["clip_name", "type"], "optional": ["device"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPLoader", "display_name": "Load CLIP", "description": "Recipes:\nsd: clip-l\nstable cascade: clip-g\nsd3: t5 xxl / clip-g / clip-l\nstable audio: t5 base\nmochi: t5 xxl\ncogvideox: t5 xxl (226-token padding)\ncosmos: old t5 xxl\nlumina2: gemma 2 2B\nwan: umt5 xxl\nhidream: llama-3.1 (Recommend) or t5\nomnigen2: qwen vl 2.5 3B\nlens: gpt-oss-20b\npixeldit: gemma 2 2B elm", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "UNETLoader": {"input": {"required": {"unet_name": [["_raw/flux1-schnell-fp8.safetensors", "_raw/split_files/diffusion_models/qwen_image_fp8_e4m3fn.safetensors", "_raw/split_files/diffusion_models/qwen_image_nvfp4.safetensors", "flux1-schnell-fp8.safetensors", "qwen_image_fp8_e4m3fn.safetensors", "qwen_image_nvfp4.safetensors"]], "weight_dtype": [["default", "fp8_e4m3fn", "fp8_e4m3fn_fast", "fp8_e5m2"], {"advanced": true}]}}, "input_order": {"required": ["unet_name", "weight_dtype"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "UNETLoader", "display_name": "Load Diffusion Model", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DualCLIPLoader": {"input": {"required": {"clip_name1": [["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "clip_name2": [["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "type": [["sdxl", "sd3", "flux", "hunyuan_video", "hidream", "hunyuan_image", "hunyuan_video_15", "kandinsky5", "kandinsky5_image", "ltxv", "newbie", "ace"]]}, "optional": {"device": [["default", "cpu"], {"advanced": true}]}}, "input_order": {"required": ["clip_name1", "clip_name2", "type"], "optional": ["device"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "DualCLIPLoader", "display_name": "Load CLIP (Dual)", "description": "Recipes:\nsdxl: clip-l, clip-g\nsd3: clip-l, clip-g / clip-l, t5 / clip-g, t5\nflux: clip-l, t5\nhidream: at least one of t5 or llama, recommended t5 and llama\nhunyuan_image: qwen2.5vl 7b and byt5 small\nnewbie: gemma-3-4b-it, jina clip v2", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CLIPVisionEncode": {"input": {"required": {"clip_vision": ["CLIP_VISION"], "image": ["IMAGE"], "crop": [["center", "none"]]}}, "input_order": {"required": ["clip_vision", "image", "crop"]}, "is_input_list": false, "output": ["CLIP_VISION_OUTPUT"], "output_is_list": [false], "output_name": ["CLIP_VISION_OUTPUT"], "name": "CLIPVisionEncode", "display_name": "CLIP Vision Encode", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "StyleModelApply": {"input": {"required": {"conditioning": ["CONDITIONING"], "style_model": ["STYLE_MODEL"], "clip_vision_output": ["CLIP_VISION_OUTPUT"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.001}], "strength_type": [["multiply", "attn_bias"]]}}, "input_order": {"required": ["conditioning", "style_model", "clip_vision_output", "strength", "strength_type"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "StyleModelApply", "display_name": "Apply Style Model", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": ["style transfer"]}, "unCLIPConditioning": {"input": {"required": {"conditioning": ["CONDITIONING"], "clip_vision_output": ["CLIP_VISION_OUTPUT"], "strength": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}], "noise_augmentation": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "clip_vision_output", "strength", "noise_augmentation"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "unCLIPConditioning", "display_name": "unCLIPConditioning", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ControlNetApply": {"input": {"required": {"conditioning": ["CONDITIONING"], "control_net": ["CONTROL_NET"], "image": ["IMAGE"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "control_net", "image", "strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ControlNetApply", "display_name": "Apply ControlNet (DEPRECATED)", "description": "", "python_module": "nodes", "category": "model/conditioning/controlnet", "output_node": false, "has_intermediate_output": false, "deprecated": true, "search_aliases": []}, "ControlNetApplyAdvanced": {"input": {"required": {"positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "control_net": ["CONTROL_NET"], "image": ["IMAGE"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}, "optional": {"vae": ["VAE"]}}, "input_order": {"required": ["positive", "negative", "control_net", "image", "strength", "start_percent", "end_percent"], "optional": ["vae"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "name": "ControlNetApplyAdvanced", "display_name": "Apply ControlNet", "description": "", "python_module": "nodes", "category": "model/conditioning/controlnet", "output_node": false, "has_intermediate_output": false, "search_aliases": ["controlnet", "apply controlnet", "use controlnet", "control net"]}, "ControlNetLoader": {"input": {"required": {"control_net_name": [[]]}}, "input_order": {"required": ["control_net_name"]}, "is_input_list": false, "output": ["CONTROL_NET"], "output_is_list": [false], "output_name": ["CONTROL_NET"], "name": "ControlNetLoader", "display_name": "Load ControlNet Model", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": ["controlnet", "control net", "cn", "load controlnet", "controlnet loader"]}, "DiffControlNetLoader": {"input": {"required": {"model": ["MODEL"], "control_net_name": [[]]}}, "input_order": {"required": ["model", "control_net_name"]}, "is_input_list": false, "output": ["CONTROL_NET"], "output_is_list": [false], "output_name": ["CONTROL_NET"], "name": "DiffControlNetLoader", "display_name": "Load ControlNet Model (diff)", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "StyleModelLoader": {"input": {"required": {"style_model_name": [[]]}}, "input_order": {"required": ["style_model_name"]}, "is_input_list": false, "output": ["STYLE_MODEL"], "output_is_list": [false], "output_name": ["STYLE_MODEL"], "name": "StyleModelLoader", "display_name": "Load Style Model", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CLIPVisionLoader": {"input": {"required": {"clip_name": [[]]}}, "input_order": {"required": ["clip_name"]}, "is_input_list": false, "output": ["CLIP_VISION"], "output_is_list": [false], "output_name": ["CLIP_VISION"], "name": "CLIPVisionLoader", "display_name": "Load CLIP Vision", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VAEDecodeTiled": {"input": {"required": {"samples": ["LATENT"], "vae": ["VAE"], "tile_size": ["INT", {"default": 512, "min": 64, "max": 4096, "step": 32, "advanced": true}], "overlap": ["INT", {"default": 64, "min": 0, "max": 4096, "step": 32, "advanced": true}], "temporal_size": ["INT", {"default": 64, "min": 8, "max": 4096, "step": 4, "tooltip": "Only used for video VAEs: Amount of frames to decode at a time.", "advanced": true}], "temporal_overlap": ["INT", {"default": 8, "min": 4, "max": 4096, "step": 4, "tooltip": "Only used for video VAEs: Amount of frames to overlap.", "advanced": true}]}}, "input_order": {"required": ["samples", "vae", "tile_size", "overlap", "temporal_size", "temporal_overlap"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "VAEDecodeTiled", "display_name": "VAE Decode (Tiled)", "description": "", "python_module": "nodes", "category": "experimental", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VAEEncodeTiled": {"input": {"required": {"pixels": ["IMAGE"], "vae": ["VAE"], "tile_size": ["INT", {"default": 512, "min": 64, "max": 4096, "step": 64, "advanced": true}], "overlap": ["INT", {"default": 64, "min": 0, "max": 4096, "step": 32, "advanced": true}], "temporal_size": ["INT", {"default": 64, "min": 8, "max": 4096, "step": 4, "tooltip": "Only used for video VAEs: Amount of frames to encode at a time.", "advanced": true}], "temporal_overlap": ["INT", {"default": 8, "min": 4, "max": 4096, "step": 4, "tooltip": "Only used for video VAEs: Amount of frames to overlap.", "advanced": true}]}}, "input_order": {"required": ["pixels", "vae", "tile_size", "overlap", "temporal_size", "temporal_overlap"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "VAEEncodeTiled", "display_name": "VAE Encode (Tiled)", "description": "", "python_module": "nodes", "category": "experimental", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "unCLIPCheckpointLoader": {"input": {"required": {"ckpt_name": [[]]}}, "input_order": {"required": ["ckpt_name"]}, "is_input_list": false, "output": ["MODEL", "CLIP", "VAE", "CLIP_VISION"], "output_is_list": [false, false, false, false], "output_name": ["MODEL", "CLIP", "VAE", "CLIP_VISION"], "name": "unCLIPCheckpointLoader", "display_name": "Load unCLIP Checkpoint", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "GLIGENLoader": {"input": {"required": {"gligen_name": [[]]}}, "input_order": {"required": ["gligen_name"]}, "is_input_list": false, "output": ["GLIGEN"], "output_is_list": [false], "output_name": ["GLIGEN"], "name": "GLIGENLoader", "display_name": "Load GLIGEN Model", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "GLIGENTextBoxApply": {"input": {"required": {"conditioning_to": ["CONDITIONING"], "clip": ["CLIP"], "gligen_textbox_model": ["GLIGEN"], "text": ["STRING", {"multiline": true, "dynamicPrompts": true}], "width": ["INT", {"default": 64, "min": 8, "max": 16384, "step": 8}], "height": ["INT", {"default": 64, "min": 8, "max": 16384, "step": 8}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}]}}, "input_order": {"required": ["conditioning_to", "clip", "gligen_textbox_model", "text", "width", "height", "x", "y"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "GLIGENTextBoxApply", "display_name": "Apply GLIGEN Text Box", "description": "", "python_module": "nodes", "category": "model/conditioning/gligen", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "InpaintModelConditioning": {"input": {"required": {"positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "vae": ["VAE"], "pixels": ["IMAGE"], "mask": ["MASK"], "noise_mask": ["BOOLEAN", {"default": true, "tooltip": "Add a noise mask to the latent so sampling will only happen within the mask. Might improve results or completely break things depending on the model."}]}}, "input_order": {"required": ["positive", "negative", "vae", "pixels", "mask", "noise_mask"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "name": "InpaintModelConditioning", "display_name": "InpaintModelConditioning", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CheckpointLoader": {"input": {"required": {"config_name": [["anything_v3.yaml", "v1-inference.yaml", "v1-inference_clip_skip_2.yaml", "v1-inference_clip_skip_2_fp16.yaml", "v1-inference_fp16.yaml", "v1-inpainting-inference.yaml", "v2-inference-v.yaml", "v2-inference-v_fp32.yaml", "v2-inference.yaml", "v2-inference_fp32.yaml", "v2-inpainting-inference.yaml"]], "ckpt_name": [[]]}}, "input_order": {"required": ["config_name", "ckpt_name"]}, "is_input_list": false, "output": ["MODEL", "CLIP", "VAE"], "output_is_list": [false, false, false], "output_name": ["MODEL", "CLIP", "VAE"], "name": "CheckpointLoader", "display_name": "Load Checkpoint With Config (DEPRECATED)", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "deprecated": true, "search_aliases": ["load model", "model loader"]}, "DiffusersLoader": {"input": {"required": {"model_path": [[]]}}, "input_order": {"required": ["model_path"]}, "is_input_list": false, "output": ["MODEL", "CLIP", "VAE"], "output_is_list": [false, false, false], "output_name": ["MODEL", "CLIP", "VAE"], "name": "DiffusersLoader", "display_name": "Load Diffusers Model (DEPRECATED)", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "deprecated": true, "search_aliases": ["load diffusers model"]}, "LoadLatent": {"input": {"required": {"latent": [[]]}}, "input_order": {"required": ["latent"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LoadLatent", "display_name": "LoadLatent", "description": "", "python_module": "nodes", "category": "experimental", "output_node": false, "has_intermediate_output": false, "search_aliases": ["import latent", "open latent"]}, "SaveLatent": {"input": {"required": {"samples": ["LATENT"], "filename_prefix": ["STRING", {"default": "latents/ComfyUI"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["samples", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["samples"], "name": "SaveLatent", "display_name": "SaveLatent", "description": "", "python_module": "nodes", "category": "experimental", "output_node": true, "has_intermediate_output": false, "search_aliases": ["export latent"]}, "ConditioningZeroOut": {"input": {"required": {"conditioning": ["CONDITIONING"]}}, "input_order": {"required": ["conditioning"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningZeroOut", "display_name": "Conditioning Zero Out", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["null conditioning", "clear conditioning"]}, "ConditioningSetTimestepRange": {"input": {"required": {"conditioning": ["CONDITIONING"], "start": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["conditioning", "start", "end"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetTimestepRange", "display_name": "ConditioningSetTimestepRange", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "LoraLoaderModelOnly": {"input": {"required": {"model": ["MODEL"], "lora_name": [[]], "strength_model": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "lora_name", "strength_model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "LoraLoaderModelOnly", "display_name": "Load LoRA", "description": "This LoRAs loader is used to modify the diffusion model, altering the way in which latents are denoised such as applying styles. Multiple LoRA nodes can be linked together.", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The modified diffusion model.", "The modified CLIP model."], "search_aliases": ["lora", "load lora", "apply lora", "lora loader", "lora model"], "essentials_category": "Image Generation"}, "LatentAdd": {"input": {"required": {"samples1": ["LATENT", {}], "samples2": ["LATENT", {}]}}, "input_order": {"required": ["samples1", "samples2"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentAdd", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine latents", "sum latents"], "essentials_category": null, "has_intermediate_output": false}, "LatentSubtract": {"input": {"required": {"samples1": ["LATENT", {}], "samples2": ["LATENT", {}]}}, "input_order": {"required": ["samples1", "samples2"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentSubtract", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["difference latent", "remove features"], "essentials_category": null, "has_intermediate_output": false}, "LatentMultiply": {"input": {"required": {"samples": ["LATENT", {}], "multiplier": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["samples", "multiplier"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentMultiply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["scale latent", "amplify latent", "latent gain"], "essentials_category": null, "has_intermediate_output": false}, "LatentInterpolate": {"input": {"required": {"samples1": ["LATENT", {}], "samples2": ["LATENT", {}], "ratio": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["samples1", "samples2", "ratio"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentInterpolate", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["blend latent", "mix latent", "lerp latent", "transition"], "essentials_category": null, "has_intermediate_output": false}, "LatentConcat": {"input": {"required": {"samples1": ["LATENT", {}], "samples2": ["LATENT", {}], "dim": ["COMBO", {"multiselect": false, "options": ["x", "-x", "y", "-y", "t", "-t"]}]}}, "input_order": {"required": ["samples1", "samples2", "dim"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentConcat", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["join latents", "stitch latents"], "essentials_category": null, "has_intermediate_output": false}, "LatentCut": {"input": {"required": {"samples": ["LATENT", {}], "dim": ["COMBO", {"multiselect": false, "options": ["x", "y", "t"]}], "index": ["INT", {"default": 0, "min": -16384, "max": 16384, "step": 1}], "amount": ["INT", {"default": 1, "min": 1, "max": 16384, "step": 1}]}}, "input_order": {"required": ["samples", "dim", "index", "amount"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentCut", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["crop latent", "slice latent", "extract region"], "essentials_category": null, "has_intermediate_output": false}, "LatentCutToBatch": {"input": {"required": {"samples": ["LATENT", {}], "dim": ["COMBO", {"multiselect": false, "options": ["t", "x", "y"]}], "slice_size": ["INT", {"default": 1, "min": 1, "max": 16384, "step": 1}]}}, "input_order": {"required": ["samples", "dim", "slice_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentCutToBatch", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["slice to batch", "split latent", "tile latent"], "essentials_category": null, "has_intermediate_output": false}, "LatentBatch": {"input": {"required": {"samples1": ["LATENT", {}], "samples2": ["LATENT", {}]}}, "input_order": {"required": ["samples1", "samples2"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentBatch", "display_name": "Batch Latents (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/batch", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine latents", "merge latents", "join latents"], "essentials_category": null, "has_intermediate_output": false}, "LatentBatchSeedBehavior": {"input": {"required": {"samples": ["LATENT", {}], "seed_behavior": ["COMBO", {"default": "fixed", "multiselect": false, "options": ["random", "fixed"]}]}}, "input_order": {"required": ["samples", "seed_behavior"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentBatchSeedBehavior", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LatentApplyOperation": {"input": {"required": {"samples": ["LATENT", {}], "operation": ["LATENT_OPERATION", {}]}}, "input_order": {"required": ["samples", "operation"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentApplyOperation", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced/operations", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["transform latent"], "essentials_category": null, "has_intermediate_output": false}, "LatentApplyOperationCFG": {"input": {"required": {"model": ["MODEL", {}], "operation": ["LATENT_OPERATION", {}]}}, "input_order": {"required": ["model", "operation"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentApplyOperationCFG", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced/operations", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LatentOperationTonemapReinhard": {"input": {"required": {"multiplier": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["multiplier"]}, "is_input_list": false, "output": ["LATENT_OPERATION"], "output_is_list": [false], "output_name": ["LATENT_OPERATION"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentOperationTonemapReinhard", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced/operations", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["hdr latent"], "essentials_category": null, "has_intermediate_output": false}, "LatentOperationSharpen": {"input": {"required": {"sharpen_radius": ["INT", {"advanced": true, "default": 9, "min": 1, "max": 31, "step": 1}], "sigma": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.1, "max": 10.0, "step": 0.1}], "alpha": ["FLOAT", {"advanced": true, "default": 0.1, "min": 0.0, "max": 5.0, "step": 0.01}]}}, "input_order": {"required": ["sharpen_radius", "sigma", "alpha"]}, "is_input_list": false, "output": ["LATENT_OPERATION"], "output_is_list": [false], "output_name": ["LATENT_OPERATION"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentOperationSharpen", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced/operations", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReplaceVideoLatentFrames": {"input": {"required": {"destination": ["LATENT", {"tooltip": "The destination latent where frames will be replaced."}], "index": ["INT", {"tooltip": "The starting latent frame index in the destination latent where the source latent frames will be placed. Negative values count from the end.", "default": 0, "min": -16384, "max": 16384, "step": 1}]}, "optional": {"source": ["LATENT", {"tooltip": "The source latent providing frames to insert into the destination latent. If not provided, the destination latent is returned unchanged."}]}}, "input_order": {"required": ["destination", "index"], "optional": ["source"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReplaceVideoLatentFrames", "display_name": "Replace Video Latent Frames", "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HypernetworkLoader": {"input": {"required": {"model": ["MODEL", {}], "hypernetwork_name": ["COMBO", {"multiselect": false, "options": []}], "strength": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "hypernetwork_name", "strength"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "HypernetworkLoader", "display_name": "Load Hypernetwork", "description": "", "python_module": "comfy_extras.nodes_hypernetwork", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "UpscaleModelLoader": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["UPSCALE_MODEL"], "output_is_list": [false], "output_name": ["UPSCALE_MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "UpscaleModelLoader", "display_name": "Load Upscale Model", "description": "", "python_module": "comfy_extras.nodes_upscale_model", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageUpscaleWithModel": {"input": {"required": {"upscale_model": ["UPSCALE_MODEL", {}], "image": ["IMAGE", {}]}}, "input_order": {"required": ["upscale_model", "image"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageUpscaleWithModel", "display_name": "Upscale Image (using Model)", "description": "", "python_module": "comfy_extras.nodes_upscale_model", "category": "image/upscaling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["upscale", "upscaler", "upsc", "enlarge image", "super resolution", "hires", "superres", "increase resolution"], "essentials_category": null, "has_intermediate_output": false}, "ImageBlend": {"input": {"required": {"image1": ["IMAGE", {}], "image2": ["IMAGE", {}], "blend_factor": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "blend_mode": ["COMBO", {"multiselect": false, "options": ["normal", "multiply", "screen", "overlay", "soft_light", "difference"]}]}}, "input_order": {"required": ["image1", "image2", "blend_factor", "blend_mode"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageBlend", "display_name": "Blend Images", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["mix images"], "essentials_category": "Image Tools", "has_intermediate_output": false}, "ImageBlur": {"input": {"required": {"image": ["IMAGE", {}], "blur_radius": ["INT", {"default": 1, "min": 1, "max": 31, "step": 1}], "sigma": ["FLOAT", {"default": 1.0, "min": 0.1, "max": 10.0, "step": 0.1}]}}, "input_order": {"required": ["image", "blur_radius", "sigma"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageBlur", "display_name": "Blur Image", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageQuantize": {"input": {"required": {"image": ["IMAGE", {}], "colors": ["INT", {"default": 256, "min": 1, "max": 256, "step": 1}], "dither": ["COMBO", {"multiselect": false, "options": ["none", "floyd-steinberg", "bayer-2", "bayer-4", "bayer-8", "bayer-16"]}]}}, "input_order": {"required": ["image", "colors", "dither"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageQuantize", "display_name": "Quantize Image", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageSharpen": {"input": {"required": {"image": ["IMAGE", {}], "sharpen_radius": ["INT", {"advanced": true, "default": 1, "min": 1, "max": 31, "step": 1}], "sigma": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.1, "max": 10.0, "step": 0.01}], "alpha": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 5.0, "step": 0.01}]}}, "input_order": {"required": ["image", "sharpen_radius", "sigma", "alpha"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageSharpen", "display_name": "Sharpen Image", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageScaleToTotalPixels": {"input": {"required": {"image": ["IMAGE", {}], "upscale_method": ["COMBO", {"multiselect": false, "options": ["nearest-exact", "bilinear", "area", "bicubic", "lanczos"]}], "megapixels": ["FLOAT", {"default": 1.0, "min": 0.01, "max": 16.0, "step": 0.01}], "resolution_steps": ["INT", {"advanced": true, "default": 1, "min": 1, "max": 256}]}}, "input_order": {"required": ["image", "upscale_method", "megapixels", "resolution_steps"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageScaleToTotalPixels", "display_name": "Scale Image to Total Pixels", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/upscaling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ResizeImageMaskNode": {"input": {"required": {"input": ["COMFY_MATCHTYPE_V3", {"template": {"template_id": "input_type", "allowed_types": "IMAGE,MASK"}}], "resize_type": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Select how to resize: by exact dimensions, scale factor, matching another image, etc.", "options": [{"key": "scale dimensions", "inputs": {"required": {"width": ["INT", {"tooltip": "Target width in pixels. Set to 0 to auto-calculate from height while preserving aspect ratio.", "default": 512, "min": 0, "max": 16384, "step": 1}], "height": ["INT", {"tooltip": "Target height in pixels. Set to 0 to auto-calculate from width while preserving aspect ratio.", "default": 512, "min": 0, "max": 16384, "step": 1}], "crop": ["COMBO", {"tooltip": "How to handle aspect ratio mismatch: 'disabled' stretches to fit, 'center' crops to maintain aspect ratio.", "default": "center", "multiselect": false, "options": ["disabled", "center"]}]}}}, {"key": "scale by multiplier", "inputs": {"required": {"multiplier": ["FLOAT", {"tooltip": "Scale factor (e.g., 2.0 doubles size, 0.5 halves size).", "default": 1.0, "min": 0.01, "max": 8.0, "step": 0.01}]}}}, {"key": "scale longer dimension", "inputs": {"required": {"longer_size": ["INT", {"tooltip": "The longer edge will be resized to this value. Aspect ratio is preserved.", "default": 512, "min": 0, "max": 16384, "step": 1}]}}}, {"key": "scale shorter dimension", "inputs": {"required": {"shorter_size": ["INT", {"tooltip": "The shorter edge will be resized to this value. Aspect ratio is preserved.", "default": 512, "min": 0, "max": 16384, "step": 1}]}}}, {"key": "scale width", "inputs": {"required": {"width": ["INT", {"tooltip": "Target width in pixels. Height auto-adjusts to preserve aspect ratio.", "default": 512, "min": 0, "max": 16384, "step": 1}]}}}, {"key": "scale height", "inputs": {"required": {"height": ["INT", {"tooltip": "Target height in pixels. Width auto-adjusts to preserve aspect ratio.", "default": 512, "min": 0, "max": 16384, "step": 1}]}}}, {"key": "scale total pixels", "inputs": {"required": {"megapixels": ["FLOAT", {"tooltip": "Target total megapixels (e.g., 1.0 \u2248 1024\u00d71024). Aspect ratio is preserved.", "default": 1.0, "min": 0.01, "max": 16.0, "step": 0.01}]}}}, {"key": "match size", "inputs": {"required": {"match": ["IMAGE,MASK", {"tooltip": "Resize input to match the dimensions of this reference image or mask."}], "crop": ["COMBO", {"tooltip": "How to handle aspect ratio mismatch: 'disabled' stretches to fit, 'center' crops to maintain aspect ratio.", "default": "center", "multiselect": false, "options": ["disabled", "center"]}]}}}, {"key": "scale to multiple", "inputs": {"required": {"multiple": ["INT", {"tooltip": "Resize so width and height are divisible by this number. Useful for latent alignment (e.g., 8 or 64).", "default": 8, "min": 1, "max": 16384, "step": 1}]}}}]}], "scale_method": ["COMBO", {"tooltip": "Interpolation algorithm. 'area' is best for downscaling, 'lanczos' for upscaling, 'nearest-exact' for pixel art.", "default": "area", "multiselect": false, "options": ["nearest-exact", "bilinear", "area", "bicubic", "lanczos"]}]}}, "input_order": {"required": ["input", "resize_type", "scale_method"]}, "is_input_list": false, "output": ["COMFY_MATCHTYPE_V3"], "output_is_list": [false], "output_name": ["resized"], "output_tooltips": [null], "output_matchtypes": ["input_type"], "name": "ResizeImageMaskNode", "display_name": "Resize Image/Mask", "description": "Resize an image or mask using various scaling methods.", "python_module": "comfy_extras.nodes_post_processing", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["resize", "resize image", "resize mask", "scale", "scale image", "scale mask", "image resize", "change size", "dimensions", "shrink", "enlarge"], "essentials_category": null, "has_intermediate_output": false}, "BatchImagesNode": {"input": {"required": {"images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image", "min": 1, "max": 50}}]}}, "input_order": {"required": ["images"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "BatchImagesNode", "display_name": "Batch Images", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["batch", "image batch", "batch images", "combine images", "merge images", "stack images"], "essentials_category": "Image Tools", "has_intermediate_output": false}, "BatchMasksNode": {"input": {"required": {"masks": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"mask": ["MASK", {}]}}, "prefix": "mask", "min": 1, "max": 50}}]}}, "input_order": {"required": ["masks"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "BatchMasksNode", "display_name": "Batch Masks", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine masks", "stack masks", "merge masks"], "essentials_category": null, "has_intermediate_output": false}, "BatchLatentsNode": {"input": {"required": {"latents": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"latent": ["LATENT", {}]}}, "prefix": "latent", "min": 1, "max": 50}}]}}, "input_order": {"required": ["latents"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "BatchLatentsNode", "display_name": "Batch Latents", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "model/latent/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine latents", "stack latents", "merge latents"], "essentials_category": null, "has_intermediate_output": false}, "ColorTransfer": {"input": {"required": {"image_target": ["IMAGE", {"tooltip": "Image(s) to apply the color transform to."}], "image_ref": ["IMAGE", {"tooltip": "Reference image(s) to match colors to."}], "method": ["COMBO", {"multiselect": false, "options": ["reinhard_lab", "mkl_lab", "histogram"]}], "source_stats": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "per_frame: each frame matched to image_ref individually. uniform: pool stats across all source frames as baseline, match to image_ref. target_frame: use one chosen frame as the baseline for the transform to image_ref, applied uniformly to all frames (preserves relative differences)", "options": [{"key": "per_frame", "inputs": {"required": {}}}, {"key": "uniform", "inputs": {"required": {}}}, {"key": "target_frame", "inputs": {"required": {"target_index": ["INT", {"tooltip": "Frame index used as the source baseline for computing the transform to image_ref", "default": 0, "min": 0, "max": 10000}]}}}]}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["image_target", "image_ref", "method", "source_stats", "strength"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["image"], "output_tooltips": [null], "output_matchtypes": null, "name": "ColorTransfer", "display_name": "Transfer Color", "description": "Match the colors of one image to another using various algorithms.", "python_module": "comfy_extras.nodes_post_processing", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["color match", "color grading", "color correction", "match colors", "color transform", "mkl", "reinhard", "histogram"], "essentials_category": null, "has_intermediate_output": false}, "LatentCompositeMasked": {"input": {"required": {"destination": ["LATENT", {}], "source": ["LATENT", {}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "resize_source": ["BOOLEAN", {"default": false}]}, "optional": {"mask": ["MASK", {}]}}, "input_order": {"required": ["destination", "source", "x", "y", "resize_source"], "optional": ["mask"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentCompositeMasked", "display_name": "Latent Composite Masked", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "model/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["overlay latent", "layer latent", "paste latent", "inpaint latent"], "essentials_category": null, "has_intermediate_output": false}, "ImageCompositeMasked": {"input": {"required": {"destination": ["IMAGE", {}], "source": ["IMAGE", {}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "resize_source": ["BOOLEAN", {"default": false}]}, "optional": {"mask": ["MASK", {}]}}, "input_order": {"required": ["destination", "source", "x", "y", "resize_source"], "optional": ["mask"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageCompositeMasked", "display_name": "Image Composite Masked", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/compositing", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["overlay", "layer", "paste image", "images composition"], "essentials_category": null, "has_intermediate_output": false}, "MaskToImage": {"input": {"required": {"mask": ["MASK", {}]}}, "input_order": {"required": ["mask"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MaskToImage", "display_name": "Convert Mask to Image", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["convert mask"], "essentials_category": null, "has_intermediate_output": false}, "ImageToMask": {"input": {"required": {"image": ["IMAGE", {}], "channel": ["COMBO", {"multiselect": false, "options": ["red", "green", "blue", "alpha"]}]}}, "input_order": {"required": ["image", "channel"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageToMask", "display_name": "Convert Image to Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["extract channel", "channel to mask"], "essentials_category": null, "has_intermediate_output": false}, "ImageColorToMask": {"input": {"required": {"image": ["IMAGE", {}], "color": ["INT", {"default": 0, "min": 0, "max": 16777215, "step": 1, "display": "number"}]}}, "input_order": {"required": ["image", "color"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageColorToMask", "display_name": "Convert Image Color to Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["color keying", "chroma key"], "essentials_category": null, "has_intermediate_output": false}, "SolidMask": {"input": {"required": {"value": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "width": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "height": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}]}}, "input_order": {"required": ["value", "width", "height"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "SolidMask", "display_name": "Create Solid Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "InvertMask": {"input": {"required": {"mask": ["MASK", {}]}}, "input_order": {"required": ["mask"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "InvertMask", "display_name": "Invert Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["reverse mask", "flip mask"], "essentials_category": null, "has_intermediate_output": false}, "CropMask": {"input": {"required": {"mask": ["MASK", {}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "width": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "height": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}]}}, "input_order": {"required": ["mask", "x", "y", "width", "height"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "CropMask", "display_name": "Crop Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["cut mask", "extract mask region", "mask slice"], "essentials_category": null, "has_intermediate_output": false}, "MaskComposite": {"input": {"required": {"destination": ["MASK", {}], "source": ["MASK", {}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "operation": ["COMBO", {"multiselect": false, "options": ["multiply", "add", "subtract", "and", "or", "xor"]}]}}, "input_order": {"required": ["destination", "source", "x", "y", "operation"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "MaskComposite", "display_name": "Combine Masks", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine masks", "blend masks", "layer masks", "masks composition"], "essentials_category": null, "has_intermediate_output": false}, "FeatherMask": {"input": {"required": {"mask": ["MASK", {}], "left": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "top": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "right": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "bottom": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}]}}, "input_order": {"required": ["mask", "left", "top", "right", "bottom"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "FeatherMask", "display_name": "Feather Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["soft edge mask", "blur mask edges", "gradient mask edge"], "essentials_category": null, "has_intermediate_output": false}, "GrowMask": {"input": {"required": {"mask": ["MASK", {}], "expand": ["INT", {"default": 0, "min": -16384, "max": 16384, "step": 1}], "tapered_corners": ["BOOLEAN", {"advanced": true, "default": true}]}}, "input_order": {"required": ["mask", "expand", "tapered_corners"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrowMask", "display_name": "Grow Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["expand mask", "shrink mask"], "essentials_category": null, "has_intermediate_output": false}, "ThresholdMask": {"input": {"required": {"mask": ["MASK", {}], "value": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["mask", "value"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "ThresholdMask", "display_name": "Threshold Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["binary mask"], "essentials_category": null, "has_intermediate_output": false}, "MaskPreview": {"input": {"required": {"mask": ["MASK", {}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["mask"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "MaskPreview", "display_name": "Preview Mask", "description": "Saves the input images to your ComfyUI output directory.", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["show mask", "view mask", "inspect mask", "debug mask"], "essentials_category": null, "has_intermediate_output": false}, "PorterDuffImageComposite": {"input": {"required": {"source": ["IMAGE", {}], "source_alpha": ["MASK", {}], "destination": ["IMAGE", {}], "destination_alpha": ["MASK", {}], "mode": ["COMBO", {"default": "DST", "multiselect": false, "options": ["ADD", "CLEAR", "DARKEN", "DST", "DST_ATOP", "DST_IN", "DST_OUT", "DST_OVER", "LIGHTEN", "MULTIPLY", "OVERLAY", "SCREEN", "SRC", "SRC_ATOP", "SRC_IN", "SRC_OUT", "SRC_OVER", "XOR"]}]}}, "input_order": {"required": ["source", "source_alpha", "destination", "destination_alpha", "mode"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "PorterDuffImageComposite", "display_name": "Porter-Duff Image Composite", "description": "", "python_module": "comfy_extras.nodes_compositing", "category": "image/compositing", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["alpha composite", "blend modes", "layer blend", "transparency blend"], "essentials_category": null, "has_intermediate_output": false}, "SplitImageWithAlpha": {"input": {"required": {"image": ["IMAGE", {}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SplitImageWithAlpha", "display_name": "Split Image with Alpha", "description": "", "python_module": "comfy_extras.nodes_compositing", "category": "image/compositing", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["extract alpha", "separate transparency", "remove alpha"], "essentials_category": null, "has_intermediate_output": false}, "JoinImageWithAlpha": {"input": {"required": {"image": ["IMAGE", {}], "alpha": ["MASK", {}]}}, "input_order": {"required": ["image", "alpha"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "JoinImageWithAlpha", "display_name": "Join Image with Alpha", "description": "", "python_module": "comfy_extras.nodes_compositing", "category": "image/compositing", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["add transparency", "apply alpha", "composite alpha", "RGBA"], "essentials_category": null, "has_intermediate_output": false}, "RebatchLatents": {"input": {"required": {"latents": ["LATENT", {}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["latents", "batch_size"]}, "is_input_list": true, "output": ["LATENT"], "output_is_list": [true], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "RebatchLatents", "display_name": "Rebatch Latents", "description": "", "python_module": "comfy_extras.nodes_rebatch", "category": "model/latent/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RebatchImages": {"input": {"required": {"images": ["IMAGE", {}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["images", "batch_size"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RebatchImages", "display_name": "Rebatch Images", "description": "", "python_module": "comfy_extras.nodes_rebatch", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ModelMergeSimple": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "ratio": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "ratio"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSimple", "display_name": "ModelMergeSimple", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeBlocks": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "input": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "out": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "input", "middle", "out"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeBlocks", "display_name": "ModelMergeBlocks", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeSubtract": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "multiplier": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "multiplier"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSubtract", "display_name": "ModelMergeSubtract", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeAdd": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"]}}, "input_order": {"required": ["model1", "model2"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeAdd", "display_name": "ModelMergeAdd", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CheckpointSave": {"input": {"required": {"model": ["MODEL"], "clip": ["CLIP"], "vae": ["VAE"], "filename_prefix": ["STRING", {"default": "checkpoints/ComfyUI"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["model", "clip", "vae", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "CheckpointSave", "display_name": "Save Checkpoint", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": true, "has_intermediate_output": false, "search_aliases": ["save model", "export checkpoint", "merge save"]}, "CLIPMergeSimple": {"input": {"required": {"clip1": ["CLIP"], "clip2": ["CLIP"], "ratio": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["clip1", "clip2", "ratio"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPMergeSimple", "display_name": "CLIPMergeSimple", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CLIPMergeSubtract": {"input": {"required": {"clip1": ["CLIP"], "clip2": ["CLIP"], "multiplier": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["clip1", "clip2", "multiplier"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPMergeSubtract", "display_name": "CLIPMergeSubtract", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": false, "has_intermediate_output": false, "search_aliases": ["clip difference", "text encoder subtract"]}, "CLIPMergeAdd": {"input": {"required": {"clip1": ["CLIP"], "clip2": ["CLIP"]}}, "input_order": {"required": ["clip1", "clip2"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPMergeAdd", "display_name": "CLIPMergeAdd", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": false, "has_intermediate_output": false, "search_aliases": ["combine clip"]}, "CLIPSave": {"input": {"required": {"clip": ["CLIP"], "filename_prefix": ["STRING", {"default": "clip/ComfyUI"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["clip", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "CLIPSave", "display_name": "CLIPSave", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "VAESave": {"input": {"required": {"vae": ["VAE"], "filename_prefix": ["STRING", {"default": "vae/ComfyUI_vae"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["vae", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "VAESave", "display_name": "VAESave", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "ModelSave": {"input": {"required": {"model": ["MODEL"], "filename_prefix": ["STRING", {"default": "diffusion_models/ComfyUI"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["model", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "ModelSave", "display_name": "ModelSave", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": true, "has_intermediate_output": false, "search_aliases": ["export model", "checkpoint save"]}, "TomePatchModel": {"input": {"required": {"model": ["MODEL", {}], "ratio": ["FLOAT", {"default": 0.3, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "ratio"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "TomePatchModel", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_tomesd", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeSDXLRefiner": {"input": {"required": {"ascore": ["FLOAT", {"default": 6.0, "min": 0.0, "max": 1000.0, "step": 0.01}], "width": ["INT", {"default": 1024, "min": 0, "max": 16384}], "height": ["INT", {"default": 1024, "min": 0, "max": 16384}], "text": ["STRING", {"multiline": true, "dynamicPrompts": true}], "clip": ["CLIP", {}]}}, "input_order": {"required": ["ascore", "width", "height", "text", "clip"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeSDXLRefiner", "display_name": "CLIP Text Encode (SDXL Refiner)", "description": "", "python_module": "comfy_extras.nodes_clip_sdxl", "category": "model/conditioning/stable diffusion", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeSDXL": {"input": {"required": {"clip": ["CLIP", {}], "width": ["INT", {"default": 1024, "min": 0, "max": 16384}], "height": ["INT", {"default": 1024, "min": 0, "max": 16384}], "crop_w": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 16384}], "crop_h": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 16384}], "target_width": ["INT", {"default": 1024, "min": 0, "max": 16384}], "target_height": ["INT", {"default": 1024, "min": 0, "max": 16384}], "text_g": ["STRING", {"multiline": true, "dynamicPrompts": true}], "text_l": ["STRING", {"multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["clip", "width", "height", "crop_w", "crop_h", "target_width", "target_height", "text_g", "text_l"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeSDXL", "display_name": "CLIP Text Encode (SDXL)", "description": "", "python_module": "comfy_extras.nodes_clip_sdxl", "category": "model/conditioning/stable diffusion", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Canny": {"input": {"required": {"image": ["IMAGE", {}], "low_threshold": ["FLOAT", {"default": 0.4, "min": 0.01, "max": 0.99, "step": 0.01}], "high_threshold": ["FLOAT", {"default": 0.8, "min": 0.01, "max": 0.99, "step": 0.01}]}}, "input_order": {"required": ["image", "low_threshold", "high_threshold"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Canny", "display_name": "Detect Edges (Canny)", "description": "", "python_module": "comfy_extras.nodes_canny", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["edge detection", "outline", "contour detection", "line art"], "essentials_category": "Image Tools", "has_intermediate_output": false}, "FreeU": {"input": {"required": {"model": ["MODEL", {}], "b1": ["FLOAT", {"advanced": true, "default": 1.1, "min": 0.0, "max": 10.0, "step": 0.01}], "b2": ["FLOAT", {"advanced": true, "default": 1.2, "min": 0.0, "max": 10.0, "step": 0.01}], "s1": ["FLOAT", {"advanced": true, "default": 0.9, "min": 0.0, "max": 10.0, "step": 0.01}], "s2": ["FLOAT", {"advanced": true, "default": 0.2, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "b1", "b2", "s1", "s2"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "FreeU", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_freelunch", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FreeU_V2": {"input": {"required": {"model": ["MODEL", {}], "b1": ["FLOAT", {"advanced": true, "default": 1.3, "min": 0.0, "max": 10.0, "step": 0.01}], "b2": ["FLOAT", {"advanced": true, "default": 1.4, "min": 0.0, "max": 10.0, "step": 0.01}], "s1": ["FLOAT", {"advanced": true, "default": 0.9, "min": 0.0, "max": 10.0, "step": 0.01}], "s2": ["FLOAT", {"advanced": true, "default": 0.2, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "b1", "b2", "s1", "s2"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "FreeU_V2", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_freelunch", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerCustom": {"input": {"required": {"model": ["MODEL", {}], "add_noise": ["BOOLEAN", {"advanced": true, "default": true}], "noise_seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "sampler": ["SAMPLER", {}], "sigmas": ["SIGMAS", {}], "latent_image": ["LATENT", {}]}}, "input_order": {"required": ["model", "add_noise", "noise_seed", "cfg", "positive", "negative", "sampler", "sigmas", "latent_image"]}, "is_input_list": false, "output": ["LATENT", "LATENT"], "output_is_list": [false, false], "output_name": ["output", "denoised_output"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SamplerCustom", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/custom", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CFGOverride": {"input": {"required": {"model": ["MODEL", {}], "cfg": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["model", "cfg", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "CFGOverride", "display_name": "CFG Override", "description": "Override cfg to a fixed value over a [start, end] percent (sigma) range. With multiple overrides, the one nearest the sampler wins on overlap.", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/guiders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BasicScheduler": {"input": {"required": {"model": ["MODEL", {}], "scheduler": ["COMBO", {"multiselect": false, "options": ["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal"]}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "scheduler", "steps", "denoise"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "BasicScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KarrasScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "sigma_max": ["FLOAT", {"advanced": true, "default": 14.614642, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "sigma_min": ["FLOAT", {"advanced": true, "default": 0.0291675, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "rho": ["FLOAT", {"advanced": true, "default": 7.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["steps", "sigma_max", "sigma_min", "rho"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "KarrasScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ExponentialScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "sigma_max": ["FLOAT", {"advanced": true, "default": 14.614642, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "sigma_min": ["FLOAT", {"advanced": true, "default": 0.0291675, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["steps", "sigma_max", "sigma_min"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "ExponentialScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PolyexponentialScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "sigma_max": ["FLOAT", {"advanced": true, "default": 14.614642, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "sigma_min": ["FLOAT", {"advanced": true, "default": 0.0291675, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "rho": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["steps", "sigma_max", "sigma_min", "rho"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "PolyexponentialScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LaplaceScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "sigma_max": ["FLOAT", {"advanced": true, "default": 14.614642, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "sigma_min": ["FLOAT", {"advanced": true, "default": 0.0291675, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "mu": ["FLOAT", {"advanced": true, "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.1, "round": false}], "beta": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0.0, "max": 10.0, "step": 0.1, "round": false}]}}, "input_order": {"required": ["steps", "sigma_max", "sigma_min", "mu", "beta"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "LaplaceScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VPScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "beta_d": ["FLOAT", {"advanced": true, "default": 19.9, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "beta_min": ["FLOAT", {"advanced": true, "default": 0.1, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "eps_s": ["FLOAT", {"advanced": true, "default": 0.001, "min": 0.0, "max": 1.0, "step": 0.0001, "round": false}]}}, "input_order": {"required": ["steps", "beta_d", "beta_min", "eps_s"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "VPScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BetaSamplingScheduler": {"input": {"required": {"model": ["MODEL", {}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "alpha": ["FLOAT", {"advanced": true, "default": 0.6, "min": 0.0, "max": 50.0, "step": 0.01, "round": false}], "beta": ["FLOAT", {"advanced": true, "default": 0.6, "min": 0.0, "max": 50.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["model", "steps", "alpha", "beta"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "BetaSamplingScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SDTurboScheduler": {"input": {"required": {"model": ["MODEL", {}], "steps": ["INT", {"default": 1, "min": 1, "max": 10}], "denoise": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "steps", "denoise"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "SDTurboScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KSamplerSelect": {"input": {"required": {"sampler_name": ["COMBO", {"multiselect": false, "options": ["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]}]}}, "input_order": {"required": ["sampler_name"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "KSamplerSelect", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerEulerAncestral": {"input": {"required": {"eta": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["eta", "s_noise"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerEulerAncestral", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerEulerAncestralCFGPP": {"input": {"required": {"eta": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["eta", "s_noise"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerEulerAncestralCFGPP", "display_name": "SamplerEulerAncestralCFG++", "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerLMS": {"input": {"required": {"order": ["INT", {"advanced": true, "default": 4, "min": 1, "max": 100}]}}, "input_order": {"required": ["order"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerLMS", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerDPMPP_3M_SDE": {"input": {"required": {"eta": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "noise_device": ["COMBO", {"advanced": true, "multiselect": false, "options": ["gpu", "cpu"]}]}}, "input_order": {"required": ["eta", "s_noise", "noise_device"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerDPMPP_3M_SDE", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerDPMPP_2M_SDE": {"input": {"required": {"solver_type": ["COMBO", {"multiselect": false, "options": ["midpoint", "heun"]}], "eta": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "noise_device": ["COMBO", {"advanced": true, "multiselect": false, "options": ["gpu", "cpu"]}]}}, "input_order": {"required": ["solver_type", "eta", "s_noise", "noise_device"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerDPMPP_2M_SDE", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerDPMPP_SDE": {"input": {"required": {"eta": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "r": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "noise_device": ["COMBO", {"advanced": true, "multiselect": false, "options": ["gpu", "cpu"]}]}}, "input_order": {"required": ["eta", "s_noise", "r", "noise_device"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerDPMPP_SDE", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerDPMPP_2S_Ancestral": {"input": {"required": {"eta": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["eta", "s_noise"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerDPMPP_2S_Ancestral", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerDPMAdaptative": {"input": {"required": {"order": ["INT", {"advanced": true, "default": 3, "min": 2, "max": 3}], "rtol": ["FLOAT", {"advanced": true, "default": 0.05, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "atol": ["FLOAT", {"advanced": true, "default": 0.0078, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "h_init": ["FLOAT", {"advanced": true, "default": 0.05, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "pcoeff": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "icoeff": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "dcoeff": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "accept_safety": ["FLOAT", {"advanced": true, "default": 0.81, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "eta": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["order", "rtol", "atol", "h_init", "pcoeff", "icoeff", "dcoeff", "accept_safety", "eta", "s_noise"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerDPMAdaptative", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerER_SDE": {"input": {"required": {"solver_type": ["COMBO", {"multiselect": false, "options": ["ER-SDE", "Reverse-time SDE", "ODE"]}], "max_stage": ["INT", {"advanced": true, "default": 3, "min": 1, "max": 3}], "eta": ["FLOAT", {"tooltip": "Stochastic strength of reverse-time SDE.\nWhen eta=0, it reduces to deterministic ODE. This setting doesn't apply to ER-SDE solver type.", "advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["solver_type", "max_stage", "eta", "s_noise"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerER_SDE", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerSASolver": {"input": {"required": {"model": ["MODEL", {}], "eta": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01, "round": false}], "sde_start_percent": ["FLOAT", {"advanced": true, "default": 0.2, "min": 0.0, "max": 1.0, "step": 0.001}], "sde_end_percent": ["FLOAT", {"advanced": true, "default": 0.8, "min": 0.0, "max": 1.0, "step": 0.001}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "predictor_order": ["INT", {"advanced": true, "default": 3, "min": 1, "max": 6}], "corrector_order": ["INT", {"advanced": true, "default": 4, "min": 0, "max": 6}], "use_pece": ["BOOLEAN", {"advanced": true}], "simple_order_2": ["BOOLEAN", {"advanced": true}]}}, "input_order": {"required": ["model", "eta", "sde_start_percent", "sde_end_percent", "s_noise", "predictor_order", "corrector_order", "use_pece", "simple_order_2"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerSASolver", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["sde"], "essentials_category": null, "has_intermediate_output": false}, "SamplerSEEDS2": {"input": {"required": {"solver_type": ["COMBO", {"multiselect": false, "options": ["phi_1", "phi_2"]}], "eta": ["FLOAT", {"tooltip": "Stochastic strength", "advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"tooltip": "SDE noise multiplier", "advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "r": ["FLOAT", {"tooltip": "Relative step size for the intermediate stage (c2 node)", "advanced": true, "default": 0.5, "min": 0.01, "max": 1.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["solver_type", "eta", "s_noise", "r"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerSEEDS2", "display_name": null, "description": "This sampler node can represent multiple samplers:\n\nseeds_2\n- default setting\n\nexp_heun_2_x0\n- solver_type=phi_2, r=1.0, eta=0.0\n\nexp_heun_2_x0_sde\n- solver_type=phi_2, r=1.0, eta=1.0, s_noise=1.0", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["sde", "exp heun"], "essentials_category": null, "has_intermediate_output": false}, "SplitSigmas": {"input": {"required": {"sigmas": ["SIGMAS", {}], "step": ["INT", {"default": 0, "min": 0, "max": 10000}]}}, "input_order": {"required": ["sigmas", "step"]}, "is_input_list": false, "output": ["SIGMAS", "SIGMAS"], "output_is_list": [false, false], "output_name": ["high_sigmas", "low_sigmas"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SplitSigmas", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SplitSigmasDenoise": {"input": {"required": {"sigmas": ["SIGMAS", {}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["sigmas", "denoise"]}, "is_input_list": false, "output": ["SIGMAS", "SIGMAS"], "output_is_list": [false, false], "output_name": ["high_sigmas", "low_sigmas"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SplitSigmasDenoise", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FlipSigmas": {"input": {"required": {"sigmas": ["SIGMAS", {}]}}, "input_order": {"required": ["sigmas"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "FlipSigmas", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SetFirstSigma": {"input": {"required": {"sigmas": ["SIGMAS", {}], "sigma": ["FLOAT", {"default": 136.0, "min": 0.0, "max": 20000.0, "step": 0.001, "round": false}]}}, "input_order": {"required": ["sigmas", "sigma"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "SetFirstSigma", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ExtendIntermediateSigmas": {"input": {"required": {"sigmas": ["SIGMAS", {}], "steps": ["INT", {"default": 2, "min": 1, "max": 100}], "start_at_sigma": ["FLOAT", {"default": -1.0, "min": -1.0, "max": 20000.0, "step": 0.01, "round": false}], "end_at_sigma": ["FLOAT", {"default": 12.0, "min": 0.0, "max": 20000.0, "step": 0.01, "round": false}], "spacing": ["COMBO", {"multiselect": false, "options": ["linear", "cosine", "sine"]}]}}, "input_order": {"required": ["sigmas", "steps", "start_at_sigma", "end_at_sigma", "spacing"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "ExtendIntermediateSigmas", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["interpolate sigmas"], "essentials_category": null, "has_intermediate_output": false}, "SamplingPercentToSigma": {"input": {"required": {"model": ["MODEL", {}], "sampling_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.0001}], "return_actual_sigma": ["BOOLEAN", {"tooltip": "Return the actual sigma value instead of the value used for interval checks.\nThis only affects results at 0.0 and 1.0.", "default": false}]}}, "input_order": {"required": ["model", "sampling_percent", "return_actual_sigma"]}, "is_input_list": false, "output": ["FLOAT"], "output_is_list": [false], "output_name": ["sigma_value"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplingPercentToSigma", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CFGGuider": {"input": {"required": {"model": ["MODEL", {}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}]}}, "input_order": {"required": ["model", "positive", "negative", "cfg"]}, "is_input_list": false, "output": ["GUIDER"], "output_is_list": [false], "output_name": ["GUIDER"], "output_tooltips": [null], "output_matchtypes": null, "name": "CFGGuider", "display_name": "CFG Guider", "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/guiders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "DualCFGGuider": {"input": {"required": {"model": ["MODEL", {}], "cond1": ["CONDITIONING", {}], "cond2": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "cfg_conds": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "cfg_cond2_negative": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "style": ["COMBO", {"multiselect": false, "options": ["regular", "nested"]}]}}, "input_order": {"required": ["model", "cond1", "cond2", "negative", "cfg_conds", "cfg_cond2_negative", "style"]}, "is_input_list": false, "output": ["GUIDER"], "output_is_list": [false], "output_name": ["GUIDER"], "output_tooltips": [null], "output_matchtypes": null, "name": "DualCFGGuider", "display_name": "Dual CFG Guider", "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/guiders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["dual prompt guidance"], "essentials_category": null, "has_intermediate_output": false}, "DualModelGuider": {"input": {"required": {"model": ["MODEL", {"tooltip": "Model used for the positive (conditional) pass."}], "positive": ["CONDITIONING", {}], "cfg": ["FLOAT", {"default": 4.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}]}, "optional": {"model_negative": ["MODEL", {"tooltip": "Model used for the negative (unconditional) pass. Use the same model for ordinary CFG."}], "negative": ["CONDITIONING", {"tooltip": "Negative conditioning run on the negative model. Leave unconnected for a text-free (image-only) unconditional pass."}]}}, "input_order": {"required": ["model", "positive", "cfg"], "optional": ["model_negative", "negative"]}, "is_input_list": false, "output": ["GUIDER"], "output_is_list": [false], "output_name": ["GUIDER"], "output_tooltips": [null], "output_matchtypes": null, "name": "DualModelGuider", "display_name": "Dual Model CFG Guider", "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/guiders", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BasicGuider": {"input": {"required": {"model": ["MODEL", {}], "conditioning": ["CONDITIONING", {}]}}, "input_order": {"required": ["model", "conditioning"]}, "is_input_list": false, "output": ["GUIDER"], "output_is_list": [false], "output_name": ["GUIDER"], "output_tooltips": [null], "output_matchtypes": null, "name": "BasicGuider", "display_name": "Basic Guider", "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/guiders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RandomNoise": {"input": {"required": {"noise_seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}}, "input_order": {"required": ["noise_seed"]}, "is_input_list": false, "output": ["NOISE"], "output_is_list": [false], "output_name": ["NOISE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RandomNoise", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/noise", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "DisableNoise": {"input": {"required": {}}, "input_order": {"required": []}, "is_input_list": false, "output": ["NOISE"], "output_is_list": [false], "output_name": ["NOISE"], "output_tooltips": [null], "output_matchtypes": null, "name": "DisableNoise", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/noise", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["zero noise"], "essentials_category": null, "has_intermediate_output": false}, "AddNoise": {"input": {"required": {"model": ["MODEL", {}], "noise": ["NOISE", {}], "sigmas": ["SIGMAS", {}], "latent_image": ["LATENT", {}]}}, "input_order": {"required": ["model", "noise", "sigmas", "latent_image"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "AddNoise", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "experimental/custom_sampling/noise", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerCustomAdvanced": {"input": {"required": {"noise": ["NOISE", {}], "guider": ["GUIDER", {}], "sampler": ["SAMPLER", {}], "sigmas": ["SIGMAS", {}], "latent_image": ["LATENT", {}]}}, "input_order": {"required": ["noise", "guider", "sampler", "sigmas", "latent_image"]}, "is_input_list": false, "output": ["LATENT", "LATENT"], "output_is_list": [false, false], "output_name": ["output", "denoised_output"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SamplerCustomAdvanced", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/custom", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ManualSigmas": {"input": {"required": {"sigmas": ["STRING", {"default": "1, 0.5", "multiline": false}]}}, "input_order": {"required": ["sigmas"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "ManualSigmas", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "experimental/custom_sampling", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["custom noise schedule", "define sigmas"], "essentials_category": null, "has_intermediate_output": false}, "HyperTile": {"input": {"required": {"model": ["MODEL", {}], "tile_size": ["INT", {"advanced": true, "default": 256, "min": 1, "max": 2048}], "swap_size": ["INT", {"advanced": true, "default": 2, "min": 1, "max": 128}], "max_depth": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 10}], "scale_depth": ["BOOLEAN", {"advanced": true, "default": false}]}}, "input_order": {"required": ["model", "tile_size", "swap_size", "max_depth", "scale_depth"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "HyperTile", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hypertile", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ModelSamplingDiscrete": {"input": {"required": {"model": ["MODEL"], "sampling": [["eps", "v_prediction", "lcm", "x0", "img_to_img", "img_to_img_flow"]], "zsnr": ["BOOLEAN", {"default": false, "advanced": true}]}}, "input_order": {"required": ["model", "sampling", "zsnr"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingDiscrete", "display_name": "ModelSamplingDiscrete", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingContinuousEDM": {"input": {"required": {"model": ["MODEL"], "sampling": [["v_prediction", "edm", "edm_playground_v2.5", "eps", "cosmos_rflow"]], "sigma_max": ["FLOAT", {"default": 120.0, "min": 0.0, "max": 1000.0, "step": 0.001, "round": false, "advanced": true}], "sigma_min": ["FLOAT", {"default": 0.002, "min": 0.0, "max": 1000.0, "step": 0.001, "round": false, "advanced": true}]}}, "input_order": {"required": ["model", "sampling", "sigma_max", "sigma_min"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingContinuousEDM", "display_name": "ModelSamplingContinuousEDM", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingContinuousV": {"input": {"required": {"model": ["MODEL"], "sampling": [["v_prediction"]], "sigma_max": ["FLOAT", {"default": 500.0, "min": 0.0, "max": 1000.0, "step": 0.001, "round": false, "advanced": true}], "sigma_min": ["FLOAT", {"default": 0.03, "min": 0.0, "max": 1000.0, "step": 0.001, "round": false, "advanced": true}]}}, "input_order": {"required": ["model", "sampling", "sigma_max", "sigma_min"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingContinuousV", "display_name": "ModelSamplingContinuousV", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingStableCascade": {"input": {"required": {"model": ["MODEL"], "shift": ["FLOAT", {"default": 2.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "shift"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingStableCascade", "display_name": "ModelSamplingStableCascade", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch/stable cascade", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingSD3": {"input": {"required": {"model": ["MODEL"], "shift": ["FLOAT", {"default": 3.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "shift"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingSD3", "display_name": "ModelSamplingSD3", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch/stable diffusion", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingAuraFlow": {"input": {"required": {"model": ["MODEL"], "shift": ["FLOAT", {"default": 1.73, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "shift"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingAuraFlow", "display_name": "ModelSamplingAuraFlow", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingFlux": {"input": {"required": {"model": ["MODEL"], "max_shift": ["FLOAT", {"default": 1.15, "min": 0.0, "max": 100.0, "step": 0.01, "advanced": true}], "base_shift": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 100.0, "step": 0.01, "advanced": true}], "width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 8}]}}, "input_order": {"required": ["model", "max_shift", "base_shift", "width", "height"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingFlux", "display_name": "ModelSamplingFlux", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch/flux", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelNoiseScale": {"input": {"required": {"model": ["MODEL"], "noise_scale": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 64.0, "step": 0.01, "tooltip": "Absolute training noise scale. For example HiDream-O1 base: 8.0, dev: 7.5."}]}}, "input_order": {"required": ["model", "noise_scale"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelNoiseScale", "display_name": "ModelNoiseScale", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "RescaleCFG": {"input": {"required": {"model": ["MODEL"], "multiplier": ["FLOAT", {"default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "multiplier"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "RescaleCFG", "display_name": "RescaleCFG", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelComputeDtype": {"input": {"required": {"model": ["MODEL"], "dtype": [["default", "fp32", "fp16", "bf16"], {"advanced": true}]}}, "input_order": {"required": ["model", "dtype"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelComputeDtype", "display_name": "ModelComputeDtype", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "advanced/debug", "output_node": false, "has_intermediate_output": false, "search_aliases": ["model precision", "change dtype"]}, "PatchModelAddDownscale": {"input": {"required": {"model": ["MODEL", {}], "block_number": ["INT", {"advanced": true, "default": 3, "min": 1, "max": 32, "step": 1}], "downscale_factor": ["FLOAT", {"default": 2.0, "min": 0.1, "max": 9.0, "step": 0.001}], "start_percent": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"advanced": true, "default": 0.35, "min": 0.0, "max": 1.0, "step": 0.001}], "downscale_after_skip": ["BOOLEAN", {"advanced": true, "default": true}], "downscale_method": ["COMBO", {"multiselect": false, "options": ["bicubic", "nearest-exact", "bilinear", "area", "bislerp"]}], "upscale_method": ["COMBO", {"multiselect": false, "options": ["bicubic", "nearest-exact", "bilinear", "area", "bislerp"]}]}}, "input_order": {"required": ["model", "block_number", "downscale_factor", "start_percent", "end_percent", "downscale_after_skip", "downscale_method", "upscale_method"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "PatchModelAddDownscale", "display_name": "PatchModelAddDownscale (Kohya Deep Shrink)", "description": "", "python_module": "comfy_extras.nodes_model_downscale", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageCrop": {"input": {"required": {"image": ["IMAGE", {}], "width": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "height": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}]}}, "input_order": {"required": ["image", "width", "height", "x", "y"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageCrop", "display_name": "Crop Image (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["trim"], "essentials_category": "Image Tools", "has_intermediate_output": false}, "ImageCropV2": {"input": {"required": {"image": ["IMAGE", {}], "crop_region": ["BOUNDING_BOX", {"default": {"x": 0, "y": 0, "width": 512, "height": 512}, "socketless": true, "component": "ImageCrop"}]}}, "input_order": {"required": ["image", "crop_region"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageCropV2", "display_name": "Crop Image", "description": "Crop an image to the specified dimensions.", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["crop", "cut", "trim"], "essentials_category": "Image Tools", "has_intermediate_output": true}, "PrimitiveBoundingBox": {"input": {"required": {"x": ["INT", {"default": 0, "min": 0, "max": 16384}], "y": ["INT", {"default": 0, "min": 0, "max": 16384}], "width": ["INT", {"default": 512, "min": 1, "max": 16384}], "height": ["INT", {"default": 512, "min": 1, "max": 16384}]}}, "input_order": {"required": ["x", "y", "width", "height"]}, "is_input_list": false, "output": ["BOUNDING_BOX"], "output_is_list": [false], "output_name": ["BOUNDING_BOX"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveBoundingBox", "display_name": "Bounding Box", "description": "", "python_module": "comfy_extras.nodes_images", "category": "utilities/primitive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RepeatImageBatch": {"input": {"required": {"image": ["IMAGE", {}], "amount": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["image", "amount"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RepeatImageBatch", "display_name": "Repeat Image Batch", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["duplicate image", "clone image"], "essentials_category": null, "has_intermediate_output": false}, "ImageFromBatch": {"input": {"required": {"image": ["IMAGE", {}], "batch_index": ["INT", {"default": 0, "min": -16384, "max": 16384}], "length": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["image", "batch_index", "length"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageFromBatch", "display_name": "Get Image from Batch", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["select image", "pick from batch", "extract image"], "essentials_category": null, "has_intermediate_output": false}, "ImageAddNoise": {"input": {"required": {"image": ["IMAGE", {}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "strength": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["image", "seed", "strength"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageAddNoise", "display_name": "Add Noise to Image", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["film grain"], "essentials_category": null, "has_intermediate_output": false}, "SaveAnimatedWEBP": {"input": {"required": {"images": ["IMAGE", {}], "filename_prefix": ["STRING", {"default": "ComfyUI", "multiline": false}], "fps": ["FLOAT", {"default": 6.0, "min": 0.01, "max": 1000.0, "step": 0.01}], "lossless": ["BOOLEAN", {"default": true}], "quality": ["INT", {"default": 80, "min": 0, "max": 100}], "method": ["COMBO", {"multiselect": false, "options": ["default", "fastest", "slowest"]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "filename_prefix", "fps", "lossless", "quality", "method"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveAnimatedWEBP", "display_name": "Save Animated WEBP", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveAnimatedPNG": {"input": {"required": {"images": ["IMAGE", {}], "filename_prefix": ["STRING", {"default": "ComfyUI", "multiline": false}], "fps": ["FLOAT", {"default": 6.0, "min": 0.01, "max": 1000.0, "step": 0.01}], "compress_level": ["INT", {"advanced": true, "default": 4, "min": 0, "max": 9}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "filename_prefix", "fps", "compress_level"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveAnimatedPNG", "display_name": "Save Animated PNG", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveImageAdvanced": {"input": {"required": {"images": ["IMAGE", {"tooltip": "The images to save."}], "filename_prefix": ["STRING", {"tooltip": "The prefix for the file to save. May include formatting tokens such as %date:yyyy-MM-dd% or %Empty Latent Image.width%.", "default": "ComfyUI", "multiline": false}], "format": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The file format in which to save the image.", "options": [{"key": "png", "inputs": {"required": {"bit_depth": ["COMBO", {"advanced": true, "default": "8-bit", "multiselect": false, "options": ["8-bit", "16-bit"]}], "input_color_space": ["COMBO", {"advanced": true, "default": "sRGB", "multiselect": false, "options": ["sRGB"]}]}}}, {"key": "exr", "inputs": {"required": {"bit_depth": ["COMBO", {"advanced": true, "default": "32-bit float", "multiselect": false, "options": ["32-bit float"]}], "input_color_space": ["COMBO", {"tooltip": "Colorspace of the input tensor. The EXR is always written as scene-linear in the matching gamut.\nsRGB \u2014 input is sRGB-encoded Rec.709; the inverse sRGB EOTF is applied.\nHDR \u2014 input is HLG-encoded Rec.2020 (BT.2100); the inverse HLG OETF is applied to get scene-linear light.\nlinear \u2014 input is already scene-linear (Rec.709 primaries); written through unchanged. Use this for renderer/compositor output.", "advanced": true, "default": "sRGB", "multiselect": false, "options": ["sRGB", "HDR", "linear"]}]}}}]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "filename_prefix", "format"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveImageAdvanced", "display_name": "Save Image (Advanced)", "description": "Saves the input images to your ComfyUI output directory.", "python_module": "comfy_extras.nodes_images", "category": "image", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["save", "save image", "export image", "output image", "write image"], "essentials_category": "Basics", "has_intermediate_output": false}, "SaveSVGNode": {"input": {"required": {"svg": ["SVG", {}], "filename_prefix": ["STRING", {"tooltip": "The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes.", "default": "svg/ComfyUI", "multiline": false}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["svg", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["SVG"], "output_is_list": [false], "output_name": ["svg"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveSVGNode", "display_name": "Save SVG", "description": "Save SVG files on disk.", "python_module": "comfy_extras.nodes_images", "category": "image", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export vector", "save vector graphics"], "essentials_category": null, "has_intermediate_output": false}, "ImageStitch": {"input": {"required": {"image1": ["IMAGE", {}], "direction": ["COMBO", {"default": "right", "multiselect": false, "options": ["right", "down", "left", "up"]}], "match_image_size": ["BOOLEAN", {"default": true}], "spacing_width": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 1024, "step": 2}], "spacing_color": ["COMBO", {"advanced": true, "default": "white", "multiselect": false, "options": ["white", "black", "red", "green", "blue"]}]}, "optional": {"image2": ["IMAGE", {}]}}, "input_order": {"required": ["image1", "direction", "match_image_size", "spacing_width", "spacing_color"], "optional": ["image2"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageStitch", "display_name": "Stitch Images", "description": "Stitches image2 to image1 in the specified direction.\nIf image2 is not provided, returns image1 unchanged.\nOptional spacing can be added between images.", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine images", "join images", "concatenate images", "side by side"], "essentials_category": null, "has_intermediate_output": false}, "ResizeAndPadImage": {"input": {"required": {"image": ["IMAGE", {}], "target_width": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "target_height": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "padding_color": ["COMBO", {"advanced": true, "multiselect": false, "options": ["white", "black"]}], "interpolation": ["COMBO", {"advanced": true, "multiselect": false, "options": ["area", "bicubic", "nearest-exact", "bilinear", "lanczos"]}]}}, "input_order": {"required": ["image", "target_width", "target_height", "padding_color", "interpolation"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ResizeAndPadImage", "display_name": "Resize And Pad Image", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["fit to size"], "essentials_category": null, "has_intermediate_output": false}, "GetImageSize": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image"], "hidden": ["unique_id"]}, "is_input_list": false, "output": ["INT", "INT", "INT"], "output_is_list": [false, false, false], "output_name": ["width", "height", "batch_size"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "GetImageSize", "display_name": "Get Image Size", "description": "Returns width and height of the image, and passes it through unchanged.", "python_module": "comfy_extras.nodes_images", "category": "image", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["dimensions", "resolution", "image info"], "essentials_category": null, "has_intermediate_output": false}, "ImageRotate": {"input": {"required": {"image": ["IMAGE", {}], "rotation": ["COMBO", {"multiselect": false, "options": ["none", "90 degrees", "180 degrees", "270 degrees"]}]}}, "input_order": {"required": ["image", "rotation"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageRotate", "display_name": "Rotate Image", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["turn", "flip orientation"], "essentials_category": "Image Tools", "has_intermediate_output": false}, "ImageFlip": {"input": {"required": {"image": ["IMAGE", {}], "flip_method": ["COMBO", {"multiselect": false, "options": ["x-axis: vertically", "y-axis: horizontally"]}]}}, "input_order": {"required": ["image", "flip_method"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageFlip", "display_name": "Flip Image", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["mirror", "reflect"], "essentials_category": null, "has_intermediate_output": false}, "ImageScaleToMaxDimension": {"input": {"required": {"image": ["IMAGE", {}], "upscale_method": ["COMBO", {"multiselect": false, "options": ["area", "lanczos", "bilinear", "nearest-exact", "bilinear", "bicubic"]}], "largest_size": ["INT", {"default": 512, "min": 0, "max": 16384, "step": 1}]}}, "input_order": {"required": ["image", "upscale_method", "largest_size"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageScaleToMaxDimension", "display_name": "Scale Image to Max Dimension", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/upscaling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SplitImageToTileList": {"input": {"required": {"image": ["IMAGE", {}], "tile_width": ["INT", {"default": 1024, "min": 64, "max": 16384}], "tile_height": ["INT", {"default": 1024, "min": 64, "max": 16384}], "overlap": ["INT", {"default": 128, "min": 0, "max": 4096}]}}, "input_order": {"required": ["image", "tile_width", "tile_height", "overlap"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "SplitImageToTileList", "display_name": "Split Image into List of Tiles", "description": "Splits an image into a batched list of tiles with a specified overlap.", "python_module": "comfy_extras.nodes_images", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["split image", "tile image", "slice image"], "essentials_category": null, "has_intermediate_output": false}, "ImageMergeTileList": {"input": {"required": {"image_list": ["IMAGE", {}], "final_width": ["INT", {"default": 1024, "min": 64, "max": 32768}], "final_height": ["INT", {"default": 1024, "min": 64, "max": 32768}], "overlap": ["INT", {"default": 128, "min": 0, "max": 4096}]}}, "input_order": {"required": ["image_list", "final_width", "final_height", "overlap"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageMergeTileList", "display_name": "Merge List of Tiles to Image", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["split image", "tile image", "slice image"], "essentials_category": null, "has_intermediate_output": false}, "ImageOnlyCheckpointLoader": {"input": {"required": {"ckpt_name": [[]]}}, "input_order": {"required": ["ckpt_name"]}, "is_input_list": false, "output": ["MODEL", "CLIP_VISION", "VAE"], "output_is_list": [false, false, false], "output_name": ["MODEL", "CLIP_VISION", "VAE"], "name": "ImageOnlyCheckpointLoader", "display_name": "Load Checkpoint Image Only (img2vid model)", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SVD_img2vid_Conditioning": {"input": {"required": {"clip_vision": ["CLIP_VISION"], "init_image": ["IMAGE"], "vae": ["VAE"], "width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 576, "min": 16, "max": 16384, "step": 8}], "video_frames": ["INT", {"default": 14, "min": 1, "max": 4096}], "motion_bucket_id": ["INT", {"default": 127, "min": 1, "max": 1023, "advanced": true}], "fps": ["INT", {"default": 6, "min": 1, "max": 1024}], "augmentation_level": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 10.0, "step": 0.01, "advanced": true}]}}, "input_order": {"required": ["clip_vision", "init_image", "vae", "width", "height", "video_frames", "motion_bucket_id", "fps", "augmentation_level"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "name": "SVD_img2vid_Conditioning", "display_name": "SVD_img2vid_Conditioning", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "model/conditioning/stable video", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VideoLinearCFGGuidance": {"input": {"required": {"model": ["MODEL"], "min_cfg": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.5, "round": 0.01, "advanced": true}]}}, "input_order": {"required": ["model", "min_cfg"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "VideoLinearCFGGuidance", "display_name": "Video Linear CFG Guidance", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "model/sampling/guiders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VideoTriangleCFGGuidance": {"input": {"required": {"model": ["MODEL"], "min_cfg": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.5, "round": 0.01, "advanced": true}]}}, "input_order": {"required": ["model", "min_cfg"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "VideoTriangleCFGGuidance", "display_name": "Video Triangle CFG Guidance", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "model/sampling/guiders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImageOnlyCheckpointSave": {"input": {"required": {"model": ["MODEL"], "clip_vision": ["CLIP_VISION"], "vae": ["VAE"], "filename_prefix": ["STRING", {"default": "checkpoints/ComfyUI"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["model", "clip_vision", "vae", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "ImageOnlyCheckpointSave", "display_name": "ImageOnlyCheckpointSave", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "model/merging", "output_node": true, "has_intermediate_output": false, "search_aliases": ["save model", "export checkpoint", "merge save"]}, "ConditioningSetAreaPercentageVideo": {"input": {"required": {"conditioning": ["CONDITIONING"], "width": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}], "height": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}], "temporal": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}], "x": ["FLOAT", {"default": 0, "min": 0, "max": 1.0, "step": 0.01}], "y": ["FLOAT", {"default": 0, "min": 0, "max": 1.0, "step": 0.01}], "z": ["FLOAT", {"default": 0, "min": 0, "max": 1.0, "step": 0.01}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "width", "height", "temporal", "x", "y", "z", "strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetAreaPercentageVideo", "display_name": "Conditioning (Set Area with Percentage for Video)", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "Ideogram4Scheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 200}], "width": ["INT", {"default": 1024, "min": 256, "max": 8192, "step": 16}], "height": ["INT", {"default": 1024, "min": 256, "max": 8192, "step": 16}], "mu": ["FLOAT", {"default": 0.0, "min": -10.0, "max": 10.0, "step": 0.05}], "std": ["FLOAT", {"default": 1.75, "min": 0.1, "max": 5.0, "step": 0.05}]}}, "input_order": {"required": ["steps", "width", "height", "mu", "std"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "Ideogram4Scheduler", "display_name": "Ideogram 4 Scheduler", "description": "", "python_module": "comfy_extras.nodes_ideogram4", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TrainLoraNode": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to train the LoRA on."}], "latents": ["LATENT", {"tooltip": "The Latents to use for training, serve as dataset/input of the model."}], "positive": ["CONDITIONING", {"tooltip": "The positive conditioning to use for training."}], "batch_size": ["INT", {"tooltip": "The batch size to use for training.", "default": 1, "min": 1, "max": 10000}], "grad_accumulation_steps": ["INT", {"tooltip": "The number of gradient accumulation steps to use for training.", "default": 1, "min": 1, "max": 1024}], "steps": ["INT", {"tooltip": "The number of steps to train the LoRA for.", "default": 16, "min": 1, "max": 100000}], "learning_rate": ["FLOAT", {"tooltip": "The learning rate to use for training.", "default": 0.0005, "min": 1e-07, "max": 1.0, "step": 1e-07}], "rank": ["INT", {"tooltip": "The rank of the LoRA layers.", "default": 8, "min": 1, "max": 128}], "optimizer": ["COMBO", {"tooltip": "The optimizer to use for training.", "default": "AdamW", "multiselect": false, "options": ["AdamW", "Adam", "SGD", "RMSprop"]}], "loss_function": ["COMBO", {"tooltip": "The loss function to use for training.", "default": "MSE", "multiselect": false, "options": ["MSE", "L1", "Huber", "SmoothL1"]}], "seed": ["INT", {"tooltip": "The seed to use for training (used in generator for LoRA weight initialization and noise sampling)", "default": 0, "min": 0, "max": 18446744073709551615}], "training_dtype": ["COMBO", {"tooltip": "The dtype to use for training. 'none' preserves the model's native compute dtype instead of overriding it. For fp16 models, GradScaler is automatically enabled.", "default": "bf16", "multiselect": false, "options": ["bf16", "fp32", "none"]}], "lora_dtype": ["COMBO", {"tooltip": "The dtype to use for lora.", "default": "bf16", "multiselect": false, "options": ["bf16", "fp32"]}], "quantized_backward": ["BOOLEAN", {"tooltip": "When using training_dtype 'none' and training on quantized model, doing backward with quantized matmul when enabled.", "default": false}], "algorithm": ["COMBO", {"tooltip": "The algorithm to use for training.", "default": "LoRA", "multiselect": false, "options": ["LoRA", "LoHa", "LoKr", "OFT"]}], "gradient_checkpointing": ["BOOLEAN", {"tooltip": "Use gradient checkpointing for training.", "default": true}], "checkpoint_depth": ["INT", {"tooltip": "Depth level for gradient checkpointing.", "default": 1, "min": 1, "max": 5}], "offloading": ["BOOLEAN", {"tooltip": "Offload model weights to CPU during training to save GPU memory.", "default": false}], "existing_lora": ["COMBO", {"tooltip": "The existing LoRA to append to. Set to None for new LoRA.", "default": "[None]", "multiselect": false, "options": ["[None]"]}], "bucket_mode": ["BOOLEAN", {"tooltip": "Enable resolution bucket mode. When enabled, expects pre-bucketed latents from ResolutionBucket node.", "default": false}], "bypass_mode": ["BOOLEAN", {"tooltip": "Enable bypass mode for training. When enabled, adapters are applied via forward hooks instead of weight modification. Useful for quantized models where weights cannot be directly modified.", "default": false}]}}, "input_order": {"required": ["model", "latents", "positive", "batch_size", "grad_accumulation_steps", "steps", "learning_rate", "rank", "optimizer", "loss_function", "seed", "training_dtype", "lora_dtype", "quantized_backward", "algorithm", "gradient_checkpointing", "checkpoint_depth", "offloading", "existing_lora", "bucket_mode", "bypass_mode"]}, "is_input_list": true, "output": ["LORA_MODEL", "LOSS_MAP", "INT"], "output_is_list": [false, false, false], "output_name": ["lora", "loss_map", "steps"], "output_tooltips": ["LoRA weights", "Loss history", "Total training steps"], "output_matchtypes": null, "name": "TrainLoraNode", "display_name": "Train LoRA", "description": "", "python_module": "comfy_extras.nodes_train", "category": "model/training", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LoraModelLoader": {"input": {"required": {"model": ["MODEL", {"tooltip": "The diffusion model the LoRA will be applied to."}], "lora": ["LORA_MODEL", {"tooltip": "The LoRA model to apply to the diffusion model."}], "strength_model": ["FLOAT", {"tooltip": "How strongly to modify the diffusion model. This value can be negative.", "default": 1.0, "min": -100.0, "max": 100.0}], "bypass": ["BOOLEAN", {"tooltip": "When enabled, applies LoRA in bypass mode without modifying base model weights. Useful for training and when model weights are offloaded.", "default": false}]}}, "input_order": {"required": ["model", "lora", "strength_model", "bypass"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["model"], "output_tooltips": ["The modified diffusion model."], "output_matchtypes": null, "name": "LoraModelLoader", "display_name": "Load LoRA Model", "description": "", "python_module": "comfy_extras.nodes_train", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveLoRA": {"input": {"required": {"lora": ["LORA_MODEL", {"tooltip": "The LoRA model to save. Do not use the model with LoRA layers."}], "prefix": ["STRING", {"tooltip": "The prefix to use for the saved LoRA file.", "default": "loras/ComfyUI_trained_lora", "multiline": false}]}, "optional": {"steps": ["INT", {"tooltip": "Optional: The number of steps the LoRA has been trained for, used to name the saved file."}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["lora", "prefix"], "optional": ["steps"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveLoRA", "display_name": "Save LoRA Weights", "description": "", "python_module": "comfy_extras.nodes_train", "category": "model/merging", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export lora"], "essentials_category": null, "has_intermediate_output": false}, "LossGraphNode": {"input": {"required": {"loss": ["LOSS_MAP", {"tooltip": "Loss map from training node."}], "filename_prefix": ["STRING", {"tooltip": "Prefix for the saved loss graph image.", "default": "loss_graph", "multiline": false}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["loss", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "LossGraphNode", "display_name": "Plot Loss Graph", "description": "", "python_module": "comfy_extras.nodes_train", "category": "model/training", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["training chart", "training visualization", "plot loss"], "essentials_category": null, "has_intermediate_output": false}, "LoadImageDataSetFromFolder": {"input": {"required": {"folder": ["COMBO", {"tooltip": "The folder to load images from.", "multiselect": false, "options": ["3d"]}]}}, "input_order": {"required": ["folder"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["images"], "output_tooltips": ["List of loaded images"], "output_matchtypes": null, "name": "LoadImageDataSetFromFolder", "display_name": "Load Image (from Folder)", "description": "Load a dataset of images from a specified folder and return a list of images. Supported formats: PNG, JPG, JPEG, WEBP.", "python_module": "comfy_extras.nodes_dataset", "category": "image", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["load folder", "load from folder", "load dataset", "load images", "import dataset"], "essentials_category": null, "has_intermediate_output": false}, "LoadImageTextDataSetFromFolder": {"input": {"required": {"folder": ["COMBO", {"tooltip": "The folder to load images and text captions from.", "multiselect": false, "options": ["3d"]}]}}, "input_order": {"required": ["folder"]}, "is_input_list": false, "output": ["IMAGE", "STRING"], "output_is_list": [true, true], "output_name": ["images", "texts"], "output_tooltips": ["List of loaded images", "List of text captions"], "output_matchtypes": null, "name": "LoadImageTextDataSetFromFolder", "display_name": "Load Image-Text (from Folder)", "description": "Load a dataset of pairs of images and text captions from a specified folder and return them as a list. Supported formats: PNG, JPG, JPEG, WEBP.", "python_module": "comfy_extras.nodes_dataset", "category": "image", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["load folder", "load from folder", "load dataset", "load images", "import dataset"], "essentials_category": null, "has_intermediate_output": false}, "SaveImageDataSetToFolder": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to save."}], "folder_name": ["STRING", {"tooltip": "Name of the folder to save images to (inside output directory).", "default": "dataset", "multiline": false}], "filename_prefix": ["STRING", {"tooltip": "Prefix for saved image filenames.", "advanced": true, "default": "image", "multiline": false}], "mode": ["COMBO", {"tooltip": "Whether to overwrite existing files or increment filenames to avoid overwriting.", "default": "overwrite", "multiselect": false, "options": ["overwrite", "increment"]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "folder_name", "filename_prefix", "mode"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": true, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveImageDataSetToFolder", "display_name": "Save Image (to Folder) (DEPRECATED)", "description": "Save a dataset of images to a specified folder. Supported formats: PNG.", "python_module": "comfy_extras.nodes_dataset", "category": "image", "output_node": true, "deprecated": true, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["save folder", "save to folder", "save dataset", "save images", "export dataset"], "essentials_category": null, "has_intermediate_output": false}, "SaveImageTextDataSetToFolder": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to save."}], "folder_name": ["STRING", {"tooltip": "Name of the folder to save images to (inside output directory).", "default": "dataset", "multiline": false}], "filename_prefix": ["STRING", {"tooltip": "Prefix for saved image filenames.", "advanced": true, "default": "image", "multiline": false}], "mode": ["COMBO", {"tooltip": "Whether to overwrite existing files or increment filenames to avoid overwriting.", "default": "overwrite", "multiselect": false, "options": ["overwrite", "increment"]}]}, "optional": {"texts": ["STRING", {"tooltip": "List of text captions to save.", "forceInput": true, "multiline": false}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "folder_name", "filename_prefix", "mode"], "optional": ["texts"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": true, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveImageTextDataSetToFolder", "display_name": "Save Image-Text (to Folder)", "description": "Save a dataset of pairs of images and text captions to a specified folder. Images are saved as PNG files and captions are saved as TXT files with the same filename_prefix.", "python_module": "comfy_extras.nodes_dataset", "category": "image", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["save folder", "save to folder", "save dataset", "save images", "save text", "export dataset"], "essentials_category": null, "has_intermediate_output": false}, "ResizeImagesByShorterEdge": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "shorter_edge": ["INT", {"tooltip": "Target dimension for the shorter edge.", "default": 512, "min": 1, "max": 8192}]}}, "input_order": {"required": ["images", "shorter_edge"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "ResizeImagesByShorterEdge", "display_name": "Resize Images by Shorter Edge (DEPRECATED)", "description": "Resize images so that the shorter edge matches the specified dimension while preserving aspect ratio.", "python_module": "comfy_extras.nodes_dataset", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ResizeImagesByLongerEdge": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "longer_edge": ["INT", {"tooltip": "Target dimension for the longer edge.", "default": 1024, "min": 1, "max": 8192}]}}, "input_order": {"required": ["images", "longer_edge"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "ResizeImagesByLongerEdge", "display_name": "Resize Images by Longer Edge (DEPRECATED)", "description": "Resize images so that the longer edge matches the specified dimension while preserving aspect ratio.", "python_module": "comfy_extras.nodes_dataset", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CenterCropImages": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "width": ["INT", {"tooltip": "Crop width.", "default": 512, "min": 1, "max": 8192}], "height": ["INT", {"tooltip": "Crop height.", "default": 512, "min": 1, "max": 8192}]}}, "input_order": {"required": ["images", "width", "height"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "CenterCropImages", "display_name": "Crop Image (Center)", "description": "Center crop an image to the specified dimensions.", "python_module": "comfy_extras.nodes_dataset", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["crop", "cut", "trim"], "essentials_category": null, "has_intermediate_output": false}, "RandomCropImages": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "width": ["INT", {"tooltip": "Crop width.", "default": 512, "min": 1, "max": 8192}], "height": ["INT", {"tooltip": "Crop height.", "default": 512, "min": 1, "max": 8192}], "seed": ["INT", {"tooltip": "Random seed.", "default": 0, "min": 0, "max": 18446744073709551615}]}}, "input_order": {"required": ["images", "width", "height", "seed"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "RandomCropImages", "display_name": "Crop Image (Random)", "description": "Randomly crop an image to the specified dimensions.", "python_module": "comfy_extras.nodes_dataset", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["crop", "cut", "trim"], "essentials_category": null, "has_intermediate_output": false}, "NormalizeImages": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "mean": ["FLOAT", {"tooltip": "Mean value for normalization.", "advanced": true, "default": 0.5, "min": 0.0, "max": 1.0}], "std": ["FLOAT", {"tooltip": "Standard deviation for normalization.", "advanced": true, "default": 0.5, "min": 0.001, "max": 1.0}]}}, "input_order": {"required": ["images", "mean", "std"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "NormalizeImages", "display_name": "Normalize Image Colors", "description": "Normalize images using mean and standard deviation.", "python_module": "comfy_extras.nodes_dataset", "category": "image/color", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["normalize", "normalize colors"], "essentials_category": null, "has_intermediate_output": false}, "AdjustBrightness": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "factor": ["FLOAT", {"tooltip": "Brightness factor. 1.0 = no change, <1.0 = darker, >1.0 = brighter.", "default": 1.0, "min": 0.0, "max": 2.0}]}}, "input_order": {"required": ["images", "factor"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "AdjustBrightness", "display_name": "Adjust Brightness", "description": "Adjust the brightness of an image.", "python_module": "comfy_extras.nodes_dataset", "category": "image/adjustments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["brightness"], "essentials_category": null, "has_intermediate_output": false}, "AdjustContrast": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "factor": ["FLOAT", {"tooltip": "Contrast factor. 1.0 = no change, <1.0 = less contrast, >1.0 = more contrast.", "default": 1.0, "min": 0.0, "max": 2.0}]}}, "input_order": {"required": ["images", "factor"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "AdjustContrast", "display_name": "Adjust Contrast", "description": "Adjust the contrast of an image.", "python_module": "comfy_extras.nodes_dataset", "category": "image/adjustments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["contrast"], "essentials_category": null, "has_intermediate_output": false}, "ShuffleDataset": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to process."}], "seed": ["INT", {"tooltip": "Random seed.", "default": 0, "min": 0, "max": 18446744073709551615}]}}, "input_order": {"required": ["images", "seed"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "ShuffleDataset", "display_name": "Shuffle Images List", "description": "Randomly shuffle the order of images in a list.", "python_module": "comfy_extras.nodes_dataset", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["shuffle", "randomize", "mix"], "essentials_category": null, "has_intermediate_output": false}, "ShuffleImageTextDataset": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to shuffle."}], "texts": ["STRING", {"tooltip": "List of texts to shuffle.", "forceInput": true, "multiline": false}], "seed": ["INT", {"tooltip": "Random seed.", "default": 0, "min": 0, "max": 18446744073709551615}]}}, "input_order": {"required": ["images", "texts", "seed"]}, "is_input_list": true, "output": ["IMAGE", "STRING"], "output_is_list": [true, true], "output_name": ["images", "texts"], "output_tooltips": ["Shuffled images", "Shuffled texts"], "output_matchtypes": null, "name": "ShuffleImageTextDataset", "display_name": "Shuffle Pairs of Image-Text", "description": "Randomly shuffle the order of pairs of image-text in a list.", "python_module": "comfy_extras.nodes_dataset", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["shuffle", "randomize", "mix"], "essentials_category": null, "has_intermediate_output": false}, "TextToLowercase": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}]}}, "input_order": {"required": ["texts"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "TextToLowercase", "display_name": "Convert Text to Lowercase (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TextToUppercase": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}]}}, "input_order": {"required": ["texts"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "TextToUppercase", "display_name": "Convert Text to Uppercase (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TruncateText": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}], "max_length": ["INT", {"tooltip": "Maximum text length.", "default": 77, "min": 1, "max": 10000}]}}, "input_order": {"required": ["texts", "max_length"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "TruncateText", "display_name": "Truncate Text", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AddTextPrefix": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}], "prefix": ["STRING", {"tooltip": "Prefix to add.", "default": "", "multiline": false}]}}, "input_order": {"required": ["texts", "prefix"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "AddTextPrefix", "display_name": "Add Text Prefix (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AddTextSuffix": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}], "suffix": ["STRING", {"tooltip": "Suffix to add.", "default": "", "multiline": false}]}}, "input_order": {"required": ["texts", "suffix"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "AddTextSuffix", "display_name": "Add Text Suffix (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReplaceText": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}], "find": ["STRING", {"tooltip": "Text to find.", "default": "", "multiline": false}], "replace": ["STRING", {"tooltip": "Text to replace with.", "default": "", "multiline": false}]}}, "input_order": {"required": ["texts", "find", "replace"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "ReplaceText", "display_name": "Replace Text (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StripWhitespace": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}]}}, "input_order": {"required": ["texts"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "StripWhitespace", "display_name": "Strip Whitespace (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageDeduplication": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to process."}], "similarity_threshold": ["FLOAT", {"tooltip": "Similarity threshold (0-1). Higher means more similar. Images above this threshold are considered duplicates.", "advanced": true, "default": 0.95, "min": 0.0, "max": 1.0}]}}, "input_order": {"required": ["images", "similarity_threshold"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "ImageDeduplication", "display_name": "Deduplicate Images", "description": "Remove duplicate or very similar images from a list.", "python_module": "comfy_extras.nodes_dataset", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["deduplicate", "remove duplicates", "similarity filter"], "essentials_category": null, "has_intermediate_output": false}, "ImageGrid": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to process."}], "columns": ["INT", {"tooltip": "Number of columns in the grid.", "default": 4, "min": 1, "max": 20}], "cell_width": ["INT", {"tooltip": "Width of each cell in the grid.", "advanced": true, "default": 256, "min": 32, "max": 2048}], "cell_height": ["INT", {"tooltip": "Height of each cell in the grid.", "advanced": true, "default": 256, "min": 32, "max": 2048}], "padding": ["INT", {"tooltip": "Padding between images.", "advanced": true, "default": 4, "min": 0, "max": 50}]}}, "input_order": {"required": ["images", "columns", "cell_width", "cell_height", "padding"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "ImageGrid", "display_name": "Make Image Grid", "description": "Arrange multiple images into a grid layout.", "python_module": "comfy_extras.nodes_dataset", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["grid", "collage", "combine"], "essentials_category": null, "has_intermediate_output": false}, "MergeImageLists": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to process."}]}}, "input_order": {"required": ["images"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "MergeImageLists", "display_name": "Merge Image Lists (DEPRECATED)", "description": "Concatenate multiple image lists into one.", "python_module": "comfy_extras.nodes_dataset", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["list", "merge list", "make list"], "essentials_category": null, "has_intermediate_output": false}, "MergeTextLists": {"input": {"required": {"texts": ["STRING", {"tooltip": "List of texts to process.", "multiline": false}]}}, "input_order": {"required": ["texts"]}, "is_input_list": true, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "MergeTextLists", "display_name": "Merge Text Lists (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MakeTrainingDataset": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to encode."}], "vae": ["VAE", {"tooltip": "VAE model for encoding images to latents."}], "clip": ["CLIP", {"tooltip": "CLIP model for encoding text to conditioning."}]}, "optional": {"texts": ["STRING", {"tooltip": "List of text captions. Can be length n (matching images), 1 (repeated for all), or omitted (uses empty string).", "forceInput": true, "multiline": false}]}}, "input_order": {"required": ["images", "vae", "clip"], "optional": ["texts"]}, "is_input_list": true, "output": ["LATENT", "CONDITIONING"], "output_is_list": [true, true], "output_name": ["latents", "conditioning"], "output_tooltips": ["List of latent dicts", "List of conditioning lists"], "output_matchtypes": null, "name": "MakeTrainingDataset", "display_name": "Make Training Dataset", "description": "Encode images with VAE and texts with CLIP to create a training dataset of latents and conditionings.", "python_module": "comfy_extras.nodes_dataset", "category": "model/training", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["encode dataset"], "essentials_category": null, "has_intermediate_output": false}, "SaveTrainingDataset": {"input": {"required": {"latents": ["LATENT", {"tooltip": "List of latent dicts from MakeTrainingDataset."}], "conditioning": ["CONDITIONING", {"tooltip": "List of conditioning lists from MakeTrainingDataset."}], "folder_name": ["STRING", {"tooltip": "Name of folder to save dataset (inside output directory).", "default": "training_dataset", "multiline": false}], "shard_size": ["INT", {"tooltip": "Number of samples per shard file.", "advanced": true, "default": 1000, "min": 1, "max": 100000}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["latents", "conditioning", "folder_name", "shard_size"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": true, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveTrainingDataset", "display_name": "Save Training Dataset", "description": "Save encoded training dataset (latents + conditioning) to disk for efficient loading during training.", "python_module": "comfy_extras.nodes_dataset", "category": "model/training", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export dataset", "save dataset"], "essentials_category": null, "has_intermediate_output": false}, "LoadTrainingDataset": {"input": {"required": {"folder_name": ["STRING", {"tooltip": "Name of folder containing the saved dataset (inside output directory).", "default": "training_dataset", "multiline": false}]}}, "input_order": {"required": ["folder_name"]}, "is_input_list": false, "output": ["LATENT", "CONDITIONING"], "output_is_list": [true, true], "output_name": ["latents", "conditioning"], "output_tooltips": ["List of latent dicts", "List of conditioning lists"], "output_matchtypes": null, "name": "LoadTrainingDataset", "display_name": "Load Training Dataset", "description": "Load encoded training dataset (latents + conditioning) from disk for use in training.", "python_module": "comfy_extras.nodes_dataset", "category": "model/training", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["import dataset", "training data"], "essentials_category": null, "has_intermediate_output": false}, "ResolutionBucket": {"input": {"required": {"latents": ["LATENT", {"tooltip": "List of latent dicts to bucket by resolution."}], "conditioning": ["CONDITIONING", {"tooltip": "List of conditioning lists (must match latents length)."}]}}, "input_order": {"required": ["latents", "conditioning"]}, "is_input_list": true, "output": ["LATENT", "CONDITIONING"], "output_is_list": [true, true], "output_name": ["latents", "conditioning"], "output_tooltips": ["List of batched latent dicts, one per resolution bucket.", "List of condition lists, one per resolution bucket."], "output_matchtypes": null, "name": "ResolutionBucket", "display_name": "Resolution Bucket", "description": "Group latents and conditionings into buckets", "python_module": "comfy_extras.nodes_dataset", "category": "model/training", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["bucket by resolution", "group by resolution", "batch by resolution"], "essentials_category": null, "has_intermediate_output": false}, "SelfAttentionGuidance": {"input": {"required": {"model": ["MODEL", {}], "scale": ["FLOAT", {"default": 0.5, "min": -2.0, "max": 5.0, "step": 0.01}], "blur_sigma": ["FLOAT", {"advanced": true, "default": 2.0, "min": 0.0, "max": 10.0, "step": 0.1}]}}, "input_order": {"required": ["model", "scale", "blur_sigma"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SelfAttentionGuidance", "display_name": "Self-Attention Guidance", "description": "", "python_module": "comfy_extras.nodes_sag", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PerpNeg": {"input": {"required": {"model": ["MODEL", {}], "empty_conditioning": ["CONDITIONING", {}], "neg_scale": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "empty_conditioning", "neg_scale"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "PerpNeg", "display_name": "Perp-Neg (DEPRECATED by Perp-Neg Guider)", "description": "", "python_module": "comfy_extras.nodes_perpneg", "category": "experimental", "output_node": false, "deprecated": true, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PerpNegGuider": {"input": {"required": {"model": ["MODEL", {}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "empty_conditioning": ["CONDITIONING", {}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "neg_scale": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "positive", "negative", "empty_conditioning", "cfg", "neg_scale"]}, "is_input_list": false, "output": ["GUIDER"], "output_is_list": [false], "output_name": ["GUIDER"], "output_tooltips": [null], "output_matchtypes": null, "name": "PerpNegGuider", "display_name": "Perp-Neg Guider", "description": "", "python_module": "comfy_extras.nodes_perpneg", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StableZero123_Conditioning": {"input": {"required": {"clip_vision": ["CLIP_VISION", {}], "init_image": ["IMAGE", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 256, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 256, "min": 16, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "elevation": ["FLOAT", {"default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}], "azimuth": ["FLOAT", {"default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}]}}, "input_order": {"required": ["clip_vision", "init_image", "vae", "width", "height", "batch_size", "elevation", "azimuth"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "StableZero123_Conditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable3d", "category": "model/conditioning/stable zero123", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StableZero123_Conditioning_Batched": {"input": {"required": {"clip_vision": ["CLIP_VISION", {}], "init_image": ["IMAGE", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 256, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 256, "min": 16, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "elevation": ["FLOAT", {"default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}], "azimuth": ["FLOAT", {"default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}], "elevation_batch_increment": ["FLOAT", {"advanced": true, "default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}], "azimuth_batch_increment": ["FLOAT", {"advanced": true, "default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}]}}, "input_order": {"required": ["clip_vision", "init_image", "vae", "width", "height", "batch_size", "elevation", "azimuth", "elevation_batch_increment", "azimuth_batch_increment"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "StableZero123_Conditioning_Batched", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable3d", "category": "model/conditioning/stable zero123", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SV3D_Conditioning": {"input": {"required": {"clip_vision": ["CLIP_VISION", {}], "init_image": ["IMAGE", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 576, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 576, "min": 16, "max": 16384, "step": 8}], "video_frames": ["INT", {"default": 21, "min": 1, "max": 4096}], "elevation": ["FLOAT", {"default": 0.0, "min": -90.0, "max": 90.0, "step": 0.1, "round": false}]}}, "input_order": {"required": ["clip_vision", "init_image", "vae", "width", "height", "video_frames", "elevation"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "SV3D_Conditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable3d", "category": "model/conditioning/stable video 3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SD_4XUpscale_Conditioning": {"input": {"required": {"images": ["IMAGE", {}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "scale_ratio": ["FLOAT", {"default": 4.0, "min": 0.0, "max": 10.0, "step": 0.01}], "noise_augmentation": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["images", "positive", "negative", "scale_ratio", "noise_augmentation"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "SD_4XUpscale_Conditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_sdupscale", "category": "model/conditioning/stable diffusion upscaler", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PhotoMakerLoader": {"input": {"required": {"photomaker_model_name": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["photomaker_model_name"]}, "is_input_list": false, "output": ["PHOTOMAKER"], "output_is_list": [false], "output_name": ["PHOTOMAKER"], "output_tooltips": [null], "output_matchtypes": null, "name": "PhotoMakerLoader", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_photomaker", "category": "experimental/photomaker", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PhotoMakerEncode": {"input": {"required": {"photomaker": ["PHOTOMAKER", {}], "image": ["IMAGE", {}], "clip": ["CLIP", {}], "text": ["STRING", {"default": "photograph of photomaker", "multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["photomaker", "image", "clip", "text"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "PhotoMakerEncode", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_photomaker", "category": "experimental/photomaker", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodePixArtAlpha": {"input": {"required": {"width": ["INT", {"default": 1024, "min": 0, "max": 16384}], "height": ["INT", {"default": 1024, "min": 0, "max": 16384}], "text": ["STRING", {"multiline": true, "dynamicPrompts": true}], "clip": ["CLIP", {}]}}, "input_order": {"required": ["width", "height", "text", "clip"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodePixArtAlpha", "display_name": "CLIP Text Encode (PixArt Alpha)", "description": "Encodes text and sets the resolution conditioning for PixArt Alpha. Does not apply to PixArt Sigma.", "python_module": "comfy_extras.nodes_pixart", "category": "model/conditioning/pixart", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["pixart prompt"], "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeControlnet": {"input": {"required": {"clip": ["CLIP", {}], "conditioning": ["CONDITIONING", {}], "text": ["STRING", {"multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["clip", "conditioning", "text"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeControlnet", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cond", "category": "experimental/conditioning", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "T5TokenizerOptions": {"input": {"required": {"clip": ["CLIP", {}], "min_padding": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 10000, "step": 1}], "min_length": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 10000, "step": 1}]}}, "input_order": {"required": ["clip", "min_padding", "min_length"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "T5TokenizerOptions", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cond", "category": "experimental/conditioning", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Morphology": {"input": {"required": {"image": ["IMAGE", {}], "operation": ["COMBO", {"multiselect": false, "options": ["erode", "dilate", "open", "close", "gradient", "bottom_hat", "top_hat"]}], "kernel_size": ["INT", {"default": 3, "min": 3, "max": 999, "step": 1}]}}, "input_order": {"required": ["image", "operation", "kernel_size"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Morphology", "display_name": "Apply Morphology", "description": "", "python_module": "comfy_extras.nodes_morphology", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["erode", "dilate"], "essentials_category": null, "has_intermediate_output": false}, "ImageRGBToYUV": {"input": {"required": {"image": ["IMAGE", {}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE", "IMAGE", "IMAGE"], "output_is_list": [false, false, false], "output_name": ["Y", "U", "V"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "ImageRGBToYUV", "display_name": "Image RGB to YUV", "description": "", "python_module": "comfy_extras.nodes_morphology", "category": "image/color", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["color space conversion"], "essentials_category": null, "has_intermediate_output": false}, "ImageYUVToRGB": {"input": {"required": {"Y": ["IMAGE", {}], "U": ["IMAGE", {}], "V": ["IMAGE", {}]}}, "input_order": {"required": ["Y", "U", "V"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageYUVToRGB", "display_name": "Image YUV to RGB", "description": "", "python_module": "comfy_extras.nodes_morphology", "category": "image/color", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["color space conversion"], "essentials_category": null, "has_intermediate_output": false}, "StableCascade_EmptyLatentImage": {"input": {"required": {"width": ["INT", {"default": 1024, "min": 256, "max": 16384, "step": 8}], "height": ["INT", {"default": 1024, "min": 256, "max": 16384, "step": 8}], "compression": ["INT", {"advanced": true, "default": 42, "min": 4, "max": 128, "step": 1}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "compression", "batch_size"]}, "is_input_list": false, "output": ["LATENT", "LATENT"], "output_is_list": [false, false], "output_name": ["stage_c", "stage_b"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "StableCascade_EmptyLatentImage", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable_cascade", "category": "model/latent/stable cascade", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StableCascade_StageB_Conditioning": {"input": {"required": {"conditioning": ["CONDITIONING", {}], "stage_c": ["LATENT", {}]}}, "input_order": {"required": ["conditioning", "stage_c"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StableCascade_StageB_Conditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable_cascade", "category": "model/conditioning/stable cascade", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StableCascade_StageC_VAEEncode": {"input": {"required": {"image": ["IMAGE", {}], "vae": ["VAE", {}], "compression": ["INT", {"advanced": true, "default": 42, "min": 4, "max": 128, "step": 1}]}}, "input_order": {"required": ["image", "vae", "compression"]}, "is_input_list": false, "output": ["LATENT", "LATENT"], "output_is_list": [false, false], "output_name": ["stage_c", "stage_b"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "StableCascade_StageC_VAEEncode", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable_cascade", "category": "model/latent/stable cascade", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StableCascade_SuperResolutionControlnet": {"input": {"required": {"image": ["IMAGE", {}], "vae": ["VAE", {}]}}, "input_order": {"required": ["image", "vae"]}, "is_input_list": false, "output": ["IMAGE", "LATENT", "LATENT"], "output_is_list": [false, false, false], "output_name": ["controlnet_input", "stage_c", "stage_b"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "StableCascade_SuperResolutionControlnet", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable_cascade", "category": "experimental/stable_cascade", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "DifferentialDiffusion": {"input": {"required": {"model": ["MODEL", {}]}, "optional": {"strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model"], "optional": ["strength"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "DifferentialDiffusion", "display_name": "Differential Diffusion", "description": "", "python_module": "comfy_extras.nodes_differential_diffusion", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["inpaint gradient", "variable denoise strength"], "essentials_category": null, "has_intermediate_output": false}, "InstructPixToPixConditioning": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "pixels": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "pixels"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "InstructPixToPixConditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_ip2p", "category": "model/conditioning/instructpix2pix", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ModelMergeSD1": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "time_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "label_emb.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "out.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "time_embed.", "label_emb.", "input_blocks.0.", "input_blocks.1.", "input_blocks.2.", "input_blocks.3.", "input_blocks.4.", "input_blocks.5.", "input_blocks.6.", "input_blocks.7.", "input_blocks.8.", "input_blocks.9.", "input_blocks.10.", "input_blocks.11.", "middle_block.0.", "middle_block.1.", "middle_block.2.", "output_blocks.0.", "output_blocks.1.", "output_blocks.2.", "output_blocks.3.", "output_blocks.4.", "output_blocks.5.", "output_blocks.6.", "output_blocks.7.", "output_blocks.8.", "output_blocks.9.", "output_blocks.10.", "output_blocks.11.", "out."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSD1", "display_name": "ModelMergeSD1", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeSD2": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "time_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "label_emb.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "out.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "time_embed.", "label_emb.", "input_blocks.0.", "input_blocks.1.", "input_blocks.2.", "input_blocks.3.", "input_blocks.4.", "input_blocks.5.", "input_blocks.6.", "input_blocks.7.", "input_blocks.8.", "input_blocks.9.", "input_blocks.10.", "input_blocks.11.", "middle_block.0.", "middle_block.1.", "middle_block.2.", "output_blocks.0.", "output_blocks.1.", "output_blocks.2.", "output_blocks.3.", "output_blocks.4.", "output_blocks.5.", "output_blocks.6.", "output_blocks.7.", "output_blocks.8.", "output_blocks.9.", "output_blocks.10.", "output_blocks.11.", "out."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSD2", "display_name": "ModelMergeSD2", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeSDXL": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "time_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "label_emb.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.0": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.1": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.2": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.3": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.4": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.5": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.6": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.7": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.8": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.0": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.1": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.2": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.0": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.1": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.2": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.3": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.4": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.5": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.6": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.7": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.8": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "out.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "time_embed.", "label_emb.", "input_blocks.0", "input_blocks.1", "input_blocks.2", "input_blocks.3", "input_blocks.4", "input_blocks.5", "input_blocks.6", "input_blocks.7", "input_blocks.8", "middle_block.0", "middle_block.1", "middle_block.2", "output_blocks.0", "output_blocks.1", "output_blocks.2", "output_blocks.3", "output_blocks.4", "output_blocks.5", "output_blocks.6", "output_blocks.7", "output_blocks.8", "out."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSDXL", "display_name": "ModelMergeSDXL", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeSD3_2B": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "context_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "y_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embed.", "x_embedder.", "context_embedder.", "y_embedder.", "t_embedder.", "joint_blocks.0.", "joint_blocks.1.", "joint_blocks.2.", "joint_blocks.3.", "joint_blocks.4.", "joint_blocks.5.", "joint_blocks.6.", "joint_blocks.7.", "joint_blocks.8.", "joint_blocks.9.", "joint_blocks.10.", "joint_blocks.11.", "joint_blocks.12.", "joint_blocks.13.", "joint_blocks.14.", "joint_blocks.15.", "joint_blocks.16.", "joint_blocks.17.", "joint_blocks.18.", "joint_blocks.19.", "joint_blocks.20.", "joint_blocks.21.", "joint_blocks.22.", "joint_blocks.23.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSD3_2B", "display_name": "ModelMergeSD3_2B", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeAuraflow": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "init_x_linear.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "positional_encoding": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "cond_seq_linear.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "register_tokens": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_layers.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_layers.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_layers.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_layers.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "modF.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_linear.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "init_x_linear.", "positional_encoding", "cond_seq_linear.", "register_tokens", "t_embedder.", "double_layers.0.", "double_layers.1.", "double_layers.2.", "double_layers.3.", "single_layers.0.", "single_layers.1.", "single_layers.2.", "single_layers.3.", "single_layers.4.", "single_layers.5.", "single_layers.6.", "single_layers.7.", "single_layers.8.", "single_layers.9.", "single_layers.10.", "single_layers.11.", "single_layers.12.", "single_layers.13.", "single_layers.14.", "single_layers.15.", "single_layers.16.", "single_layers.17.", "single_layers.18.", "single_layers.19.", "single_layers.20.", "single_layers.21.", "single_layers.22.", "single_layers.23.", "single_layers.24.", "single_layers.25.", "single_layers.26.", "single_layers.27.", "single_layers.28.", "single_layers.29.", "single_layers.30.", "single_layers.31.", "modF.", "final_linear."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeAuraflow", "display_name": "ModelMergeAuraflow", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeFlux1": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "img_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "time_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "guidance_in": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "vector_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txt_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.36.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.37.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "img_in.", "time_in.", "guidance_in", "vector_in.", "txt_in.", "double_blocks.0.", "double_blocks.1.", "double_blocks.2.", "double_blocks.3.", "double_blocks.4.", "double_blocks.5.", "double_blocks.6.", "double_blocks.7.", "double_blocks.8.", "double_blocks.9.", "double_blocks.10.", "double_blocks.11.", "double_blocks.12.", "double_blocks.13.", "double_blocks.14.", "double_blocks.15.", "double_blocks.16.", "double_blocks.17.", "double_blocks.18.", "single_blocks.0.", "single_blocks.1.", "single_blocks.2.", "single_blocks.3.", "single_blocks.4.", "single_blocks.5.", "single_blocks.6.", "single_blocks.7.", "single_blocks.8.", "single_blocks.9.", "single_blocks.10.", "single_blocks.11.", "single_blocks.12.", "single_blocks.13.", "single_blocks.14.", "single_blocks.15.", "single_blocks.16.", "single_blocks.17.", "single_blocks.18.", "single_blocks.19.", "single_blocks.20.", "single_blocks.21.", "single_blocks.22.", "single_blocks.23.", "single_blocks.24.", "single_blocks.25.", "single_blocks.26.", "single_blocks.27.", "single_blocks.28.", "single_blocks.29.", "single_blocks.30.", "single_blocks.31.", "single_blocks.32.", "single_blocks.33.", "single_blocks.34.", "single_blocks.35.", "single_blocks.36.", "single_blocks.37.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeFlux1", "display_name": "ModelMergeFlux1", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeSD35_Large": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "context_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "y_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.36.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.37.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embed.", "x_embedder.", "context_embedder.", "y_embedder.", "t_embedder.", "joint_blocks.0.", "joint_blocks.1.", "joint_blocks.2.", "joint_blocks.3.", "joint_blocks.4.", "joint_blocks.5.", "joint_blocks.6.", "joint_blocks.7.", "joint_blocks.8.", "joint_blocks.9.", "joint_blocks.10.", "joint_blocks.11.", "joint_blocks.12.", "joint_blocks.13.", "joint_blocks.14.", "joint_blocks.15.", "joint_blocks.16.", "joint_blocks.17.", "joint_blocks.18.", "joint_blocks.19.", "joint_blocks.20.", "joint_blocks.21.", "joint_blocks.22.", "joint_blocks.23.", "joint_blocks.24.", "joint_blocks.25.", "joint_blocks.26.", "joint_blocks.27.", "joint_blocks.28.", "joint_blocks.29.", "joint_blocks.30.", "joint_blocks.31.", "joint_blocks.32.", "joint_blocks.33.", "joint_blocks.34.", "joint_blocks.35.", "joint_blocks.36.", "joint_blocks.37.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSD35_Large", "display_name": "ModelMergeSD35_Large", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeMochiPreview": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_frequencies.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t5_y_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t5_yproj.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.36.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.37.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.38.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.39.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.40.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.41.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.42.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.43.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.44.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.45.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.46.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.47.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_frequencies.", "t_embedder.", "t5_y_embedder.", "t5_yproj.", "blocks.0.", "blocks.1.", "blocks.2.", "blocks.3.", "blocks.4.", "blocks.5.", "blocks.6.", "blocks.7.", "blocks.8.", "blocks.9.", "blocks.10.", "blocks.11.", "blocks.12.", "blocks.13.", "blocks.14.", "blocks.15.", "blocks.16.", "blocks.17.", "blocks.18.", "blocks.19.", "blocks.20.", "blocks.21.", "blocks.22.", "blocks.23.", "blocks.24.", "blocks.25.", "blocks.26.", "blocks.27.", "blocks.28.", "blocks.29.", "blocks.30.", "blocks.31.", "blocks.32.", "blocks.33.", "blocks.34.", "blocks.35.", "blocks.36.", "blocks.37.", "blocks.38.", "blocks.39.", "blocks.40.", "blocks.41.", "blocks.42.", "blocks.43.", "blocks.44.", "blocks.45.", "blocks.46.", "blocks.47.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeMochiPreview", "display_name": "ModelMergeMochiPreview", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeLTXV": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "patchify_proj.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "adaln_single.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "caption_projection.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "scale_shift_table": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "proj_out.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "patchify_proj.", "adaln_single.", "caption_projection.", "transformer_blocks.0.", "transformer_blocks.1.", "transformer_blocks.2.", "transformer_blocks.3.", "transformer_blocks.4.", "transformer_blocks.5.", "transformer_blocks.6.", "transformer_blocks.7.", "transformer_blocks.8.", "transformer_blocks.9.", "transformer_blocks.10.", "transformer_blocks.11.", "transformer_blocks.12.", "transformer_blocks.13.", "transformer_blocks.14.", "transformer_blocks.15.", "transformer_blocks.16.", "transformer_blocks.17.", "transformer_blocks.18.", "transformer_blocks.19.", "transformer_blocks.20.", "transformer_blocks.21.", "transformer_blocks.22.", "transformer_blocks.23.", "transformer_blocks.24.", "transformer_blocks.25.", "transformer_blocks.26.", "transformer_blocks.27.", "scale_shift_table", "proj_out."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeLTXV", "display_name": "ModelMergeLTXV", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeCosmos7B": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "extra_pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "affline_norm.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embedder.", "extra_pos_embedder.", "x_embedder.", "t_embedder.", "affline_norm.", "blocks.block0.", "blocks.block1.", "blocks.block2.", "blocks.block3.", "blocks.block4.", "blocks.block5.", "blocks.block6.", "blocks.block7.", "blocks.block8.", "blocks.block9.", "blocks.block10.", "blocks.block11.", "blocks.block12.", "blocks.block13.", "blocks.block14.", "blocks.block15.", "blocks.block16.", "blocks.block17.", "blocks.block18.", "blocks.block19.", "blocks.block20.", "blocks.block21.", "blocks.block22.", "blocks.block23.", "blocks.block24.", "blocks.block25.", "blocks.block26.", "blocks.block27.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeCosmos7B", "display_name": "ModelMergeCosmos7B", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeCosmos14B": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "extra_pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "affline_norm.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embedder.", "extra_pos_embedder.", "x_embedder.", "t_embedder.", "affline_norm.", "blocks.block0.", "blocks.block1.", "blocks.block2.", "blocks.block3.", "blocks.block4.", "blocks.block5.", "blocks.block6.", "blocks.block7.", "blocks.block8.", "blocks.block9.", "blocks.block10.", "blocks.block11.", "blocks.block12.", "blocks.block13.", "blocks.block14.", "blocks.block15.", "blocks.block16.", "blocks.block17.", "blocks.block18.", "blocks.block19.", "blocks.block20.", "blocks.block21.", "blocks.block22.", "blocks.block23.", "blocks.block24.", "blocks.block25.", "blocks.block26.", "blocks.block27.", "blocks.block28.", "blocks.block29.", "blocks.block30.", "blocks.block31.", "blocks.block32.", "blocks.block33.", "blocks.block34.", "blocks.block35.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeCosmos14B", "display_name": "ModelMergeCosmos14B", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeWAN2_1": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "patch_embedding.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "time_embedding.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "time_projection.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "text_embedding.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "img_emb.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.36.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.37.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.38.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.39.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "head.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "patch_embedding.", "time_embedding.", "time_projection.", "text_embedding.", "img_emb.", "blocks.0.", "blocks.1.", "blocks.2.", "blocks.3.", "blocks.4.", "blocks.5.", "blocks.6.", "blocks.7.", "blocks.8.", "blocks.9.", "blocks.10.", "blocks.11.", "blocks.12.", "blocks.13.", "blocks.14.", "blocks.15.", "blocks.16.", "blocks.17.", "blocks.18.", "blocks.19.", "blocks.20.", "blocks.21.", "blocks.22.", "blocks.23.", "blocks.24.", "blocks.25.", "blocks.26.", "blocks.27.", "blocks.28.", "blocks.29.", "blocks.30.", "blocks.31.", "blocks.32.", "blocks.33.", "blocks.34.", "blocks.35.", "blocks.36.", "blocks.37.", "blocks.38.", "blocks.39.", "head."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeWAN2_1", "display_name": "ModelMergeWAN2_1", "description": "1.3B model has 30 blocks, 14B model has 40 blocks. Image to video model has the extra img_emb.", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeCosmosPredict2_2B": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedding_norm.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embedder.", "x_embedder.", "t_embedder.", "t_embedding_norm.", "blocks.0.", "blocks.1.", "blocks.2.", "blocks.3.", "blocks.4.", "blocks.5.", "blocks.6.", "blocks.7.", "blocks.8.", "blocks.9.", "blocks.10.", "blocks.11.", "blocks.12.", "blocks.13.", "blocks.14.", "blocks.15.", "blocks.16.", "blocks.17.", "blocks.18.", "blocks.19.", "blocks.20.", "blocks.21.", "blocks.22.", "blocks.23.", "blocks.24.", "blocks.25.", "blocks.26.", "blocks.27.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeCosmosPredict2_2B", "display_name": "ModelMergeCosmosPredict2_2B", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeCosmosPredict2_14B": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedding_norm.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embedder.", "x_embedder.", "t_embedder.", "t_embedding_norm.", "blocks.0.", "blocks.1.", "blocks.2.", "blocks.3.", "blocks.4.", "blocks.5.", "blocks.6.", "blocks.7.", "blocks.8.", "blocks.9.", "blocks.10.", "blocks.11.", "blocks.12.", "blocks.13.", "blocks.14.", "blocks.15.", "blocks.16.", "blocks.17.", "blocks.18.", "blocks.19.", "blocks.20.", "blocks.21.", "blocks.22.", "blocks.23.", "blocks.24.", "blocks.25.", "blocks.26.", "blocks.27.", "blocks.28.", "blocks.29.", "blocks.30.", "blocks.31.", "blocks.32.", "blocks.33.", "blocks.34.", "blocks.35.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeCosmosPredict2_14B", "display_name": "ModelMergeCosmosPredict2_14B", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeQwenImage": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embeds.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "img_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txt_norm.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txt_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "time_text_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.36.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.37.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.38.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.39.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.40.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.41.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.42.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.43.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.44.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.45.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.46.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.47.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.48.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.49.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.50.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.51.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.52.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.53.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.54.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.55.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.56.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.57.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.58.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.59.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "proj_out.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embeds.", "img_in.", "txt_norm.", "txt_in.", "time_text_embed.", "transformer_blocks.0.", "transformer_blocks.1.", "transformer_blocks.2.", "transformer_blocks.3.", "transformer_blocks.4.", "transformer_blocks.5.", "transformer_blocks.6.", "transformer_blocks.7.", "transformer_blocks.8.", "transformer_blocks.9.", "transformer_blocks.10.", "transformer_blocks.11.", "transformer_blocks.12.", "transformer_blocks.13.", "transformer_blocks.14.", "transformer_blocks.15.", "transformer_blocks.16.", "transformer_blocks.17.", "transformer_blocks.18.", "transformer_blocks.19.", "transformer_blocks.20.", "transformer_blocks.21.", "transformer_blocks.22.", "transformer_blocks.23.", "transformer_blocks.24.", "transformer_blocks.25.", "transformer_blocks.26.", "transformer_blocks.27.", "transformer_blocks.28.", "transformer_blocks.29.", "transformer_blocks.30.", "transformer_blocks.31.", "transformer_blocks.32.", "transformer_blocks.33.", "transformer_blocks.34.", "transformer_blocks.35.", "transformer_blocks.36.", "transformer_blocks.37.", "transformer_blocks.38.", "transformer_blocks.39.", "transformer_blocks.40.", "transformer_blocks.41.", "transformer_blocks.42.", "transformer_blocks.43.", "transformer_blocks.44.", "transformer_blocks.45.", "transformer_blocks.46.", "transformer_blocks.47.", "transformer_blocks.48.", "transformer_blocks.49.", "transformer_blocks.50.", "transformer_blocks.51.", "transformer_blocks.52.", "transformer_blocks.53.", "transformer_blocks.54.", "transformer_blocks.55.", "transformer_blocks.56.", "transformer_blocks.57.", "transformer_blocks.58.", "transformer_blocks.59.", "proj_out."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeQwenImage", "display_name": "ModelMergeQwenImage", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeKrea2": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "first.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "tmlp.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txtmlp.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "tproj.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txtfusion.layerwise_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txtfusion.layerwise_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txtfusion.projector.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txtfusion.refiner_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txtfusion.refiner_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "last.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "first.", "tmlp.", "txtmlp.", "tproj.", "txtfusion.layerwise_blocks.0.", "txtfusion.layerwise_blocks.1.", "txtfusion.projector.", "txtfusion.refiner_blocks.0.", "txtfusion.refiner_blocks.1.", "blocks.0.", "blocks.1.", "blocks.2.", "blocks.3.", "blocks.4.", "blocks.5.", "blocks.6.", "blocks.7.", "blocks.8.", "blocks.9.", "blocks.10.", "blocks.11.", "blocks.12.", "blocks.13.", "blocks.14.", "blocks.15.", "blocks.16.", "blocks.17.", "blocks.18.", "blocks.19.", "blocks.20.", "blocks.21.", "blocks.22.", "blocks.23.", "blocks.24.", "blocks.25.", "blocks.26.", "blocks.27.", "last."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeKrea2", "display_name": "ModelMergeKrea2", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "PerturbedAttentionGuidance": {"input": {"required": {"model": ["MODEL", {}], "scale": ["FLOAT", {"default": 3.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": 0.01}]}}, "input_order": {"required": ["model", "scale"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "PerturbedAttentionGuidance", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_pag", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AlignYourStepsScheduler": {"input": {"required": {"model_type": ["COMBO", {"multiselect": false, "options": ["SD1", "SDXL", "SVD"]}], "steps": ["INT", {"default": 10, "min": 1, "max": 10000}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model_type", "steps", "denoise"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "AlignYourStepsScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_align_your_steps", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["AYS scheduler"], "essentials_category": null, "has_intermediate_output": false}, "UNetSelfAttentionMultiply": {"input": {"required": {"model": ["MODEL", {}], "q": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "k": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "v": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "out": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "q", "k", "v", "out"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "UNetSelfAttentionMultiply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_attention_multiply", "category": "experimental/attention_experiments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "UNetCrossAttentionMultiply": {"input": {"required": {"model": ["MODEL", {}], "q": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "k": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "v": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "out": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "q", "k", "v", "out"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "UNetCrossAttentionMultiply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_attention_multiply", "category": "experimental/attention_experiments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPAttentionMultiply": {"input": {"required": {"clip": ["CLIP", {}], "q": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "k": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "v": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "out": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["clip", "q", "k", "v", "out"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPAttentionMultiply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_attention_multiply", "category": "experimental/attention_experiments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["clip attention scale", "text encoder attention"], "essentials_category": null, "has_intermediate_output": false}, "UNetTemporalAttentionMultiply": {"input": {"required": {"model": ["MODEL", {}], "self_structural": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "self_temporal": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "cross_structural": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "cross_temporal": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "self_structural", "self_temporal", "cross_structural", "cross_temporal"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "UNetTemporalAttentionMultiply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_attention_multiply", "category": "experimental/attention_experiments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerLCMUpscale": {"input": {"required": {"scale_ratio": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.1, "max": 20.0, "step": 0.01}], "scale_steps": ["INT", {"advanced": true, "default": -1, "min": -1, "max": 1000, "step": 1}], "upscale_method": ["COMBO", {"multiselect": false, "options": ["bislerp", "nearest-exact", "bilinear", "area", "bicubic"]}]}}, "input_order": {"required": ["scale_ratio", "scale_steps", "upscale_method"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerLCMUpscale", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_advanced_samplers", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerLCM": {"input": {"required": {"s_noise": ["FLOAT", {"tooltip": "Per-step noise multiplier at the first step (1.0 = match training).", "default": 1.0, "min": 0.0, "max": 64.0, "step": 0.01}], "s_noise_end": ["FLOAT", {"tooltip": "Per-step noise multiplier at the last step. Set equal to s_noise for a constant schedule.", "default": 1.0, "min": 0.0, "max": 64.0, "step": 0.01}], "noise_clip_std": ["FLOAT", {"tooltip": "Clamp per-step noise to +/- N*std. 0 disables.", "default": 0.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["s_noise", "s_noise_end", "noise_clip_std"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerLCM", "display_name": null, "description": "LCM sampler with tunable per-step noise. s_noise is a multiplier on the model's training noise scale", "python_module": "comfy_extras.nodes_advanced_samplers", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerEulerCFGpp": {"input": {"required": {"version": ["COMBO", {"advanced": true, "multiselect": false, "options": ["regular", "alternative"]}]}}, "input_order": {"required": ["version"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerEulerCFGpp", "display_name": "SamplerEulerCFG++", "description": "", "python_module": "comfy_extras.nodes_advanced_samplers", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WebcamCapture": {"input": {"required": {"image": ["WEBCAM", {}], "width": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "height": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "capture_on_queue": ["BOOLEAN", {"default": true}]}}, "input_order": {"required": ["image", "width", "height", "capture_on_queue"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "WebcamCapture", "display_name": "Webcam Capture", "description": "", "python_module": "comfy_extras.nodes_webcam", "category": "image", "output_node": false, "has_intermediate_output": false, "search_aliases": ["camera input", "live capture", "camera feed", "snapshot"], "essentials_category": "Basics"}, "EmptyLatentAudio": {"input": {"required": {"seconds": ["FLOAT", {"default": 47.6, "min": 1.0, "max": 1000.0, "step": 0.1}], "batch_size": ["INT", {"tooltip": "The number of latent images in the batch.", "default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["seconds", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyLatentAudio", "display_name": "Empty Latent Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "model/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": "Audio", "has_intermediate_output": false}, "VAEEncodeAudio": {"input": {"required": {"audio": ["AUDIO", {}], "vae": ["VAE", {}]}}, "input_order": {"required": ["audio", "vae"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "VAEEncodeAudio", "display_name": "VAE Encode Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "model/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["audio to latent"], "essentials_category": null, "has_intermediate_output": false}, "VAEDecodeAudio": {"input": {"required": {"samples": ["LATENT", {}], "vae": ["VAE", {}]}}, "input_order": {"required": ["samples", "vae"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "VAEDecodeAudio", "display_name": "VAE Decode Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "model/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["latent to audio"], "essentials_category": null, "has_intermediate_output": false}, "VAEDecodeAudioTiled": {"input": {"required": {"samples": ["LATENT", {}], "vae": ["VAE", {}], "tile_size": ["INT", {"default": 512, "min": 32, "max": 8192, "step": 8}], "overlap": ["INT", {"default": 64, "min": 0, "max": 1024, "step": 8}]}}, "input_order": {"required": ["samples", "vae", "tile_size", "overlap"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "VAEDecodeAudioTiled", "display_name": "VAE Decode Audio (Tiled)", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "model/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["latent to audio"], "essentials_category": null, "has_intermediate_output": false}, "SaveAudio": {"input": {"required": {"audio": ["AUDIO", {}], "filename_prefix": ["STRING", {"default": "audio/ComfyUI", "multiline": false}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["audio", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["audio"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveAudio", "display_name": "Save Audio (FLAC) (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": true, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export flac"], "essentials_category": "Audio", "has_intermediate_output": false}, "SaveAudioMP3": {"input": {"required": {"audio": ["AUDIO", {}], "filename_prefix": ["STRING", {"default": "audio/ComfyUI", "multiline": false}], "quality": ["COMBO", {"default": "V0", "multiselect": false, "options": ["V0", "128k", "320k"]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["audio", "filename_prefix", "quality"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["audio"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveAudioMP3", "display_name": "Save Audio (MP3) (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": true, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export mp3"], "essentials_category": "Audio", "has_intermediate_output": false}, "SaveAudioOpus": {"input": {"required": {"audio": ["AUDIO", {}], "filename_prefix": ["STRING", {"default": "audio/ComfyUI", "multiline": false}], "quality": ["COMBO", {"default": "128k", "multiselect": false, "options": ["64k", "96k", "128k", "192k", "320k"]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["audio", "filename_prefix", "quality"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["audio"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveAudioOpus", "display_name": "Save Audio (Opus) (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": true, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export opus"], "essentials_category": null, "has_intermediate_output": false}, "SaveAudioAdvanced": {"input": {"required": {"audio": ["AUDIO", {"tooltip": "The audio to save."}], "filename_prefix": ["STRING", {"tooltip": "The prefix for the file to save. May include formatting tokens such as %date:yyyy-MM-dd%.", "default": "audio/ComfyUI", "multiline": false}], "format": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The file format in which to save the audio.", "options": [{"key": "flac", "inputs": {"required": {}}}, {"key": "mp3", "inputs": {"required": {"quality": ["COMBO", {"default": "V0", "multiselect": false, "options": ["V0", "128k", "320k"]}]}}}, {"key": "opus", "inputs": {"required": {"quality": ["COMBO", {"default": "128k", "multiselect": false, "options": ["64k", "96k", "128k", "192k", "320k"]}]}}}]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["audio", "filename_prefix", "format"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["audio"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveAudioAdvanced", "display_name": "Save Audio (Advanced)", "description": "Saves the input audio to your ComfyUI output directory.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["save audio", "export audio", "output audio", "write audio", "flac", "mp3", "opus"], "essentials_category": null, "has_intermediate_output": false}, "LoadAudio": {"input": {"required": {"audio": ["COMBO", {"multiselect": false, "options": [], "audio_upload": true}]}}, "input_order": {"required": ["audio"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LoadAudio", "display_name": "Load Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["import audio", "open audio", "audio file"], "essentials_category": "Audio", "has_intermediate_output": false}, "PreviewAudio": {"input": {"required": {"audio": ["AUDIO", {}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["audio"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["audio"], "output_tooltips": [null], "output_matchtypes": null, "name": "PreviewAudio", "display_name": "Preview Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["play audio"], "essentials_category": null, "has_intermediate_output": false}, "ConditioningStableAudio": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "seconds_start": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1000.0, "step": 0.1}], "seconds_total": ["FLOAT", {"default": 47.0, "min": 0.0, "max": 1000.0, "step": 0.1}]}}, "input_order": {"required": ["positive", "negative", "seconds_start", "seconds_total"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ConditioningStableAudio", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_audio", "category": "model/conditioning/stable audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecordAudio": {"input": {"required": {"audio": ["AUDIO_RECORD", {}]}}, "input_order": {"required": ["audio"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecordAudio", "display_name": "Record Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["microphone input", "audio capture", "voice input"], "essentials_category": null, "has_intermediate_output": false}, "TrimAudioDuration": {"input": {"required": {"audio": ["AUDIO", {}], "start_index": ["FLOAT", {"tooltip": "Start time in seconds, can be negative to count from the end (supports sub-seconds).", "default": 0.0, "min": -18446744073709551615, "max": 18446744073709551615, "step": 0.01}], "duration": ["FLOAT", {"tooltip": "Duration in seconds", "default": 60.0, "min": 0.0, "step": 0.01}]}}, "input_order": {"required": ["audio", "start_index", "duration"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "TrimAudioDuration", "display_name": "Trim Audio Duration", "description": "Trim audio tensor into chosen time range.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["cut audio", "audio clip", "shorten audio"], "essentials_category": null, "has_intermediate_output": false}, "SplitAudioChannels": {"input": {"required": {"audio": ["AUDIO", {}]}}, "input_order": {"required": ["audio"]}, "is_input_list": false, "output": ["AUDIO", "AUDIO"], "output_is_list": [false, false], "output_name": ["left", "right"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SplitAudioChannels", "display_name": "Split Audio Channels", "description": "Separates the audio into left and right channels.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["stereo to mono"], "essentials_category": null, "has_intermediate_output": false}, "JoinAudioChannels": {"input": {"required": {"audio_left": ["AUDIO", {}], "audio_right": ["AUDIO", {}]}}, "input_order": {"required": ["audio_left", "audio_right"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["audio"], "output_tooltips": [null], "output_matchtypes": null, "name": "JoinAudioChannels", "display_name": "Join Audio Channels", "description": "Joins left and right mono audio channels into a stereo audio.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AudioConcat": {"input": {"required": {"audio1": ["AUDIO", {}], "audio2": ["AUDIO", {}], "direction": ["COMBO", {"tooltip": "Whether to append audio2 after or before audio1.", "default": "after", "multiselect": false, "options": ["after", "before"]}]}}, "input_order": {"required": ["audio1", "audio2", "direction"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioConcat", "display_name": "Concatenate Audio", "description": "Concatenates the audio1 to audio2 in the specified direction.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["join audio", "combine audio", "append audio"], "essentials_category": null, "has_intermediate_output": false}, "AudioMerge": {"input": {"required": {"audio1": ["AUDIO", {}], "audio2": ["AUDIO", {}], "merge_method": ["COMBO", {"tooltip": "The method used to combine the audio waveforms.", "multiselect": false, "options": ["add", "mean", "subtract", "multiply"]}]}}, "input_order": {"required": ["audio1", "audio2", "merge_method"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioMerge", "display_name": "Merge Audio", "description": "Combine two audio tracks by overlaying their waveforms.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["mix audio", "overlay audio", "layer audio"], "essentials_category": null, "has_intermediate_output": false}, "AudioAdjustVolume": {"input": {"required": {"audio": ["AUDIO", {}], "volume": ["INT", {"tooltip": "Volume adjustment in decibels (dB). 0 = no change, +6 = double, -6 = half, etc", "default": 1, "min": -100, "max": 100}]}}, "input_order": {"required": ["audio", "volume"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioAdjustVolume", "display_name": "Adjust Audio Volume", "description": "Adjust the volume of the audio by a specified amount in decibels (dB).", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["audio gain", "loudness", "audio level"], "essentials_category": null, "has_intermediate_output": false}, "EmptyAudio": {"input": {"required": {"duration": ["FLOAT", {"tooltip": "Duration of the empty audio clip in seconds", "default": 60.0, "min": 0.0, "max": 18446744073709551615, "step": 0.01}], "sample_rate": ["INT", {"tooltip": "Sample rate of the empty audio clip.", "advanced": true, "default": 44100, "min": 1, "max": 192000}], "channels": ["INT", {"tooltip": "Number of audio channels (1 for mono, 2 for stereo).", "advanced": true, "default": 2, "min": 1, "max": 2}]}}, "input_order": {"required": ["duration", "sample_rate", "channels"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyAudio", "display_name": "Empty Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["blank audio"], "essentials_category": null, "has_intermediate_output": false}, "AudioEqualizer3Band": {"input": {"required": {"audio": ["AUDIO", {}], "low_gain_dB": ["FLOAT", {"tooltip": "Gain for Low frequencies (Bass)", "default": 0.0, "min": -24.0, "max": 24.0, "step": 0.1}], "low_freq": ["INT", {"tooltip": "Cutoff frequency for Low shelf", "default": 100, "min": 20, "max": 500}], "mid_gain_dB": ["FLOAT", {"tooltip": "Gain for Mid frequencies", "default": 0.0, "min": -24.0, "max": 24.0, "step": 0.1}], "mid_freq": ["INT", {"tooltip": "Center frequency for Mids", "default": 1000, "min": 200, "max": 4000}], "mid_q": ["FLOAT", {"tooltip": "Q factor (bandwidth) for Mids", "default": 0.707, "min": 0.1, "max": 10.0, "step": 0.1}], "high_gain_dB": ["FLOAT", {"tooltip": "Gain for High frequencies (Treble)", "default": 0.0, "min": -24.0, "max": 24.0, "step": 0.1}], "high_freq": ["INT", {"tooltip": "Cutoff frequency for High shelf", "default": 5000, "min": 1000, "max": 15000}]}}, "input_order": {"required": ["audio", "low_gain_dB", "low_freq", "mid_gain_dB", "mid_freq", "mid_q", "high_gain_dB", "high_freq"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioEqualizer3Band", "display_name": "Audio Equalizer (3-Band)", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["eq", "bass boost", "treble boost", "equalizer"], "essentials_category": null, "has_intermediate_output": false}, "TripleCLIPLoader": {"input": {"required": {"clip_name1": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}], "clip_name2": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}], "clip_name3": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}]}}, "input_order": {"required": ["clip_name1", "clip_name2", "clip_name3"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "TripleCLIPLoader", "display_name": "Load CLIP (Triple)", "description": "Recipes:\nsd3: clip-l, clip-g, t5", "python_module": "comfy_extras.nodes_sd3", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptySD3LatentImage": {"input": {"required": {"width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptySD3LatentImage", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_sd3", "category": "model/latent/stable diffusion", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeSD3": {"input": {"required": {"clip": ["CLIP", {}], "clip_l": ["STRING", {"multiline": true, "dynamicPrompts": true}], "clip_g": ["STRING", {"multiline": true, "dynamicPrompts": true}], "t5xxl": ["STRING", {"multiline": true, "dynamicPrompts": true}], "empty_padding": ["COMBO", {"advanced": true, "multiselect": false, "options": ["none", "empty_prompt"]}]}}, "input_order": {"required": ["clip", "clip_l", "clip_g", "t5xxl", "empty_padding"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeSD3", "display_name": "CLIP Text Encode (SD3)", "description": "", "python_module": "comfy_extras.nodes_sd3", "category": "model/conditioning/stable diffusion", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["sd3 prompt"], "essentials_category": null, "has_intermediate_output": false}, "ControlNetApplySD3": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "control_net": ["CONTROL_NET", {}], "vae": ["VAE", {}], "image": ["IMAGE", {}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["positive", "negative", "control_net", "vae", "image", "strength", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ControlNetApplySD3", "display_name": "Apply Controlnet with VAE", "description": "", "python_module": "comfy_extras.nodes_sd3", "category": "model/conditioning/controlnet", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SkipLayerGuidanceSD3": {"input": {"required": {"model": ["MODEL", {}], "layers": ["STRING", {"advanced": true, "default": "7, 8, 9", "multiline": false}], "scale": ["FLOAT", {"default": 3.0, "min": 0.0, "max": 10.0, "step": 0.1}], "start_percent": ["FLOAT", {"advanced": true, "default": 0.01, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"advanced": true, "default": 0.15, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["model", "layers", "scale", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SkipLayerGuidanceSD3", "display_name": null, "description": "Generic version of SkipLayerGuidance node that can be used on every DiT model.", "python_module": "comfy_extras.nodes_sd3", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GITSScheduler": {"input": {"required": {"coeff": ["FLOAT", {"advanced": true, "default": 1.2, "min": 0.8, "max": 1.5, "step": 0.05}], "steps": ["INT", {"default": 10, "min": 2, "max": 1000}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["coeff", "steps", "denoise"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "GITSScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_gits", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SetUnionControlNetType": {"input": {"required": {"control_net": ["CONTROL_NET", {}], "type": ["COMBO", {"multiselect": false, "options": ["auto", "openpose", "depth", "hed/pidi/scribble/ted", "canny/lineart/anime_lineart/mlsd", "normal", "segment", "tile", "repaint"]}]}}, "input_order": {"required": ["control_net", "type"]}, "is_input_list": false, "output": ["CONTROL_NET"], "output_is_list": [false], "output_name": ["CONTROL_NET"], "output_tooltips": [null], "output_matchtypes": null, "name": "SetUnionControlNetType", "display_name": "Set Union ControlNet Type", "description": "", "python_module": "comfy_extras.nodes_controlnet", "category": "model/conditioning/controlnet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["set controlnet type", "union controlnet type"], "essentials_category": null, "has_intermediate_output": false}, "ControlNetInpaintingAliMamaApply": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "control_net": ["CONTROL_NET", {}], "vae": ["VAE", {}], "image": ["IMAGE", {}], "mask": ["MASK", {}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "start_percent": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["positive", "negative", "control_net", "vae", "image", "mask", "strength", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ControlNetInpaintingAliMamaApply", "display_name": "Apply ControlNet Inpainting (AliMama)", "description": "", "python_module": "comfy_extras.nodes_controlnet", "category": "model/conditioning/controlnet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["masked controlnet"], "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeHunyuanDiT": {"input": {"required": {"clip": ["CLIP", {}], "bert": ["STRING", {"multiline": true, "dynamicPrompts": true}], "mt5xl": ["STRING", {"multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["clip", "bert", "mt5xl"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeHunyuanDiT", "display_name": "CLIP Text Encode (Hunyuan Image)", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/conditioning/hunyuan image", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TextEncodeHunyuanVideo_ImageToVideo": {"input": {"required": {"clip": ["CLIP", {}], "clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "prompt": ["STRING", {"multiline": true, "dynamicPrompts": true}], "image_interleave": ["INT", {"tooltip": "How much the image influences things vs the text prompt. Higher number means more influence from the text prompt.", "advanced": true, "default": 2, "min": 1, "max": 512}]}}, "input_order": {"required": ["clip", "clip_vision_output", "prompt", "image_interleave"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeHunyuanVideo_ImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/conditioning/hunyuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyHunyuanLatentVideo": {"input": {"required": {"width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 25, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyHunyuanLatentVideo", "display_name": "Empty HunyuanVideo 1.0 Latent", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/latent/hunyuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyHunyuanVideo15Latent": {"input": {"required": {"width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 25, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyHunyuanVideo15Latent", "display_name": "Empty HunyuanVideo 1.5 Latent", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/latent/hunyuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HunyuanVideo15ImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 33, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"start_image": ["IMAGE", {}], "clip_vision_output": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["start_image", "clip_vision_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "HunyuanVideo15ImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/conditioning/hunyuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HunyuanVideo15SuperResolution": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "latent": ["LATENT", {}], "noise_augmentation": ["FLOAT", {"advanced": true, "default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01}]}, "optional": {"vae": ["VAE", {}], "start_image": ["IMAGE", {}], "clip_vision_output": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": ["positive", "negative", "latent", "noise_augmentation"], "optional": ["vae", "start_image", "clip_vision_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "HunyuanVideo15SuperResolution", "display_name": "Hunyuan Video 1.5 Super Resolution", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/conditioning/hunyuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HunyuanVideo15LatentUpscaleWithModel": {"input": {"required": {"model": ["LATENT_UPSCALE_MODEL", {}], "samples": ["LATENT", {}], "upscale_method": ["COMBO", {"default": "bilinear", "multiselect": false, "options": ["nearest-exact", "bilinear", "area", "bicubic", "bislerp"]}], "width": ["INT", {"default": 1280, "min": 0, "max": 16384, "step": 8}], "height": ["INT", {"default": 720, "min": 0, "max": 16384, "step": 8}], "crop": ["COMBO", {"multiselect": false, "options": ["disabled", "center"]}]}}, "input_order": {"required": ["model", "samples", "upscale_method", "width", "height", "crop"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "HunyuanVideo15LatentUpscaleWithModel", "display_name": "Hunyuan Video 15 Latent Upscale With Model", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/latent/hunyhuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LatentUpscaleModelLoader": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["LATENT_UPSCALE_MODEL"], "output_is_list": [false], "output_name": ["LATENT_UPSCALE_MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentUpscaleModelLoader", "display_name": "Load Latent Upscale Model", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HunyuanImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 53, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "guidance_type": ["COMBO", {"advanced": true, "multiselect": false, "options": ["v1 (concat)", "v2 (replace)", "custom"]}]}, "optional": {"start_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "vae", "width", "height", "length", "batch_size", "guidance_type"], "optional": ["start_image"]}, "is_input_list": false, "output": ["CONDITIONING", "LATENT"], "output_is_list": [false, false], "output_name": ["positive", "latent"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "HunyuanImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/conditioning/hunyuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyHunyuanImageLatent": {"input": {"required": {"width": ["INT", {"default": 2048, "min": 64, "max": 16384, "step": 32}], "height": ["INT", {"default": 2048, "min": 64, "max": 16384, "step": 32}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyHunyuanImageLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/latent/hunyuan image", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HunyuanRefinerLatent": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "latent": ["LATENT", {}], "noise_augmentation": ["FLOAT", {"advanced": true, "default": 0.1, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["positive", "negative", "latent", "noise_augmentation"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "HunyuanRefinerLatent", "display_name": "Hunyuan Latent Refiner", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/conditioning/hunyuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Epsilon Scaling": {"input": {"required": {"model": ["MODEL", {}], "scaling_factor": ["FLOAT", {"advanced": true, "default": 1.005, "min": 0.5, "max": 1.5, "step": 0.001, "display": "number"}]}}, "input_order": {"required": ["model", "scaling_factor"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "Epsilon Scaling", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_eps", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TemporalScoreRescaling": {"input": {"required": {"model": ["MODEL", {}], "tsr_k": ["FLOAT", {"tooltip": "Controls the rescaling strength.\nLower k produces more detailed results; higher k produces smoother results in image generation. Setting k = 1 disables rescaling.", "advanced": true, "default": 0.95, "min": 0.01, "max": 100.0, "step": 0.001, "display": "number"}], "tsr_sigma": ["FLOAT", {"tooltip": "Controls how early rescaling takes effect.\nLarger values take effect earlier.", "advanced": true, "default": 1.0, "min": 0.01, "max": 100.0, "step": 0.001, "display": "number"}]}}, "input_order": {"required": ["model", "tsr_k", "tsr_sigma"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["patched_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "TemporalScoreRescaling", "display_name": "TSR - Temporal Score Rescaling", "description": "[Post-CFG Function]\nTSR - Temporal Score Rescaling (2510.01184)\n\nRescaling the model's score or noise to steer the sampling diversity.\n", "python_module": "comfy_extras.nodes_eps", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeFlux": {"input": {"required": {"clip": ["CLIP", {}], "clip_l": ["STRING", {"multiline": true, "dynamicPrompts": true}], "t5xxl": ["STRING", {"multiline": true, "dynamicPrompts": true}], "guidance": ["FLOAT", {"default": 3.5, "min": 0.0, "max": 100.0, "step": 0.1}]}}, "input_order": {"required": ["clip", "clip_l", "t5xxl", "guidance"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeFlux", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_flux", "category": "model/conditioning/flux", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxGuidance": {"input": {"required": {"conditioning": ["CONDITIONING", {}], "guidance": ["FLOAT", {"default": 3.5, "min": 0.0, "max": 100.0, "step": 0.1}]}}, "input_order": {"required": ["conditioning", "guidance"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxGuidance", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_flux", "category": "model/conditioning/flux", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxDisableGuidance": {"input": {"required": {"conditioning": ["CONDITIONING", {}]}}, "input_order": {"required": ["conditioning"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxDisableGuidance", "display_name": null, "description": "This node completely disables the guidance embed on Flux and Flux like models", "python_module": "comfy_extras.nodes_flux", "category": "model/conditioning/flux", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxKontextImageScale": {"input": {"required": {"image": ["IMAGE", {}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxKontextImageScale", "display_name": null, "description": "This node resizes the image to one that is more optimal for flux kontext.", "python_module": "comfy_extras.nodes_flux", "category": "model/conditioning/flux", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxKontextMultiReferenceLatentMethod": {"input": {"required": {"conditioning": ["CONDITIONING", {}], "reference_latents_method": ["COMBO", {"advanced": true, "multiselect": false, "options": ["offset", "index", "uxo/uno", "index_timestep_zero"]}]}}, "input_order": {"required": ["conditioning", "reference_latents_method"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxKontextMultiReferenceLatentMethod", "display_name": "Edit Model Reference Method", "description": "", "python_module": "comfy_extras.nodes_flux", "category": "model/conditioning/flux", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyFlux2LatentImage": {"input": {"required": {"width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyFlux2LatentImage", "display_name": "Empty Flux 2 Latent", "description": "", "python_module": "comfy_extras.nodes_flux", "category": "model/latent/flux", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Flux2Scheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 4096}], "width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 1}], "height": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 1}]}}, "input_order": {"required": ["steps", "width", "height"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "Flux2Scheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_flux", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxKVCache": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to use KV Cache on."}]}}, "input_order": {"required": ["model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The patched model with KV Cache enabled."], "output_matchtypes": null, "name": "FluxKVCache", "display_name": "Flux KV Cache", "description": "Enables KV Cache optimization for reference images on Flux family models.", "python_module": "comfy_extras.nodes_flux", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LoraSave": {"input": {"required": {"filename_prefix": ["STRING", {"default": "loras/ComfyUI_extracted_lora", "multiline": false}], "rank": ["INT", {"advanced": true, "default": 8, "min": 1, "max": 4096, "step": 1}], "lora_type": ["COMBO", {"advanced": true, "multiselect": false, "options": ["standard", "full_diff"]}], "bias_diff": ["BOOLEAN", {"advanced": true, "default": true}]}, "optional": {"model_diff": ["MODEL", {"tooltip": "The ModelSubtract output to be converted to a lora."}], "text_encoder_diff": ["CLIP", {"tooltip": "The CLIPSubtract output to be converted to a lora."}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["filename_prefix", "rank", "lora_type", "bias_diff"], "optional": ["model_diff", "text_encoder_diff"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "LoraSave", "display_name": "Extract and Save Lora", "description": "", "python_module": "comfy_extras.nodes_lora_extract", "category": "experimental", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export lora"], "essentials_category": null, "has_intermediate_output": false}, "TorchCompileModel": {"input": {"required": {"model": ["MODEL", {}], "backend": ["COMBO", {"advanced": true, "multiselect": false, "options": ["inductor", "cudagraphs"]}]}}, "input_order": {"required": ["model", "backend"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "TorchCompileModel", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_torch_compile", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyMochiLatentVideo": {"input": {"required": {"width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 25, "min": 7, "max": 16384, "step": 6}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyMochiLatentVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_mochi", "category": "model/latent/mochi", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SkipLayerGuidanceDiT": {"input": {"required": {"model": ["MODEL", {}], "double_layers": ["STRING", {"advanced": true, "default": "7, 8, 9", "multiline": false}], "single_layers": ["STRING", {"advanced": true, "default": "7, 8, 9", "multiline": false}], "scale": ["FLOAT", {"default": 3.0, "min": 0.0, "max": 10.0, "step": 0.1}], "start_percent": ["FLOAT", {"advanced": true, "default": 0.01, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"advanced": true, "default": 0.15, "min": 0.0, "max": 1.0, "step": 0.001}], "rescaling_scale": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "double_layers", "single_layers", "scale", "start_percent", "end_percent", "rescaling_scale"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SkipLayerGuidanceDiT", "display_name": null, "description": "Generic version of SkipLayerGuidance node that can be used on every DiT model.", "python_module": "comfy_extras.nodes_slg", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SkipLayerGuidanceDiTSimple": {"input": {"required": {"model": ["MODEL", {}], "double_layers": ["STRING", {"advanced": true, "default": "7, 8, 9", "multiline": false}], "single_layers": ["STRING", {"advanced": true, "default": "7, 8, 9", "multiline": false}], "start_percent": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["model", "double_layers", "single_layers", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SkipLayerGuidanceDiTSimple", "display_name": null, "description": "Simple version of the SkipLayerGuidanceDiT node that only modifies the uncond pass.", "python_module": "comfy_extras.nodes_slg", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Mahiro": {"input": {"required": {"model": ["MODEL", {}]}}, "input_order": {"required": ["model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["patched_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "Mahiro", "display_name": "Positive-Biased Guidance", "description": "Modify the guidance to scale more on the 'direction' of the positive prompt rather than the difference between the negative prompt.", "python_module": "comfy_extras.nodes_mahiro", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["mahiro", "mahiro cfg", "similarity-adaptive guidance", "positive-biased cfg"], "essentials_category": null, "has_intermediate_output": false}, "LTXVLatentUpsampler": {"input": {"required": {"samples": ["LATENT", {}], "upscale_model": ["LATENT_UPSCALE_MODEL", {}], "vae": ["VAE", {}]}}, "input_order": {"required": ["samples", "upscale_model", "vae"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVLatentUpsampler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt_upsampler", "category": "model/latent/ltxv", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVAudioVAELoader": {"input": {"required": {"ckpt_name": ["COMBO", {"tooltip": "Audio VAE checkpoint to load.", "multiselect": false, "options": []}]}}, "input_order": {"required": ["ckpt_name"]}, "is_input_list": false, "output": ["VAE"], "output_is_list": [false], "output_name": ["Audio VAE"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVAudioVAELoader", "display_name": "Load LTXV Audio VAE", "description": "", "python_module": "comfy_extras.nodes_lt_audio", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVAudioVAEEncode": {"input": {"required": {"audio": ["AUDIO", {"tooltip": "The audio to be encoded."}], "audio_vae": ["VAE", {"display_name": "Audio VAE", "tooltip": "The Audio VAE model to use for encoding."}]}}, "input_order": {"required": ["audio", "audio_vae"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["Audio Latent"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVAudioVAEEncode", "display_name": "LTXV Audio VAE Encode", "description": "", "python_module": "comfy_extras.nodes_lt_audio", "category": "model/latent/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVAudioVAEDecode": {"input": {"required": {"samples": ["LATENT", {"tooltip": "The latent to be decoded."}], "audio_vae": ["VAE", {"display_name": "Audio VAE", "tooltip": "The Audio VAE model used for decoding the latent."}]}}, "input_order": {"required": ["samples", "audio_vae"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["Audio"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVAudioVAEDecode", "display_name": "LTXV Audio VAE Decode", "description": "", "python_module": "comfy_extras.nodes_lt_audio", "category": "model/latent/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVEmptyLatentAudio": {"input": {"required": {"frames_number": ["INT", {"tooltip": "Number of frames.", "default": 97, "min": 1, "max": 1000, "step": 1, "display": "number"}], "frame_rate": ["INT", {"tooltip": "Number of frames per second.", "default": 25, "min": 1, "max": 1000, "step": 1, "display": "number"}], "batch_size": ["INT", {"tooltip": "The number of latent audio samples in the batch.", "default": 1, "min": 1, "max": 4096, "display": "number"}], "audio_vae": ["VAE", {"display_name": "Audio VAE", "tooltip": "The Audio VAE model to get configuration from."}]}}, "input_order": {"required": ["frames_number", "frame_rate", "batch_size", "audio_vae"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["Latent"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVEmptyLatentAudio", "display_name": "LTXV Empty Latent Audio", "description": "", "python_module": "comfy_extras.nodes_lt_audio", "category": "model/latent/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXAVTextEncoderLoader": {"input": {"required": {"text_encoder": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}], "ckpt_name": ["COMBO", {"multiselect": false, "options": []}], "device": ["COMBO", {"advanced": true, "multiselect": false, "options": ["default", "cpu"]}]}}, "input_order": {"required": ["text_encoder", "ckpt_name", "device"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXAVTextEncoderLoader", "display_name": "Load LTXV Audio Text Encoder", "description": "Recipes:\nltxav: gemma 3 12B", "python_module": "comfy_extras.nodes_lt_audio", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyLTXVLatentVideo": {"input": {"required": {"width": ["INT", {"default": 768, "min": 64, "max": 16384, "step": 32}], "height": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 32}], "length": ["INT", {"default": 97, "min": 1, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyLTXVLatentVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/latent/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVImgToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "image": ["IMAGE", {}], "width": ["INT", {"default": 768, "min": 64, "max": 16384, "step": 32}], "height": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 32}], "length": ["INT", {"default": 97, "min": 9, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0}]}}, "input_order": {"required": ["positive", "negative", "vae", "image", "width", "height", "length", "batch_size", "strength"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "LTXVImgToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVImgToVideoInplace": {"input": {"required": {"vae": ["VAE", {}], "image": ["IMAGE", {}], "latent": ["LATENT", {}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0}], "bypass": ["BOOLEAN", {"tooltip": "Bypass the conditioning.", "default": false}]}}, "input_order": {"required": ["vae", "image", "latent", "strength", "bypass"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["latent"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVImgToVideoInplace", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ModelSamplingLTXV": {"input": {"required": {"model": ["MODEL", {}], "max_shift": ["FLOAT", {"default": 2.05, "min": 0.0, "max": 100.0, "step": 0.01}], "base_shift": ["FLOAT", {"default": 0.95, "min": 0.0, "max": 100.0, "step": 0.01}]}, "optional": {"latent": ["LATENT", {}]}}, "input_order": {"required": ["model", "max_shift", "base_shift"], "optional": ["latent"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "ModelSamplingLTXV", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/patch/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVConditioning": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "frame_rate": ["FLOAT", {"default": 25.0, "min": 0.0, "max": 1000.0, "step": 0.01}]}}, "input_order": {"required": ["positive", "negative", "frame_rate"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LTXVConditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "max_shift": ["FLOAT", {"default": 2.05, "min": 0.0, "max": 100.0, "step": 0.01}], "base_shift": ["FLOAT", {"default": 0.95, "min": 0.0, "max": 100.0, "step": 0.01}], "stretch": ["BOOLEAN", {"tooltip": "Stretch the sigmas to be in the range [terminal, 1].", "advanced": true, "default": true}], "terminal": ["FLOAT", {"tooltip": "The terminal value of the sigmas after stretching.", "advanced": true, "default": 0.1, "min": 0.0, "max": 0.99, "step": 0.01}]}, "optional": {"latent": ["LATENT", {}]}}, "input_order": {"required": ["steps", "max_shift", "base_shift", "stretch", "terminal"], "optional": ["latent"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GetICLoRAParameters": {"input": {"required": {"iclora_model": ["MODEL", {"tooltip": "Direct output from a LoRA Loader for the specific IC-LoRA from which to extract the metadata."}]}}, "input_order": {"required": ["iclora_model"]}, "is_input_list": false, "output": ["IC_LORA_PARAMETERS"], "output_is_list": [false], "output_name": ["iclora_parameters"], "output_tooltips": ["IC-LoRA parameters extracted from the LoRA metadata (eg. reference_downscale_factor). Connect to LTXVAddGuide if the LoRA requires special handling of the guides."], "output_matchtypes": null, "name": "GetICLoRAParameters", "display_name": "Get IC-LoRA Parameters", "description": "Extracts IC-LoRA parameters from the safetensors metadata of a LoRA-loaded model and outputs them for LTXVAddGuide (eg. reference_downscale_factor).", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["ic-lora", "ic lora", "iclora", "downscale factor", "reference downscale"], "essentials_category": null, "has_intermediate_output": false}, "LTXVAddGuide": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "latent": ["LATENT", {}], "image": ["IMAGE", {"tooltip": "Image or video to condition the latent video on. Must be 8*n + 1 frames. If the video is not 8*n + 1 frames, it will be cropped to the nearest 8*n + 1 frames."}], "frame_idx": ["INT", {"tooltip": "Frame index to start the conditioning at. For single-frame images or videos with 1-8 frames, any frame_idx value is acceptable. For videos with 9+ frames, frame_idx must be divisible by 8, otherwise it will be rounded down to the nearest multiple of 8. Negative values are counted from the end of the video.", "default": 0, "min": -9999, "max": 9999}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}, "optional": {"attention_mask": ["MASK", {"tooltip": "Optional pixel-space spatial mask. Controls per-region conditioning influence via self-attention, multiplied by strength."}], "iclora_parameters": ["IC_LORA_PARAMETERS", {"tooltip": "Optional IC-LoRA parameters from a Get IC-LoRA Parameters node. Used for adjusting guide processing as required by certain IC-LoRAs (eg. those with a reference_downscale_factor > 1). When chained, each LTXVAddGuide uses only the parameters connected to it."}]}}, "input_order": {"required": ["positive", "negative", "vae", "latent", "image", "frame_idx", "strength"], "optional": ["attention_mask", "iclora_parameters"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "LTXVAddGuide", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVPreprocess": {"input": {"required": {"image": ["IMAGE", {}], "img_compression": ["INT", {"tooltip": "Amount of compression to apply on image.", "default": 35, "min": 0, "max": 100}]}}, "input_order": {"required": ["image", "img_compression"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["output_image"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVPreprocess", "display_name": "LTXV Preprocess", "description": "", "python_module": "comfy_extras.nodes_lt", "category": "video/preprocessors", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVCropGuides": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "latent": ["LATENT", {}]}}, "input_order": {"required": ["positive", "negative", "latent"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "LTXVCropGuides", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVConcatAVLatent": {"input": {"required": {"video_latent": ["LATENT", {}], "audio_latent": ["LATENT", {}]}}, "input_order": {"required": ["video_latent", "audio_latent"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["latent"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVConcatAVLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/latent/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVSeparateAVLatent": {"input": {"required": {"av_latent": ["LATENT", {}]}}, "input_order": {"required": ["av_latent"]}, "is_input_list": false, "output": ["LATENT", "LATENT"], "output_is_list": [false, false], "output_name": ["video_latent", "audio_latent"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LTXVSeparateAVLatent", "display_name": null, "description": "LTXV Separate AV Latent", "python_module": "comfy_extras.nodes_lt", "category": "model/latent/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVReferenceAudio": {"input": {"required": {"model": ["MODEL", {}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "reference_audio": ["AUDIO", {"tooltip": "Reference audio clip whose speaker identity to transfer. ~5 seconds recommended (training duration). Shorter or longer clips may degrade voice identity transfer."}], "audio_vae": ["VAE", {"display_name": "Audio VAE", "tooltip": "LTXV Audio VAE for encoding."}], "identity_guidance_scale": ["FLOAT", {"tooltip": "Strength of identity guidance. Runs an extra forward pass without reference each step to amplify speaker identity. Set to 0 to disable (no extra pass).", "default": 3.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": 0.01}], "start_percent": ["FLOAT", {"tooltip": "Start of the sigma range where identity guidance is active.", "advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"tooltip": "End of the sigma range where identity guidance is active.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["model", "positive", "negative", "reference_audio", "audio_vae", "identity_guidance_scale", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["MODEL", "CONDITIONING", "CONDITIONING"], "output_is_list": [false, false, false], "output_name": ["MODEL", "positive", "negative"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "LTXVReferenceAudio", "display_name": "LTXV Reference Audio (ID-LoRA)", "description": "Set reference audio for ID-LoRA speaker identity transfer. Encodes a reference audio clip into the conditioning and optionally patches the model with identity guidance (extra forward pass without reference, amplifying the speaker identity effect).", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CreateHookLora": {"input": {"required": {"lora_name": [[]], "strength_model": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}], "strength_clip": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}]}, "optional": {"prev_hooks": ["HOOKS"]}}, "input_order": {"required": ["lora_name", "strength_model", "strength_clip"], "optional": ["prev_hooks"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CreateHookLora", "display_name": "Create Hook LoRA", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/create", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "CreateHookLoraModelOnly": {"input": {"required": {"lora_name": [[]], "strength_model": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}]}, "optional": {"prev_hooks": ["HOOKS"]}}, "input_order": {"required": ["lora_name", "strength_model"], "optional": ["prev_hooks"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CreateHookLoraModelOnly", "display_name": "Create Hook LoRA (MO)", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/create", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "CreateHookModelAsLora": {"input": {"required": {"ckpt_name": [[]], "strength_model": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}], "strength_clip": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}]}, "optional": {"prev_hooks": ["HOOKS"]}}, "input_order": {"required": ["ckpt_name", "strength_model", "strength_clip"], "optional": ["prev_hooks"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CreateHookModelAsLora", "display_name": "Create Hook Model as LoRA", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/create", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "CreateHookModelAsLoraModelOnly": {"input": {"required": {"ckpt_name": [[]], "strength_model": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}]}, "optional": {"prev_hooks": ["HOOKS"]}}, "input_order": {"required": ["ckpt_name", "strength_model"], "optional": ["prev_hooks"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CreateHookModelAsLoraModelOnly", "display_name": "Create Hook Model as LoRA (MO)", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/create", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "SetHookKeyframes": {"input": {"required": {"hooks": ["HOOKS"]}, "optional": {"hook_kf": ["HOOK_KEYFRAMES"]}}, "input_order": {"required": ["hooks"], "optional": ["hook_kf"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "SetHookKeyframes", "display_name": "Set Hook Keyframes", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/scheduling", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "CreateHookKeyframe": {"input": {"required": {"strength_mult": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}]}, "optional": {"prev_hook_kf": ["HOOK_KEYFRAMES"]}}, "input_order": {"required": ["strength_mult", "start_percent"], "optional": ["prev_hook_kf"]}, "is_input_list": false, "output": ["HOOK_KEYFRAMES"], "output_is_list": [false], "output_name": ["HOOK_KF"], "name": "CreateHookKeyframe", "display_name": "Create Hook Keyframe", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/scheduling", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["hook scheduling", "strength animation", "timed hook"]}, "CreateHookKeyframesInterpolated": {"input": {"required": {"strength_start": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.001}], "strength_end": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.001}], "interpolation": [["linear", "ease_in", "ease_out", "ease_in_out"]], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "keyframes_count": ["INT", {"default": 5, "min": 2, "max": 100, "step": 1}], "print_keyframes": ["BOOLEAN", {"default": false, "advanced": true}]}, "optional": {"prev_hook_kf": ["HOOK_KEYFRAMES"]}}, "input_order": {"required": ["strength_start", "strength_end", "interpolation", "start_percent", "end_percent", "keyframes_count", "print_keyframes"], "optional": ["prev_hook_kf"]}, "is_input_list": false, "output": ["HOOK_KEYFRAMES"], "output_is_list": [false], "output_name": ["HOOK_KF"], "name": "CreateHookKeyframesInterpolated", "display_name": "Create Hook Keyframes Interp.", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/scheduling", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["ease hook strength", "smooth hook transition", "interpolate keyframes"]}, "CreateHookKeyframesFromFloats": {"input": {"required": {"floats_strength": ["FLOATS", {"default": -1, "min": -1, "step": 0.001, "forceInput": true}], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "print_keyframes": ["BOOLEAN", {"default": false, "advanced": true}]}, "optional": {"prev_hook_kf": ["HOOK_KEYFRAMES"]}}, "input_order": {"required": ["floats_strength", "start_percent", "end_percent", "print_keyframes"], "optional": ["prev_hook_kf"]}, "is_input_list": false, "output": ["HOOK_KEYFRAMES"], "output_is_list": [false], "output_name": ["HOOK_KF"], "name": "CreateHookKeyframesFromFloats", "display_name": "Create Hook Keyframes From Floats", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/scheduling", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["batch keyframes", "strength list to keyframes"]}, "CombineHooks2": {"input": {"required": {}, "optional": {"hooks_A": ["HOOKS"], "hooks_B": ["HOOKS"]}}, "input_order": {"required": [], "optional": ["hooks_A", "hooks_B"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CombineHooks2", "display_name": "Combine Hooks [2]", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/combine", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["merge hooks"]}, "CombineHooks4": {"input": {"required": {}, "optional": {"hooks_A": ["HOOKS"], "hooks_B": ["HOOKS"], "hooks_C": ["HOOKS"], "hooks_D": ["HOOKS"]}}, "input_order": {"required": [], "optional": ["hooks_A", "hooks_B", "hooks_C", "hooks_D"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CombineHooks4", "display_name": "Combine Hooks [4]", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/combine", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "CombineHooks8": {"input": {"required": {}, "optional": {"hooks_A": ["HOOKS"], "hooks_B": ["HOOKS"], "hooks_C": ["HOOKS"], "hooks_D": ["HOOKS"], "hooks_E": ["HOOKS"], "hooks_F": ["HOOKS"], "hooks_G": ["HOOKS"], "hooks_H": ["HOOKS"]}}, "input_order": {"required": [], "optional": ["hooks_A", "hooks_B", "hooks_C", "hooks_D", "hooks_E", "hooks_F", "hooks_G", "hooks_H"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CombineHooks8", "display_name": "Combine Hooks [8]", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/combine", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "ConditioningSetProperties": {"input": {"required": {"cond_NEW": ["CONDITIONING"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "set_cond_area": [["default", "mask bounds"]]}, "optional": {"mask": ["MASK"], "hooks": ["HOOKS"], "timesteps": ["TIMESTEPS_RANGE"]}}, "input_order": {"required": ["cond_NEW", "strength", "set_cond_area"], "optional": ["mask", "hooks", "timesteps"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetProperties", "display_name": "Cond Set Props", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond single", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "ConditioningSetPropertiesAndCombine": {"input": {"required": {"cond": ["CONDITIONING"], "cond_NEW": ["CONDITIONING"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "set_cond_area": [["default", "mask bounds"]]}, "optional": {"mask": ["MASK"], "hooks": ["HOOKS"], "timesteps": ["TIMESTEPS_RANGE"]}}, "input_order": {"required": ["cond", "cond_NEW", "strength", "set_cond_area"], "optional": ["mask", "hooks", "timesteps"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetPropertiesAndCombine", "display_name": "Cond Set Props Combine", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond single", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "PairConditioningSetProperties": {"input": {"required": {"positive_NEW": ["CONDITIONING"], "negative_NEW": ["CONDITIONING"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "set_cond_area": [["default", "mask bounds"]]}, "optional": {"mask": ["MASK"], "hooks": ["HOOKS"], "timesteps": ["TIMESTEPS_RANGE"]}}, "input_order": {"required": ["positive_NEW", "negative_NEW", "strength", "set_cond_area"], "optional": ["mask", "hooks", "timesteps"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "name": "PairConditioningSetProperties", "display_name": "Cond Pair Set Props", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond pair", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "PairConditioningSetPropertiesAndCombine": {"input": {"required": {"positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "positive_NEW": ["CONDITIONING"], "negative_NEW": ["CONDITIONING"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "set_cond_area": [["default", "mask bounds"]]}, "optional": {"mask": ["MASK"], "hooks": ["HOOKS"], "timesteps": ["TIMESTEPS_RANGE"]}}, "input_order": {"required": ["positive", "negative", "positive_NEW", "negative_NEW", "strength", "set_cond_area"], "optional": ["mask", "hooks", "timesteps"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "name": "PairConditioningSetPropertiesAndCombine", "display_name": "Cond Pair Set Props Combine", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond pair", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "ConditioningSetDefaultCombine": {"input": {"required": {"cond": ["CONDITIONING"], "cond_DEFAULT": ["CONDITIONING"]}, "optional": {"hooks": ["HOOKS"]}}, "input_order": {"required": ["cond", "cond_DEFAULT"], "optional": ["hooks"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetDefaultCombine", "display_name": "Cond Set Default Combine", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond single", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "PairConditioningSetDefaultCombine": {"input": {"required": {"positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "positive_DEFAULT": ["CONDITIONING"], "negative_DEFAULT": ["CONDITIONING"]}, "optional": {"hooks": ["HOOKS"]}}, "input_order": {"required": ["positive", "negative", "positive_DEFAULT", "negative_DEFAULT"], "optional": ["hooks"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "name": "PairConditioningSetDefaultCombine", "display_name": "Cond Pair Set Default Combine", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond pair", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "PairConditioningCombine": {"input": {"required": {"positive_A": ["CONDITIONING"], "negative_A": ["CONDITIONING"], "positive_B": ["CONDITIONING"], "negative_B": ["CONDITIONING"]}}, "input_order": {"required": ["positive_A", "negative_A", "positive_B", "negative_B"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "name": "PairConditioningCombine", "display_name": "Cond Pair Combine", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond pair", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "SetClipHooks": {"input": {"required": {"clip": ["CLIP"], "apply_to_conds": ["BOOLEAN", {"default": true, "advanced": true}], "schedule_clip": ["BOOLEAN", {"default": false, "advanced": true}]}, "optional": {"hooks": ["HOOKS"]}}, "input_order": {"required": ["clip", "apply_to_conds", "schedule_clip"], "optional": ["hooks"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "SetClipHooks", "display_name": "Set CLIP Hooks", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/clip", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "ConditioningTimestepsRange": {"input": {"required": {"start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["start_percent", "end_percent"]}, "is_input_list": false, "output": ["TIMESTEPS_RANGE", "TIMESTEPS_RANGE", "TIMESTEPS_RANGE"], "output_is_list": [false, false, false], "output_name": ["TIMESTEPS_RANGE", "BEFORE_RANGE", "AFTER_RANGE"], "name": "ConditioningTimestepsRange", "display_name": "Timesteps Range", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["prompt scheduling", "timestep segments", "conditioning phases"]}, "MultiGPU_WorkUnits": {"input": {"required": {"model": ["MODEL", {}], "max_gpus": ["INT", {"default": 2, "min": 1, "step": 1}]}}, "input_order": {"required": ["model", "max_gpus"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "MultiGPU_WorkUnits", "display_name": "MultiGPU CFG Split", "description": "Prepares model to have sampling accelerated via splitting work units.\n\nShould be placed after nodes that modify the model object itself, such as compile or attention-switch nodes.\n\nOther than those exceptions, this node can be placed in any order.", "python_module": "comfy_extras.nodes_multigpu", "category": "advanced/multigpu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SelectModelDevice": {"input": {"required": {"model": ["MODEL", {}], "device": ["COMBO", {"multiselect": false, "options": ["default", "cpu"]}]}}, "input_order": {"required": ["model", "device"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SelectModelDevice", "display_name": "Select Model Device", "description": "Place the diffusion model on a specific device (default / cpu / gpu:N).\n\n- \"default\" restores the device assigned by the loader (even after a\n prior Select Model Device call).\n- \"cpu\" pins both the load and offload device to CPU.\n- \"gpu:N\" pins the load device to the Nth available GPU; the offload\n device is restored to the loader's original choice.\n\nWhen the requested device differs from the device the input model is\nalready on, a fresh model is spawned via the loader's reload factory\n(cached_patcher_init) so the new patcher owns independent weights on\nthe new device. Loaders that don't support multigpu (no factory) will\ncause the node to pass through unchanged with a warning.\n\nIf the workflow already has MultiGPU CFG Split applied and the chosen\nGPU collides with one of the existing multigpu clones, that clone is\ndropped so two patchers don't end up bound to the same device.\n\nWhen the selected device does not exist on the current machine\n(e.g. a workflow built on a 2-GPU box opened on a 1-GPU box),\nthe node passes the model through unchanged and logs a message\ninstead of failing.\n\nNOTE: Placing Select Model Device *after* a node that has already\nconsumed the same model (e.g. a KSampler that ran on this model on\nthe original device) is not recommended -- any state the prior\nconsumer mutated on the original model will be observed when the\nselected device matches the original (fast path). Place Select Model\nDevice before any consumer of the model.", "python_module": "comfy_extras.nodes_multigpu", "category": "advanced/multigpu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SelectCLIPDevice": {"input": {"required": {"clip": ["CLIP", {}], "device": ["COMBO", {"multiselect": false, "options": ["default", "cpu"]}]}}, "input_order": {"required": ["clip", "device"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "SelectCLIPDevice", "display_name": "Select CLIP Device", "description": "Place the CLIP text encoder on a specific device (default / cpu / gpu:N).\n\n- \"default\" restores the device assigned by the loader.\n- \"cpu\" pins both the load and offload device to CPU.\n- \"gpu:N\" pins the load device to the Nth available GPU.\n\nWhen the selected device does not exist on the current machine\n(e.g. a workflow built on a 2-GPU box opened on a 1-GPU box),\nthe node passes the CLIP through unchanged and logs a message\ninstead of failing.", "python_module": "comfy_extras.nodes_multigpu", "category": "advanced/multigpu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SelectVAEDevice": {"input": {"required": {"vae": ["VAE", {}], "device": ["COMBO", {"multiselect": false, "options": ["default"]}]}}, "input_order": {"required": ["vae", "device"]}, "is_input_list": false, "output": ["VAE"], "output_is_list": [false], "output_name": ["VAE"], "output_tooltips": [null], "output_matchtypes": null, "name": "SelectVAEDevice", "display_name": "Select VAE Device", "description": "Place the VAE on a specific device (default / gpu:N).\n\n- \"default\" restores the device assigned by the loader.\n- \"gpu:N\" pins the load device to the Nth available GPU; the offload\n device is set to the standard VAE offload device.\n\nCPU is intentionally not exposed in the UI for the VAE; if a workflow\nsupplies \"cpu\" anyway (e.g. opened from another machine), the request\nis dropped with a log message and the VAE is passed through unchanged.\n\nWhen the selected device does not exist on the current machine\n(e.g. a workflow built on a 2-GPU box opened on a 1-GPU box),\nthe node passes the VAE through unchanged and logs a message\ninstead of failing.", "python_module": "comfy_extras.nodes_multigpu", "category": "advanced/multigpu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Load3D": {"input": {"required": {"model_file": ["COMBO", {"multiselect": false, "options": ["none"], "file_upload": true}], "image": ["LOAD_3D", {}], "width": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}], "height": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}]}}, "input_order": {"required": ["model_file", "image", "width", "height"]}, "is_input_list": false, "output": ["IMAGE", "MASK", "STRING", "IMAGE", "LOAD3D_CAMERA", "VIDEO", "FILE_3D", "LOAD3D_MODEL_INFO"], "output_is_list": [false, false, false, false, false, false, false, false], "output_name": ["image", "mask", "mesh_path", "normal", "camera_info", "recording_video", "model_3d", "model_3d_info"], "output_tooltips": [null, null, null, null, null, null, null, null], "output_matchtypes": null, "name": "Load3D", "display_name": "Load 3D & Animation", "description": "", "python_module": "comfy_extras.nodes_load_3d", "category": "3d", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": "Basics", "has_intermediate_output": false}, "Load3DAdvanced": {"input": {"required": {"model_file": ["COMBO", {"multiselect": false, "options": ["none"], "file_upload": true}], "viewport_state": ["LOAD_3D", {}], "width": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}], "height": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}]}}, "input_order": {"required": ["model_file", "viewport_state", "width", "height"]}, "is_input_list": false, "output": ["FILE_3D", "LOAD3D_MODEL_INFO", "LOAD3D_CAMERA", "INT", "INT"], "output_is_list": [false, false, false, false, false], "output_name": ["model_3d", "model_3d_info", "camera_info", "width", "height"], "output_tooltips": [null, null, null, null, null], "output_matchtypes": null, "name": "Load3DAdvanced", "display_name": "Load 3D (Advanced)", "description": "", "python_module": "comfy_extras.nodes_load_3d", "category": "3d", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["load mesh", "load gltf", "load glb", "load obj", "load fbx", "load stl"], "essentials_category": null, "has_intermediate_output": false}, "Preview3D": {"input": {"required": {"model_file": ["STRING,FILE_3D_GLB,FILE_3D_GLTF,FILE_3D_FBX,FILE_3D_OBJ,FILE_3D_STL,FILE_3D_USDZ,FILE_3D", {"default": "", "widgetType": "STRING", "multiline": false, "tooltip": "3D model file or path string"}]}, "optional": {"camera_info": ["LOAD3D_CAMERA", {"advanced": true}], "bg_image": ["IMAGE", {"advanced": true}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model_file"], "optional": ["camera_info", "bg_image"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "Preview3D", "display_name": "Preview 3D & Animation", "description": "", "python_module": "comfy_extras.nodes_load_3d", "category": "3d", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["view mesh", "3d viewer"], "essentials_category": null, "has_intermediate_output": false}, "Preview3DAdvanced": {"input": {"required": {"model_3d": ["FILE_3D_GLB,FILE_3D_GLTF,FILE_3D_FBX,FILE_3D_OBJ,FILE_3D_STL,FILE_3D_USDZ,FILE_3D", {"tooltip": "3D model file from an upstream 3D node."}], "viewport_state": ["LOAD_3D", {}], "width": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}], "height": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}]}, "optional": {"model_3d_info": ["LOAD3D_MODEL_INFO", {"advanced": true}], "camera_info": ["LOAD3D_CAMERA", {"advanced": true}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model_3d", "viewport_state", "width", "height"], "optional": ["model_3d_info", "camera_info"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["FILE_3D", "LOAD3D_MODEL_INFO", "LOAD3D_CAMERA", "INT", "INT"], "output_is_list": [false, false, false, false, false], "output_name": ["model_3d", "model_3d_info", "camera_info", "width", "height"], "output_tooltips": [null, null, null, null, null], "output_matchtypes": null, "name": "Preview3DAdvanced", "display_name": "Preview 3D (Advanced)", "description": "", "python_module": "comfy_extras.nodes_load_3d", "category": "3d", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["preview 3d", "3d viewer", "view mesh", "frame 3d", "3d camera output"], "essentials_category": null, "has_intermediate_output": false}, "PreviewGaussianSplat": {"input": {"required": {"model_3d": ["FILE_3D_SPLAT_ANY,FILE_3D_PLY,FILE_3D_SPLAT,FILE_3D_SPZ,FILE_3D_KSPLAT", {"tooltip": "A gaussian splat 3D file."}], "viewport_state": ["LOAD_3D", {}], "width": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}], "height": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}]}, "optional": {"model_3d_info": ["LOAD3D_MODEL_INFO", {"advanced": true}], "camera_info": ["LOAD3D_CAMERA", {"advanced": true}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model_3d", "viewport_state", "width", "height"], "optional": ["model_3d_info", "camera_info"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["FILE_3D_SPLAT_ANY", "LOAD3D_MODEL_INFO", "LOAD3D_CAMERA", "INT", "INT"], "output_is_list": [false, false, false, false, false], "output_name": ["model_3d", "model_3d_info", "camera_info", "width", "height"], "output_tooltips": [null, null, null, null, null], "output_matchtypes": null, "name": "PreviewGaussianSplat", "display_name": "Preview Splat", "description": "", "python_module": "comfy_extras.nodes_load_3d", "category": "3d", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["view splat", "view gaussian", "view gaussian splat", "preview gaussian", "preview gaussian splat", "view 3dgs", "preview 3dgs", "preview ply", "preview spz", "preview splat", "preview ksplat"], "essentials_category": null, "has_intermediate_output": false}, "PreviewPointCloud": {"input": {"required": {"model_3d": ["FILE_3D_POINT_CLOUD_ANY,FILE_3D_PLY", {"tooltip": "Point cloud file (.ply)"}], "viewport_state": ["LOAD_3D", {}], "width": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}], "height": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}]}, "optional": {"model_3d_info": ["LOAD3D_MODEL_INFO", {"advanced": true}], "camera_info": ["LOAD3D_CAMERA", {"advanced": true}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model_3d", "viewport_state", "width", "height"], "optional": ["model_3d_info", "camera_info"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["FILE_3D_POINT_CLOUD_ANY", "LOAD3D_MODEL_INFO", "LOAD3D_CAMERA", "INT", "INT"], "output_is_list": [false, false, false, false, false], "output_name": ["model_3d", "model_3d_info", "camera_info", "width", "height"], "output_tooltips": [null, null, null, null, null], "output_matchtypes": null, "name": "PreviewPointCloud", "display_name": "Preview Point Cloud", "description": "", "python_module": "comfy_extras.nodes_load_3d", "category": "3d", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["view point cloud", "view pointcloud", "preview point cloud", "preview pointcloud", "preview ply"], "essentials_category": null, "has_intermediate_output": false}, "EmptyCosmosLatentVideo": {"input": {"required": {"width": ["INT", {"default": 1280, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 704, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 121, "min": 1, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyCosmosLatentVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cosmos", "category": "model/latent/cosmos", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CosmosImageToVideoLatent": {"input": {"required": {"vae": ["VAE", {}], "width": ["INT", {"default": 1280, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 704, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 121, "min": 1, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"start_image": ["IMAGE", {}], "end_image": ["IMAGE", {}]}}, "input_order": {"required": ["vae", "width", "height", "length", "batch_size"], "optional": ["start_image", "end_image"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "CosmosImageToVideoLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cosmos", "category": "model/conditioning/cosmos", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CosmosPredict2ImageToVideoLatent": {"input": {"required": {"vae": ["VAE", {}], "width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 93, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"start_image": ["IMAGE", {}], "end_image": ["IMAGE", {}]}}, "input_order": {"required": ["vae", "width", "height", "length", "batch_size"], "optional": ["start_image", "end_image"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "CosmosPredict2ImageToVideoLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cosmos", "category": "model/conditioning/cosmos", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveWEBM": {"input": {"required": {"images": ["IMAGE", {"tooltip": "RGBA images are saved with their alpha channel as transparency (vp9 codec only)."}], "filename_prefix": ["STRING", {"default": "ComfyUI", "multiline": false}], "codec": ["COMBO", {"multiselect": false, "options": ["vp9", "av1"]}], "fps": ["FLOAT", {"default": 24.0, "min": 0.01, "max": 1000.0, "step": 0.01}], "crf": ["FLOAT", {"tooltip": "Higher crf means lower quality with a smaller file size, lower crf means higher quality higher filesize.", "default": 32.0, "min": 0, "max": 63.0, "step": 1}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "filename_prefix", "codec", "fps", "crf"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveWEBM", "display_name": "Save WEBM", "description": "", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export webm"], "essentials_category": null, "has_intermediate_output": false}, "SaveVideo": {"input": {"required": {"video": ["VIDEO", {"tooltip": "The video to save."}], "filename_prefix": ["STRING", {"tooltip": "The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes.", "default": "video/ComfyUI", "multiline": false}], "format": ["COMBO", {"tooltip": "The format to save the video as.", "default": "auto", "multiselect": false, "options": ["auto", "mp4"]}], "codec": ["COMBO", {"tooltip": "The codec to use for the video.", "default": "auto", "multiselect": false, "options": ["auto", "h264"]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["video", "filename_prefix", "format", "codec"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["video"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveVideo", "display_name": "Save Video", "description": "Saves the input images to your ComfyUI output directory.", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export video"], "essentials_category": "Basics", "has_intermediate_output": false}, "CreateVideo": {"input": {"required": {"images": ["IMAGE", {"tooltip": "The images to create a video from."}], "fps": ["FLOAT", {"default": 30.0, "min": 1.0, "max": 120.0, "step": 1.0}]}, "optional": {"audio": ["AUDIO", {"tooltip": "The audio to add to the video."}], "bit_depth": ["INT", {"tooltip": "Bit depth of the created video. 10-bit keeps smoother gradients with less banding, but some players and downstream nodes may not support it.", "default": 8, "min": 8, "max": 10, "step": 2, "display": "number"}]}}, "input_order": {"required": ["images", "fps"], "optional": ["audio", "bit_depth"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "CreateVideo", "display_name": "Create Video", "description": "Create a video from images.", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["images to video"], "essentials_category": "Video Tools", "has_intermediate_output": false}, "GetVideoComponents": {"input": {"required": {"video": ["VIDEO", {"tooltip": "The video to extract components from."}]}}, "input_order": {"required": ["video"]}, "is_input_list": false, "output": ["IMAGE", "AUDIO", "FLOAT", "INT"], "output_is_list": [false, false, false, false], "output_name": ["images", "audio", "fps", "bit_depth"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "GetVideoComponents", "display_name": "Get Video Components", "description": "Extracts all components from a video: frames, audio, framerate, and bit depth.", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["extract frames", "split video", "video to images", "demux"], "essentials_category": null, "has_intermediate_output": false}, "LoadVideo": {"input": {"required": {"file": ["COMBO", {"multiselect": false, "options": [], "video_upload": true}]}}, "input_order": {"required": ["file"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LoadVideo", "display_name": "Load Video", "description": "", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["import video", "open video", "video file"], "essentials_category": "Basics", "has_intermediate_output": false}, "Video Slice": {"input": {"required": {"video": ["VIDEO", {}], "start_time": ["FLOAT", {"tooltip": "Start time in seconds", "default": 0.0, "min": -100000.0, "max": 100000.0, "step": 0.001}], "duration": ["FLOAT", {"tooltip": "Duration in seconds, or 0 for unlimited duration", "default": 0.0, "min": 0.0, "step": 0.001}], "strict_duration": ["BOOLEAN", {"tooltip": "If True, when the specified duration is not possible, an error will be raised.", "default": false}]}}, "input_order": {"required": ["video", "start_time", "duration", "strict_duration"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Video Slice", "display_name": "Trim Video", "description": "", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["trim video duration", "skip first frames", "frame load cap", "start time"], "essentials_category": "Video Tools", "has_intermediate_output": false}, "CLIPTextEncodeLumina2": {"input": {"required": {"system_prompt": ["COMBO", {"tooltip": "Lumina2 provide two types of system prompts:Superior: You are an assistant designed to generate superior images with the superior degree of image-text alignment based on textual prompts or user prompts. Alignment: You are an assistant designed to generate high-quality images with the highest degree of image-text alignment based on textual prompts.", "multiselect": false, "options": ["superior", "alignment"]}], "user_prompt": ["STRING", {"tooltip": "The text to be encoded.", "multiline": true, "dynamicPrompts": true}], "clip": ["CLIP", {"tooltip": "The CLIP model used for encoding the text."}]}}, "input_order": {"required": ["system_prompt", "user_prompt", "clip"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": ["A conditioning containing the embedded text used to guide the diffusion model."], "output_matchtypes": null, "name": "CLIPTextEncodeLumina2", "display_name": "CLIP Text Encode (Lumina 2)", "description": "Encodes a system prompt and a user prompt using a CLIP model into an embedding that can be used to guide the diffusion model towards generating specific images.", "python_module": "comfy_extras.nodes_lumina2", "category": "model/conditioning/lumina", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["lumina prompt"], "essentials_category": null, "has_intermediate_output": false}, "RenormCFG": {"input": {"required": {"model": ["MODEL", {}], "cfg_trunc": ["FLOAT", {"advanced": true, "default": 100, "min": 0.0, "max": 100.0, "step": 0.01}], "renorm_cfg": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "cfg_trunc", "renorm_cfg"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "RenormCFG", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lumina2", "category": "model/patch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanTrackToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "tracks": ["STRING", {"default": "[]", "multiline": true}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "temperature": ["FLOAT", {"advanced": true, "default": 220.0, "min": 1.0, "max": 1000.0, "step": 0.1}], "topk": ["INT", {"advanced": true, "default": 2, "min": 1, "max": 10}], "start_image": ["IMAGE", {}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "tracks", "width", "height", "length", "batch_size", "temperature", "topk", "start_image"], "optional": ["clip_vision_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanTrackToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/move", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["motion tracking", "trajectory video", "point tracking", "keypoint animation"], "essentials_category": null, "has_intermediate_output": false}, "WanImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["clip_vision_output", "start_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanFunControlToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}], "control_video": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["clip_vision_output", "start_image", "control_video"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanFunControlToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/fun control", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan22FunControlToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"ref_image": ["IMAGE", {}], "control_video": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["ref_image", "control_video"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "Wan22FunControlToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/fun control", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanFunInpaintToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}], "end_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["clip_vision_output", "start_image", "end_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanFunInpaintToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/fun inpaint", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanFirstLastFrameToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"clip_vision_start_image": ["CLIP_VISION_OUTPUT", {}], "clip_vision_end_image": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}], "end_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["clip_vision_start_image", "clip_vision_end_image", "start_image", "end_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanFirstLastFrameToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanVaceToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1000.0, "step": 0.01}]}, "optional": {"control_video": ["IMAGE", {}], "control_masks": ["MASK", {}], "reference_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size", "strength"], "optional": ["control_video", "control_masks", "reference_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT", "INT"], "output_is_list": [false, false, false, false], "output_name": ["positive", "negative", "latent", "trim_latent"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "WanVaceToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/vace", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["video conditioning", "video control"], "essentials_category": null, "has_intermediate_output": false}, "TrimVideoLatent": {"input": {"required": {"samples": ["LATENT", {}], "trim_amount": ["INT", {"default": 0, "min": 0, "max": 99999}]}}, "input_order": {"required": ["samples", "trim_amount"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "TrimVideoLatent", "display_name": "Trim Video Latent", "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanCameraImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}], "camera_conditions": ["WAN_CAMERA_EMBEDDING", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["clip_vision_output", "start_image", "camera_conditions"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanCameraImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/camera", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanPhantomSubjectToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"images": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["images"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false, false], "output_name": ["positive", "negative_text", "negative_img_text", "latent"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "WanPhantomSubjectToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/phantom subject", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanSoundImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 77, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"audio_encoder_output": ["AUDIO_ENCODER_OUTPUT", {}], "ref_image": ["IMAGE", {}], "control_video": ["IMAGE", {}], "ref_motion": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["audio_encoder_output", "ref_image", "control_video", "ref_motion"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanSoundImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/sound", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanSoundImageToVideoExtend": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "length": ["INT", {"default": 77, "min": 1, "max": 16384, "step": 4}], "video_latent": ["LATENT", {}]}, "optional": {"audio_encoder_output": ["AUDIO_ENCODER_OUTPUT", {}], "ref_image": ["IMAGE", {}], "control_video": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "length", "video_latent"], "optional": ["audio_encoder_output", "ref_image", "control_video"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanSoundImageToVideoExtend", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/sound", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanHuMoImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 97, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"audio_encoder_output": ["AUDIO_ENCODER_OUTPUT", {}], "ref_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["audio_encoder_output", "ref_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanHuMoImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/humo", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanAnimateToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 77, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "continue_motion_max_frames": ["INT", {"default": 5, "min": 1, "max": 16384, "step": 4}], "video_frame_offset": ["INT", {"tooltip": "The amount of frames to seek in all the input videos. Used for generating longer videos by chunk. Connect to the video_frame_offset output of the previous node for extending a video.", "default": 0, "min": 0, "max": 16384, "step": 1}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "reference_image": ["IMAGE", {}], "face_video": ["IMAGE", {}], "pose_video": ["IMAGE", {}], "background_video": ["IMAGE", {}], "character_mask": ["MASK", {}], "continue_motion": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size", "continue_motion_max_frames", "video_frame_offset"], "optional": ["clip_vision_output", "reference_image", "face_video", "pose_video", "background_video", "character_mask", "continue_motion"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT", "INT", "INT", "INT"], "output_is_list": [false, false, false, false, false, false], "output_name": ["positive", "negative", "latent", "trim_latent", "trim_image", "video_frame_offset"], "output_tooltips": [null, null, null, null, null, null], "output_matchtypes": null, "name": "WanAnimateToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/animate", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan22ImageToVideoLatent": {"input": {"required": {"vae": ["VAE", {}], "width": ["INT", {"default": 1280, "min": 32, "max": 16384, "step": 32}], "height": ["INT", {"default": 704, "min": 32, "max": 16384, "step": 32}], "length": ["INT", {"default": 49, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"start_image": ["IMAGE", {}]}}, "input_order": {"required": ["vae", "width", "height", "length", "batch_size"], "optional": ["start_image"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan22ImageToVideoLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanInfiniteTalkToVideo": {"input": {"required": {"mode": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "single_speaker", "inputs": {"required": {}}}, {"key": "two_speakers", "inputs": {"required": {}, "optional": {"audio_encoder_output_2": ["AUDIO_ENCODER_OUTPUT", {}], "mask_1": ["MASK", {"tooltip": "Mask for the first speaker, required if using two audio inputs."}], "mask_2": ["MASK", {"tooltip": "Mask for the second speaker, required if using two audio inputs."}]}}}]}], "model": ["MODEL", {}], "model_patch": ["MODEL_PATCH", {}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "audio_encoder_output_1": ["AUDIO_ENCODER_OUTPUT", {}], "motion_frame_count": ["INT", {"tooltip": "Number of previous frames to use as motion context.", "advanced": true, "default": 9, "min": 1, "max": 33, "step": 1}], "audio_scale": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}], "previous_frames": ["IMAGE", {}]}}, "input_order": {"required": ["mode", "model", "model_patch", "positive", "negative", "vae", "width", "height", "length", "audio_encoder_output_1", "motion_frame_count", "audio_scale"], "optional": ["clip_vision_output", "start_image", "previous_frames"]}, "is_input_list": false, "output": ["MODEL", "CONDITIONING", "CONDITIONING", "LATENT", "INT"], "output_is_list": [false, false, false, false, false], "output_name": ["model", "positive", "negative", "latent", "trim_image"], "output_tooltips": [null, null, null, null, null], "output_matchtypes": null, "name": "WanInfiniteTalkToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/infinite talk", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BerniniConditioning": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 8192, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 8192, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 8192, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"source_video": ["IMAGE", {"tooltip": "Source video to edit or restyle (v2v, rv2v). Resized to width/height and trimmed to length."}], "reference_video": ["IMAGE", {"tooltip": "Video to insert into the source video (ads2v)."}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {"tooltip": "Reference image injected as an in-context token (r2v, rv2v)."}]}}, "prefix": "reference_image_", "min": 0, "max": 8}}], "ref_max_size": ["INT", {"tooltip": "Max size for the long edge of reference_video and reference_images. Resized with preserved aspect ratio and snapped to 16px.", "default": 848, "min": 16, "max": 8192, "step": 16}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["source_video", "reference_video", "reference_images", "ref_max_size"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "BerniniConditioning", "display_name": "Bernini Conditioning", "description": "Conditioning node for Bernini in-context video/image conditioning. It can be used for the following tasks: t2v (text-to-video), v2v (video-to-video), rv2v (reference-guided video editing), r2v (reference-to-video), ads2v (insert image/video into video).Reference images injected as in-context tokens (r2v, rv2v) are encoded independently at their own native aspect ratio (long edge capped at ref_max_size)", "python_module": "comfy_extras.nodes_bernini", "category": "model/conditioning/bernini", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LotusConditioning": {"input": {"required": {}}, "input_order": {"required": []}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["conditioning"], "output_tooltips": [null], "output_matchtypes": null, "name": "LotusConditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lotus", "category": "model/conditioning/lotus", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyLatentHunyuan3Dv2": {"input": {"required": {"resolution": ["INT", {"default": 3072, "min": 1, "max": 8192}], "batch_size": ["INT", {"tooltip": "The number of latent images in the batch.", "default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["resolution", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyLatentHunyuan3Dv2", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "model/latent/hunyuan 3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Hunyuan3Dv2Conditioning": {"input": {"required": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": ["clip_vision_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Hunyuan3Dv2Conditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "model/conditioning/hunyuan 3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Hunyuan3Dv2ConditioningMultiView": {"input": {"required": {}, "optional": {"front": ["CLIP_VISION_OUTPUT", {}], "left": ["CLIP_VISION_OUTPUT", {}], "back": ["CLIP_VISION_OUTPUT", {}], "right": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": [], "optional": ["front", "left", "back", "right"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Hunyuan3Dv2ConditioningMultiView", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "model/conditioning/hunyuan 3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VAEDecodeHunyuan3D": {"input": {"required": {"samples": ["LATENT", {}], "vae": ["VAE", {}], "num_chunks": ["INT", {"advanced": true, "default": 8000, "min": 1000, "max": 500000}], "octree_resolution": ["INT", {"advanced": true, "default": 256, "min": 16, "max": 512}]}}, "input_order": {"required": ["samples", "vae", "num_chunks", "octree_resolution"]}, "is_input_list": false, "output": ["VOXEL"], "output_is_list": [false], "output_name": ["VOXEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "VAEDecodeHunyuan3D", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "model/latent/hunyuan 3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VoxelToMeshBasic": {"input": {"required": {"voxel": ["VOXEL", {}], "threshold": ["FLOAT", {"default": 0.6, "min": -1.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["voxel", "threshold"]}, "is_input_list": false, "output": ["MESH"], "output_is_list": [false], "output_name": ["MESH"], "output_tooltips": [null], "output_matchtypes": null, "name": "VoxelToMeshBasic", "display_name": "Voxel to Mesh (Basic) (DEPRECATED)", "description": "Converts a voxel grid to a mesh.", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "3d", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VoxelToMesh": {"input": {"required": {"voxel": ["VOXEL", {}], "algorithm": ["COMBO", {"multiselect": false, "options": ["surface net", "basic"]}], "threshold": ["FLOAT", {"default": 0.6, "min": -1.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["voxel", "algorithm", "threshold"]}, "is_input_list": false, "output": ["MESH"], "output_is_list": [false], "output_name": ["MESH"], "output_tooltips": [null], "output_matchtypes": null, "name": "VoxelToMesh", "display_name": "Voxel to Mesh", "description": "Converts a voxel grid to a mesh.", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PrimitiveString": {"input": {"required": {"value": ["STRING", {"multiline": false}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveString", "display_name": "Text String (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_primitive", "category": "utilities/primitive", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["text", "string", "text box", "prompt"], "essentials_category": null, "has_intermediate_output": false}, "PrimitiveStringMultiline": {"input": {"required": {"value": ["STRING", {"multiline": true}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveStringMultiline", "display_name": "Input Text", "description": "", "python_module": "comfy_extras.nodes_primitive", "category": "utilities/primitive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["text", "string", "text multiline", "string multiline", "text box", "prompt"], "essentials_category": "Basics", "has_intermediate_output": false}, "PrimitiveInt": {"input": {"required": {"value": ["INT", {"min": -9223372036854775807, "max": 9223372036854775807, "control_after_generate": "fixed"}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["INT"], "output_is_list": [false], "output_name": ["INT"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveInt", "display_name": "Int", "description": "", "python_module": "comfy_extras.nodes_primitive", "category": "utilities/primitive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PrimitiveFloat": {"input": {"required": {"value": ["FLOAT", {"min": -9223372036854775807, "max": 9223372036854775807, "step": 0.1}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["FLOAT"], "output_is_list": [false], "output_name": ["FLOAT"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveFloat", "display_name": "Float", "description": "", "python_module": "comfy_extras.nodes_primitive", "category": "utilities/primitive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PrimitiveBoolean": {"input": {"required": {"value": ["BOOLEAN", {}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveBoolean", "display_name": "Boolean", "description": "", "python_module": "comfy_extras.nodes_primitive", "category": "utilities/primitive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CFGZeroStar": {"input": {"required": {"model": ["MODEL", {}]}}, "input_order": {"required": ["model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["patched_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "CFGZeroStar", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cfg", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CFGNorm": {"input": {"required": {"model": ["MODEL", {}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}]}, "optional": {"pre_cfg": ["BOOLEAN", {"tooltip": "If true, rescale the combined noise BEFORE the sampler's CFG combine, without clamping (can amplify). Matches the norm-scaled CFG used by models like Lens. Default false keeps the original post-CFG x0-space attenuate-only behavior.", "default": false}]}}, "input_order": {"required": ["model", "strength"], "optional": ["pre_cfg"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["patched_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "CFGNorm", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cfg", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OptimalStepsScheduler": {"input": {"required": {"model_type": ["COMBO", {"multiselect": false, "options": ["FLUX", "Wan", "Chroma"]}], "steps": ["INT", {"default": 20, "min": 3, "max": 1000}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model_type", "steps", "denoise"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "OptimalStepsScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_optimalsteps", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "QuadrupleCLIPLoader": {"input": {"required": {"clip_name1": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}], "clip_name2": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}], "clip_name3": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}], "clip_name4": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}]}}, "input_order": {"required": ["clip_name1", "clip_name2", "clip_name3", "clip_name4"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "QuadrupleCLIPLoader", "display_name": "Load CLIP (Quadruple)", "description": "Recipes:\nhidream: long clip-l, long clip-g, t5xxl, llama_8b_3.1_instruct", "python_module": "comfy_extras.nodes_hidream", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeHiDream": {"input": {"required": {"clip": ["CLIP", {}], "clip_l": ["STRING", {"multiline": true, "dynamicPrompts": true}], "clip_g": ["STRING", {"multiline": true, "dynamicPrompts": true}], "t5xxl": ["STRING", {"multiline": true, "dynamicPrompts": true}], "llama": ["STRING", {"multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["clip", "clip_l", "clip_g", "t5xxl", "llama"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeHiDream", "display_name": "CLIP Text Encode (HiDream)", "description": "", "python_module": "comfy_extras.nodes_hidream", "category": "model/conditioning/hidream", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["hidream prompt"], "essentials_category": null, "has_intermediate_output": false}, "FreSca": {"input": {"required": {"model": ["MODEL", {}], "scale_low": ["FLOAT", {"tooltip": "Scaling factor for low-frequency components", "advanced": true, "default": 1.0, "min": 0, "max": 10, "step": 0.01}], "scale_high": ["FLOAT", {"tooltip": "Scaling factor for high-frequency components", "advanced": true, "default": 1.25, "min": 0, "max": 10, "step": 0.01}], "freq_cutoff": ["INT", {"tooltip": "Number of frequency indices around center to consider as low-frequency", "advanced": true, "default": 20, "min": 1, "max": 10000, "step": 1}]}}, "input_order": {"required": ["model", "scale_low", "scale_high", "freq_cutoff"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "FreSca", "display_name": "FreSca", "description": "Applies frequency-dependent scaling to the guidance", "python_module": "comfy_extras.nodes_fresca", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["frequency guidance"], "essentials_category": null, "has_intermediate_output": false}, "APG": {"input": {"required": {"model": ["MODEL", {}], "eta": ["FLOAT", {"tooltip": "Controls the scale of the parallel guidance vector. Default CFG behavior at a setting of 1.", "advanced": true, "default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}], "norm_threshold": ["FLOAT", {"tooltip": "Normalize guidance vector to this value, normalization disable at a setting of 0.", "advanced": true, "default": 5.0, "min": 0.0, "max": 50.0, "step": 0.1}], "momentum": ["FLOAT", {"tooltip": "Controls a running average of guidance during diffusion, disabled at a setting of 0.", "advanced": true, "default": 0.0, "min": -5.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "eta", "norm_threshold", "momentum"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "APG", "display_name": "Adaptive Projected Guidance", "description": "", "python_module": "comfy_extras.nodes_apg", "category": "model/sampling/custom", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PreviewAny": {"input": {"required": {"source": ["*", {}]}}, "input_order": {"required": ["source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "name": "PreviewAny", "display_name": "Preview as Text", "description": "", "python_module": "comfy_extras.nodes_preview_any", "category": "utilities", "output_node": true, "has_intermediate_output": false, "search_aliases": ["show output", "inspect", "debug", "print value", "show text"]}, "TextEncodeAceStepAudio": {"input": {"required": {"clip": ["CLIP", {}], "tags": ["STRING", {"multiline": true, "dynamicPrompts": true}], "lyrics": ["STRING", {"multiline": true, "dynamicPrompts": true}], "lyrics_strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["clip", "tags", "lyrics", "lyrics_strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeAceStepAudio", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_ace", "category": "model/conditioning/ace", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyAceStepLatentAudio": {"input": {"required": {"seconds": ["FLOAT", {"default": 120.0, "min": 1.0, "max": 1000.0, "step": 0.1}], "batch_size": ["INT", {"tooltip": "The number of latent images in the batch.", "default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["seconds", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyAceStepLatentAudio", "display_name": "Empty Ace Step 1.0 Latent Audio", "description": "", "python_module": "comfy_extras.nodes_ace", "category": "model/latent/ace", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TextEncodeAceStepAudio1.5": {"input": {"required": {"clip": ["CLIP", {}], "tags": ["STRING", {"multiline": true, "dynamicPrompts": true}], "lyrics": ["STRING", {"multiline": true, "dynamicPrompts": true}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "bpm": ["INT", {"default": 120, "min": 10, "max": 300}], "duration": ["FLOAT", {"default": 120.0, "min": 0.0, "max": 2000.0, "step": 0.1}], "timesignature": ["COMBO", {"multiselect": false, "options": ["2", "3", "4", "6"]}], "language": ["COMBO", {"default": "en", "multiselect": false, "options": ["ar", "az", "bg", "bn", "ca", "cs", "da", "de", "el", "en", "es", "fa", "fi", "fr", "he", "hi", "hr", "ht", "hu", "id", "is", "it", "ja", "ko", "la", "lt", "ms", "ne", "nl", "no", "pa", "pl", "pt", "ro", "ru", "sa", "sk", "sr", "sv", "sw", "ta", "te", "th", "tl", "tr", "uk", "ur", "vi", "yue", "zh", "unknown"]}], "keyscale": ["COMBO", {"multiselect": false, "options": ["C major", "C# major", "Db major", "D major", "D# major", "Eb major", "E major", "F major", "F# major", "Gb major", "G major", "G# major", "Ab major", "A major", "A# major", "Bb major", "B major", "C minor", "C# minor", "Db minor", "D minor", "D# minor", "Eb minor", "E minor", "F minor", "F# minor", "Gb minor", "G minor", "G# minor", "Ab minor", "A minor", "A# minor", "Bb minor", "B minor"]}], "generate_audio_codes": ["BOOLEAN", {"tooltip": "Enable the LLM that generates audio codes. This can be slow but will increase the quality of the generated audio. Turn this off if you are giving the model an audio reference.", "advanced": true, "default": true}], "cfg_scale": ["FLOAT", {"advanced": true, "default": 2.0, "min": 0.0, "max": 100.0, "step": 0.1}], "temperature": ["FLOAT", {"advanced": true, "default": 0.85, "min": 0.0, "max": 2.0, "step": 0.01}], "top_p": ["FLOAT", {"advanced": true, "default": 0.9, "min": 0.0, "max": 2000.0, "step": 0.01}], "top_k": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 100}], "min_p": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["clip", "tags", "lyrics", "seed", "bpm", "duration", "timesignature", "language", "keyscale", "generate_audio_codes", "cfg_scale", "temperature", "top_p", "top_k", "min_p"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeAceStepAudio1.5", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_ace", "category": "model/conditioning/ace", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyAceStep1.5LatentAudio": {"input": {"required": {"seconds": ["FLOAT", {"default": 120.0, "min": 1.0, "max": 1000.0, "step": 0.01}], "batch_size": ["INT", {"tooltip": "The number of latent images in the batch.", "default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["seconds", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyAceStep1.5LatentAudio", "display_name": "Empty Ace Step 1.5 Latent Audio", "description": "", "python_module": "comfy_extras.nodes_ace", "category": "model/latent/ace", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReferenceTimbreAudio": {"input": {"required": {"conditioning": ["CONDITIONING", {}]}, "optional": {"latent": ["LATENT", {}]}}, "input_order": {"required": ["conditioning"], "optional": ["latent"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReferenceTimbreAudio", "display_name": "Set Reference Audio", "description": "This node sets the reference audio for ace step 1.5", "python_module": "comfy_extras.nodes_ace", "category": "model/conditioning", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StringFormat": {"input": {"required": {"values": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"value": ["*", {}]}}, "names": ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"], "min": 0}}], "f_string": ["STRING", {"default": "{a}", "multiline": true}]}}, "input_order": {"required": ["values", "f_string"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringFormat", "display_name": "Format Text", "description": "Same as Python's string format method. Supports all of Python's format options and features.", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["string", "format"], "essentials_category": null, "has_intermediate_output": false}, "StringConcatenate": {"input": {"required": {"string_a": ["STRING", {"multiline": true}], "string_b": ["STRING", {"multiline": true}], "delimiter": ["STRING", {"default": "", "multiline": false}]}}, "input_order": {"required": ["string_a", "string_b", "delimiter"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringConcatenate", "display_name": "Concatenate Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["concatenate", "text concat", "join text", "merge text", "combine strings", "string concat", "append text", "combine text"], "essentials_category": null, "has_intermediate_output": false}, "StringSubstring": {"input": {"required": {"string": ["STRING", {"multiline": true}], "start": ["INT", {}], "end": ["INT", {}]}}, "input_order": {"required": ["string", "start", "end"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringSubstring", "display_name": "Substring", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["substring", "extract text", "text portion"], "essentials_category": null, "has_intermediate_output": false}, "StringLength": {"input": {"required": {"string": ["STRING", {"multiline": true}]}}, "input_order": {"required": ["string"]}, "is_input_list": false, "output": ["INT"], "output_is_list": [false], "output_name": ["length"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringLength", "display_name": "Text Length", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["character count", "text size", "string length"], "essentials_category": null, "has_intermediate_output": false}, "CaseConverter": {"input": {"required": {"string": ["STRING", {"multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["UPPERCASE", "lowercase", "Capitalize", "Title Case"]}]}}, "input_order": {"required": ["string", "mode"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CaseConverter", "display_name": "Convert Text Case", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["case converter", "text case", "uppercase", "lowercase", "capitalize"], "essentials_category": null, "has_intermediate_output": false}, "StringTrim": {"input": {"required": {"string": ["STRING", {"multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["Both", "Left", "Right"]}]}}, "input_order": {"required": ["string", "mode"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringTrim", "display_name": "Trim Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["trim", "clean whitespace", "remove whitespace", "remove spaces", "strip"], "essentials_category": null, "has_intermediate_output": false}, "StringReplace": {"input": {"required": {"string": ["STRING", {"multiline": true}], "find": ["STRING", {"multiline": true}], "replace": ["STRING", {"multiline": true}]}}, "input_order": {"required": ["string", "find", "replace"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringReplace", "display_name": "Replace Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["replace", "find and replace", "substitute", "swap text"], "essentials_category": null, "has_intermediate_output": false}, "StringContains": {"input": {"required": {"string": ["STRING", {"multiline": true}], "substring": ["STRING", {"multiline": true}], "case_sensitive": ["BOOLEAN", {"advanced": true, "default": true}]}}, "input_order": {"required": ["string", "substring", "case_sensitive"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["contains"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringContains", "display_name": "Contains Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["contains", "text includes", "string includes"], "essentials_category": null, "has_intermediate_output": false}, "StringCompare": {"input": {"required": {"string_a": ["STRING", {"multiline": true}], "string_b": ["STRING", {"multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["Starts With", "Ends With", "Equal"]}], "case_sensitive": ["BOOLEAN", {"advanced": true, "default": true}]}}, "input_order": {"required": ["string_a", "string_b", "mode", "case_sensitive"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringCompare", "display_name": "Compare Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["compare", "text match", "string equals", "starts with", "ends with"], "essentials_category": null, "has_intermediate_output": false}, "RegexMatch": {"input": {"required": {"string": ["STRING", {"multiline": true}], "regex_pattern": ["STRING", {"multiline": true}], "case_insensitive": ["BOOLEAN", {"advanced": true, "default": true}], "multiline": ["BOOLEAN", {"advanced": true, "default": false}], "dotall": ["BOOLEAN", {"advanced": true, "default": false}]}}, "input_order": {"required": ["string", "regex_pattern", "case_insensitive", "multiline", "dotall"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["matches"], "output_tooltips": [null], "output_matchtypes": null, "name": "RegexMatch", "display_name": "Match Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["regex match", "regex", "pattern match", "text contains", "string match"], "essentials_category": null, "has_intermediate_output": false}, "RegexExtract": {"input": {"required": {"string": ["STRING", {"multiline": true}], "regex_pattern": ["STRING", {"multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["First Match", "All Matches", "First Group", "All Groups"]}], "case_insensitive": ["BOOLEAN", {"advanced": true, "default": true}], "multiline": ["BOOLEAN", {"advanced": true, "default": false}], "dotall": ["BOOLEAN", {"advanced": true, "default": false}], "group_index": ["INT", {"advanced": true, "default": 1, "min": 0, "max": 100}]}}, "input_order": {"required": ["string", "regex_pattern", "mode", "case_insensitive", "multiline", "dotall", "group_index"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "RegexExtract", "display_name": "Extract Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["regex extract", "regex", "pattern extract", "text parser", "parse text"], "essentials_category": null, "has_intermediate_output": false}, "RegexReplace": {"input": {"required": {"string": ["STRING", {"multiline": true}], "regex_pattern": ["STRING", {"multiline": true}], "replace": ["STRING", {"multiline": true}]}, "optional": {"case_insensitive": ["BOOLEAN", {"advanced": true, "default": true}], "multiline": ["BOOLEAN", {"advanced": true, "default": false}], "dotall": ["BOOLEAN", {"tooltip": "When enabled, the dot (.) character will match any character including newline characters. When disabled, dots won't match newlines.", "advanced": true, "default": false}], "count": ["INT", {"tooltip": "Maximum number of replacements to make. Set to 0 to replace all occurrences (default). Set to 1 to replace only the first match, 2 for the first two matches, etc.", "advanced": true, "default": 0, "min": 0, "max": 100}]}}, "input_order": {"required": ["string", "regex_pattern", "replace"], "optional": ["case_insensitive", "multiline", "dotall", "count"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "RegexReplace", "display_name": "Replace Text (Regex)", "description": "Find and replace text using regex patterns.", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["regex replace", "regex", "pattern replace", "substitution"], "essentials_category": null, "has_intermediate_output": false}, "JsonExtractString": {"input": {"required": {"json_string": ["STRING", {"multiline": true}], "key": ["STRING", {"multiline": false}]}}, "input_order": {"required": ["json_string", "key"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "JsonExtractString", "display_name": "Extract Text from JSON", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["json", "extract json", "parse json", "json value", "read json"], "essentials_category": null, "has_intermediate_output": false}, "WanCameraEmbedding": {"input": {"required": {"camera_pose": ["COMBO", {"default": "Static", "multiselect": false, "options": ["Static", "Pan Up", "Pan Down", "Pan Left", "Pan Right", "Zoom In", "Zoom Out", "Anti Clockwise (ACW)", "ClockWise (CW)"]}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}]}, "optional": {"speed": ["FLOAT", {"default": 1.0, "min": 0, "max": 10.0, "step": 0.1}], "fx": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0, "max": 1, "step": 1e-09}], "fy": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0, "max": 1, "step": 1e-09}], "cx": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0, "max": 1, "step": 0.01}], "cy": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0, "max": 1, "step": 0.01}]}}, "input_order": {"required": ["camera_pose", "width", "height", "length"], "optional": ["speed", "fx", "fy", "cx", "cy"]}, "is_input_list": false, "output": ["WAN_CAMERA_EMBEDDING", "INT", "INT", "INT"], "output_is_list": [false, false, false, false], "output_name": ["camera_embedding", "width", "height", "length"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "WanCameraEmbedding", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_camera_trajectory", "category": "model/conditioning/wan/camera", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReferenceLatent": {"input": {"required": {"conditioning": ["CONDITIONING", {}]}, "optional": {"latent": ["LATENT", {}]}}, "input_order": {"required": ["conditioning"], "optional": ["latent"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReferenceLatent", "display_name": "Set Reference Latent", "description": "This node sets the guiding latent for an edit model. If the model supports it you can chain multiple to set multiple reference images.", "python_module": "comfy_extras.nodes_edit_model", "category": "model/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TCFG": {"input": {"required": {"model": ["MODEL", {}]}}, "input_order": {"required": ["model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["patched_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "TCFG", "display_name": "Tangential Damping CFG", "description": "TCFG \u2013 Tangential Damping CFG (2503.18137)\n\nRefine the uncond (negative) to align with the cond (positive) for improving quality.", "python_module": "comfy_extras.nodes_tcfg", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ContextWindowsManual": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to apply context windows to during sampling."}], "context_length": ["INT", {"tooltip": "The length of the context window.", "default": 16, "min": 1}], "context_overlap": ["INT", {"tooltip": "The overlap of the context window.", "default": 4, "min": 0}], "context_schedule": ["COMBO", {"tooltip": "Step-dependent scheduling algorithm for context windows.", "default": "standard_static", "multiselect": false, "options": ["standard_static", "standard_uniform", "looped_uniform", "batched"]}], "context_stride": ["INT", {"tooltip": "The stride of the context window; only applicable to uniform schedules.", "default": 1, "min": 1}], "closed_loop": ["BOOLEAN", {"tooltip": "Whether to close the context window loop; only applicable to looped schedules.", "default": false}], "fuse_method": ["COMBO", {"tooltip": "The method to use to fuse the context windows.", "default": "pyramid", "multiselect": false, "options": ["pyramid", "relative", "flat", "overlap-linear"]}], "dim": ["INT", {"tooltip": "The dimension to apply the context windows to.", "default": 0, "min": 0, "max": 5}], "freenoise": ["BOOLEAN", {"tooltip": "Whether to apply FreeNoise noise shuffling, improves window blending.", "default": false}], "cond_retain_index_list": ["STRING", {"tooltip": "List of latent indices to retain in the conditioning tensors for each window. For concat-style I2V models (e.g. Wan I2V, HunyuanVideo I2V, Cosmos I2V, SVD) the encoded start image lives in the c_concat conditioning channels; setting this to '0' will retain that start image content at sub-pos 0 of every window.", "default": "", "multiline": false}], "split_conds_to_windows": ["BOOLEAN", {"tooltip": "Whether to split multiple conditionings (created by ConditionCombine) to each window based on region index.", "default": false}], "latent_retain_index_list": ["STRING", {"tooltip": "List of latent indices to retain in the noise latent itself for each window. Use for workflows where reference content (e.g. a start image) lives directly in the noise latent rather than in separate conditioning channels (e.g. inplace-style I2V like LTXV, AnimateDiff). Independent of cond_retain_index_list.", "default": "", "multiline": false}], "causal_window_fix": ["BOOLEAN", {"tooltip": "Whether to add a causal fix frame to non-0-indexed context windows.", "default": true}]}}, "input_order": {"required": ["model", "context_length", "context_overlap", "context_schedule", "context_stride", "closed_loop", "fuse_method", "dim", "freenoise", "cond_retain_index_list", "split_conds_to_windows", "latent_retain_index_list", "causal_window_fix"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The model with context windows applied during sampling."], "output_matchtypes": null, "name": "ContextWindowsManual", "display_name": "Context Windows (Manual)", "description": "Manually set context windows.", "python_module": "comfy_extras.nodes_context_windows", "category": "model/patch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanContextWindowsManual": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to apply context windows to during sampling."}], "context_length": ["INT", {"tooltip": "The length of the context window in real frames. Must be 4*n + 1.", "default": 81, "min": 1, "max": 16384, "step": 4}], "context_overlap": ["INT", {"tooltip": "The overlap of the context window in real frames.", "default": 30, "min": 0}], "context_schedule": ["COMBO", {"tooltip": "Step-dependent scheduling algorithm for context windows.", "default": "standard_uniform", "multiselect": false, "options": ["standard_static", "standard_uniform", "looped_uniform", "batched"]}], "context_stride": ["INT", {"tooltip": "The stride of the context window; only applicable to uniform schedules.", "advanced": true, "default": 1, "min": 1}], "closed_loop": ["BOOLEAN", {"tooltip": "Whether to close the context window loop; only applicable to looped schedules.", "advanced": true, "default": false}], "fuse_method": ["COMBO", {"tooltip": "The method to use to fuse the context windows.", "default": "pyramid", "multiselect": false, "options": ["pyramid", "relative", "flat", "overlap-linear"]}], "freenoise": ["BOOLEAN", {"tooltip": "Whether to apply FreeNoise noise shuffling, improves window blending.", "advanced": true, "default": true}], "retain_first_frame": ["BOOLEAN", {"tooltip": "Retain the first I2V frame in every context window (may help retain initial reference).", "default": false}], "split_conds_to_windows": ["BOOLEAN", {"tooltip": "Whether to split multiple conditionings (created by ConditionCombine) to each window based on region index.", "advanced": true, "default": false}]}}, "input_order": {"required": ["model", "context_length", "context_overlap", "context_schedule", "context_stride", "closed_loop", "fuse_method", "freenoise", "retain_first_frame", "split_conds_to_windows"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The model with context windows applied during sampling."], "output_matchtypes": null, "name": "WanContextWindowsManual", "display_name": "Wan Context Windows", "description": "Set context windows for Wan-like models.", "python_module": "comfy_extras.nodes_context_windows", "category": "model/patch/wan", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVContextWindows": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to apply context windows to during sampling."}], "context_length": ["INT", {"tooltip": "The length of the context window in real frames. Must be 8*n + 1.", "default": 145, "min": 1, "max": 16384, "step": 8}], "context_overlap": ["INT", {"tooltip": "The overlap of the context window in real frames.", "default": 40, "min": 0, "step": 8}], "context_schedule": ["COMBO", {"tooltip": "Step-dependent scheduling algorithm for context windows.", "default": "standard_uniform", "multiselect": false, "options": ["standard_static", "standard_uniform", "looped_uniform", "batched"]}], "context_stride": ["INT", {"tooltip": "The stride of the context window; only applicable to uniform schedules.", "advanced": true, "default": 1, "min": 1}], "closed_loop": ["BOOLEAN", {"tooltip": "Whether to close the context window loop; only applicable to looped schedules.", "advanced": true, "default": false}], "fuse_method": ["COMBO", {"tooltip": "The method to use to fuse the context windows.", "default": "pyramid", "multiselect": false, "options": ["pyramid", "relative", "flat", "overlap-linear"]}], "freenoise": ["BOOLEAN", {"tooltip": "Whether to apply FreeNoise noise shuffling, improves window blending.", "advanced": true, "default": true}], "retain_first_frame": ["BOOLEAN", {"tooltip": "Retain the first latent frame in every context window (may help retain initial reference).", "default": false}], "split_conds_to_windows": ["BOOLEAN", {"tooltip": "Whether to split multiple conditionings (created by ConditionCombine) to each window based on region index.", "advanced": true, "default": false}]}}, "input_order": {"required": ["model", "context_length", "context_overlap", "context_schedule", "context_stride", "closed_loop", "fuse_method", "freenoise", "retain_first_frame", "split_conds_to_windows"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The model with context windows applied during sampling."], "output_matchtypes": null, "name": "LTXVContextWindows", "display_name": "LTXV Context Windows", "description": "Set context windows for LTXV-like models.", "python_module": "comfy_extras.nodes_context_windows", "category": "model/patch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TextEncodeQwenImageEdit": {"input": {"required": {"clip": ["CLIP", {}], "prompt": ["STRING", {"multiline": true, "dynamicPrompts": true}]}, "optional": {"vae": ["VAE", {}], "image": ["IMAGE", {}]}}, "input_order": {"required": ["clip", "prompt"], "optional": ["vae", "image"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeQwenImageEdit", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_qwen", "category": "model/conditioning/qwen image", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TextEncodeQwenImageEditPlus": {"input": {"required": {"clip": ["CLIP", {}], "prompt": ["STRING", {"multiline": true, "dynamicPrompts": true}]}, "optional": {"vae": ["VAE", {}], "image1": ["IMAGE", {}], "image2": ["IMAGE", {}], "image3": ["IMAGE", {}]}}, "input_order": {"required": ["clip", "prompt"], "optional": ["vae", "image1", "image2", "image3"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeQwenImageEditPlus", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_qwen", "category": "model/conditioning/qwen image", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyQwenImageLayeredLatentImage": {"input": {"required": {"width": ["INT", {"default": 640, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 640, "min": 16, "max": 16384, "step": 16}], "layers": ["INT", {"default": 3, "min": 0, "max": 16384, "step": 1}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "layers", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyQwenImageLayeredLatentImage", "display_name": "Empty Qwen Image Layered Latent", "description": "", "python_module": "comfy_extras.nodes_qwen", "category": "model/latent/qwen", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TextEncodeBooguEdit": {"input": {"required": {"clip": ["CLIP", {}], "prompt": ["STRING", {"multiline": true, "dynamicPrompts": true}], "negative_prompt": ["STRING", {"advanced": true, "multiline": true, "dynamicPrompts": true}], "vae": ["VAE", {}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Reference image(s) to edit. Boogu focuses on one reference per sample; more are allowed.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16"], "min": 0}}]}}, "input_order": {"required": ["clip", "prompt", "negative_prompt", "vae", "images"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "TextEncodeBooguEdit", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_boogu", "category": "model/conditioning/boogu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyChromaRadianceLatentImage": {"input": {"required": {"width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyChromaRadianceLatentImage", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_chroma_radiance", "category": "model/latent/chroma radiance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ChromaRadianceOptions": {"input": {"required": {"model": ["MODEL", {}], "preserve_wrapper": ["BOOLEAN", {"tooltip": "When enabled, will delegate to an existing model function wrapper if it exists. Generally should be left enabled.", "default": true}], "start_sigma": ["FLOAT", {"tooltip": "First sigma that these options will be in effect.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0}], "end_sigma": ["FLOAT", {"tooltip": "Last sigma that these options will be in effect.", "advanced": true, "default": 0.0, "min": 0.0, "max": 1.0}], "nerf_tile_size": ["INT", {"tooltip": "Allows overriding the default NeRF tile size. -1 means use the default (32). 0 means use non-tiling mode (may require a lot of VRAM).", "advanced": true, "default": -1, "min": -1}], "force_sequential_txt_ids": ["BOOLEAN", {"tooltip": "Force usage of sequential text token IDs instead of zeroes. Should be used for checkpoints from 2026-05-22 to 2026-06-01 that are trained in this way but do not contain the __sequential__ key in the state dict.", "advanced": true, "default": false}]}}, "input_order": {"required": ["model", "preserve_wrapper", "start_sigma", "end_sigma", "nerf_tile_size", "force_sequential_txt_ids"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "ChromaRadianceOptions", "display_name": null, "description": "Allows setting advanced options for the Chroma Radiance model.", "python_module": "comfy_extras.nodes_chroma_radiance", "category": "model/patch/chroma radiance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PiDConditioning": {"input": {"required": {"positive": ["CONDITIONING", {}], "latent": ["LATENT", {"tooltip": "latent (from VAEEncode or a KSampler)."}], "latent_format": ["COMBO", {"tooltip": "Flux1 (16-ch) and Flux2 (128-ch) latents are auto-detected from channel dim under 'flux'. For SD3 (16-ch), SDXL (4-ch), or QwenImage (16-ch), select manually.", "default": "flux", "multiselect": false, "options": ["flux", "sd3", "sdxl", "qwenimage"]}], "degrade_sigma": ["FLOAT", {"tooltip": "0 = clean latent. Increase to denoise corrupted latent outputs.", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["positive", "latent", "latent_format", "degrade_sigma"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "PiDConditioning", "display_name": "PiD Conditioning", "description": "Attaches a latent and a degrade_sigma scalar to a CONDITIONING for PiD decoding/upscaling", "python_module": "comfy_extras.nodes_pid", "category": "model/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ModelPatchLoader": {"input": {"required": {"name": [[]]}}, "input_order": {"required": ["name"]}, "is_input_list": false, "output": ["MODEL_PATCH"], "output_is_list": [false], "output_name": ["MODEL_PATCH"], "name": "ModelPatchLoader", "display_name": "Load Model Patch", "description": "", "python_module": "comfy_extras.nodes_model_patch", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "QwenImageDiffsynthControlnet": {"input": {"required": {"model": ["MODEL"], "model_patch": ["MODEL_PATCH"], "vae": ["VAE"], "image": ["IMAGE"], "strength": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}, "optional": {"mask": ["MASK"]}}, "input_order": {"required": ["model", "model_patch", "vae", "image", "strength"], "optional": ["mask"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "QwenImageDiffsynthControlnet", "display_name": "Apply Qwen Image DiffSynth ControlNet", "description": "", "python_module": "comfy_extras.nodes_model_patch", "category": "model/patch/qwen", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "ZImageFunControlnet": {"input": {"required": {"model": ["MODEL"], "model_patch": ["MODEL_PATCH"], "vae": ["VAE"], "strength": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}, "optional": {"image": ["IMAGE"], "inpaint_image": ["IMAGE"], "mask": ["MASK"]}}, "input_order": {"required": ["model", "model_patch", "vae", "strength"], "optional": ["image", "inpaint_image", "mask"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ZImageFunControlnet", "display_name": "Apply Z-Image Fun ControlNet", "description": "", "python_module": "comfy_extras.nodes_model_patch", "category": "model/patch/z-image", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "USOStyleReference": {"input": {"required": {"model": ["MODEL"], "model_patch": ["MODEL_PATCH"], "clip_vision_output": ["CLIP_VISION_OUTPUT"]}}, "input_order": {"required": ["model", "model_patch", "clip_vision_output"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "USOStyleReference", "display_name": "Apply USO Style Reference", "description": "", "python_module": "comfy_extras.nodes_model_patch", "category": "model/patch/flux", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "SUPIRApply": {"input": {"required": {"model": ["MODEL", {}], "model_patch": ["MODEL_PATCH", {}], "vae": ["VAE", {}], "image": ["IMAGE", {}], "strength_start": ["FLOAT", {"tooltip": "Control strength at the start of sampling (high sigma).", "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "strength_end": ["FLOAT", {"tooltip": "Control strength at the end of sampling (low sigma). Linearly interpolated from start.", "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "restore_cfg": ["FLOAT", {"tooltip": "Pulls denoised output toward the input latent. Higher = stronger fidelity to input. 0 to disable.", "advanced": true, "default": 4.0, "min": 0.0, "max": 20.0, "step": 0.1}], "restore_cfg_s_tmin": ["FLOAT", {"tooltip": "Sigma threshold below which restore_cfg is disabled.", "advanced": true, "default": 0.05, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "model_patch", "vae", "image", "strength_start", "strength_end", "restore_cfg", "restore_cfg_s_tmin"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SUPIRApply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_model_patch", "category": "model/patch/supir", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EasyCache": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to add EasyCache to."}], "reuse_threshold": ["FLOAT", {"tooltip": "The threshold for reusing cached steps.", "advanced": true, "default": 0.2, "min": 0.0, "max": 3.0, "step": 0.01}], "start_percent": ["FLOAT", {"tooltip": "The relative sampling step to begin use of EasyCache.", "advanced": true, "default": 0.15, "min": 0.0, "max": 1.0, "step": 0.01}], "end_percent": ["FLOAT", {"tooltip": "The relative sampling step to end use of EasyCache.", "advanced": true, "default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}], "verbose": ["BOOLEAN", {"tooltip": "Whether to log verbose information.", "advanced": true, "default": false}]}}, "input_order": {"required": ["model", "reuse_threshold", "start_percent", "end_percent", "verbose"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The model with EasyCache."], "output_matchtypes": null, "name": "EasyCache", "display_name": "EasyCache", "description": "Native EasyCache implementation.", "python_module": "comfy_extras.nodes_easycache", "category": "advanced/debug", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LazyCache": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to add LazyCache to."}], "reuse_threshold": ["FLOAT", {"tooltip": "The threshold for reusing cached steps.", "advanced": true, "default": 0.2, "min": 0.0, "max": 3.0, "step": 0.01}], "start_percent": ["FLOAT", {"tooltip": "The relative sampling step to begin use of LazyCache.", "advanced": true, "default": 0.15, "min": 0.0, "max": 1.0, "step": 0.01}], "end_percent": ["FLOAT", {"tooltip": "The relative sampling step to end use of LazyCache.", "advanced": true, "default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}], "verbose": ["BOOLEAN", {"tooltip": "Whether to log verbose information.", "advanced": true, "default": false}]}}, "input_order": {"required": ["model", "reuse_threshold", "start_percent", "end_percent", "verbose"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The model with LazyCache."], "output_matchtypes": null, "name": "LazyCache", "display_name": "LazyCache", "description": "A homebrew version of EasyCache - even 'easier' version of EasyCache to implement. Overall works worse than EasyCache, but better in some rare cases AND universal compatibility with everything in ComfyUI.", "python_module": "comfy_extras.nodes_easycache", "category": "advanced/debug", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AudioEncoderLoader": {"input": {"required": {"audio_encoder_name": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["audio_encoder_name"]}, "is_input_list": false, "output": ["AUDIO_ENCODER"], "output_is_list": [false], "output_name": ["AUDIO_ENCODER"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioEncoderLoader", "display_name": "Load Audio Encoder", "description": "", "python_module": "comfy_extras.nodes_audio_encoder", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AudioEncoderEncode": {"input": {"required": {"audio_encoder": ["AUDIO_ENCODER", {}], "audio": ["AUDIO", {}]}}, "input_order": {"required": ["audio_encoder", "audio"]}, "is_input_list": false, "output": ["AUDIO_ENCODER_OUTPUT"], "output_is_list": [false], "output_name": ["AUDIO_ENCODER_OUTPUT"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioEncoderEncode", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_audio_encoder", "category": "model/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ScaleROPE": {"input": {"required": {"model": ["MODEL", {}], "scale_x": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.1}], "shift_x": ["FLOAT", {"advanced": true, "default": 0.0, "min": -256.0, "max": 256.0, "step": 0.1}], "scale_y": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.1}], "shift_y": ["FLOAT", {"advanced": true, "default": 0.0, "min": -256.0, "max": 256.0, "step": 0.1}], "scale_t": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.1}], "shift_t": ["FLOAT", {"advanced": true, "default": 0.0, "min": -256.0, "max": 256.0, "step": 0.1}]}}, "input_order": {"required": ["model", "scale_x", "shift_x", "scale_y", "shift_y", "scale_t", "shift_t"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "ScaleROPE", "display_name": null, "description": "Scale and shift the ROPE of the model.", "python_module": "comfy_extras.nodes_rope", "category": "model/patch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ComfySwitchNode": {"input": {"required": {"switch": ["BOOLEAN", {}], "on_false": ["COMFY_MATCHTYPE_V3", {"lazy": true, "template": {"template_id": "switch", "allowed_types": "*"}}], "on_true": ["COMFY_MATCHTYPE_V3", {"lazy": true, "template": {"template_id": "switch", "allowed_types": "*"}}]}}, "input_order": {"required": ["switch", "on_false", "on_true"]}, "is_input_list": false, "output": ["COMFY_MATCHTYPE_V3"], "output_is_list": [false], "output_name": ["output"], "output_tooltips": [null], "output_matchtypes": ["switch"], "name": "ComfySwitchNode", "display_name": "If/Else Switch", "description": "", "python_module": "comfy_extras.nodes_logic", "category": "utilities/logic", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["if", "then", "switch", "conditional", "branch"], "essentials_category": null, "has_intermediate_output": false}, "CustomCombo": {"input": {"required": {"choice": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["choice"]}, "is_input_list": false, "output": ["STRING", "INT"], "output_is_list": [false, false], "output_name": ["STRING", "INDEX"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "CustomCombo", "display_name": "Custom Combo", "description": "", "python_module": "comfy_extras.nodes_logic", "category": "utilities", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ComfyNotNode": {"input": {"required": {"value": ["*", {}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "output_tooltips": [null], "output_matchtypes": null, "name": "ComfyNotNode", "display_name": "Not", "description": "Logical NOT operation. Returns true if the value is falsy. Uses Python's rules for truthiness.", "python_module": "comfy_extras.nodes_logic", "category": "utilities/logic", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["invert", "toggle", "negate", "flip boolean"], "essentials_category": null, "has_intermediate_output": false}, "ComfyAndNode": {"input": {"required": {"values": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"value": ["*", {}]}}, "prefix": "value", "min": 1, "max": 10}}]}}, "input_order": {"required": ["values"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "output_tooltips": [null], "output_matchtypes": null, "name": "ComfyAndNode", "display_name": "And", "description": "Logical AND operation. Returns true if all of the values are truthy. Uses Python's rules for truthiness.", "python_module": "comfy_extras.nodes_logic", "category": "utilities/logic", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["all", "every"], "essentials_category": null, "has_intermediate_output": false}, "ComfyOrNode": {"input": {"required": {"values": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"value": ["*", {}]}}, "prefix": "value", "min": 1, "max": 10}}]}}, "input_order": {"required": ["values"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "output_tooltips": [null], "output_matchtypes": null, "name": "ComfyOrNode", "display_name": "Or", "description": "Logical OR operation. Returns true if any of the values are truthy. Uses Python's rules for truthiness.", "python_module": "comfy_extras.nodes_logic", "category": "utilities/logic", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["any", "some"], "essentials_category": null, "has_intermediate_output": false}, "ResolutionSelector": {"input": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio for the output dimensions.", "default": "1:1 (Square)", "multiselect": false, "options": ["1:1 (Square)", "2:3 (Portrait Photo)", "3:2 (Photo)", "3:4 (Portrait Standard)", "4:3 (Standard)", "9:16 (Portrait Widescreen)", "16:9 (Widescreen)", "21:9 (Ultrawide)"]}], "megapixels": ["FLOAT", {"tooltip": "Target total megapixels. 1.0 MP \u2248 1024x1024 for square.", "default": 1.0, "min": 0.1, "max": 16.0, "step": 0.1}], "multiple": ["INT", {"tooltip": "Nearest multiple of the result to set the selected resolution to.", "advanced": true, "default": 8, "min": 8, "max": 128, "step": 4}]}}, "input_order": {"required": ["aspect_ratio", "megapixels", "multiple"]}, "is_input_list": false, "output": ["INT", "INT"], "output_is_list": [false, false], "output_name": ["width", "height"], "output_tooltips": ["Calculated width in pixels multiplied by the selected multiple.", "Calculated height in pixels multiplied by the selected multiple."], "output_matchtypes": null, "name": "ResolutionSelector", "display_name": "Resolution Selector", "description": "Calculate width and height from aspect ratio and megapixel target. Useful for setting up Empty Latent Image dimensions.", "python_module": "comfy_extras.nodes_resolution", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "wanBlockSwap": {"input": {"required": {"model": ["MODEL", {}]}}, "input_order": {"required": ["model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "wanBlockSwap", "display_name": null, "description": "Intercept wanBlockSwap custom node that causes major instability and make it no-op.", "python_module": "comfy_extras.nodes_nop", "category": "", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Kandinsky5ImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 768, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 512, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 121, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"start_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["start_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT", "LATENT"], "output_is_list": [false, false, false, false], "output_name": ["positive", "negative", "latent", "cond_latent"], "output_tooltips": [null, null, "Empty video latent", "Clean encoded start images, used to replace the noisy start of the model output latents"], "output_matchtypes": null, "name": "Kandinsky5ImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_kandinsky5", "category": "model/conditioning/kandinsky", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "NormalizeVideoLatentStart": {"input": {"required": {"latent": ["LATENT", {}], "start_frame_count": ["INT", {"tooltip": "Number of latent frames to normalize, counted from the start", "default": 4, "min": 1, "max": 16384, "step": 1}], "reference_frame_count": ["INT", {"tooltip": "Number of latent frames after the start frames to use as reference", "default": 5, "min": 1, "max": 16384, "step": 1}]}}, "input_order": {"required": ["latent", "start_frame_count", "reference_frame_count"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["latent"], "output_tooltips": [null], "output_matchtypes": null, "name": "NormalizeVideoLatentStart", "display_name": null, "description": "Normalizes the initial frames of a video latent to match the mean and standard deviation of subsequent reference frames. Helps reduce differences between the starting frames and the rest of the video.", "python_module": "comfy_extras.nodes_kandinsky5", "category": "model/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeKandinsky5": {"input": {"required": {"clip": ["CLIP", {}], "clip_l": ["STRING", {"multiline": true, "dynamicPrompts": true}], "qwen25_7b": ["STRING", {"multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["clip", "clip_l", "qwen25_7b"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeKandinsky5", "display_name": "CLIP Text Encode (Kandinsky 5)", "description": "", "python_module": "comfy_extras.nodes_kandinsky5", "category": "model/conditioning/kandinsky", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["kandinsky prompt"], "essentials_category": null, "has_intermediate_output": false}, "WanMoveTrackToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "strength": ["FLOAT", {"tooltip": "Strength of the track conditioning.", "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "start_image": ["IMAGE", {}]}, "optional": {"tracks": ["TRACKS", {}], "clip_vision_output": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "strength", "width", "height", "length", "batch_size", "start_image"], "optional": ["tracks", "clip_vision_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanMoveTrackToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wanmove", "category": "model/conditioning/wan/move", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanMoveTracksFromCoords": {"input": {"required": {}, "optional": {"track_coords": ["STRING", {"default": "[]", "forceInput": true, "multiline": false}], "track_mask": ["MASK", {}]}}, "input_order": {"required": [], "optional": ["track_coords", "track_mask"]}, "is_input_list": false, "output": ["TRACKS", "INT"], "output_is_list": [false, false], "output_name": ["TRACKS", "track_length"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "WanMoveTracksFromCoords", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wanmove", "category": "model/conditioning/wan/move", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanMoveConcatTrack": {"input": {"required": {"tracks_1": ["TRACKS", {}]}, "optional": {"tracks_2": ["TRACKS", {}]}}, "input_order": {"required": ["tracks_1"], "optional": ["tracks_2"]}, "is_input_list": false, "output": ["TRACKS"], "output_is_list": [false], "output_name": ["TRACKS"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanMoveConcatTrack", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wanmove", "category": "model/conditioning/wan/move", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanMoveVisualizeTracks": {"input": {"required": {"images": ["IMAGE", {}], "line_resolution": ["INT", {"default": 24, "min": 1, "max": 1024}], "circle_size": ["INT", {"advanced": true, "default": 12, "min": 1, "max": 128}], "opacity": ["FLOAT", {"default": 0.75, "min": 0.0, "max": 1.0, "step": 0.01}], "line_width": ["INT", {"advanced": true, "default": 16, "min": 1, "max": 128}]}, "optional": {"tracks": ["TRACKS", {}]}}, "input_order": {"required": ["images", "line_resolution", "circle_size", "opacity", "line_width"], "optional": ["tracks"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanMoveVisualizeTracks", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wanmove", "category": "model/conditioning/wan/move", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GenerateTracks": {"input": {"required": {"width": ["INT", {"default": 832, "min": 16, "max": 4096, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 4096, "step": 16}], "start_x": ["FLOAT", {"tooltip": "Normalized X coordinate (0-1) for start position.", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}], "start_y": ["FLOAT", {"tooltip": "Normalized Y coordinate (0-1) for start position.", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}], "end_x": ["FLOAT", {"tooltip": "Normalized X coordinate (0-1) for end position.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "end_y": ["FLOAT", {"tooltip": "Normalized Y coordinate (0-1) for end position.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "num_frames": ["INT", {"default": 81, "min": 1, "max": 1024}], "num_tracks": ["INT", {"default": 5, "min": 1, "max": 100}], "track_spread": ["FLOAT", {"tooltip": "Normalized distance between tracks. Tracks are spread perpendicular to the motion direction.", "default": 0.025, "min": 0.0, "max": 1.0, "step": 0.001}], "bezier": ["BOOLEAN", {"tooltip": "Enable Bezier curve path using the mid point as control point.", "default": false}], "mid_x": ["FLOAT", {"tooltip": "Normalized X control point for Bezier curve. Only used when 'bezier' is enabled.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "mid_y": ["FLOAT", {"tooltip": "Normalized Y control point for Bezier curve. Only used when 'bezier' is enabled.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "interpolation": ["COMBO", {"tooltip": "Controls the timing/speed of movement along the path.", "multiselect": false, "options": ["linear", "ease_in", "ease_out", "ease_in_out", "constant"]}]}, "optional": {"track_mask": ["MASK", {"tooltip": "Optional mask to indicate visible frames."}]}}, "input_order": {"required": ["width", "height", "start_x", "start_y", "end_x", "end_y", "num_frames", "num_tracks", "track_spread", "bezier", "mid_x", "mid_y", "interpolation"], "optional": ["track_mask"]}, "is_input_list": false, "output": ["TRACKS", "INT"], "output_is_list": [false, false], "output_name": ["TRACKS", "track_length"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "GenerateTracks", "display_name": "Generate Video Tracks", "description": "", "python_module": "comfy_extras.nodes_wanmove", "category": "model/conditioning/wan/move", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["motion paths", "camera movement", "trajectory"], "essentials_category": null, "has_intermediate_output": false}, "EmptyARVideoLatent": {"input": {"required": {"width": ["INT", {"default": 832, "min": 16, "max": 8192, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 8192, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 1024, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyARVideoLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_ar_video", "category": "model/latent/autoregressive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerARVideo": {"input": {"required": {"num_frame_per_block": ["INT", {"tooltip": "Frames per autoregressive block. 1 = framewise, 3 = chunkwise. Must match the checkpoint's training mode.", "default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["num_frame_per_block"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerARVideo", "display_name": "Sampler AR Video", "description": "", "python_module": "comfy_extras.nodes_ar_video", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ARVideoI2V": {"input": {"required": {"model": ["MODEL", {}], "vae": ["VAE", {}], "start_image": ["IMAGE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 8192, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 8192, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 1024, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["model", "vae", "start_image", "width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["MODEL", "LATENT"], "output_is_list": [false, false], "output_name": ["MODEL", "LATENT"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ARVideoI2V", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_ar_video", "category": "model/conditioning/autoregressive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageCompare": {"input": {"required": {"compare_view": ["IMAGECOMPARE", {"socketless": true}]}, "optional": {"image_a": ["IMAGE", {}], "image_b": ["IMAGE", {}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["compare_view"], "optional": ["image_a", "image_b"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "ImageCompare", "display_name": "Compare Images", "description": "Compares two images side by side with a slider.", "python_module": "comfy_extras.nodes_image_compare", "category": "image", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": "Image Tools", "has_intermediate_output": false}, "TextEncodeZImageOmni": {"input": {"required": {"clip": ["CLIP", {}], "prompt": ["STRING", {"multiline": true, "dynamicPrompts": true}], "auto_resize_images": ["BOOLEAN", {"advanced": true, "default": true}]}, "optional": {"image_encoder": ["CLIP_VISION", {}], "vae": ["VAE", {}], "image1": ["IMAGE", {}], "image2": ["IMAGE", {}], "image3": ["IMAGE", {}]}}, "input_order": {"required": ["clip", "prompt", "auto_resize_images"], "optional": ["image_encoder", "vae", "image1", "image2", "image3"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeZImageOmni", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_zimage", "category": "model/conditioning/z-image", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GLSLShader": {"input": {"required": {"fragment_shader": ["STRING", {"tooltip": "GLSL fragment shader source code (GLSL ES 3.00 / WebGL 2.0 compatible)", "default": "#version 300 es\nprecision highp float;\n\nuniform sampler2D u_image0;\nuniform vec2 u_resolution;\n\nin vec2 v_texCoord;\nlayout(location = 0) out vec4 fragColor0;\n\nvoid main() {\n fragColor0 = texture(u_image0, v_texCoord);\n}\n", "multiline": true}], "size_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Output size: 'from_input' uses first input image dimensions, 'custom' allows manual size", "options": [{"key": "from_input", "inputs": {"required": {}}}, {"key": "custom", "inputs": {"required": {"width": ["INT", {"default": 512, "min": 1, "max": 16384}], "height": ["INT", {"default": 512, "min": 1, "max": 16384}]}}}]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Images are available as u_image0-4 (sampler2D) in the shader code", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image", "min": 1, "max": 5}}], "floats": ["COMFY_AUTOGROW_V3", {"tooltip": "Floats are available as u_float0-19 in the shader code", "template": {"input": {"required": {"float": ["FLOAT", {"default": 0.0, "forceInput": true}]}}, "prefix": "u_float", "min": 0, "max": 20}}], "ints": ["COMFY_AUTOGROW_V3", {"tooltip": "Ints are available as u_int0-19 in the shader code", "template": {"input": {"required": {"int": ["INT", {"default": 0, "forceInput": true}]}}, "prefix": "u_int", "min": 0, "max": 20}}], "bools": ["COMFY_AUTOGROW_V3", {"tooltip": "Booleans are available as u_bool0-9 (bool) in the shader code", "template": {"input": {"required": {"bool": ["BOOLEAN", {"default": false, "forceInput": true}]}}, "prefix": "u_bool", "min": 0, "max": 10}}], "curves": ["COMFY_AUTOGROW_V3", {"tooltip": "Curves are available as u_curve0-3 (sampler2D, 1D LUT) in the shader code. Sample with texture(u_curve0, vec2(x, 0.5)).r", "template": {"input": {"required": {"curve": ["CURVE", {"default": {"points": [[0.0, 0.0], [1.0, 1.0]], "interpolation": "monotone_cubic"}, "socketless": true, "forceInput": true}]}}, "prefix": "u_curve", "min": 0, "max": 4}}]}}, "input_order": {"required": ["fragment_shader", "size_mode", "images", "floats", "ints", "bools", "curves"]}, "is_input_list": false, "output": ["IMAGE", "IMAGE", "IMAGE", "IMAGE"], "output_is_list": [false, false, false, false], "output_name": ["IMAGE0", "IMAGE1", "IMAGE2", "IMAGE3"], "output_tooltips": ["Available via layout(location = 0) out vec4 fragColor0 in the shader code", "Available via layout(location = 1) out vec4 fragColor1 in the shader code", "Available via layout(location = 2) out vec4 fragColor2 in the shader code", "Available via layout(location = 3) out vec4 fragColor3 in the shader code"], "output_matchtypes": null, "name": "GLSLShader", "display_name": "GLSL Shader", "description": "Apply GLSL ES fragment shaders to images. u_resolution (vec2) is always available.", "python_module": "comfy_extras.nodes_glsl", "category": "image/shader", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": true}, "LoraLoaderBypass": {"input": {"required": {"model": ["MODEL", {"tooltip": "The diffusion model the LoRA will be applied to."}], "clip": ["CLIP", {"tooltip": "The CLIP model the LoRA will be applied to."}], "lora_name": [[], {"tooltip": "The name of the LoRA."}], "strength_model": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01, "tooltip": "How strongly to modify the diffusion model. This value can be negative."}], "strength_clip": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01, "tooltip": "How strongly to modify the CLIP model. This value can be negative."}]}}, "input_order": {"required": ["model", "clip", "lora_name", "strength_model", "strength_clip"]}, "is_input_list": false, "output": ["MODEL", "CLIP"], "output_is_list": [false, false], "output_name": ["MODEL", "CLIP"], "name": "LoraLoaderBypass", "display_name": "Load LoRA (Bypass) (For debugging)", "description": "Apply LoRA in bypass mode. Unlike regular LoRA, this doesn't modify model weights - instead it injects the LoRA computation during forward pass. Useful for training scenarios.", "python_module": "comfy_extras.nodes_lora_debug", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The modified diffusion model.", "The modified CLIP model."], "experimental": true, "search_aliases": []}, "LoraLoaderBypassModelOnly": {"input": {"required": {"model": ["MODEL"], "lora_name": [[]], "strength_model": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "lora_name", "strength_model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "LoraLoaderBypassModelOnly", "display_name": "Load LoRA (Bypass, Model Only) (for debugging)", "description": "Apply LoRA in bypass mode. Unlike regular LoRA, this doesn't modify model weights - instead it injects the LoRA computation during forward pass. Useful for training scenarios.", "python_module": "comfy_extras.nodes_lora_debug", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The modified diffusion model.", "The modified CLIP model."], "experimental": true, "search_aliases": []}, "TextGenerate": {"input": {"required": {"clip": ["CLIP", {}], "prompt": ["STRING", {"default": "", "multiline": true, "dynamicPrompts": true}], "max_length": ["INT", {"default": 512, "min": 1, "max": 32768}], "sampling_mode": ["COMFY_DYNAMICCOMBO_V3", {"display_name": "Sampling Mode", "options": [{"key": "on", "inputs": {"required": {"temperature": ["FLOAT", {"default": 0.7, "min": 0.01, "max": 2.0, "step": 1e-06}], "top_k": ["INT", {"default": 64, "min": 0, "max": 1000}], "top_p": ["FLOAT", {"default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}], "min_p": ["FLOAT", {"default": 0.05, "min": 0.0, "max": 1.0, "step": 0.01}], "repetition_penalty": ["FLOAT", {"default": 1.05, "min": 0.0, "max": 5.0, "step": 0.01}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}]}, "optional": {"presence_penalty": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 5.0, "step": 0.01}]}}}, {"key": "off", "inputs": {"required": {}}}]}]}, "optional": {"image": ["IMAGE", {}], "video": ["IMAGE", {"tooltip": "Video frames as image batch. Assumed to be 24 FPS; subsampled to 1 FPS internally."}], "audio": ["AUDIO", {}], "thinking": ["BOOLEAN", {"tooltip": "Operate in thinking mode if the model supports it.", "default": false}], "use_default_template": ["BOOLEAN", {"tooltip": "Use the built in system prompt/template if the model has one.", "advanced": true, "default": true}]}}, "input_order": {"required": ["clip", "prompt", "max_length", "sampling_mode"], "optional": ["image", "video", "audio", "thinking", "use_default_template"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["generated_text"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextGenerate", "display_name": "Generate Text", "description": "", "python_module": "comfy_extras.nodes_textgen", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["LLM", "gemma"], "essentials_category": null, "has_intermediate_output": false}, "TextGenerateLTX2Prompt": {"input": {"required": {"clip": ["CLIP", {}], "prompt": ["STRING", {"default": "", "multiline": true, "dynamicPrompts": true}], "max_length": ["INT", {"default": 512, "min": 1, "max": 32768}], "sampling_mode": ["COMFY_DYNAMICCOMBO_V3", {"display_name": "Sampling Mode", "options": [{"key": "on", "inputs": {"required": {"temperature": ["FLOAT", {"default": 0.7, "min": 0.01, "max": 2.0, "step": 1e-06}], "top_k": ["INT", {"default": 64, "min": 0, "max": 1000}], "top_p": ["FLOAT", {"default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}], "min_p": ["FLOAT", {"default": 0.05, "min": 0.0, "max": 1.0, "step": 0.01}], "repetition_penalty": ["FLOAT", {"default": 1.05, "min": 0.0, "max": 5.0, "step": 0.01}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}]}, "optional": {"presence_penalty": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 5.0, "step": 0.01}]}}}, {"key": "off", "inputs": {"required": {}}}]}]}, "optional": {"image": ["IMAGE", {}], "video": ["IMAGE", {"tooltip": "Video frames as image batch. Assumed to be 24 FPS; subsampled to 1 FPS internally."}], "audio": ["AUDIO", {}], "thinking": ["BOOLEAN", {"tooltip": "Operate in thinking mode if the model supports it.", "default": false}], "use_default_template": ["BOOLEAN", {"tooltip": "Use the built in system prompt/template if the model has one.", "advanced": true, "default": true}]}}, "input_order": {"required": ["clip", "prompt", "max_length", "sampling_mode"], "optional": ["image", "video", "audio", "thinking", "use_default_template"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["generated_text"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextGenerateLTX2Prompt", "display_name": "Generate LTX2 Prompt", "description": "", "python_module": "comfy_extras.nodes_textgen", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["prompt enhance", "LLM", "gemma"], "essentials_category": null, "has_intermediate_output": false}, "ColorToRGBInt": {"input": {"required": {"color": ["COLOR", {"default": "#ffffff", "socketless": true}]}}, "input_order": {"required": ["color"]}, "is_input_list": false, "output": ["INT", "COLOR"], "output_is_list": [false, false], "output_name": ["rgb_int", "hex"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ColorToRGBInt", "display_name": "Color Picker", "description": "Return a color RGB integer value and hexadecimal representation.", "python_module": "comfy_extras.nodes_color", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CreateList": {"input": {"required": {"inputs": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"input": ["COMFY_MATCHTYPE_V3", {"template": {"template_id": "type", "allowed_types": "*"}}]}}, "prefix": "input", "min": 1, "max": 10}}]}}, "input_order": {"required": ["inputs"]}, "is_input_list": true, "output": ["COMFY_MATCHTYPE_V3"], "output_is_list": [true], "output_name": ["list"], "output_tooltips": [null], "output_matchtypes": ["type"], "name": "CreateList", "display_name": "Create List", "description": "", "python_module": "comfy_extras.nodes_toolkit", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["Image Iterator", "Text Iterator", "Iterator"], "essentials_category": null, "has_intermediate_output": false}, "NAGuidance": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to apply NAG to."}], "nag_scale": ["FLOAT", {"tooltip": "The guidance scale factor. Higher values push further from the negative prompt.", "default": 5.0, "min": 0.0, "max": 50.0, "step": 0.1}], "nag_alpha": ["FLOAT", {"tooltip": "Blending factor for the normalized attention. 1.0 is full replacement, 0.0 is no effect.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "nag_tau": ["FLOAT", {"default": 1.5, "min": 1.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "nag_scale", "nag_alpha", "nag_tau"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The patched model with NAG enabled."], "output_matchtypes": null, "name": "NAGuidance", "display_name": "Normalized Attention Guidance", "description": "Applies Normalized Attention Guidance to models, enabling negative prompts on distilled/schnell models.", "python_module": "comfy_extras.nodes_nag", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SDPoseKeypointExtractor": {"input": {"required": {"model": ["MODEL", {}], "vae": ["VAE", {}], "image": ["IMAGE", {}], "batch_size": ["INT", {"default": 16, "min": 1, "max": 10000, "step": 1}]}, "optional": {"bboxes": ["BOUNDING_BOX", {"tooltip": "Optional bounding boxes for more accurate detections. Required for multi-person detection.", "default": {"x": 0, "y": 0, "width": 512, "height": 512}, "socketless": true, "forceInput": true}]}}, "input_order": {"required": ["model", "vae", "image", "batch_size"], "optional": ["bboxes"]}, "is_input_list": false, "output": ["POSE_KEYPOINT"], "output_is_list": [false], "output_name": ["keypoints"], "output_tooltips": ["Keypoints in OpenPose frame format (canvas_width, canvas_height, people)"], "output_matchtypes": null, "name": "SDPoseKeypointExtractor", "display_name": "SDPose Keypoint Extractor", "description": "Extract pose keypoints from images using the SDPose model: https://huggingface.co/Comfy-Org/SDPose/tree/main/checkpoints", "python_module": "comfy_extras.nodes_sdpose", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["openpose", "pose detection", "preprocessor", "keypoints", "sdpose"], "essentials_category": null, "has_intermediate_output": false}, "SDPoseDrawKeypoints": {"input": {"required": {"keypoints": ["POSE_KEYPOINT", {}], "draw_body": ["BOOLEAN", {"default": true}], "draw_hands": ["BOOLEAN", {"default": true}], "draw_face": ["BOOLEAN", {"default": true}], "draw_feet": ["BOOLEAN", {"default": false}], "stick_width": ["INT", {"default": 4, "min": 1, "max": 10, "step": 1}], "face_point_size": ["INT", {"default": 3, "min": 1, "max": 10, "step": 1}], "score_threshold": ["FLOAT", {"default": 0.3, "min": 0.0, "max": 1.0, "step": 0.01}], "draw_head": ["BOOLEAN", {"default": true}]}}, "input_order": {"required": ["keypoints", "draw_body", "draw_hands", "draw_face", "draw_feet", "stick_width", "face_point_size", "score_threshold", "draw_head"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "SDPoseDrawKeypoints", "display_name": "SDPose Draw Keypoints", "description": "", "python_module": "comfy_extras.nodes_sdpose", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["openpose", "pose detection", "preprocessor", "keypoints", "pose"], "essentials_category": null, "has_intermediate_output": false}, "SDPoseFaceBBoxes": {"input": {"required": {"keypoints": ["POSE_KEYPOINT", {}], "scale": ["FLOAT", {"tooltip": "Multiplier for the bounding box area around each detected face.", "default": 1.5, "min": 1.0, "max": 10.0, "step": 0.1}], "force_square": ["BOOLEAN", {"tooltip": "Expand the shorter bbox axis so the crop region is always square.", "default": true}]}}, "input_order": {"required": ["keypoints", "scale", "force_square"]}, "is_input_list": false, "output": ["BOUNDING_BOX"], "output_is_list": [false], "output_name": ["bboxes"], "output_tooltips": ["Face bounding boxes per frame, compatible with SDPoseKeypointExtractor bboxes input."], "output_matchtypes": null, "name": "SDPoseFaceBBoxes", "display_name": "SDPose Face Bounding Boxes", "description": "", "python_module": "comfy_extras.nodes_sdpose", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["face bbox", "face bounding box", "pose", "keypoints"], "essentials_category": null, "has_intermediate_output": false}, "CropByBBoxes": {"input": {"required": {"image": ["IMAGE", {}], "bboxes": ["BOUNDING_BOX", {"default": {"x": 0, "y": 0, "width": 512, "height": 512}, "socketless": true, "forceInput": true}], "output_width": ["INT", {"tooltip": "Width each crop is resized to.", "default": 512, "min": 64, "max": 4096, "step": 8}], "output_height": ["INT", {"tooltip": "Height each crop is resized to.", "default": 512, "min": 64, "max": 4096, "step": 8}], "padding": ["INT", {"tooltip": "Extra padding in pixels added on each side of the bbox before cropping.", "default": 0, "min": 0, "max": 1024, "step": 1}], "keep_aspect": ["COMBO", {"tooltip": "Whether to stretch the crop to fit the output size, or pad with black pixels to preserve aspect ratio.", "default": "stretch", "multiselect": false, "options": ["stretch", "pad"]}]}}, "input_order": {"required": ["image", "bboxes", "output_width", "output_height", "padding", "keep_aspect"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": ["All crops stacked into a single image batch."], "output_matchtypes": null, "name": "CropByBBoxes", "display_name": "Crop By Bounding Boxes", "description": "Crop and resize regions from the input image batch based on provided bounding boxes.", "python_module": "comfy_extras.nodes_sdpose", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["crop", "face crop", "bbox crop", "pose", "bounding box"], "essentials_category": null, "has_intermediate_output": false}, "ComfyMathExpression": {"input": {"required": {"expression": ["STRING", {"default": "a + b", "multiline": true}], "values": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"value": ["FLOAT,INT,BOOLEAN", {}]}}, "names": ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"], "min": 1}}]}}, "input_order": {"required": ["expression", "values"]}, "is_input_list": false, "output": ["FLOAT", "INT", "BOOLEAN"], "output_is_list": [false, false, false], "output_name": ["FLOAT", "INT", "BOOL"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "ComfyMathExpression", "display_name": "Math Expression", "description": "", "python_module": "comfy_extras.nodes_math", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["expression", "formula", "calculate", "calculator", "eval", "math"], "essentials_category": null, "has_intermediate_output": false}, "ComfyNumberConvert": {"input": {"required": {"value": ["INT,FLOAT,STRING,BOOLEAN", {"display_name": "value"}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["FLOAT", "INT"], "output_is_list": [false, false], "output_name": ["FLOAT", "INT"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ComfyNumberConvert", "display_name": "Convert Number", "description": "", "python_module": "comfy_extras.nodes_number_convert", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["int to float", "float to int", "number convert", "int2float", "float2int", "cast", "parse number", "string to number", "bool to int"], "essentials_category": null, "has_intermediate_output": false}, "Painter": {"input": {"required": {"mask": ["STRING", {"widgetType": "PAINTER", "image_upload": true, "default": "", "socketless": true, "multiline": false}], "width": ["INT", {"hidden": true, "default": 512, "socketless": true, "min": 64, "max": 4096, "step": 64}], "height": ["INT", {"hidden": true, "default": 512, "socketless": true, "min": 64, "max": 4096, "step": 64}], "bg_color": ["COLOR", {"default": "#000000", "socketless": true}]}, "optional": {"image": ["IMAGE", {"tooltip": "Optional base image to paint over"}]}}, "input_order": {"required": ["mask", "width", "height", "bg_color"], "optional": ["image"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Painter", "display_name": "Painter", "description": "", "python_module": "comfy_extras.nodes_painter", "category": "image", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": true}, "CurveEditor": {"input": {"required": {"curve": ["CURVE", {"default": {"points": [[0.0, 0.0], [1.0, 1.0]], "interpolation": "monotone_cubic"}, "socketless": true}]}, "optional": {"histogram": ["HISTOGRAM", {}]}}, "input_order": {"required": ["curve"], "optional": ["histogram"]}, "is_input_list": false, "output": ["CURVE"], "output_is_list": [false], "output_name": ["curve"], "output_tooltips": [null], "output_matchtypes": null, "name": "CurveEditor", "display_name": "Curve Editor", "description": "", "python_module": "comfy_extras.nodes_curve", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageHistogram": {"input": {"required": {"image": ["IMAGE", {}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["HISTOGRAM", "HISTOGRAM", "HISTOGRAM", "HISTOGRAM", "HISTOGRAM"], "output_is_list": [false, false, false, false, false], "output_name": ["rgb", "luminance", "red", "green", "blue"], "output_tooltips": [null, null, null, null, null], "output_matchtypes": null, "name": "ImageHistogram", "display_name": "Image Histogram", "description": "", "python_module": "comfy_extras.nodes_curve", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LoadBackgroundRemovalModel": {"input": {"required": {"bg_removal_name": ["COMBO", {"tooltip": "The model used to remove backgrounds from images", "multiselect": false, "options": []}]}}, "input_order": {"required": ["bg_removal_name"]}, "is_input_list": false, "output": ["BACKGROUND_REMOVAL"], "output_is_list": [false], "output_name": ["bg_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "LoadBackgroundRemovalModel", "display_name": "Load Background Removal Model", "description": "", "python_module": "comfy_extras.nodes_bg_removal", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RemoveBackground": {"input": {"required": {"bg_removal_model": ["BACKGROUND_REMOVAL", {"tooltip": "Background removal model used to generate the mask"}], "image": ["IMAGE", {"tooltip": "Input image to remove the background from"}]}}, "input_order": {"required": ["bg_removal_model", "image"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["mask"], "output_tooltips": ["Generated foreground mask"], "output_matchtypes": null, "name": "RemoveBackground", "display_name": "Remove Background", "description": "Generates a foreground mask to remove the background from an image using a background removal model.", "python_module": "comfy_extras.nodes_bg_removal", "category": "image/background removal", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RTDETR_detect": {"input": {"required": {"model": ["MODEL", {"display_name": "model"}], "image": ["IMAGE", {"display_name": "image"}], "threshold": ["FLOAT", {"display_name": "threshold", "default": 0.5}], "class_name": ["COMBO", {"tooltip": "Filter detections by class. Set to 'all' to disable filtering.", "default": "all", "multiselect": false, "options": ["all", "person", "bicycle", "car", "motorcycle", "airplane", "bus", "train", "truck", "boat", "traffic light", "fire hydrant", "stop sign", "parking meter", "bench", "bird", "cat", "dog", "horse", "sheep", "cow", "elephant", "bear", "zebra", "giraffe", "backpack", "umbrella", "handbag", "tie", "suitcase", "frisbee", "skis", "snowboard", "sports ball", "kite", "baseball bat", "baseball glove", "skateboard", "surfboard", "tennis racket", "bottle", "wine glass", "cup", "fork", "knife", "spoon", "bowl", "banana", "apple", "sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza", "donut", "cake", "chair", "couch", "potted plant", "bed", "dining table", "toilet", "tv", "laptop", "mouse", "remote", "keyboard", "cell phone", "microwave", "oven", "toaster", "sink", "refrigerator", "book", "clock", "vase", "scissors", "teddy bear", "hair drier", "toothbrush"]}], "max_detections": ["INT", {"display_name": "max_detections", "tooltip": "Maximum number of detections to return per image. In order of descending confidence score.", "default": 100}]}}, "input_order": {"required": ["model", "image", "threshold", "class_name", "max_detections"]}, "is_input_list": false, "output": ["BOUNDING_BOX"], "output_is_list": [false], "output_name": ["bboxes"], "output_tooltips": [null], "output_matchtypes": null, "name": "RTDETR_detect", "display_name": "Run Real-Time Detection (RT-DETR)", "description": "", "python_module": "comfy_extras.nodes_rtdetr", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["bbox", "bounding box", "object detection", "coco"], "essentials_category": null, "has_intermediate_output": false}, "DrawBBoxes": {"input": {"required": {"bboxes": ["BOUNDING_BOX", {"default": {"x": 0, "y": 0, "width": 512, "height": 512}, "socketless": true, "forceInput": true}]}, "optional": {"image": ["IMAGE", {}]}}, "input_order": {"required": ["bboxes"], "optional": ["image"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["out_image"], "output_tooltips": [null], "output_matchtypes": null, "name": "DrawBBoxes", "display_name": "Draw BBoxes", "description": "", "python_module": "comfy_extras.nodes_rtdetr", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["bbox", "bounding box", "object detection", "rt_detr", "visualize detections", "coco"], "essentials_category": null, "has_intermediate_output": false}, "FrameInterpolationModelLoader": {"input": {"required": {"model_name": ["COMBO", {"tooltip": "Select a frame interpolation model to load. Models must be placed in the 'frame_interpolation' folder.", "multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["INTERP_MODEL"], "output_is_list": [false], "output_name": ["INTERP_MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "FrameInterpolationModelLoader", "display_name": "Load Frame Interpolation Model", "description": "", "python_module": "comfy_extras.nodes_frame_interpolation", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FrameInterpolate": {"input": {"required": {"interp_model": ["INTERP_MODEL", {}], "images": ["IMAGE", {}], "multiplier": ["INT", {"default": 2, "min": 2, "max": 16}]}}, "input_order": {"required": ["interp_model", "images", "multiplier"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FrameInterpolate", "display_name": "Run Frame Interpolation Model", "description": "", "python_module": "comfy_extras.nodes_frame_interpolation", "category": "video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["rife", "film", "frame interpolation", "slow motion", "interpolate frames", "vfi"], "essentials_category": null, "has_intermediate_output": false}, "SAM3_Detect": {"input": {"required": {"model": ["MODEL", {"display_name": "model"}], "image": ["IMAGE", {"display_name": "image"}], "threshold": ["FLOAT", {"display_name": "threshold", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "refine_iterations": ["INT", {"display_name": "refine_iterations", "tooltip": "SAM decoder refinement passes (0=use raw detector masks)", "default": 2, "min": 0, "max": 5}], "individual_masks": ["BOOLEAN", {"display_name": "individual_masks", "tooltip": "Output per-object masks instead of union", "default": false}]}, "optional": {"conditioning": ["CONDITIONING", {"display_name": "conditioning", "tooltip": "Text conditioning from CLIPTextEncode"}], "bboxes": ["BOUNDING_BOX", {"display_name": "bboxes", "tooltip": "Bounding boxes to segment within", "default": {"x": 0, "y": 0, "width": 512, "height": 512}, "socketless": true, "forceInput": true}], "positive_coords": ["STRING", {"display_name": "positive_coords", "tooltip": "Positive point prompts as JSON [{\"x\": int, \"y\": int}, ...] (pixel coords)", "forceInput": true, "multiline": false}], "negative_coords": ["STRING", {"display_name": "negative_coords", "tooltip": "Negative point prompts as JSON [{\"x\": int, \"y\": int}, ...] (pixel coords)", "forceInput": true, "multiline": false}]}}, "input_order": {"required": ["model", "image", "threshold", "refine_iterations", "individual_masks"], "optional": ["conditioning", "bboxes", "positive_coords", "negative_coords"]}, "is_input_list": false, "output": ["MASK", "BOUNDING_BOX"], "output_is_list": [false, false], "output_name": ["masks", "bboxes"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SAM3_Detect", "display_name": "SAM3 Detect", "description": "", "python_module": "comfy_extras.nodes_sam3", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["sam3", "segment anything", "open vocabulary", "text detection", "segment"], "essentials_category": null, "has_intermediate_output": false}, "SAM3_VideoTrack": {"input": {"required": {"images": ["IMAGE", {"display_name": "images", "tooltip": "Video frames as batched images"}], "model": ["MODEL", {"display_name": "model"}], "detection_threshold": ["FLOAT", {"display_name": "detection_threshold", "tooltip": "Score threshold for text-prompted detection.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "max_objects": ["INT", {"display_name": "max_objects", "tooltip": "Max tracked objects. Initial masks count toward this limit. 0 uses the internal cap of 64.", "default": 4, "min": 0, "max": 64}], "detect_interval": ["INT", {"display_name": "detect_interval", "tooltip": "Run detection every N frames (1=every frame). Higher values save compute.", "default": 1, "min": 1}]}, "optional": {"initial_mask": ["MASK", {"display_name": "initial_mask", "tooltip": "Mask(s) for the first frame to track (one per object)"}], "conditioning": ["CONDITIONING", {"display_name": "conditioning", "tooltip": "Text conditioning for detecting new objects during tracking"}]}}, "input_order": {"required": ["images", "model", "detection_threshold", "max_objects", "detect_interval"], "optional": ["initial_mask", "conditioning"]}, "is_input_list": false, "output": ["SAM3_TRACK_DATA"], "output_is_list": [false], "output_name": ["track_data"], "output_tooltips": [null], "output_matchtypes": null, "name": "SAM3_VideoTrack", "display_name": "Run SAM3 Video Track", "description": "", "python_module": "comfy_extras.nodes_sam3", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["sam3", "video", "track", "propagate"], "essentials_category": null, "has_intermediate_output": false}, "SAM3_TrackPreview": {"input": {"required": {"track_data": ["SAM3_TRACK_DATA", {"display_name": "track_data"}], "opacity": ["FLOAT", {"display_name": "opacity", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.05}], "fps": ["FLOAT", {"display_name": "fps", "default": 24.0, "min": 1.0, "max": 120.0, "step": 1.0}]}, "optional": {"images": ["IMAGE", {"display_name": "images"}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["track_data", "opacity", "fps"], "optional": ["images"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SAM3_TrackPreview", "display_name": "SAM3 Track Preview", "description": "", "python_module": "comfy_extras.nodes_sam3", "category": "image/detection", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SAM3_TrackToMask": {"input": {"required": {"track_data": ["SAM3_TRACK_DATA", {"display_name": "track_data"}], "object_indices": ["STRING", {"display_name": "object_indices", "tooltip": "Comma-separated object indices to include (e.g. '0,2,3'). Empty = all objects.", "default": "", "multiline": false}]}}, "input_order": {"required": ["track_data", "object_indices"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["masks"], "output_tooltips": [null], "output_matchtypes": null, "name": "SAM3_TrackToMask", "display_name": "SAM3 Track to Mask", "description": "", "python_module": "comfy_extras.nodes_sam3", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanSCAILToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 512, "min": 32, "max": 16384, "step": 32}], "height": ["INT", {"default": 896, "min": 32, "max": 16384, "step": 32}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "pose_strength": ["FLOAT", {"tooltip": "Strength of the pose latent.", "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "pose_start": ["FLOAT", {"tooltip": "Start step of the pose conditioning.", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}], "pose_end": ["FLOAT", {"tooltip": "End step of the pose conditioning.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "video_frame_offset": ["INT", {"tooltip": "Cumulative output frame this chunk begins at. Wire from the previous chunk's video_frame_offset output.", "default": 0, "min": 0, "max": 16384, "step": 1}], "previous_frame_count": ["INT", {"tooltip": "Tail frames of previous_frames to anchor. SCAIL-2 trained at 5 (81-frame chunks, 76-frame step).", "default": 5, "min": 1, "max": 16384, "step": 4}]}, "optional": {"pose_video": ["IMAGE", {"tooltip": "Video used for pose conditioning. Will be downscaled to half the resolution of the main video."}], "pose_video_mask": ["IMAGE", {"tooltip": "SCAIL-2 only. Colored per-identity SAM3 mask video at the same resolution as pose_video."}], "replacement_mode": ["BOOLEAN", {"tooltip": "SCAIL-2 only. False = Animation Mode (pose_video_mask should have black background). True = Replacement Mode (pose_video_mask should have white background).", "default": false}], "reference_image": ["IMAGE", {"tooltip": "Reference image. The first image is the primary reference (composite all identities onto it). SCAIL-2: extra batch images are used as additional views (back view, close-up, occluded background), each needing a matching reference_image_mask in that identity's color."}], "reference_image_mask": ["IMAGE", {"tooltip": "SCAIL-2 only. Colored reference mask, batch matching reference_image (first = primary reference mask, rest = identity masks for the additional reference_image)."}], "clip_vision_output": ["CLIP_VISION_OUTPUT", {"tooltip": "CLIP vision features for conditioning. Model is trained with stretch resize to aspect ratio."}], "previous_frames": ["IMAGE", {"tooltip": "SCAIL-2 only. Full decoded output of the previous chunk. Only the last previous_frame_count are used as the extension anchor."}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size", "pose_strength", "pose_start", "pose_end", "video_frame_offset", "previous_frame_count"], "optional": ["pose_video", "pose_video_mask", "replacement_mode", "reference_image", "reference_image_mask", "clip_vision_output", "previous_frames"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT", "INT"], "output_is_list": [false, false, false, false], "output_name": ["positive", "negative", "latent", "video_frame_offset"], "output_tooltips": [null, null, "Empty latent of the generation size.", "Adjusted offset + length. Wire into the next chunk."], "output_matchtypes": null, "name": "WanSCAILToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_scail", "category": "model/conditioning/wan/scail", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SCAIL2ColoredMask": {"input": {"required": {"driving_track_data": ["SAM3_TRACK_DATA", {"tooltip": "SAM3 track of the driving pose video. Will be rendered into the pose_video_mask output."}], "object_indices": ["STRING", {"tooltip": "Comma-separated list of person indices to include (e.g. '0,2,3'). Applied to both reference and pose video masks. Empty = all.", "default": "", "multiline": false}], "sort_by": ["COMBO", {"tooltip": "Order in which palette colors are assigned to the tracked objects (applied to both reference and pose video so each identity keeps the same color). Objects that appear in earlier frames always come first; within a frame, left_to_right = leftmost object (by centroid at first appearance) gets the first color, area = biggest object (by mask area at first appearance) gets the first color; none = keep SAM3's order.", "default": "left_to_right", "multiselect": false, "options": ["none", "left_to_right", "area"]}], "replacement_mode": ["BOOLEAN", {"tooltip": "False = Animation Mode (pose_video_mask has black background, reference_image_mask has white background). True = Replacement Mode (pose_video_mask has white background, reference_image_mask has black background).", "default": false}]}, "optional": {"ref_track_data": ["SAM3_TRACK_DATA,MASK", {"display_name": "reference_masks", "tooltip": "SAM3 track of the reference image(s) (one identity per object, colored in batch order), or a plain MASK of the reference subject (rendered as a single identity)."}]}}, "input_order": {"required": ["driving_track_data", "object_indices", "sort_by", "replacement_mode"], "optional": ["ref_track_data"]}, "is_input_list": false, "output": ["IMAGE", "IMAGE"], "output_is_list": [false, false], "output_name": ["pose_video_mask", "reference_image_mask"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SCAIL2ColoredMask", "display_name": "Create SCAIL-2 Colored Mask", "description": "", "python_module": "comfy_extras.nodes_scail", "category": "model/conditioning/wan/scail", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpticalFlowLoader": {"input": {"required": {"model_name": ["COMBO", {"tooltip": "Optical flow model to load. Files must be placed in the 'optical_flow' folder. Today only torchvision's raft_large.pth is supported.", "multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["OPTICAL_FLOW"], "output_is_list": [false], "output_name": ["OPTICAL_FLOW"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpticalFlowLoader", "display_name": "Load Optical Flow Model", "description": "", "python_module": "comfy_extras.nodes_void", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VOIDQuadmaskPreprocess": {"input": {"required": {"mask": ["MASK", {}], "dilate_width": ["INT", {"tooltip": "Dilation radius for the primary mask region (0 = no dilation)", "default": 0, "min": 0, "max": 50, "step": 1}]}}, "input_order": {"required": ["mask", "dilate_width"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["quadmask"], "output_tooltips": [null], "output_matchtypes": null, "name": "VOIDQuadmaskPreprocess", "display_name": "VOID Quadmask Preprocessor", "description": "", "python_module": "comfy_extras.nodes_void", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VOIDInpaintConditioning": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "video": ["IMAGE", {"tooltip": "Source video frames [T, H, W, 3]"}], "quadmask": ["MASK", {"tooltip": "Preprocessed quadmask from VOIDQuadmaskPreprocess [T, H, W]"}], "width": ["INT", {"default": 672, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 384, "min": 16, "max": 16384, "step": 8}], "length": ["INT", {"tooltip": "Number of pixel frames to process. For CogVideoX-Fun-V1.5 (patch_size_t=2), latent_t must be even \u2014 lengths that produce odd latent_t are rounded down (e.g. 49 \u2192 45).", "default": 45, "min": 1, "max": 16384, "step": 1}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["positive", "negative", "vae", "video", "quadmask", "width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "VOIDInpaintConditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_void", "category": "model/conditioning/void", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VOIDWarpedNoise": {"input": {"required": {"optical_flow": ["OPTICAL_FLOW", {"tooltip": "Optical flow model from OpticalFlowLoader (RAFT-large)."}], "video": ["IMAGE", {"tooltip": "Pass 1 output video frames [T, H, W, 3]"}], "width": ["INT", {"default": 672, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 384, "min": 16, "max": 16384, "step": 8}], "length": ["INT", {"tooltip": "Number of pixel frames. Rounded down to make latent_t even (patch_size_t=2 requirement), e.g. 49 \u2192 45.", "default": 45, "min": 1, "max": 16384, "step": 1}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["optical_flow", "video", "width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["warped_noise"], "output_tooltips": [null], "output_matchtypes": null, "name": "VOIDWarpedNoise", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_void", "category": "model/latent/void", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VOIDWarpedNoiseSource": {"input": {"required": {"warped_noise": ["LATENT", {"tooltip": "Warped noise latent from VOIDWarpedNoise"}]}}, "input_order": {"required": ["warped_noise"]}, "is_input_list": false, "output": ["NOISE"], "output_is_list": [false], "output_name": ["NOISE"], "output_tooltips": [null], "output_matchtypes": null, "name": "VOIDWarpedNoiseSource", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_void", "category": "model/latent/void", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VOIDSampler": {"input": {"required": {}}, "input_order": {"required": []}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "VOIDSampler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_void", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanDancerVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"tooltip": "The number of frames in the generated video. Should stay 149 for WanDancer.", "default": 149, "min": 1, "max": 16384, "step": 4}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {"tooltip": "The CLIP vision embeds for the first frame."}], "clip_vision_output_ref": ["CLIP_VISION_OUTPUT", {"tooltip": "The CLIP vision embeds for the reference image."}], "start_image": ["IMAGE", {"tooltip": "The initial image(s) to be encoded, can be any number of frames."}], "mask": ["MASK", {"tooltip": "Image conditioning mask for the start image(s). White is kept, black is generated. Used for the local generations."}], "audio_encoder_output": ["AUDIO_ENCODER_OUTPUT", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length"], "optional": ["clip_vision_output", "clip_vision_output_ref", "start_image", "mask", "audio_encoder_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, "Empty latent."], "output_matchtypes": null, "name": "WanDancerVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wandancer", "category": "model/conditioning/wan/dancer", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanDancerEncodeAudio": {"input": {"required": {"audio": ["AUDIO", {}], "video_frames": ["INT", {"default": 149, "min": 1, "max": 16384, "step": 4}], "audio_inject_scale": ["FLOAT", {"tooltip": "The scale for the audio features when injected into the video model.", "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["audio", "video_frames", "audio_inject_scale"]}, "is_input_list": false, "output": ["AUDIO_ENCODER_OUTPUT", "STRING"], "output_is_list": [false, false], "output_name": ["audio_encoder_output", "fps_string"], "output_tooltips": [null, "The calculated fps based on the audio length and the number of video frames. Used in the prompt."], "output_matchtypes": null, "name": "WanDancerEncodeAudio", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wandancer", "category": "model/conditioning/wan/dancer", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanDancerPadKeyframes": {"input": {"required": {"images": ["IMAGE", {}], "segment_length": ["INT", {"tooltip": "Length of this segment (usually 149 frames)", "default": 149, "min": 1, "max": 10000}], "segment_index": ["INT", {"tooltip": "Which segment this is (0 for first, 1 for second, etc.)", "default": 0, "min": 0, "max": 100}], "audio": ["AUDIO", {"tooltip": "Audio to calculate total output frames from and extract segment audio."}]}}, "input_order": {"required": ["images", "segment_length", "segment_index", "audio"]}, "is_input_list": false, "output": ["IMAGE", "MASK", "AUDIO"], "output_is_list": [false, false, false], "output_name": ["keyframes_sequence", "keyframes_mask", "audio_segment"], "output_tooltips": ["Padded keyframe sequence", "Mask indicating valid frames", "Audio segment for this video segment"], "output_matchtypes": null, "name": "WanDancerPadKeyframes", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wandancer", "category": "image/video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanDancerPadKeyframesList": {"input": {"required": {"images": ["IMAGE", {}], "segment_length": ["INT", {"tooltip": "Length of each segment (usually 149 frames)", "default": 149, "min": 1, "max": 10000}], "num_segments": ["INT", {"tooltip": "How many padded segments to emit as lists.", "default": 1, "min": 1, "max": 100}], "audio": ["AUDIO", {"tooltip": "Audio to slice for each emitted segment."}]}}, "input_order": {"required": ["images", "segment_length", "num_segments", "audio"]}, "is_input_list": false, "output": ["IMAGE", "MASK", "AUDIO"], "output_is_list": [true, true, true], "output_name": ["keyframes_sequence", "keyframes_mask", "audio_segment"], "output_tooltips": ["Padded keyframe sequences", "Masks indicating valid frames", "Audio segment for each video segment"], "output_matchtypes": null, "name": "WanDancerPadKeyframesList", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wandancer", "category": "image/video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyHiDreamO1LatentImage": {"input": {"required": {"width": ["INT", {"default": 2048, "min": 64, "max": 4096, "step": 32}], "height": ["INT", {"default": 2048, "min": 64, "max": 4096, "step": 32}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyHiDreamO1LatentImage", "display_name": "Empty HiDream-O1 Latent Image", "description": "Empty pixel-space latent for HiDream-O1-Image. The model was trained at ~4 megapixels; lower resolutions go off-distribution and quality regresses noticeably. Trained resolutions: 2048x2048, 2304x1728, 1728x2304, 2560x1440, 1440x2560, 2496x1664, 1664x2496, 3104x1312, 1312x3104, 2304x1792, 1792x2304.", "python_module": "comfy_extras.nodes_hidream_o1", "category": "model/latent/hidream", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HiDreamO1ReferenceImages": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Reference images. 1 image = instruction edit; 2-10 images = multi reference.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 1}}]}}, "input_order": {"required": ["positive", "negative", "images"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "HiDreamO1ReferenceImages", "display_name": "HiDream-O1 Reference Images", "description": "Attach 1-10 reference images to conditioning, one for edit instructionor multiple for subject-driven personalization.", "python_module": "comfy_extras.nodes_hidream_o1", "category": "model/conditioning/hidream", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HiDreamO1PatchSeamSmoothing": {"input": {"required": {"model": ["MODEL", {}], "start_percent": ["FLOAT", {"tooltip": "Sampling progress (0=start, 1=end) at which the blend turns ON.", "default": 0.8, "min": 0.0, "max": 1.0, "step": 0.01}], "end_percent": ["FLOAT", {"tooltip": "Sampling progress at which the blend turns OFF.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "pattern": ["COMBO", {"tooltip": "Shift layout. single_shift: one pass at the natural patch grid + others offset. symmetric: all passes off-grid, shifts split around origin.", "default": "single_shift", "multiselect": false, "options": ["single_shift", "symmetric"]}], "passes": ["COMBO", {"tooltip": "Number of passes per gated step. 2/4 = fixed. ramp_*: pass count increases as sampling approaches end (more smoothing where seams are most visible).", "default": "2", "multiselect": false, "options": ["2", "4", "ramp_2_4", "ramp_2_4_8"]}], "blend": ["COMBO", {"tooltip": "average: equal-weight mean. window: Hann-windowed weighting favoring each pass away from its patch boundaries. median: per-pixel median, rejects wraparound-outlier passes.", "default": "average", "multiselect": false, "options": ["average", "window", "median"]}], "strength": ["FLOAT", {"tooltip": "Interpolation between the natural-grid pred (0) and the averaged result (1).", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "start_percent", "end_percent", "pattern", "passes", "blend", "strength"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "HiDreamO1PatchSeamSmoothing", "display_name": "HiDream-O1 Patch Seam Smoothing", "description": "Average the model output across multiple shifted patch-grid positions during the late portion of sampling. Cancels seams.", "python_module": "comfy_extras.nodes_hidream_o1", "category": "model/patch/hidream", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveGLB": {"input": {"required": {"mesh": ["MESH,FILE_3D_GLB,FILE_3D_GLTF,FILE_3D_OBJ,FILE_3D_FBX,FILE_3D_STL,FILE_3D_USDZ,FILE_3D_PLY,FILE_3D_SPLAT,FILE_3D_SPZ,FILE_3D_KSPLAT,FILE_3D_SPLAT_ANY,FILE_3D_POINT_CLOUD_ANY,FILE_3D", {"tooltip": "Mesh or 3D file to save"}], "filename_prefix": ["STRING", {"default": "3d/ComfyUI", "multiline": false}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["mesh", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveGLB", "display_name": "Save 3D Model", "description": "", "python_module": "comfy_extras.nodes_save_3d", "category": "3d", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export 3d model", "save mesh"], "essentials_category": "Basics", "has_intermediate_output": false}, "LoadMoGeModel": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["MOGE_MODEL"], "output_is_list": [false], "output_name": ["MOGE_MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "LoadMoGeModel", "display_name": "Load MoGe Model", "description": "", "python_module": "comfy_extras.nodes_moge", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MoGeInference": {"input": {"required": {"moge_model": ["MOGE_MODEL", {}], "image": ["IMAGE", {}], "resolution_level": ["INT", {"tooltip": "0 = fastest, 9 = most detail.", "default": 9, "min": 0, "max": 9}], "fov_x_degrees": ["FLOAT", {"tooltip": "Horizontal field of view of the source camera. Sets the focal length used to unproject the depth map into 3D. 0 = auto-recover from the predicted points.", "advanced": true, "default": 0.0, "min": 0.0, "max": 170.0, "step": 0.1}], "batch_size": ["INT", {"tooltip": "Images per inference call. Lower if you OOM on a long video / image set.", "default": 4, "min": 1, "max": 64}], "force_projection": ["BOOLEAN", {"advanced": true, "default": true}], "apply_mask": ["BOOLEAN", {"tooltip": "Set masked-out (sky / invalid) pixels to inf in points and depth so meshing culls them. Disable to keep the raw predicted geometry everywhere; the mask is still returned separately.", "advanced": true, "default": true}]}}, "input_order": {"required": ["moge_model", "image", "resolution_level", "fov_x_degrees", "batch_size", "force_projection", "apply_mask"]}, "is_input_list": false, "output": ["MOGE_GEOMETRY"], "output_is_list": [false], "output_name": ["moge_geometry"], "output_tooltips": [null], "output_matchtypes": null, "name": "MoGeInference", "display_name": "Run MoGe Inference", "description": "Run MoGe on a single image to estimate depth and geometry.", "python_module": "comfy_extras.nodes_moge", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["moge", "depth", "geometry", "depth estimation", "geometry estimation"], "essentials_category": null, "has_intermediate_output": false}, "MoGePanoramaInference": {"input": {"required": {"moge_model": ["MOGE_MODEL", {}], "image": ["IMAGE", {"tooltip": "Equirectangular panorama (any aspect)."}], "resolution_level": ["INT", {"tooltip": "Per-view detail (0 = fastest, 9 = most detailed).", "default": 9, "min": 0, "max": 9}], "split_resolution": ["INT", {"tooltip": "Resolution of each perspective split.", "default": 512, "min": 256, "max": 1024}], "merge_resolution": ["INT", {"tooltip": "Long-side resolution of the merged equirect distance map.", "default": 1920, "min": 256, "max": 8192}], "batch_size": ["INT", {"tooltip": "Views per inference batch (12 splits total).", "default": 4, "min": 1, "max": 12}]}}, "input_order": {"required": ["moge_model", "image", "resolution_level", "split_resolution", "merge_resolution", "batch_size"]}, "is_input_list": false, "output": ["MOGE_GEOMETRY"], "output_is_list": [false], "output_name": ["moge_geometry"], "output_tooltips": [null], "output_matchtypes": null, "name": "MoGePanoramaInference", "display_name": "Run MoGe Panorama Inference", "description": "Run MoGe on an equirectangular panorama by splitting it into 12 perspective views, running inference on each, and merging the results into a single depth map.", "python_module": "comfy_extras.nodes_moge", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["moge", "panorama", "depth", "geometry", "depth estimation", "geometry estimation"], "essentials_category": null, "has_intermediate_output": false}, "MoGeRender": {"input": {"required": {"moge_geometry": ["MOGE_GEOMETRY", {}], "output": ["COMBO", {"tooltip": "DirectX vs OpenGL controls the normal-map green-channel convention. DirectX: green = -Y down (Unreal). OpenGL: green = +Y up (Blender, Substance, Unity, glTF).", "default": "depth", "multiselect": false, "options": ["depth", "depth_colored", "normal_opengl", "normal_directx", "mask"]}]}}, "input_order": {"required": ["moge_geometry", "output"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MoGeRender", "display_name": "Render MoGe Geometry", "description": "Render a depth map or normal map from geometry data", "python_module": "comfy_extras.nodes_moge", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["moge", "render", "geometry", "depth", "normal"], "essentials_category": null, "has_intermediate_output": false}, "MoGePointMapToMesh": {"input": {"required": {"moge_geometry": ["MOGE_GEOMETRY", {}], "batch_index": ["INT", {"tooltip": "Which image of a batched MoGe geometry to mesh. Per-image vertex counts differ, so batches can't be stacked into a single MESH.", "default": 0, "min": 0, "max": 4096}], "decimation": ["INT", {"tooltip": "Vertex stride; 1 = full resolution.", "default": 1, "min": 1, "max": 8}], "discontinuity_threshold": ["FLOAT", {"tooltip": "Drop pixels whose 3x3 depth span exceeds this fraction. 0 = off.", "default": 0.04, "min": 0.0, "max": 1.0, "step": 0.01}], "texture": ["BOOLEAN", {"tooltip": "Carry the source image through as the baseColor texture.", "default": true}]}}, "input_order": {"required": ["moge_geometry", "batch_index", "decimation", "discontinuity_threshold", "texture"]}, "is_input_list": false, "output": ["MESH"], "output_is_list": [false], "output_name": ["MESH"], "output_tooltips": [null], "output_matchtypes": null, "name": "MoGePointMapToMesh", "display_name": "Convert MoGe Point Map to Mesh", "description": "Convert a MoGe point map into a 3D mesh.", "python_module": "comfy_extras.nodes_moge", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["moge", "mesh", "geometry", "point map"], "essentials_category": null, "has_intermediate_output": false}, "LoadMediaPipeFaceLandmarker": {"input": {"required": {"model_name": ["COMBO", {"tooltip": "Face detection model from models/detection/.", "multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["FACE_DETECTION_MODEL"], "output_is_list": [false], "output_name": ["FACE_DETECTION_MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "LoadMediaPipeFaceLandmarker", "display_name": "Load Face Detection Model (MediaPipe)", "description": "", "python_module": "comfy_extras.nodes_mediapipe", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["face", "facial", "mediapipe", "face landmark", "face mesh", "blazeface", "face detection"], "essentials_category": null, "has_intermediate_output": false}, "MediaPipeFaceLandmarker": {"input": {"required": {"face_detection_model": ["FACE_DETECTION_MODEL", {}], "image": ["IMAGE", {}], "detector_variant": ["COMBO", {"tooltip": "Face detector range. 'short' is tuned for close-up faces (within ~2 m of the camera); 'full' covers farther / smaller faces (up to ~5 m) but is slower. 'both' runs both detectors and keeps whichever found more faces per frame (~2\u00d7 detection cost).", "default": "short", "multiselect": false, "options": ["short", "full", "both"]}], "num_faces": ["INT", {"tooltip": "Maximum faces to return per frame. 0 = no cap (return all detected).", "default": 1, "min": 0, "max": 16, "step": 1}], "min_confidence": ["FLOAT", {"tooltip": "BlazeFace score threshold. Lower to catch small/occluded faces.", "advanced": true, "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "missing_frame_fallback": ["COMBO", {"tooltip": "Per-frame behaviour when detection fails in a batch. 'empty' leaves the frame faceless. 'previous' copies the most recent successful detection. 'interpolate' lerps landmarks/bbox/blendshapes between bracketing successful frames. Multi-face: pairs faces across frames by greedy bbox-centre NN.", "advanced": true, "default": "empty", "multiselect": false, "options": ["empty", "previous", "interpolate"]}]}}, "input_order": {"required": ["face_detection_model", "image", "detector_variant", "num_faces", "min_confidence", "missing_frame_fallback"]}, "is_input_list": false, "output": ["FACE_LANDMARKS", "BOUNDING_BOX"], "output_is_list": [false, false], "output_name": ["face_landmarks", "bboxes"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "MediaPipeFaceLandmarker", "display_name": "Detect Face Landmarks (MediaPipe)", "description": "Detects facial landmarks using MediaPipe model.", "python_module": "comfy_extras.nodes_mediapipe", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["face", "facial", "mediapipe", "face landmark", "face mesh", "blazeface", "face detection"], "essentials_category": null, "has_intermediate_output": false}, "MediaPipeFaceMeshVisualize": {"input": {"required": {"face_landmarks": ["FACE_LANDMARKS", {}], "connections": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "'all' = oval+eyes+brows+lips+irises+nose. 'fill' = solid face_oval polygon (silhouette mask). 'custom' = toggle each feature individually (including 'tesselation', the full 2547-edge wireframe).", "options": [{"key": "all", "inputs": {"required": {}}}, {"key": "fill", "inputs": {"required": {}}}, {"key": "custom", "inputs": {"required": {"face_oval": ["BOOLEAN", {"tooltip": "Draw the 'face_oval' connection set.", "default": true}], "lips": ["BOOLEAN", {"tooltip": "Draw the 'lips' connection set.", "default": true}], "left_eye": ["BOOLEAN", {"tooltip": "Draw the 'left_eye' connection set.", "default": true}], "right_eye": ["BOOLEAN", {"tooltip": "Draw the 'right_eye' connection set.", "default": true}], "left_eyebrow": ["BOOLEAN", {"tooltip": "Draw the 'left_eyebrow' connection set.", "default": true}], "right_eyebrow": ["BOOLEAN", {"tooltip": "Draw the 'right_eyebrow' connection set.", "default": true}], "irises": ["BOOLEAN", {"tooltip": "Draw the 'irises' connection set.", "default": true}], "nose": ["BOOLEAN", {"tooltip": "Draw the 'nose' connection set.", "default": true}], "tesselation": ["BOOLEAN", {"tooltip": "Draw the 'tesselation' connection set.", "default": false}]}}}]}], "color": ["COLOR", {"default": "#00ff00", "socketless": true}], "thickness": ["INT", {"tooltip": "Edge line thickness in pixels. 0 disables edge drawing.", "default": 1, "min": 0, "max": 8, "step": 1}], "point_size": ["INT", {"tooltip": "Landmark dot radius in pixels. 0 disables point drawing.", "default": 2, "min": 0, "max": 16, "step": 1}]}, "optional": {"image": ["IMAGE", {"tooltip": "If not connected, a black canvas will be used."}]}}, "input_order": {"required": ["face_landmarks", "connections", "color", "thickness", "point_size"], "optional": ["image"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MediaPipeFaceMeshVisualize", "display_name": "Visualize Face Landmarks (MediaPipe)", "description": "Draws face landmarks mesh on the input image.", "python_module": "comfy_extras.nodes_mediapipe", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["face", "facial", "mediapipe", "face landmark", "face mesh", "blazeface", "face detection", "visualize"], "essentials_category": null, "has_intermediate_output": false}, "MediaPipeFaceMask": {"input": {"required": {"face_landmarks": ["FACE_LANDMARKS", {}], "regions": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "'all' = union of face_oval+lips+eyes+irises (which collapses to face_oval since it encloses the rest). 'custom' = toggle each region individually for combos like lips+eyes.", "options": [{"key": "all", "inputs": {"required": {}}}, {"key": "custom", "inputs": {"required": {"face_oval": ["BOOLEAN", {"tooltip": "Include the 'face_oval' region in the mask.", "default": true}], "lips": ["BOOLEAN", {"tooltip": "Include the 'lips' region in the mask.", "default": false}], "left_eye": ["BOOLEAN", {"tooltip": "Include the 'left_eye' region in the mask.", "default": false}], "right_eye": ["BOOLEAN", {"tooltip": "Include the 'right_eye' region in the mask.", "default": false}], "irises": ["BOOLEAN", {"tooltip": "Include the 'irises' region in the mask.", "default": false}]}}}]}]}}, "input_order": {"required": ["face_landmarks", "regions"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "MediaPipeFaceMask", "display_name": "Draw Face Mask (MediaPipe)", "description": "Draws a mask from face landmarks.", "python_module": "comfy_extras.nodes_mediapipe", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["face", "facial", "mediapipe", "face mask", "blazeface", "face detection", "visualize"], "essentials_category": null, "has_intermediate_output": false}, "SplatToFile3D": {"input": {"required": {"splat": ["SPLAT", {}], "format": ["COMBO", {"tooltip": "ply: standard 3D Gaussian Splat with full spherical harmonics. ksplat: mkkellogg SplatBuffer (level 0, uncompressed), base color only spz: Niantic gzip-compressed (~10x smaller), base color only ", "multiselect": false, "options": ["ply", "ksplat", "spz"]}]}}, "input_order": {"required": ["splat", "format"]}, "is_input_list": false, "output": ["FILE_3D_SPLAT_ANY"], "output_is_list": [false], "output_name": ["model_3d"], "output_tooltips": [null], "output_matchtypes": null, "name": "SplatToFile3D", "display_name": "Create 3D File (from Splat)", "description": "Serialize a gaussian splat to a File3D object for Save / Preview 3D nodes. Supports one item per batch only.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["gaussian to ply", "splat to file", "export gaussian"], "essentials_category": null, "has_intermediate_output": false}, "File3DToSplat": {"input": {"required": {"model_3d": ["FILE_3D,FILE_3D_SPLAT_ANY,FILE_3D_PLY,FILE_3D_SPLAT,FILE_3D_KSPLAT,FILE_3D_SPZ", {"tooltip": "A gaussian splat 3D file"}]}}, "input_order": {"required": ["model_3d"]}, "is_input_list": false, "output": ["SPLAT"], "output_is_list": [false], "output_name": ["splat"], "output_tooltips": [null], "output_matchtypes": null, "name": "File3DToSplat", "display_name": "Get Splat", "description": "Parse a splat File3D into a gaussian splat. Inverse of Create 3D File (from Splat). Supported format: PLY, SPLAT, KSPLAT, SPZ. PLY carries full spherical harmonics, the other formats are base color only. Format is auto-detected from the file contents.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["load splat", "ply to splat", "import splat", "file to splat"], "essentials_category": null, "has_intermediate_output": false}, "RenderSplat": {"input": {"required": {"splat": ["SPLAT", {}], "width": ["INT", {"default": 1024, "min": 64, "max": 2048, "step": 8}], "height": ["INT", {"default": 1024, "min": 64, "max": 2048, "step": 8}], "frames": ["INT", {"tooltip": "-1, 0, 1 = single still image; >1 = turntable, the camera orbits over a full 360 turn (works with any camera_info). Negative value orbits the other way.", "default": 1, "min": -240, "max": 240}], "splat_scale": ["FLOAT", {"tooltip": "Multiplier on each splat's projected footprint (lower = crisper points, higher = softer/fuller surface).", "advanced": true, "default": 1.0, "min": 0.1, "max": 5.0, "step": 0.05}], "sharpen": ["FLOAT", {"tooltip": "Sharpen overlapping splats: 1.0 = physically-correct blend; higher biases each pixel toward its dominant (nearest) splat for crisper texture, without shrinking splats or opening gaps. Non-physical above 1.", "default": 2.0, "min": 1.0, "max": 8.0, "step": 0.5}], "headlight_shading": ["FLOAT", {"tooltip": "Diffuse shading from a light at the camera (headlight), using the splat surfel normals: darkens surfaces that turn away from view to reveal form/curvature. 0 = flat albedo, 1 = strongest shading.", "advanced": true, "default": 0.0, "min": 0.0, "max": 3.0, "step": 0.05}], "opacity_threshold": ["FLOAT", {"tooltip": "Cull gaussians with opacity below this (removes faint floaters).", "advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}], "render_style": ["COMBO", {"tooltip": "What the image output shows: color, clay (neutral-albedo shaded), depth (near=bright), normal (OpenGL normal map).", "multiselect": false, "options": ["color", "clay", "depth", "normal"]}], "background": ["COLOR", {"default": "#000000", "socketless": true}]}, "optional": {"bg_image": ["IMAGE", {"tooltip": "Optional background plate composited behind the splat (overrides the solid background colour). Resized to the render size; a batch is used per frame, a single image for all. color/clay only."}], "camera_info": ["LOAD3D_CAMERA", {"tooltip": "Camera to render from - a Load3D / Preview3D camera or a Create Camera Info node. If empty, the splat is auto-framed from a default 3/4 view."}]}}, "input_order": {"required": ["splat", "width", "height", "frames", "splat_scale", "sharpen", "headlight_shading", "opacity_threshold", "render_style", "background"], "optional": ["bg_image", "camera_info"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["image", "mask"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "RenderSplat", "display_name": "Render Splat", "description": "Render a gaussian splat as an image with an anisotropic EWA rasterizer (oriented elliptical splats, antialiased, depth-sorted front-to-back). The camera comes from a camera_info input (Load / Preview 3D, or a Create Camera Info node); leave it empty to auto-frame the splat. Set frames greater than 1 for a turntable batch of images to feed a Video node.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["splat to image", "render splat", "gaussian turntable"], "essentials_category": null, "has_intermediate_output": false}, "CreateCameraInfo": {"input": {"required": {"mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "How to define the camera: orbit angles, an explicit position, or a position + quaternion.", "options": [{"key": "orbit", "inputs": {"required": {"yaw": ["FLOAT", {"default": 35.0, "min": -360.0, "max": 360.0, "step": 1.0}], "pitch": ["FLOAT", {"default": 30.0, "min": -89.0, "max": 89.0, "step": 1.0}], "distance": ["FLOAT", {"tooltip": "Camera distance from the target.", "default": 4.0, "min": 0.01, "max": 1000.0, "step": 0.01}]}}}, {"key": "look_at", "inputs": {"required": {"position_x": ["FLOAT", {"tooltip": "Camera position in world space (right-handed, Y-up).", "default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "position_y": ["FLOAT", {"default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "position_z": ["FLOAT", {"default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}]}}}, {"key": "quaternion", "inputs": {"required": {"position_x": ["FLOAT", {"tooltip": "Camera position in world space (right-handed, Y-up).", "default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "position_y": ["FLOAT", {"default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "position_z": ["FLOAT", {"default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "quat_x": ["FLOAT", {"default": 0.0, "min": -1.0, "max": 1.0, "step": 0.001}], "quat_y": ["FLOAT", {"default": 0.0, "min": -1.0, "max": 1.0, "step": 0.001}], "quat_z": ["FLOAT", {"default": 0.0, "min": -1.0, "max": 1.0, "step": 0.001}], "quat_w": ["FLOAT", {"tooltip": "Camera world-rotation quaternion (three.js: looks down local -Z). Normalized for you.", "default": 1.0, "min": -1.0, "max": 1.0, "step": 0.001}]}}}]}], "target_x": ["FLOAT", {"tooltip": "Look-at point (orbit pivot / aim). In orbit mode, move it to pan/translate the whole camera. Ignored in quaternion mode. Defaults to the origin.", "advanced": true, "default": 0.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "target_y": ["FLOAT", {"advanced": true, "default": 0.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "target_z": ["FLOAT", {"advanced": true, "default": 0.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "roll": ["FLOAT", {"tooltip": "Camera roll about the view axis, degrees.", "default": 0.0, "min": -180.0, "max": 180.0, "step": 1.0}], "fov": ["FLOAT", {"tooltip": "Vertical field of view in degrees.", "default": 35.0, "min": 1.0, "max": 120.0, "step": 1.0}], "zoom": ["FLOAT", {"tooltip": "Digital zoom (focal-length multiplier). >1 zooms in without moving the camera.", "default": 1.0, "min": 0.01, "max": 100.0, "step": 0.01}], "camera_type": ["COMBO", {"tooltip": "Projection used by Render Splat: perspective (foreshortening) or orthographic (parallel).", "multiselect": false, "options": ["perspective", "orthographic"]}]}}, "input_order": {"required": ["mode", "target_x", "target_y", "target_z", "roll", "fov", "zoom", "camera_type"]}, "is_input_list": false, "output": ["LOAD3D_CAMERA"], "output_is_list": [false], "output_name": ["camera_info"], "output_tooltips": [null], "output_matchtypes": null, "name": "CreateCameraInfo", "display_name": "Create Camera Info", "description": "Build a camera_infoMode 'orbit' aims with yaw/pitch/distance around the target; 'look_at' places the camera at world position. Coordinates are the viewer's world space (right-handed,Y-up).", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["camera position", "make camera info", "orbit camera", "look at camera"], "essentials_category": null, "has_intermediate_output": false}, "TransformSplat": {"input": {"required": {"splat": ["SPLAT", {}], "translate_x": ["FLOAT", {"default": 0.0, "min": -100.0, "max": 100.0, "step": 0.01}], "translate_y": ["FLOAT", {"default": 0.0, "min": -100.0, "max": 100.0, "step": 0.01}], "translate_z": ["FLOAT", {"default": 0.0, "min": -100.0, "max": 100.0, "step": 0.01}], "rotate_x": ["FLOAT", {"default": 0.0, "min": -360.0, "max": 360.0, "step": 1.0}], "rotate_y": ["FLOAT", {"default": 0.0, "min": -360.0, "max": 360.0, "step": 1.0}], "rotate_z": ["FLOAT", {"default": 0.0, "min": -360.0, "max": 360.0, "step": 1.0}], "scale_x": ["FLOAT", {"default": 1.0, "min": 0.01, "max": 100.0, "step": 0.01}], "scale_y": ["FLOAT", {"default": 1.0, "min": 0.01, "max": 100.0, "step": 0.01}], "scale_z": ["FLOAT", {"default": 1.0, "min": 0.01, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["splat", "translate_x", "translate_y", "translate_z", "rotate_x", "rotate_y", "rotate_z", "scale_x", "scale_y", "scale_z"]}, "is_input_list": false, "output": ["SPLAT"], "output_is_list": [false], "output_name": ["splat"], "output_tooltips": [null], "output_matchtypes": null, "name": "TransformSplat", "display_name": "Transform Splat", "description": "Translate, rotate, and scale a gaussian splat. Non-uniform scale also reshapes every individual splat, slower process.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["move splat", "rotate splat", "scale splat", "gaussian transform"], "essentials_category": null, "has_intermediate_output": false}, "GetSplatCount": {"input": {"required": {"splat": ["SPLAT", {}]}, "hidden": {"unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["splat"], "hidden": ["unique_id"]}, "is_input_list": false, "output": ["SPLAT", "INT"], "output_is_list": [false, false], "output_name": ["splat", "count"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "GetSplatCount", "display_name": "Get Splat Count", "description": "Returns the number of splats summed across the batch.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["splat count", "gaussian count", "number of splats", "splat info"], "essentials_category": null, "has_intermediate_output": false}, "MergeSplat": {"input": {"required": {"splats": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"splat": ["SPLAT", {}]}}, "prefix": "splat", "min": 2, "max": 32}}]}}, "input_order": {"required": ["splats"]}, "is_input_list": false, "output": ["SPLAT"], "output_is_list": [false], "output_name": ["splat"], "output_tooltips": [null], "output_matchtypes": null, "name": "MergeSplat", "display_name": "Merge Splats", "description": "Concatenate any number of gaussian splats into one. Unioning several decodes of the same latent at different seeds densifies the surface, this can improve surface quality when meshing.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["union splat", "densify gaussian", "combine splat", "merge gaussian"], "essentials_category": null, "has_intermediate_output": false}, "SplatToMesh": {"input": {"required": {"splat": ["SPLAT", {}], "resolution": ["INT", {"tooltip": "Density-grid resolution along the longest axis. Higher = finer surface, more VRAM/time (grows with resolution^3).", "default": 384, "min": 64, "max": 768, "step": 16}], "kernel": ["INT", {"tooltip": "Max splat half-width in voxels. Each gaussian is rasterized over a window sized to its own 3-sigma, capped here - small surfels stay cheap, large ones aren't truncated. Raise if sparse splats leave gaps.", "default": 5, "min": 1, "max": 8}], "smooth": ["INT", {"tooltip": "Taubin mesh-smoothing iterations. Smooths the surface without shrinking it (volume-preserving), unlike blurring the density. 0 = raw surface.", "advanced": true, "default": 0, "min": 0, "max": 60}], "level": ["FLOAT", {"tooltip": "Iso-surface level. Auto-picked by Otsu; this biases it (1.0 = auto, lower = fatter/more-connected surface, higher = thinner/tighter).", "default": 0.4, "min": 0.0, "max": 2.0, "step": 0.01}], "min_component": ["INT", {"tooltip": "Drop connected components smaller than this many vertices (0 = keep all). Removes detached floater blobs and the inner shell of the double wall.", "advanced": true, "default": 500, "min": 0, "max": 100000, "step": 50}], "min_opacity": ["FLOAT", {"tooltip": "Ignore gaussians fainter than this before meshing.", "advanced": true, "default": 0.02, "min": 0.0, "max": 1.0, "step": 0.01}], "color_sharpen": ["FLOAT", {"tooltip": "Crisp up the vertex texture: 1.0 = physically-correct blend; higher biases each voxel's colour toward its dominant gaussian instead of averaging neighbours (de-smears the texture). Colour only - geometry is unchanged.", "default": 2.0, "min": 1.0, "max": 8.0, "step": 0.5}]}}, "input_order": {"required": ["splat", "resolution", "kernel", "smooth", "level", "min_component", "min_opacity", "color_sharpen"]}, "is_input_list": false, "output": ["MESH"], "output_is_list": [false], "output_name": ["mesh"], "output_tooltips": [null], "output_matchtypes": null, "name": "SplatToMesh", "display_name": "Extract Mesh from Splat", "description": "Extract a coloured mesh from a gaussian splat.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["splat to mesh", "gaussian surface nets", "splat surface", "mesh splat"], "essentials_category": null, "has_intermediate_output": false}, "TripoSplatPreprocessImage": {"input": {"required": {"image": ["IMAGE", {}], "mask": ["MASK", {}], "erode_radius": ["INT", {"tooltip": "Erode the alpha matte by this pixel radius before cropping (avoids border bleed).", "default": 1, "min": 0, "max": 16}], "size": ["INT", {"tooltip": "Square image size. The model is trained at 1024; other sizes run but are off-distribution.", "default": 1024, "min": 256, "max": 4096, "step": 16}]}}, "input_order": {"required": ["image", "mask", "erode_radius", "size"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["image"], "output_tooltips": [null], "output_matchtypes": null, "name": "TripoSplatPreprocessImage", "display_name": "TripoSplat Preprocess Image", "description": "Crop center each image to a square canvas on a black background and add padding.", "python_module": "comfy_extras.nodes_triposplat", "category": "model/conditioning/triposplat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoSplatConditioning": {"input": {"required": {"clip_vision": ["CLIP_VISION", {"tooltip": "DINOv3 ViT-H/16+ image encoder"}], "vae": ["VAE", {"tooltip": "Flux2 VAE"}], "image": ["IMAGE", {}]}}, "input_order": {"required": ["clip_vision", "vae", "image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, "The fixed size noise target (latent +camera)."], "output_matchtypes": null, "name": "TripoSplatConditioning", "display_name": "TripoSplat Conditioning", "description": "Encode the image with DINOv3 and the Flux2 VAE into TripoSplat positive/negative conditioning, and create the fixed size noise target (latent + camera) for the KSampler", "python_module": "comfy_extras.nodes_triposplat", "category": "model/conditioning/triposplat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VAEDecodeTripoSplat": {"input": {"required": {"samples": ["LATENT", {}], "vae": ["VAE", {"tooltip": "TripoSplat VAE decoder"}], "num_gaussians": ["INT", {"tooltip": "Number of gaussians to produce (rounded to a multiple of 32). 262144 matches the octree's point density; higher oversamples the same points (denser, but no new detail) and costs proportionally more VRAM/time.", "default": 262144, "min": 32768, "max": 1048576, "step": 32}], "seed": ["INT", {"tooltip": "Seeds the octree point sampler (global RNG) for deterministic decodes.", "default": 0, "min": 0, "max": 18446744073709551615}]}}, "input_order": {"required": ["samples", "vae", "num_gaussians", "seed"]}, "is_input_list": false, "output": ["SPLAT"], "output_is_list": [false], "output_name": ["splat"], "output_tooltips": [null], "output_matchtypes": null, "name": "VAEDecodeTripoSplat", "display_name": "TripoSplat Decode", "description": "Decode the sampled TripoSplat latent into a 3D gaussian splat. Modify the number of gaussians to vary the density.", "python_module": "comfy_extras.nodes_triposplat", "category": "3d/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoSplatSamplingPreview": {"input": {"required": {"model": ["MODEL", {}], "vae": ["VAE", {"tooltip": "TripoSplat VAE decoder"}], "octree_level": ["INT", {"tooltip": "Octree depth for the preview decode (lower = cheaper/coarser).", "advanced": true, "default": 5, "min": 2, "max": 8}], "num_gaussians": ["INT", {"tooltip": "Number of gaussians to produce for the preview (rounded to a multiple of 32).", "default": 16384, "min": 1024, "max": 262144, "step": 32}], "yaw": ["FLOAT", {"tooltip": "Preview camera yaw in degrees.", "advanced": true, "default": 90.0, "min": -360.0, "max": 360.0, "step": 1.0}], "pitch": ["FLOAT", {"tooltip": "Preview camera pitch in degrees.", "advanced": true, "default": 15.0, "min": -89.0, "max": 89.0, "step": 1.0}], "point_size": ["INT", {"tooltip": "Maximum splat radius in pixels. Each gaussian is sized from its scale and capped here; lower = finer/pointier, higher = chunkier.", "default": 3, "min": 1, "max": 16}]}}, "input_order": {"required": ["model", "vae", "octree_level", "num_gaussians", "yaw", "pitch", "point_size"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "TripoSplatSamplingPreview", "display_name": "TripoSplat Sampling Preview", "description": "Patch the TripoSplat model for the standard Ksampler node to show a live decoded gaussian splat preview at each step.", "python_module": "comfy_extras.nodes_triposplat", "category": "3d/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LoadDA3Model": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": []}], "weight_dtype": ["COMBO", {"default": "default", "multiselect": false, "options": ["default", "fp16", "bf16", "fp32"]}]}}, "input_order": {"required": ["model_name", "weight_dtype"]}, "is_input_list": false, "output": ["DA3_MODEL"], "output_is_list": [false], "output_name": ["DA3_MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "LoadDA3Model", "display_name": "Load Depth Anything 3", "description": "", "python_module": "comfy_extras.nodes_depth_anything_3", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "DA3Inference": {"input": {"required": {"da3_model": ["DA3_MODEL", {}], "image": ["IMAGE", {}], "resolution": ["INT", {"tooltip": "Resolution the model runs at (longest side, multiple of 14).\nLower = faster / less VRAM.\nHigher = more detail.\nOutput is upsampled back to the original size.", "default": 504, "min": 140, "max": 2520, "step": 14}], "resize_method": ["COMBO", {"tooltip": "upper_bound_resize: scale so the longest side = resolution (caps memory, default).\nlower_bound_resize: scale so the shortest side = resolution (preserves more detail on tall/wide images, uses more memory).", "default": "upper_bound_resize", "multiselect": false, "options": ["upper_bound_resize", "lower_bound_resize"]}], "mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "mono: single view image (works with any model variant).\nmultiview: all images processed together for geometric consistency + camera pose (for Small/Base models only).", "options": [{"key": "mono", "inputs": {"required": {}}}, {"key": "multiview", "inputs": {"required": {"ref_view_strategy": ["COMBO", {"tooltip": "Which view acts as the geometric anchor.\n- saddle_balanced: the view most 'average' across all others (best general choice).\n- saddle_sim_range: the view most visually distinct from the others.\n- first / middle: fixed positional picks.", "default": "saddle_balanced", "multiselect": false, "options": ["saddle_balanced", "saddle_sim_range", "first", "middle"]}], "pose_method": ["COMBO", {"tooltip": "How the camera field-of-view is estimated (for Small/Base models only).\n- cam_dec: learned from image features.\n- ray_pose: derived geometrically from the model's 3D ray output.\nAffects perspective correctness of the 3D output. Try both if results look distorted.", "default": "cam_dec", "multiselect": false, "options": ["cam_dec", "ray_pose"]}]}}}]}]}}, "input_order": {"required": ["da3_model", "image", "resolution", "resize_method", "mode"]}, "is_input_list": false, "output": ["DA3_GEOMETRY"], "output_is_list": [false], "output_name": ["da3_geometry"], "output_tooltips": ["Dictionary of non-normalized tensors.\nAlways has the keys: depth, image, mode.\nOptional keys: sky (for Mono/Metric), confidence (for Small/Base), extrinsics + intrinsics (for multi-view)."], "output_matchtypes": null, "name": "DA3Inference", "display_name": "Run Depth Anything 3", "description": "Run Depth Anything 3 on an image. In multi-view mode each image is treated as a separate view of the same scene.", "python_module": "comfy_extras.nodes_depth_anything_3", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["depth", "geometry", "da3", "depth anything", "monocular", "pointmap", "sky", "3d", "metric depth", "disparity"], "essentials_category": null, "has_intermediate_output": false}, "DA3Render": {"input": {"required": {"da3_geometry": ["DA3_GEOMETRY", {}], "output": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "- depth: normalised greyscale depth image.\n- depth_colored: depth mapped through the Turbo colormap.\n- sky_mask: sky probability in [0, 1] (for Mono/Metric models only).\n- confidence: normalised depth confidence (for Small/Base models only).", "options": [{"key": "depth", "inputs": {"required": {"normalization": ["COMBO", {"tooltip": "- v2_style: mean/std normalisation for perceptually balanced results (default).\n- min_max: stretches the full depth range to [0, 1] for maximum contrast.\n- raw: no scaling,preserves metric units for Metric model.", "default": "v2_style", "multiselect": false, "options": ["v2_style", "min_max", "raw"]}], "apply_sky_clip": ["BOOLEAN", {"tooltip": "Clip sky-region depth to the 99th percentile of foreground depth before normalisation. Requires a sky key in the da3_geometry input (for Mono/Metric models only).", "default": false}]}}}, {"key": "depth_colored", "inputs": {"required": {"normalization": ["COMBO", {"tooltip": "- v2_style: mean/std normalisation for perceptually balanced results (default).\n- min_max: stretches the full depth range to [0, 1] for maximum contrast.\n- raw: no scaling,preserves metric units for Metric model.", "default": "v2_style", "multiselect": false, "options": ["v2_style", "min_max", "raw"]}], "apply_sky_clip": ["BOOLEAN", {"tooltip": "Clip sky-region depth to the 99th percentile of foreground depth before normalisation. Requires a sky key in the da3_geometry input (for Mono/Metric models only).", "default": false}]}}}, {"key": "sky_mask", "inputs": {"required": {"colored": ["BOOLEAN", {"tooltip": "Apply the Turbo colormap to the sky mask.", "default": false}]}}}, {"key": "confidence", "inputs": {"required": {"colored": ["BOOLEAN", {"tooltip": "Apply the Turbo colormap to the confidence map.", "default": false}]}}}]}]}}, "input_order": {"required": ["da3_geometry", "output"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "DA3Render", "display_name": "Render Depth Anything 3", "description": "Render a depth map, confidence map, or sky mask from Depth Anything 3 geometry data.", "python_module": "comfy_extras.nodes_depth_anything_3", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "DA3GeometryToMesh": {"input": {"required": {"da3_geometry": ["DA3_GEOMETRY", {}], "batch_index": ["INT", {"tooltip": "Which image of a batch to convert. Per-image vertex counts differ so batches cannot be stacked.", "default": 0, "min": 0, "max": 4096}], "decimation": ["INT", {"tooltip": "Vertex stride. 1 = full resolution, 2 = half, etc.", "default": 1, "min": 1, "max": 8}], "discontinuity_threshold": ["FLOAT", {"tooltip": "Drop triangles whose 3x3 depth span exceeds this fraction. 0 = off.", "default": 0.04, "min": 0.0, "max": 1.0, "step": 0.01}], "confidence_threshold": ["FLOAT", {"tooltip": "Exclude pixels whose per-image normalised confidence is below this value (0 = keep all, 1 = keep only the single most confident pixel). Used when the geometry has a confidence map (Small/Base models).", "default": 0.1, "min": 0.0, "max": 1.0, "step": 0.01}], "use_sky_mask": ["BOOLEAN", {"tooltip": "Exclude sky-probability pixels (sky >= 0.5) from the mesh. Used when the geometry has a sky map (Mono/Metric models).", "default": true}], "texture": ["BOOLEAN", {"tooltip": "Use the source image as a base color texture.", "default": true}]}}, "input_order": {"required": ["da3_geometry", "batch_index", "decimation", "discontinuity_threshold", "confidence_threshold", "use_sky_mask", "texture"]}, "is_input_list": false, "output": ["MESH"], "output_is_list": [false], "output_name": ["MESH"], "output_tooltips": [null], "output_matchtypes": null, "name": "DA3GeometryToMesh", "display_name": "Convert DA3 Geometry to Mesh", "description": "Convert a depth map into a triangulated 3D mesh.", "python_module": "comfy_extras.nodes_depth_anything_3", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["da3", "depth anything", "mesh", "geometry", "3d", "triangulate"], "essentials_category": null, "has_intermediate_output": false}, "SeedNode": {"input": {"required": {"seed": ["INT", {"min": 0, "max": 9223372036854775807, "control_after_generate": "fixed"}]}}, "input_order": {"required": ["seed"]}, "is_input_list": false, "output": ["INT"], "output_is_list": [false], "output_name": ["seed"], "output_tooltips": [null], "output_matchtypes": null, "name": "SeedNode", "display_name": "Seed", "description": "", "python_module": "comfy_extras.nodes_seed", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["seed", "random"], "essentials_category": null, "has_intermediate_output": false}, "ClaudeNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text input to the model.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The Claude model used to generate the response.", "options": [{"key": "Opus 4.7", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate (includes reasoning tokens when enabled).", "advanced": true, "default": 32768, "min": 4096, "max": 64000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7 and any model when reasoning_effort is set.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "reasoning_effort": ["COMBO", {"tooltip": "Extended thinking effort. 'off' disables reasoning.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "Opus 4.6", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate (includes reasoning tokens when enabled).", "advanced": true, "default": 32768, "min": 4096, "max": 64000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7 and any model when reasoning_effort is set.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "reasoning_effort": ["COMBO", {"tooltip": "Extended thinking effort. 'off' disables reasoning.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "Sonnet 4.6", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate (includes reasoning tokens when enabled).", "advanced": true, "default": 32768, "min": 4096, "max": 64000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7 and any model when reasoning_effort is set.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "reasoning_effort": ["COMBO", {"tooltip": "Extended thinking effort. 'off' disables reasoning.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "Sonnet 4.5", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate (includes reasoning tokens when enabled).", "advanced": true, "default": 32768, "min": 4096, "max": 64000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7 and any model when reasoning_effort is set.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "reasoning_effort": ["COMBO", {"tooltip": "Extended thinking effort. 'off' disables reasoning.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "Haiku 4.5", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate (includes reasoning tokens when enabled).", "advanced": true, "default": 32768, "min": 4096, "max": 64000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7 and any model when reasoning_effort is set.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional image(s) to use as context for the model. Up to 20 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}, "optional": {"system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate the model's behavior.", "advanced": true, "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed", "images"], "optional": ["system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "ClaudeNode", "display_name": "Anthropic Claude", "description": "Generate text responses with Anthropic's Claude models. Provide a text prompt and optionally one or more images for multimodal context.", "python_module": "comfy_api_nodes.nodes_anthropic", "category": "partner/text/Anthropic", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $contains($m, \"opus\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.005, 0.025],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"sonnet\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.003, 0.015],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"haiku\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.001, 0.005],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : {\"type\":\"text\", \"text\":\"Token-based\"}\n )\n "}, "search_aliases": null, "essentials_category": "Text Generation", "has_intermediate_output": false}, "BeebleSwitchXVideoEdit": {"input": {"required": {"video": ["VIDEO", {}], "prompt": ["STRING", {"tooltip": "Text description of the desired output (max 2000 chars). At least one of 'prompt' or 'reference_image' is required.", "default": "", "multiline": true}], "alpha_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Controls how SwitchX decides what to keep vs. regenerate. 'auto' isolates the main subject automatically. 'fill' regenerates the entire frame while preserving geometry. 'select' propagates a first-frame keyframe across the clip. 'custom' uses a per-frame alpha matte you provide.", "options": [{"key": "auto", "inputs": {"required": {}}}, {"key": "fill", "inputs": {"required": {}}}, {"key": "select", "inputs": {"required": {"alpha_keyframe": ["MASK", {"tooltip": "First-frame keyframe mask. Beeble propagates this across the video."}]}}}, {"key": "custom", "inputs": {"required": {"alpha_mask": ["MASK", {"tooltip": "Per-frame grayscale mask covering the entire video. Must have the same frame count as the source. Connect a MASK output from SAM3_TrackToMask or similar."}]}}}]}], "max_resolution": ["COMBO", {"tooltip": "Maximum output resolution.", "default": "1080p", "multiselect": false, "options": ["1080p", "720p"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"reference_image": ["IMAGE", {"tooltip": "Reference image whose look (background, lighting, costume) the result should adopt. At least one of 'reference_image' or 'prompt' is required."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "prompt", "alpha_mode", "max_resolution", "seed"], "optional": ["reference_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "VIDEO"], "output_is_list": [false, false], "output_name": ["video", "alpha"], "output_tooltips": [null, "The alpha matte Beeble used. Empty for 'fill' mode, which has no separate matte."], "output_matchtypes": null, "name": "BeebleSwitchXVideoEdit", "display_name": "Beeble SwitchX Video Edit", "description": "Edit a video with Beeble SwitchX. Switches anything in the scene (background, lighting, costume) while preserving the original subject's pixels and motion. Provide a reference image and/or text prompt to describe the new look. Max 240 frames, max ~2.77MP per frame.", "python_module": "comfy_api_nodes.nodes_beeble", "category": "partner/video/Beeble", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "max_resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rate := widgets.max_resolution = \"1080p\" ? 0.429 : 0.143;\n {\"type\":\"usd\",\"usd\": $rate, \"format\":{\"suffix\":\"/30 frames\"}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BeebleSwitchXImageEdit": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Text description of the desired output (max 2000 chars). At least one of 'prompt' or 'reference_image' is required.", "default": "", "multiline": true}], "alpha_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Controls how SwitchX decides what to keep vs. regenerate. 'auto' isolates the main subject automatically. 'fill' regenerates the entire frame while preserving geometry. 'select' propagates a first-frame keyframe across the clip. 'custom' uses a per-frame alpha matte you provide.", "options": [{"key": "auto", "inputs": {"required": {}}}, {"key": "fill", "inputs": {"required": {}}}, {"key": "select", "inputs": {"required": {"alpha_keyframe": ["MASK", {"tooltip": "Grayscale keyframe mask."}]}}}, {"key": "custom", "inputs": {"required": {"alpha_mask": ["MASK", {"tooltip": "Grayscale mask to apply."}]}}}]}], "max_resolution": ["COMBO", {"tooltip": "Maximum output resolution.", "default": "1080p", "multiselect": false, "options": ["1080p", "720p"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"reference_image": ["IMAGE", {"tooltip": "Reference image whose look (background, lighting, costume) the result should adopt. At least one of 'reference_image' or 'prompt' is required."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "alpha_mode", "max_resolution", "seed"], "optional": ["reference_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["image", "alpha"], "output_tooltips": [null, "The alpha matte Beeble used. Empty for 'fill' mode, which has no separate matte."], "output_matchtypes": null, "name": "BeebleSwitchXImageEdit", "display_name": "Beeble SwitchX Image Edit", "description": "Edit a single image with Beeble SwitchX. Switches anything in the scene (background, lighting, costume) while preserving the original subject's pixels. Provide a reference image and/or text prompt to describe the new look. Max ~2.77MP.", "python_module": "comfy_api_nodes.nodes_beeble", "category": "partner/image/Beeble", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "max_resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rate := widgets.max_resolution = \"1080p\" ? 0.429 : 0.143;\n {\"type\":\"usd\",\"usd\": $rate}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxProUltraImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation, but results are nondeterministic (same seed will not produce exactly the same result).", "advanced": true, "default": false}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "aspect_ratio": ["STRING", {"tooltip": "Aspect ratio of image; must be between 1:4 and 4:1.", "default": "16:9", "multiline": false}], "raw": ["BOOLEAN", {"tooltip": "When True, generate less processed, more natural-looking images.", "default": false}]}, "optional": {"image_prompt": ["IMAGE", {}], "image_prompt_strength": ["FLOAT", {"tooltip": "Blend between the prompt and the image prompt.", "default": 0.1, "min": 0.0, "max": 1.0, "step": 0.01}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "prompt_upsampling", "seed", "aspect_ratio", "raw"], "optional": ["image_prompt", "image_prompt_strength"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxProUltraImageNode", "display_name": "Flux 1.1 [pro] Ultra Image", "description": "Generates images using Flux Pro 1.1 Ultra via api based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.06}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxKontextProImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation - specify what and how to edit.", "default": "", "multiline": true}], "aspect_ratio": ["STRING", {"tooltip": "Aspect ratio of image; must be between 1:4 and 4:1.", "default": "16:9", "multiline": false}], "guidance": ["FLOAT", {"tooltip": "Guidance strength for the image generation process", "default": 3.0, "min": 0.1, "max": 99.0, "step": 0.1}], "steps": ["INT", {"tooltip": "Number of steps for the image generation process", "default": 50, "min": 1, "max": 150}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 1234, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation, but results are nondeterministic (same seed will not produce exactly the same result).", "advanced": true, "default": false}]}, "optional": {"input_image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "aspect_ratio", "guidance", "steps", "seed", "prompt_upsampling"], "optional": ["input_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxKontextProImageNode", "display_name": "Flux.1 Kontext [pro] Image", "description": "Edits images using Flux.1 Kontext [pro] via api based on prompt and aspect ratio.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxKontextMaxImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation - specify what and how to edit.", "default": "", "multiline": true}], "aspect_ratio": ["STRING", {"tooltip": "Aspect ratio of image; must be between 1:4 and 4:1.", "default": "16:9", "multiline": false}], "guidance": ["FLOAT", {"tooltip": "Guidance strength for the image generation process", "default": 3.0, "min": 0.1, "max": 99.0, "step": 0.1}], "steps": ["INT", {"tooltip": "Number of steps for the image generation process", "default": 50, "min": 1, "max": 150}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 1234, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation, but results are nondeterministic (same seed will not produce exactly the same result).", "advanced": true, "default": false}]}, "optional": {"input_image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "aspect_ratio", "guidance", "steps", "seed", "prompt_upsampling"], "optional": ["input_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxKontextMaxImageNode", "display_name": "Flux.1 Kontext [max] Image", "description": "Edits images using Flux.1 Kontext [pro] via api based on prompt and aspect ratio.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxProExpandNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation, but results are nondeterministic (same seed will not produce exactly the same result).", "advanced": true, "default": false}], "top": ["INT", {"tooltip": "Number of pixels to expand at the top of the image", "default": 0, "min": 0, "max": 2048}], "bottom": ["INT", {"tooltip": "Number of pixels to expand at the bottom of the image", "default": 0, "min": 0, "max": 2048}], "left": ["INT", {"tooltip": "Number of pixels to expand at the left of the image", "default": 0, "min": 0, "max": 2048}], "right": ["INT", {"tooltip": "Number of pixels to expand at the right of the image", "default": 0, "min": 0, "max": 2048}], "guidance": ["FLOAT", {"tooltip": "Guidance strength for the image generation process", "default": 60, "min": 1.5, "max": 100}], "steps": ["INT", {"tooltip": "Number of steps for the image generation process", "default": 50, "min": 15, "max": 50}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "prompt_upsampling", "top", "bottom", "left", "right", "guidance", "steps", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxProExpandNode", "display_name": "Flux.1 Expand Image", "description": "Outpaints image based on prompt.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.05}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxProFillNode": {"input": {"required": {"image": ["IMAGE", {}], "mask": ["MASK", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation, but results are nondeterministic (same seed will not produce exactly the same result).", "advanced": true, "default": false}], "guidance": ["FLOAT", {"tooltip": "Guidance strength for the image generation process", "default": 60, "min": 1.5, "max": 100}], "steps": ["INT", {"tooltip": "Number of steps for the image generation process", "default": 50, "min": 15, "max": 50}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "mask", "prompt", "prompt_upsampling", "guidance", "steps", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxProFillNode", "display_name": "Flux.1 Fill Image", "description": "Inpaints image based on mask and prompt.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.05}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxEraseNode": {"input": {"required": {"image": ["IMAGE", {}], "mask": ["MASK", {"tooltip": "White areas are removed; black areas are preserved."}], "dilate_pixels": ["INT", {"tooltip": "Expands the mask boundaries to ensure clean coverage of the object's edges.", "default": 10, "min": 0, "max": 25}]}, "optional": {"seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "mask", "dilate_pixels"], "optional": ["seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxEraseNode", "display_name": "Flux Erase Image", "description": "Removes the masked object from an image and reconstructs the background. Paint the mask over what you want to erase.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"range_usd\",\"min_usd\":0.03,\"max_usd\":0.06,\"format\":{\"approximate\":true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxVTONode": {"input": {"required": {"person": ["IMAGE", {"tooltip": "Image of the person to dress."}], "garment": ["IMAGE", {"tooltip": "Image of the garment to apply."}], "prompt": ["STRING", {"tooltip": "Optional natural-language styling instruction (e.g. how the garment should fit).", "default": "", "multiline": true}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["person", "garment", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxVTONode", "display_name": "Flux Virtual Try-On", "description": "Virtual try-on: dresses the person in the provided garment.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"range_usd\",\"min_usd\":0.0375,\"max_usd\":0.075,\"format\":{\"approximate\":true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Flux2ProImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation or edit", "default": "", "multiline": true}], "width": ["INT", {"default": 1024, "min": 256, "max": 2048, "step": 32}], "height": ["INT", {"default": 768, "min": 256, "max": 2048, "step": 32}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation.", "advanced": true, "default": true}]}, "optional": {"images": ["IMAGE", {"tooltip": "Up to 9 images to be used as references."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "width", "height", "seed", "prompt_upsampling"], "optional": ["images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Flux2ProImageNode", "display_name": "Flux.2 [pro] Image", "description": "Generates images synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "width", "type": "INT"}, {"name": "height", "type": "INT"}], "inputs": ["images"], "input_groups": []}, "expr": "\n (\n $MP := 1024 * 1024;\n $outMP := $max([1, $floor(((widgets.width * widgets.height) + $MP - 1) / $MP)]);\n $outputCost := 0.03 + 0.015 * ($outMP - 1);\n inputs.images.connected\n ? {\n \"type\":\"range_usd\",\n \"min_usd\": $outputCost + 0.015,\n \"max_usd\": $outputCost + 0.12,\n \"format\": { \"approximate\": true }\n }\n : {\"type\":\"usd\",\"usd\": $outputCost}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Flux2MaxImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation or edit", "default": "", "multiline": true}], "width": ["INT", {"default": 1024, "min": 256, "max": 2048, "step": 32}], "height": ["INT", {"default": 768, "min": 256, "max": 2048, "step": 32}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation.", "advanced": true, "default": true}]}, "optional": {"images": ["IMAGE", {"tooltip": "Up to 9 images to be used as references."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "width", "height", "seed", "prompt_upsampling"], "optional": ["images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Flux2MaxImageNode", "display_name": "Flux.2 [max] Image", "description": "Generates images synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "width", "type": "INT"}, {"name": "height", "type": "INT"}], "inputs": ["images"], "input_groups": []}, "expr": "\n (\n $MP := 1024 * 1024;\n $outMP := $max([1, $floor(((widgets.width * widgets.height) + $MP - 1) / $MP)]);\n $outputCost := 0.07 + 0.03 * ($outMP - 1);\n\n inputs.images.connected\n ? {\n \"type\":\"range_usd\",\n \"min_usd\": $outputCost + 0.03,\n \"max_usd\": $outputCost + 0.24,\n \"format\": { \"approximate\": true }\n }\n : {\"type\":\"usd\",\"usd\": $outputCost}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Flux2ImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation or edit", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Flux.2 [pro]", "inputs": {"required": {"width": ["INT", {"default": 1024, "min": 256, "max": 2048, "step": 32}], "height": ["INT", {"default": 768, "min": 256, "max": 2048, "step": 32}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image-to-image generation. Up to 8 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}, {"key": "Flux.2 [max]", "inputs": {"required": {"width": ["INT", {"default": 1024, "min": 256, "max": 2048, "step": 32}], "height": ["INT", {"default": 768, "min": 256, "max": 2048, "step": 32}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image-to-image generation. Up to 8 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}]}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Flux2ImageNode", "display_name": "Flux.2 Image", "description": "Generate images via Flux.2 [pro] or Flux.2 [max] from a prompt and optional reference images.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.width", "type": "INT"}, {"name": "model.height", "type": "INT"}], "inputs": [], "input_groups": ["model.images"]}, "expr": "\n (\n $isMax := widgets.model = \"flux.2 [max]\";\n $MP := 1024 * 1024;\n $w := $lookup(widgets, \"model.width\");\n $h := $lookup(widgets, \"model.height\");\n $outMP := $max([1, $floor((($w * $h) + $MP - 1) / $MP)]);\n $outputCost := $isMax\n ? (0.07 + 0.03 * ($outMP - 1))\n : (0.03 + 0.015 * ($outMP - 1));\n $refMin := $isMax ? 0.03 : 0.015;\n $refMax := $isMax ? 0.24 : 0.12;\n $hasRefs := $lookup(inputGroups, \"model.images\") > 0;\n $hasRefs\n ? {\n \"type\": \"range_usd\",\n \"min_usd\": $outputCost + $refMin,\n \"max_usd\": $outputCost + $refMax,\n \"format\": { \"approximate\": true }\n }\n : {\"type\": \"usd\", \"usd\": $outputCost}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BriaImageEditNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["FIBO"]}], "image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Instruction to edit image", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"default": "", "multiline": true}], "structured_prompt": ["STRING", {"tooltip": "A string containing the structured edit prompt in JSON format. Use this instead of usual prompt for precise, programmatic control.", "default": "", "multiline": true}], "seed": ["INT", {"default": 1, "min": 1, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "guidance_scale": ["FLOAT", {"tooltip": "Higher value makes the image follow the prompt more closely.", "default": 3, "min": 3, "max": 5, "step": 0.01, "display": "number"}], "steps": ["INT", {"default": 50, "min": 20, "max": 50, "step": 1, "display": "number"}], "moderation": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Moderation settings", "options": [{"key": "false", "inputs": {"required": {}}}, {"key": "true", "inputs": {"required": {"prompt_content_moderation": ["BOOLEAN", {"default": false}], "visual_input_moderation": ["BOOLEAN", {"default": false}], "visual_output_moderation": ["BOOLEAN", {"default": true}]}}}]}]}, "optional": {"mask": ["MASK", {"tooltip": "If omitted, the edit applies to the entire image."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "prompt", "negative_prompt", "structured_prompt", "seed", "guidance_scale", "steps", "moderation"], "optional": ["mask"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "STRING"], "output_is_list": [false, false], "output_name": ["IMAGE", "structured_prompt"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "BriaImageEditNode", "display_name": "Bria FIBO Image Edit", "description": "Edit images using Bria latest model", "python_module": "comfy_api_nodes.nodes_bria", "category": "partner/image/Bria", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.04}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BriaRemoveImageBackground": {"input": {"required": {"image": ["IMAGE", {}], "moderation": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Moderation settings", "options": [{"key": "false", "inputs": {"required": {}}}, {"key": "true", "inputs": {"required": {"visual_input_moderation": ["BOOLEAN", {"default": false}], "visual_output_moderation": ["BOOLEAN", {"default": true}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "moderation", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "BriaRemoveImageBackground", "display_name": "Bria Remove Image Background", "description": "Remove the background from an image using Bria RMBG 2.0.", "python_module": "comfy_api_nodes.nodes_bria", "category": "partner/image/Bria", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.018}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BriaRemoveVideoBackground": {"input": {"required": {"video": ["VIDEO", {}], "background_color": ["COMBO", {"tooltip": "Background color for the output video.", "multiselect": false, "options": ["Black", "White", "Gray", "Red", "Green", "Blue", "Yellow", "Cyan", "Magenta", "Orange"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "background_color", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "BriaRemoveVideoBackground", "display_name": "Bria Remove Video Background", "description": "Remove the background from a video using Bria. ", "python_module": "comfy_api_nodes.nodes_bria", "category": "partner/video/Bria", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.0042,\"format\":{\"suffix\":\"/second\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BriaVideoGreenScreen": {"input": {"required": {"video": ["VIDEO", {}], "green_shade": ["COMBO", {"tooltip": "Solid chroma-key shade applied behind the foreground: broadcast_green (#00B140), chroma_green (#00FF00), or blue_screen (#0000FF).", "multiselect": false, "options": ["broadcast_green", "chroma_green", "blue_screen"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "green_shade", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "BriaVideoGreenScreen", "display_name": "Bria Video Green Screen", "description": "Replace a video's background with a solid chroma-key screen using Bria.", "python_module": "comfy_api_nodes.nodes_bria", "category": "partner/video/Bria", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.0042,\"format\":{\"suffix\":\"/second\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BriaVideoReplaceBackground": {"input": {"required": {"video": ["VIDEO", {"tooltip": "Foreground video whose background is replaced."}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "optional": {"background_image": ["IMAGE", {"tooltip": "Background image to composite behind the foreground. Provide either a background image or a background video, not both."}], "background_video": ["VIDEO", {"tooltip": "Background video to composite behind the foreground. Provide either a background image or a background video, not both."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "seed"], "optional": ["background_image", "background_video"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "BriaVideoReplaceBackground", "display_name": "Bria Video Replace Background", "description": "Replace a video's background with a supplied image or video using Bria. The output keeps the foreground's resolution and frame rate; a background with a different aspect ratio is stretched to fit, so match it for undistorted results.", "python_module": "comfy_api_nodes.nodes_bria", "category": "partner/video/Bria", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.0042,\"format\":{\"suffix\":\"/second\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BriaTransparentVideoBackground": {"input": {"required": {"video": ["VIDEO", {}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["images", "mask"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "BriaTransparentVideoBackground", "display_name": "Bria Remove Video Background (Transparent)", "description": "Remove the background from a video using Bria and return the cut-out frames plus an alpha mask. Connect both to a compositing node, or feed them to Save WEBM to write a transparent video.", "python_module": "comfy_api_nodes.nodes_bria", "category": "partner/video/Bria", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.0042,\"format\":{\"suffix\":\"/second\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceImageNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["seedream-3-0-t2i-250415"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the image", "multiline": true}], "size_preset": ["COMBO", {"tooltip": "Pick a recommended size. Select Custom to use the width and height below", "multiselect": false, "options": ["1024x1024 (1:1)", "864x1152 (3:4)", "1152x864 (4:3)", "1280x720 (16:9)", "720x1280 (9:16)", "832x1248 (2:3)", "1248x832 (3:2)", "1512x648 (21:9)", "2048x2048 (1:1)", "Custom"]}], "width": ["INT", {"tooltip": "Custom width for image. Value is working only if `size_preset` is set to `Custom`", "default": 1024, "min": 512, "max": 2048, "step": 64}], "height": ["INT", {"tooltip": "Custom height for image. Value is working only if `size_preset` is set to `Custom`", "default": 1024, "min": 512, "max": 2048, "step": 64}]}, "optional": {"seed": ["INT", {"tooltip": "Seed to use for generation", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "guidance_scale": ["FLOAT", {"tooltip": "Higher value makes the image follow the prompt more closely", "default": 2.5, "min": 1.0, "max": 10.0, "step": 0.01, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the image", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "size_preset", "width", "height"], "optional": ["seed", "guidance_scale", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceImageNode", "display_name": "ByteDance Image", "description": "Generate images using ByteDance models via api based on prompt", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/image/ByteDance", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.03}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceSeedreamNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["seedream 5.0 lite", "seedream-4-5-251128", "seedream-4-0-250828"]}], "prompt": ["STRING", {"tooltip": "Text prompt for creating or editing an image.", "default": "", "multiline": true}], "size_preset": ["COMBO", {"tooltip": "Pick a recommended size. Select Custom to use the width and height below.", "multiselect": false, "options": ["2048x2048 (1:1)", "2304x1728 (4:3)", "1728x2304 (3:4)", "2560x1440 (16:9)", "1440x2560 (9:16)", "2496x1664 (3:2)", "1664x2496 (2:3)", "3024x1296 (21:9)", "3072x3072 (1:1)", "4096x4096 (1:1)", "Custom"]}]}, "optional": {"image": ["IMAGE", {"tooltip": "Input image(s) for image-to-image generation. Reference image(s) for single or multi-reference generation."}], "width": ["INT", {"tooltip": "Custom width for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 6240, "step": 2}], "height": ["INT", {"tooltip": "Custom height for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 4992, "step": 2}], "sequential_image_generation": ["COMBO", {"tooltip": "Group image generation mode. 'disabled' generates a single image. 'auto' lets the model decide whether to generate multiple related images (e.g., story scenes, character variations).", "multiselect": false, "options": ["disabled", "auto"]}], "max_images": ["INT", {"tooltip": "Maximum number of images to generate when sequential_image_generation='auto'. Total images (input + generated) cannot exceed 15.", "default": 1, "min": 1, "max": 15, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the image.", "advanced": true, "default": false}], "fail_on_partial": ["BOOLEAN", {"tooltip": "If enabled, abort execution if any requested images are missing or return an error.", "advanced": true, "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "size_preset"], "optional": ["image", "width", "height", "sequential_image_generation", "max_images", "seed", "watermark", "fail_on_partial"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceSeedreamNode", "display_name": "ByteDance Seedream 4.5 & 5.0", "description": "Unified text-to-image generation and precise single-sentence editing at up to 4K resolution.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/image/ByteDance", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $price := $contains(widgets.model, \"5.0 lite\") ? 0.035 :\n $contains(widgets.model, \"4-5\") ? 0.04 : 0.03;\n {\n \"type\":\"usd\",\n \"usd\": $price,\n \"format\": { \"suffix\":\" x images/Run\", \"approximate\": true }\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceSeedreamNodeV2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for creating or editing an image.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "seedream 5.0 lite", "inputs": {"required": {"size_preset": ["COMBO", {"tooltip": "Pick a recommended size. Select Custom to use the width and height below.", "multiselect": false, "options": ["(2K) 2048x2048 (1:1)", "(2K) 1728x2304 (3:4)", "(2K) 2304x1728 (4:3)", "(2K) 2848x1600 (16:9)", "(2K) 1600x2848 (9:16)", "(2K) 1664x2496 (2:3)", "(2K) 2496x1664 (3:2)", "(2K) 3136x1344 (21:9)", "(3K) 3072x3072 (1:1)", "(3K) 2592x3456 (3:4)", "(3K) 3456x2592 (4:3)", "(3K) 4096x2304 (16:9)", "(3K) 2304x4096 (9:16)", "(3K) 2496x3744 (2:3)", "(3K) 3744x2496 (3:2)", "(3K) 4704x2016 (21:9)", "(4K) 4096x4096 (1:1)", "(4K) 3520x4704 (3:4)", "(4K) 4704x3520 (4:3)", "(4K) 5504x3040 (16:9)", "(4K) 3040x5504 (9:16)", "(4K) 3328x4992 (2:3)", "(4K) 4992x3328 (3:2)", "(4K) 6240x2656 (21:9)", "Custom"]}], "width": ["INT", {"tooltip": "Custom width for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 6240, "step": 2}], "height": ["INT", {"tooltip": "Custom height for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 4992, "step": 2}], "max_images": ["INT", {"tooltip": "Maximum number of images to generate. With 1, exactly one image is produced. With >1, the model generates between 1 and max_images related images (e.g., story scenes, character variations). Total images (input + generated) cannot exceed 15.", "default": 1, "min": 1, "max": 14, "step": 1, "display": "number"}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image-to-image or multi-reference generation. Up to 14 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14"], "min": 0}}], "fail_on_partial": ["BOOLEAN", {"tooltip": "If enabled, abort execution if any requested images are missing or return an error.", "advanced": true, "default": false}]}}}, {"key": "seedream-4-5-251128", "inputs": {"required": {"size_preset": ["COMBO", {"tooltip": "Pick a recommended size. Select Custom to use the width and height below.", "multiselect": false, "options": ["(2K) 2048x2048 (1:1)", "(2K) 1728x2304 (3:4)", "(2K) 2304x1728 (4:3)", "(2K) 2848x1600 (16:9)", "(2K) 1600x2848 (9:16)", "(2K) 1664x2496 (2:3)", "(2K) 2496x1664 (3:2)", "(2K) 3136x1344 (21:9)", "(4K) 4096x4096 (1:1)", "(4K) 3520x4704 (3:4)", "(4K) 4704x3520 (4:3)", "(4K) 5504x3040 (16:9)", "(4K) 3040x5504 (9:16)", "(4K) 3328x4992 (2:3)", "(4K) 4992x3328 (3:2)", "(4K) 6240x2656 (21:9)", "Custom"]}], "width": ["INT", {"tooltip": "Custom width for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 6240, "step": 2}], "height": ["INT", {"tooltip": "Custom height for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 4992, "step": 2}], "max_images": ["INT", {"tooltip": "Maximum number of images to generate. With 1, exactly one image is produced. With >1, the model generates between 1 and max_images related images (e.g., story scenes, character variations). Total images (input + generated) cannot exceed 15.", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image-to-image or multi-reference generation. Up to 10 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 0}}], "fail_on_partial": ["BOOLEAN", {"tooltip": "If enabled, abort execution if any requested images are missing or return an error.", "advanced": true, "default": false}]}}}, {"key": "seedream-4-0-250828", "inputs": {"required": {"size_preset": ["COMBO", {"tooltip": "Pick a recommended size. Select Custom to use the width and height below.", "multiselect": false, "options": ["(1K) 1024x1024 (1:1)", "(1K) 864x1152 (3:4)", "(1K) 1152x864 (4:3)", "(1K) 1312x736 (16:9)", "(1K) 736x1312 (9:16)", "(1K) 832x1248 (2:3)", "(1K) 1248x832 (3:2)", "(1K) 1568x672 (21:9)", "(2K) 2048x2048 (1:1)", "(2K) 1728x2304 (3:4)", "(2K) 2304x1728 (4:3)", "(2K) 2848x1600 (16:9)", "(2K) 1600x2848 (9:16)", "(2K) 1664x2496 (2:3)", "(2K) 2496x1664 (3:2)", "(2K) 3136x1344 (21:9)", "(4K) 4096x4096 (1:1)", "(4K) 3520x4704 (3:4)", "(4K) 4704x3520 (4:3)", "(4K) 5504x3040 (16:9)", "(4K) 3040x5504 (9:16)", "(4K) 3328x4992 (2:3)", "(4K) 4992x3328 (3:2)", "(4K) 6240x2656 (21:9)", "Custom"]}], "width": ["INT", {"tooltip": "Custom width for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 6240, "step": 2}], "height": ["INT", {"tooltip": "Custom height for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 4992, "step": 2}], "max_images": ["INT", {"tooltip": "Maximum number of images to generate. With 1, exactly one image is produced. With >1, the model generates between 1 and max_images related images (e.g., story scenes, character variations). Total images (input + generated) cannot exceed 15.", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image-to-image or multi-reference generation. Up to 10 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 0}}], "fail_on_partial": ["BOOLEAN", {"tooltip": "If enabled, abort execution if any requested images are missing or return an error.", "advanced": true, "default": false}]}}}]}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the image.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceSeedreamNodeV2", "display_name": "ByteDance Seedream 4.5 & 5.0", "description": "Unified text-to-image generation and precise single-sentence editing at up to 4K resolution.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/image/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $price := $contains(widgets.model, \"5.0 lite\") ? 0.035 :\n $contains(widgets.model, \"4-5\") ? 0.04 : 0.03;\n {\n \"type\":\"usd\",\n \"usd\": $price,\n \"format\": { \"suffix\":\" x images/Run\", \"approximate\": true }\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceTextToVideoNode": {"input": {"required": {"model": ["COMBO", {"default": "seedance-1-0-pro-fast-251015", "multiselect": false, "options": ["seedance-1-5-pro-251215", "seedance-1-0-pro-250528", "seedance-1-0-lite-t2v-250428", "seedance-1-0-pro-fast-251015"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the video.", "multiline": true}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 5, "min": 3, "max": 12, "step": 1, "display": "slider"}]}, "optional": {"seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "camera_fixed": ["BOOLEAN", {"tooltip": "Specifies whether to fix the camera. The platform appends an instruction to fix the camera to your prompt, but does not guarantee the actual effect.", "advanced": true, "default": false}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the video.", "advanced": true, "default": false}], "generate_audio": ["BOOLEAN", {"tooltip": "This parameter is ignored for any model except seedance-1-5-pro.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "resolution", "aspect_ratio", "duration"], "optional": ["seed", "camera_fixed", "watermark", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceTextToVideoNode", "display_name": "ByteDance Text to Video", "description": "Generate video using ByteDance models via api based on prompt", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $priceByModel := {\n \"seedance-1-5-pro\": {\n \"480p\":[0.12,0.12],\n \"720p\":[0.26,0.26],\n \"1080p\":[0.58,0.59]\n },\n \"seedance-1-0-pro\": {\n \"480p\":[0.23,0.24],\n \"720p\":[0.51,0.56],\n \"1080p\":[1.18,1.22]\n },\n \"seedance-1-0-pro-fast\": {\n \"480p\":[0.09,0.1],\n \"720p\":[0.21,0.23],\n \"1080p\":[0.47,0.49]\n },\n \"seedance-1-0-lite\": {\n \"480p\":[0.17,0.18],\n \"720p\":[0.37,0.41],\n \"1080p\":[0.85,0.88]\n }\n };\n $model := widgets.model;\n $modelKey :=\n $contains($model, \"seedance-1-5-pro\") ? \"seedance-1-5-pro\" :\n $contains($model, \"seedance-1-0-pro-fast\") ? \"seedance-1-0-pro-fast\" :\n $contains($model, \"seedance-1-0-pro\") ? \"seedance-1-0-pro\" :\n \"seedance-1-0-lite\";\n $resolution := widgets.resolution;\n $resKey :=\n $contains($resolution, \"1080\") ? \"1080p\" :\n $contains($resolution, \"720\") ? \"720p\" :\n \"480p\";\n $modelPrices := $lookup($priceByModel, $modelKey);\n $baseRange := $lookup($modelPrices, $resKey);\n $min10s := $baseRange[0];\n $max10s := $baseRange[1];\n $scale := widgets.duration / 10;\n $audioMultiplier := ($modelKey = \"seedance-1-5-pro\" and widgets.generate_audio) ? 2 : 1;\n $minCost := $min10s * $scale * $audioMultiplier;\n $maxCost := $max10s * $scale * $audioMultiplier;\n ($minCost = $maxCost)\n ? {\"type\":\"usd\",\"usd\": $minCost, \"format\": { \"approximate\": true }}\n : {\"type\":\"range_usd\",\"min_usd\": $minCost, \"max_usd\": $maxCost, \"format\": { \"approximate\": true }}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceImageToVideoNode": {"input": {"required": {"model": ["COMBO", {"default": "seedance-1-0-pro-fast-251015", "multiselect": false, "options": ["seedance-1-5-pro-251215", "seedance-1-0-pro-250528", "seedance-1-0-lite-i2v-250428", "seedance-1-0-pro-fast-251015"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the video.", "multiline": true}], "image": ["IMAGE", {"tooltip": "First frame to be used for the video."}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["adaptive", "16:9", "4:3", "1:1", "3:4", "9:16", "21:9"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 5, "min": 3, "max": 12, "step": 1, "display": "slider"}]}, "optional": {"seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "camera_fixed": ["BOOLEAN", {"tooltip": "Specifies whether to fix the camera. The platform appends an instruction to fix the camera to your prompt, but does not guarantee the actual effect.", "advanced": true, "default": false}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the video.", "advanced": true, "default": false}], "generate_audio": ["BOOLEAN", {"tooltip": "This parameter is ignored for any model except seedance-1-5-pro.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "image", "resolution", "aspect_ratio", "duration"], "optional": ["seed", "camera_fixed", "watermark", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceImageToVideoNode", "display_name": "ByteDance Image to Video", "description": "Generate video using ByteDance models via api based on image and prompt", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $priceByModel := {\n \"seedance-1-5-pro\": {\n \"480p\":[0.12,0.12],\n \"720p\":[0.26,0.26],\n \"1080p\":[0.58,0.59]\n },\n \"seedance-1-0-pro\": {\n \"480p\":[0.23,0.24],\n \"720p\":[0.51,0.56],\n \"1080p\":[1.18,1.22]\n },\n \"seedance-1-0-pro-fast\": {\n \"480p\":[0.09,0.1],\n \"720p\":[0.21,0.23],\n \"1080p\":[0.47,0.49]\n },\n \"seedance-1-0-lite\": {\n \"480p\":[0.17,0.18],\n \"720p\":[0.37,0.41],\n \"1080p\":[0.85,0.88]\n }\n };\n $model := widgets.model;\n $modelKey :=\n $contains($model, \"seedance-1-5-pro\") ? \"seedance-1-5-pro\" :\n $contains($model, \"seedance-1-0-pro-fast\") ? \"seedance-1-0-pro-fast\" :\n $contains($model, \"seedance-1-0-pro\") ? \"seedance-1-0-pro\" :\n \"seedance-1-0-lite\";\n $resolution := widgets.resolution;\n $resKey :=\n $contains($resolution, \"1080\") ? \"1080p\" :\n $contains($resolution, \"720\") ? \"720p\" :\n \"480p\";\n $modelPrices := $lookup($priceByModel, $modelKey);\n $baseRange := $lookup($modelPrices, $resKey);\n $min10s := $baseRange[0];\n $max10s := $baseRange[1];\n $scale := widgets.duration / 10;\n $audioMultiplier := ($modelKey = \"seedance-1-5-pro\" and widgets.generate_audio) ? 2 : 1;\n $minCost := $min10s * $scale * $audioMultiplier;\n $maxCost := $max10s * $scale * $audioMultiplier;\n ($minCost = $maxCost)\n ? {\"type\":\"usd\",\"usd\": $minCost, \"format\": { \"approximate\": true }}\n : {\"type\":\"range_usd\",\"min_usd\": $minCost, \"max_usd\": $maxCost, \"format\": { \"approximate\": true }}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceFirstLastFrameNode": {"input": {"required": {"model": ["COMBO", {"default": "seedance-1-0-lite-i2v-250428", "multiselect": false, "options": ["seedance-1-5-pro-251215", "seedance-1-0-pro-250528", "seedance-1-0-lite-i2v-250428"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the video.", "multiline": true}], "first_frame": ["IMAGE", {"tooltip": "First frame to be used for the video."}], "last_frame": ["IMAGE", {"tooltip": "Last frame to be used for the video."}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["adaptive", "16:9", "4:3", "1:1", "3:4", "9:16", "21:9"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 5, "min": 3, "max": 12, "step": 1, "display": "slider"}]}, "optional": {"seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "camera_fixed": ["BOOLEAN", {"tooltip": "Specifies whether to fix the camera. The platform appends an instruction to fix the camera to your prompt, but does not guarantee the actual effect.", "advanced": true, "default": false}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the video.", "advanced": true, "default": false}], "generate_audio": ["BOOLEAN", {"tooltip": "This parameter is ignored for any model except seedance-1-5-pro.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "first_frame", "last_frame", "resolution", "aspect_ratio", "duration"], "optional": ["seed", "camera_fixed", "watermark", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceFirstLastFrameNode", "display_name": "ByteDance First-Last-Frame to Video", "description": "Generate video using prompt and first and last frames.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $priceByModel := {\n \"seedance-1-5-pro\": {\n \"480p\":[0.12,0.12],\n \"720p\":[0.26,0.26],\n \"1080p\":[0.58,0.59]\n },\n \"seedance-1-0-pro\": {\n \"480p\":[0.23,0.24],\n \"720p\":[0.51,0.56],\n \"1080p\":[1.18,1.22]\n },\n \"seedance-1-0-pro-fast\": {\n \"480p\":[0.09,0.1],\n \"720p\":[0.21,0.23],\n \"1080p\":[0.47,0.49]\n },\n \"seedance-1-0-lite\": {\n \"480p\":[0.17,0.18],\n \"720p\":[0.37,0.41],\n \"1080p\":[0.85,0.88]\n }\n };\n $model := widgets.model;\n $modelKey :=\n $contains($model, \"seedance-1-5-pro\") ? \"seedance-1-5-pro\" :\n $contains($model, \"seedance-1-0-pro-fast\") ? \"seedance-1-0-pro-fast\" :\n $contains($model, \"seedance-1-0-pro\") ? \"seedance-1-0-pro\" :\n \"seedance-1-0-lite\";\n $resolution := widgets.resolution;\n $resKey :=\n $contains($resolution, \"1080\") ? \"1080p\" :\n $contains($resolution, \"720\") ? \"720p\" :\n \"480p\";\n $modelPrices := $lookup($priceByModel, $modelKey);\n $baseRange := $lookup($modelPrices, $resKey);\n $min10s := $baseRange[0];\n $max10s := $baseRange[1];\n $scale := widgets.duration / 10;\n $audioMultiplier := ($modelKey = \"seedance-1-5-pro\" and widgets.generate_audio) ? 2 : 1;\n $minCost := $min10s * $scale * $audioMultiplier;\n $maxCost := $max10s * $scale * $audioMultiplier;\n ($minCost = $maxCost)\n ? {\"type\":\"usd\",\"usd\": $minCost, \"format\": { \"approximate\": true }}\n : {\"type\":\"range_usd\",\"min_usd\": $minCost, \"max_usd\": $maxCost, \"format\": { \"approximate\": true }}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceImageReferenceNode": {"input": {"required": {"model": ["COMBO", {"default": "seedance-1-0-lite-i2v-250428", "multiselect": false, "options": ["seedance-1-0-pro-250528", "seedance-1-0-lite-i2v-250428"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the video.", "multiline": true}], "images": ["IMAGE", {"tooltip": "One to four images."}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video.", "multiselect": false, "options": ["480p", "720p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["adaptive", "16:9", "4:3", "1:1", "3:4", "9:16", "21:9"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 5, "min": 3, "max": 12, "step": 1, "display": "slider"}]}, "optional": {"seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the video.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "images", "resolution", "aspect_ratio", "duration"], "optional": ["seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceImageReferenceNode", "display_name": "ByteDance Reference Images to Video", "description": "Generate video using prompt and reference images.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $priceByModel := {\n \"seedance-1-0-pro\": {\n \"480p\":[0.23,0.24],\n \"720p\":[0.51,0.56]\n },\n \"seedance-1-0-lite\": {\n \"480p\":[0.17,0.18],\n \"720p\":[0.37,0.41]\n }\n };\n $model := widgets.model;\n $modelKey :=\n $contains($model, \"seedance-1-0-pro\") ? \"seedance-1-0-pro\" :\n \"seedance-1-0-lite\";\n $resolution := widgets.resolution;\n $resKey :=\n $contains($resolution, \"720\") ? \"720p\" :\n \"480p\";\n $modelPrices := $lookup($priceByModel, $modelKey);\n $baseRange := $lookup($modelPrices, $resKey);\n $min10s := $baseRange[0];\n $max10s := $baseRange[1];\n $scale := widgets.duration / 10;\n $minCost := $min10s * $scale;\n $maxCost := $max10s * $scale;\n ($minCost = $maxCost)\n ? {\"type\":\"usd\",\"usd\": $minCost}\n : {\"type\":\"range_usd\",\"min_usd\": $minCost, \"max_usd\": $maxCost}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDance2TextToVideoNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Seedance 2.0 for maximum quality; Seedance 2.0 Fast for speed optimization.", "options": [{"key": "Seedance 2.0", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p", "4k"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "16:9", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}]}}}, {"key": "Seedance 2.0 Fast", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "16:9", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add a watermark to the video.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDance2TextToVideoNode", "display_name": "ByteDance Seedance 2.0 Text to Video", "description": "Generate video using Seedance 2.0 models based on a text prompt.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rate480 := 10044;\n $rate720 := 21600;\n $rate1080 := 48800;\n $rate4k := 195200;\n $m := widgets.model;\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $pricePer1K := $res = \"4k\" ? 0.00572 :\n $res = \"1080p\" ? 0.011011 :\n $contains($m, \"fast\") ? 0.008008 : 0.01001;\n $rate := $res = \"4k\" ? $rate4k :\n $res = \"1080p\" ? $rate1080 :\n $res = \"720p\" ? $rate720 :\n $rate480;\n $cost := $dur * $rate * $pricePer1K / 1000;\n {\"type\": \"usd\", \"usd\": $cost, \"format\": {\"approximate\": true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDance2FirstLastFrameNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Seedance 2.0 for maximum quality; Seedance 2.0 Fast for speed optimization.", "options": [{"key": "Seedance 2.0", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p", "4k"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "adaptive", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}]}}}, {"key": "Seedance 2.0 Fast", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "adaptive", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add a watermark to the video.", "advanced": true, "default": false}]}, "optional": {"first_frame": ["IMAGE", {"tooltip": "First frame image for the video."}], "last_frame": ["IMAGE", {"tooltip": "Last frame image for the video."}], "first_frame_asset_id": ["STRING", {"tooltip": "Seedance asset_id to use as the first frame. Mutually exclusive with the first_frame image input.", "default": "", "multiline": false}], "last_frame_asset_id": ["STRING", {"tooltip": "Seedance asset_id to use as the last frame. Mutually exclusive with the last_frame image input.", "default": "", "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "seed", "watermark"], "optional": ["first_frame", "last_frame", "first_frame_asset_id", "last_frame_asset_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDance2FirstLastFrameNode", "display_name": "ByteDance Seedance 2.0 First-Last-Frame to Video", "description": "Generate video using Seedance 2.0 from a first frame image and optional last frame image.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rate480 := 10044;\n $rate720 := 21600;\n $rate1080 := 48800;\n $rate4k := 195200;\n $m := widgets.model;\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $pricePer1K := $res = \"4k\" ? 0.00572 :\n $res = \"1080p\" ? 0.011011 :\n $contains($m, \"fast\") ? 0.008008 : 0.01001;\n $rate := $res = \"4k\" ? $rate4k :\n $res = \"1080p\" ? $rate1080 :\n $res = \"720p\" ? $rate720 :\n $rate480;\n $cost := $dur * $rate * $pricePer1K / 1000;\n {\"type\": \"usd\", \"usd\": $cost, \"format\": {\"approximate\": true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDance2ReferenceNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Seedance 2.0 for maximum quality; Seedance 2.0 Fast for speed optimization.", "options": [{"key": "Seedance 2.0", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p", "4k"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "adaptive", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9"], "min": 0}}], "reference_videos": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3"], "min": 0}}], "reference_audios": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_audio": ["AUDIO", {}]}}, "names": ["audio_1", "audio_2", "audio_3"], "min": 0}}], "reference_assets": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_asset": ["STRING", {"forceInput": true, "multiline": false}]}}, "names": ["asset_1", "asset_2", "asset_3", "asset_4", "asset_5", "asset_6", "asset_7", "asset_8", "asset_9"], "min": 0}}]}, "optional": {"auto_downscale": ["BOOLEAN", {"tooltip": "Automatically downscale reference videos that exceed the model's pixel budget for the selected resolution. Aspect ratio is preserved; videos already within limits are untouched.", "default": true}], "auto_upscale": ["BOOLEAN", {"tooltip": "Automatically upscale reference videos that are below the model's minimum pixel count for the selected resolution. Aspect ratio is preserved; videos already meeting the minimum are untouched. Note: upscaling a low-resolution source does not add real detail and may produce lower-quality generations.", "advanced": true, "default": false}]}}}, {"key": "Seedance 2.0 Fast", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "adaptive", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9"], "min": 0}}], "reference_videos": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3"], "min": 0}}], "reference_audios": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_audio": ["AUDIO", {}]}}, "names": ["audio_1", "audio_2", "audio_3"], "min": 0}}], "reference_assets": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_asset": ["STRING", {"forceInput": true, "multiline": false}]}}, "names": ["asset_1", "asset_2", "asset_3", "asset_4", "asset_5", "asset_6", "asset_7", "asset_8", "asset_9"], "min": 0}}]}, "optional": {"auto_downscale": ["BOOLEAN", {"tooltip": "Automatically downscale reference videos that exceed the model's pixel budget for the selected resolution. Aspect ratio is preserved; videos already within limits are untouched.", "default": true}], "auto_upscale": ["BOOLEAN", {"tooltip": "Automatically upscale reference videos that are below the model's minimum pixel count for the selected resolution. Aspect ratio is preserved; videos already meeting the minimum are untouched. Note: upscaling a low-resolution source does not add real detail and may produce lower-quality generations.", "advanced": true, "default": false}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add a watermark to the video.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDance2ReferenceNode", "display_name": "ByteDance Seedance 2.0 Reference to Video", "description": "Generate, edit, or extend video using Seedance 2.0 with reference images, videos, and audio. Supports multimodal reference, video editing, and video extension.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": ["model.reference_videos"]}, "expr": "\n (\n $rate480 := 10044;\n $rate720 := 21600;\n $rate1080 := 48800;\n $rate4k := 195200;\n $m := widgets.model;\n $hasVideo := $lookup(inputGroups, \"model.reference_videos\") > 0;\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $noVideoPricePer1K := $res = \"4k\" ? 0.00572 :\n $res = \"1080p\" ? 0.011011 :\n $contains($m, \"fast\") ? 0.008008 : 0.01001;\n $videoPricePer1K := $res = \"4k\" ? 0.003432 :\n $res = \"1080p\" ? 0.006721 :\n $contains($m, \"fast\") ? 0.004719 : 0.006149;\n $rate := $res = \"4k\" ? $rate4k :\n $res = \"1080p\" ? $rate1080 :\n $res = \"720p\" ? $rate720 :\n $rate480;\n $noVideoCost := $dur * $rate * $noVideoPricePer1K / 1000;\n $minVideoFactor := $ceil($dur * 5 / 3);\n $minVideoCost := $minVideoFactor * $rate * $videoPricePer1K / 1000;\n $maxVideoCost := (15 + $dur) * $rate * $videoPricePer1K / 1000;\n $hasVideo\n ? {\n \"type\": \"range_usd\",\n \"min_usd\": $minVideoCost,\n \"max_usd\": $maxVideoCost,\n \"format\": {\"approximate\": true}\n }\n : {\n \"type\": \"usd\",\n \"usd\": $noVideoCost,\n \"format\": {\"approximate\": true}\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceCreateImageAsset": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Image to register as a personal asset."}], "group_id": ["STRING", {"tooltip": "Reuse an existing Seedance asset group ID to skip repeated human verification for the same person. Leave empty to run real-person authentication in the browser and create a new group.", "default": "", "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "group_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["STRING", "STRING"], "output_is_list": [false, false], "output_name": ["asset_id", "group_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ByteDanceCreateImageAsset", "display_name": "ByteDance Create Image Asset", "description": "Create a Seedance 2.0 personal image asset. Uploads the input image and registers it in the given asset group. If group_id is empty, runs a real-person H5 authentication flow to create a new group before adding the asset.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/image/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceCreateVideoAsset": {"input": {"required": {"video": ["VIDEO", {"tooltip": "Video to register as a personal asset."}], "group_id": ["STRING", {"tooltip": "Reuse an existing Seedance asset group ID to skip repeated human verification for the same person. Leave empty to run real-person authentication in the browser and create a new group.", "default": "", "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["video", "group_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["STRING", "STRING"], "output_is_list": [false, false], "output_name": ["asset_id", "group_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ByteDanceCreateVideoAsset", "display_name": "ByteDance Create Video Asset", "description": "Create a Seedance 2.0 personal video asset. Uploads the input video and registers it in the given asset group. If group_id is empty, runs a real-person H5 authentication flow to create a new group before adding the asset.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceSeedNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text input to the model.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The Seed model used to generate the response.", "options": [{"key": "Seed 2.0 Pro", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional image(s) to use as context for the model. Up to 20 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional video(s) to use as context for the model. Up to 4 videos.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, higher values are more random.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.01}]}}}, {"key": "Seed 2.0 Lite", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional image(s) to use as context for the model. Up to 20 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional video(s) to use as context for the model. Up to 4 videos.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, higher values are more random.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.01}]}}}, {"key": "Seed 2.0 Mini", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional image(s) to use as context for the model. Up to 20 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional video(s) to use as context for the model. Up to 4 videos.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, higher values are more random.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.01}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate the model's behavior.", "advanced": true, "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "optional": ["system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceSeedNode", "display_name": "ByteDance Seed", "description": "Generate text responses with ByteDance's Seed 2.0 models. Provide a text prompt and optionally one or more images or videos for multimodal context.", "python_module": "comfy_api_nodes.nodes_bytedance_llm", "category": "partner/text/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $contains($m, \"mini\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.00025, 0.0009],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"lite\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.0003, 0.002],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"pro\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.0005, 0.003],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : {\"type\":\"text\", \"text\":\"Token-based\"}\n )\n "}, "search_aliases": null, "essentials_category": "Text Generation", "has_intermediate_output": false}, "ElevenLabsSpeechToText": {"input": {"required": {"audio": ["AUDIO", {"tooltip": "Audio to transcribe."}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for transcription.", "options": [{"key": "scribe_v2", "inputs": {"required": {"tag_audio_events": ["BOOLEAN", {"tooltip": "Annotate sounds like (laughter), (music), etc. in transcript.", "default": false}], "diarize": ["BOOLEAN", {"tooltip": "Annotate which speaker is talking.", "default": false}], "diarization_threshold": ["FLOAT", {"tooltip": "Speaker separation sensitivity. Lower values are more sensitive to speaker changes.", "default": 0.22, "min": 0.1, "max": 0.4, "step": 0.01, "display": "slider"}], "temperature": ["FLOAT", {"tooltip": "Randomness control. 0.0 uses model default. Higher values increase randomness.", "default": 0.0, "min": 0.0, "max": 2.0, "step": 0.01, "display": "slider"}], "timestamps_granularity": ["COMBO", {"tooltip": "Timing precision for transcript words.", "default": "word", "multiselect": false, "options": ["word", "character", "none"]}]}}}]}], "language_code": ["STRING", {"tooltip": "ISO-639-1 or ISO-639-3 language code (e.g., 'en', 'es', 'fra'). Leave empty for automatic detection.", "default": "", "multiline": false}], "num_speakers": ["INT", {"tooltip": "Maximum number of speakers to predict. Set to 0 for automatic detection.", "default": 0, "min": 0, "max": 32, "display": "slider"}], "seed": ["INT", {"tooltip": "Seed for reproducibility (determinism not guaranteed).", "default": 1, "min": 0, "max": 2147483647}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["audio", "model", "language_code", "num_speakers", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["text", "language_code", "words_json"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "ElevenLabsSpeechToText", "display_name": "ElevenLabs Speech to Text", "description": "Transcribe audio to text. Supports automatic language detection, speaker diarization, and audio event tagging.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.0073,\"format\":{\"approximate\":true,\"suffix\":\"/minute\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsVoiceSelector": {"input": {"required": {"voice": ["COMBO", {"tooltip": "Choose a voice from the predefined ElevenLabs voices.", "multiselect": false, "options": ["Roger (male, american)", "Sarah (female, american)", "Laura (female, american)", "Charlie (male, australian)", "George (male, british)", "Callum (male, american)", "River (neutral, american)", "Harry (male, american)", "Liam (male, american)", "Alice (female, british)", "Matilda (female, american)", "Will (male, american)", "Jessica (female, american)", "Eric (male, american)", "Bella (female, american)", "Chris (male, american)", "Brian (male, american)", "Daniel (male, british)", "Lily (female, british)", "Adam (male, american)", "Bill (male, american)"]}]}}, "input_order": {"required": ["voice"]}, "is_input_list": false, "output": ["ELEVENLABS_VOICE"], "output_is_list": [false], "output_name": ["voice"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsVoiceSelector", "display_name": "ElevenLabs Voice Selector", "description": "Select a predefined ElevenLabs voice for text-to-speech generation.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsTextToSpeech": {"input": {"required": {"voice": ["ELEVENLABS_VOICE", {"tooltip": "Voice to use for speech synthesis. Connect from Voice Selector or Instant Voice Clone."}], "text": ["STRING", {"tooltip": "The text to convert to speech.", "default": "", "multiline": true}], "stability": ["FLOAT", {"tooltip": "Voice stability. Lower values give broader emotional range, higher values produce more consistent but potentially monotonous speech.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "apply_text_normalization": ["COMBO", {"tooltip": "Text normalization mode. 'auto' lets the system decide, 'on' always applies normalization, 'off' skips it.", "multiselect": false, "options": ["auto", "on", "off"]}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for text-to-speech.", "options": [{"key": "eleven_multilingual_v2", "inputs": {"required": {"speed": ["FLOAT", {"tooltip": "Speech speed. 1.0 is normal, <1.0 slower, >1.0 faster.", "default": 1.0, "min": 0.7, "max": 1.3, "step": 0.01, "display": "slider"}], "similarity_boost": ["FLOAT", {"tooltip": "Similarity boost. Higher values make the voice more similar to the original.", "default": 0.75, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "use_speaker_boost": ["BOOLEAN", {"tooltip": "Boost similarity to the original speaker voice.", "default": false}], "style": ["FLOAT", {"tooltip": "Style exaggeration. Higher values increase stylistic expression but may reduce stability.", "default": 0.0, "min": 0.0, "max": 0.2, "step": 0.01, "display": "slider"}]}}}, {"key": "eleven_v3", "inputs": {"required": {"speed": ["FLOAT", {"tooltip": "Speech speed. 1.0 is normal, <1.0 slower, >1.0 faster.", "default": 1.0, "min": 0.7, "max": 1.3, "step": 0.01, "display": "slider"}], "similarity_boost": ["FLOAT", {"tooltip": "Similarity boost. Higher values make the voice more similar to the original.", "default": 0.75, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}]}}}]}], "language_code": ["STRING", {"tooltip": "ISO-639-1 or ISO-639-3 language code (e.g., 'en', 'es', 'fra'). Leave empty for automatic detection.", "default": "", "multiline": false}], "seed": ["INT", {"tooltip": "Seed for reproducibility (determinism not guaranteed).", "default": 1, "min": 0, "max": 2147483647}], "output_format": ["COMBO", {"tooltip": "Audio output format.", "multiselect": false, "options": ["mp3_44100_192", "opus_48000_192"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["voice", "text", "stability", "apply_text_normalization", "model", "language_code", "seed", "output_format"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsTextToSpeech", "display_name": "ElevenLabs Text to Speech", "description": "Convert text to speech.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.24,\"format\":{\"approximate\":true,\"suffix\":\"/1K chars\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsAudioIsolation": {"input": {"required": {"audio": ["AUDIO", {"tooltip": "Audio to process for background noise removal."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsAudioIsolation", "display_name": "ElevenLabs Voice Isolation", "description": "Remove background noise from audio, isolating vocals or speech.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.24,\"format\":{\"approximate\":true,\"suffix\":\"/minute\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsTextToSoundEffects": {"input": {"required": {"text": ["STRING", {"tooltip": "Text description of the sound effect to generate.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for sound effect generation.", "options": [{"key": "eleven_sfx_v2", "inputs": {"required": {"duration": ["FLOAT", {"tooltip": "Duration of generated sound in seconds.", "default": 5.0, "min": 0.5, "max": 30.0, "step": 0.1, "display": "slider"}], "loop": ["BOOLEAN", {"tooltip": "Create a smoothly looping sound effect.", "default": false}], "prompt_influence": ["FLOAT", {"tooltip": "How closely generation follows the prompt. Higher values make the sound follow the text more closely.", "default": 0.3, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}]}}}]}], "output_format": ["COMBO", {"tooltip": "Audio output format.", "multiselect": false, "options": ["mp3_44100_192", "opus_48000_192"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["text", "model", "output_format"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsTextToSoundEffects", "display_name": "ElevenLabs Text to Sound Effects", "description": "Generate sound effects from text descriptions.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.14,\"format\":{\"approximate\":true,\"suffix\":\"/minute\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsInstantVoiceClone": {"input": {"required": {"files": ["COMFY_AUTOGROW_V3", {"tooltip": "Audio recordings for voice cloning.", "template": {"input": {"required": {"audio": ["AUDIO", {}]}}, "prefix": "audio", "min": 1, "max": 8}}], "remove_background_noise": ["BOOLEAN", {"tooltip": "Remove background noise from voice samples using audio isolation.", "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["files", "remove_background_noise"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["ELEVENLABS_VOICE"], "output_is_list": [false], "output_name": ["voice"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsInstantVoiceClone", "display_name": "ElevenLabs Instant Voice Clone", "description": "Create a cloned voice from audio samples. Provide 1-8 audio recordings of the voice to clone.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.15}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsSpeechToSpeech": {"input": {"required": {"voice": ["ELEVENLABS_VOICE", {"tooltip": "Target voice for the transformation. Connect from Voice Selector or Instant Voice Clone."}], "audio": ["AUDIO", {"tooltip": "Source audio to transform."}], "stability": ["FLOAT", {"tooltip": "Voice stability. Lower values give broader emotional range, higher values produce more consistent but potentially monotonous speech.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for speech-to-speech transformation.", "options": [{"key": "eleven_multilingual_sts_v2", "inputs": {"required": {"speed": ["FLOAT", {"tooltip": "Speech speed. 1.0 is normal, <1.0 slower, >1.0 faster.", "default": 1.0, "min": 0.7, "max": 1.3, "step": 0.01, "display": "slider"}], "similarity_boost": ["FLOAT", {"tooltip": "Similarity boost. Higher values make the voice more similar to the original.", "default": 0.75, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "use_speaker_boost": ["BOOLEAN", {"tooltip": "Boost similarity to the original speaker voice.", "default": false}], "style": ["FLOAT", {"tooltip": "Style exaggeration. Higher values increase stylistic expression but may reduce stability.", "default": 0.0, "min": 0.0, "max": 0.2, "step": 0.01, "display": "slider"}]}}}, {"key": "eleven_english_sts_v2", "inputs": {"required": {"speed": ["FLOAT", {"tooltip": "Speech speed. 1.0 is normal, <1.0 slower, >1.0 faster.", "default": 1.0, "min": 0.7, "max": 1.3, "step": 0.01, "display": "slider"}], "similarity_boost": ["FLOAT", {"tooltip": "Similarity boost. Higher values make the voice more similar to the original.", "default": 0.75, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "use_speaker_boost": ["BOOLEAN", {"tooltip": "Boost similarity to the original speaker voice.", "default": false}], "style": ["FLOAT", {"tooltip": "Style exaggeration. Higher values increase stylistic expression but may reduce stability.", "default": 0.0, "min": 0.0, "max": 0.2, "step": 0.01, "display": "slider"}]}}}]}], "output_format": ["COMBO", {"tooltip": "Audio output format.", "multiselect": false, "options": ["mp3_44100_192", "opus_48000_192"]}], "seed": ["INT", {"tooltip": "Seed for reproducibility.", "default": 0, "min": 0, "max": 4294967295}], "remove_background_noise": ["BOOLEAN", {"tooltip": "Remove background noise from input audio using audio isolation.", "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["voice", "audio", "stability", "model", "output_format", "seed", "remove_background_noise"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsSpeechToSpeech", "display_name": "ElevenLabs Speech to Speech", "description": "Transform speech from one voice to another while preserving the original content and emotion.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.24,\"format\":{\"approximate\":true,\"suffix\":\"/minute\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsTextToDialogue": {"input": {"required": {"stability": ["FLOAT", {"tooltip": "Voice stability. Lower values give broader emotional range, higher values produce more consistent but potentially monotonous speech.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.5, "display": "slider"}], "apply_text_normalization": ["COMBO", {"tooltip": "Text normalization mode. 'auto' lets the system decide, 'on' always applies normalization, 'off' skips it.", "multiselect": false, "options": ["auto", "on", "off"]}], "model": ["COMBO", {"tooltip": "Model to use for dialogue generation.", "multiselect": false, "options": ["eleven_v3"]}], "inputs": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Number of dialogue entries.", "options": [{"key": "1", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "2", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "3", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "4", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "5", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "6", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}], "text6": ["STRING", {"tooltip": "Text content for dialogue entry 6.", "default": "", "multiline": true}], "voice6": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 6. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "7", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}], "text6": ["STRING", {"tooltip": "Text content for dialogue entry 6.", "default": "", "multiline": true}], "voice6": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 6. Connect from Voice Selector or Instant Voice Clone."}], "text7": ["STRING", {"tooltip": "Text content for dialogue entry 7.", "default": "", "multiline": true}], "voice7": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 7. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "8", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}], "text6": ["STRING", {"tooltip": "Text content for dialogue entry 6.", "default": "", "multiline": true}], "voice6": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 6. Connect from Voice Selector or Instant Voice Clone."}], "text7": ["STRING", {"tooltip": "Text content for dialogue entry 7.", "default": "", "multiline": true}], "voice7": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 7. Connect from Voice Selector or Instant Voice Clone."}], "text8": ["STRING", {"tooltip": "Text content for dialogue entry 8.", "default": "", "multiline": true}], "voice8": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 8. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "9", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}], "text6": ["STRING", {"tooltip": "Text content for dialogue entry 6.", "default": "", "multiline": true}], "voice6": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 6. Connect from Voice Selector or Instant Voice Clone."}], "text7": ["STRING", {"tooltip": "Text content for dialogue entry 7.", "default": "", "multiline": true}], "voice7": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 7. Connect from Voice Selector or Instant Voice Clone."}], "text8": ["STRING", {"tooltip": "Text content for dialogue entry 8.", "default": "", "multiline": true}], "voice8": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 8. Connect from Voice Selector or Instant Voice Clone."}], "text9": ["STRING", {"tooltip": "Text content for dialogue entry 9.", "default": "", "multiline": true}], "voice9": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 9. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "10", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}], "text6": ["STRING", {"tooltip": "Text content for dialogue entry 6.", "default": "", "multiline": true}], "voice6": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 6. Connect from Voice Selector or Instant Voice Clone."}], "text7": ["STRING", {"tooltip": "Text content for dialogue entry 7.", "default": "", "multiline": true}], "voice7": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 7. Connect from Voice Selector or Instant Voice Clone."}], "text8": ["STRING", {"tooltip": "Text content for dialogue entry 8.", "default": "", "multiline": true}], "voice8": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 8. Connect from Voice Selector or Instant Voice Clone."}], "text9": ["STRING", {"tooltip": "Text content for dialogue entry 9.", "default": "", "multiline": true}], "voice9": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 9. Connect from Voice Selector or Instant Voice Clone."}], "text10": ["STRING", {"tooltip": "Text content for dialogue entry 10.", "default": "", "multiline": true}], "voice10": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 10. Connect from Voice Selector or Instant Voice Clone."}]}}}]}], "language_code": ["STRING", {"tooltip": "ISO-639-1 or ISO-639-3 language code (e.g., 'en', 'es', 'fra'). Leave empty for automatic detection.", "default": "", "multiline": false}], "seed": ["INT", {"tooltip": "Seed for reproducibility.", "default": 1, "min": 0, "max": 4294967295}], "output_format": ["COMBO", {"tooltip": "Audio output format.", "multiselect": false, "options": ["mp3_44100_192", "opus_48000_192"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["stability", "apply_text_normalization", "model", "inputs", "language_code", "seed", "output_format"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsTextToDialogue", "display_name": "ElevenLabs Text to Dialogue", "description": "Generate multi-speaker dialogue from text. Each dialogue entry has its own text and voice.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.24,\"format\":{\"approximate\":true,\"suffix\":\"/1K chars\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text inputs to the model, used to generate a response. You can include detailed instructions, questions, or context for the model.", "default": "", "multiline": true}], "model": ["COMBO", {"tooltip": "The Gemini model to use for generating responses.", "default": "gemini-3-1-pro", "multiselect": false, "options": ["gemini-2.5-pro", "gemini-2.5-flash", "gemini-3-pro-preview", "gemini-3-1-pro", "gemini-3-1-flash-lite"]}], "seed": ["INT", {"tooltip": "When seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used.", "default": 42, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"images": ["IMAGE", {"tooltip": "Optional image(s) to use as context for the model. To include multiple images, you can use the Batch Images node."}], "audio": ["AUDIO", {"tooltip": "Optional audio to use as context for the model."}], "video": ["VIDEO", {"tooltip": "Optional video to use as context for the model."}], "files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."}], "system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate an AI's behavior.", "advanced": true, "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "optional": ["images", "audio", "video", "files", "system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "GeminiNode", "display_name": "Google Gemini", "description": "Generate text responses with Google's Gemini AI model. You can provide multiple types of inputs (text, images, audio, video) as context for generating more relevant and meaningful responses.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/text/Gemini", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $contains($m, \"gemini-2.5-flash\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.0003, 0.0025],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\"}\n }\n : $contains($m, \"gemini-2.5-pro\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.00125, 0.01],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : ($contains($m, \"gemini-3-pro-preview\") or $contains($m, \"gemini-3-1-pro\")) ? {\n \"type\": \"list_usd\",\n \"usd\": [0.002, 0.012],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gemini-3-1-flash-lite\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.00025, 0.0015],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : {\"type\":\"text\", \"text\":\"Token-based\"}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiNodeV2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text input to the model. Include detailed instructions, questions, or context.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The Gemini model used to generate the response.", "options": [{"key": "Gemini 3.1 Pro", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional image(s) to use as context for the model. Up to 16 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16"], "min": 0}}], "audio": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional audio clip to use as context for the model.", "template": {"input": {"required": {"audio": ["AUDIO", {}]}}, "names": ["audio_1"], "min": 0}}], "video": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional video clip to use as context for the model.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1"], "min": 0}}], "thinking_level": ["COMBO", {"tooltip": "How hard the model reasons internally before answering. HIGH improves quality on difficult tasks but costs more (thinking) tokens and is slower.", "default": "HIGH", "multiselect": false, "options": ["LOW", "HIGH"]}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. Lower is more focused/deterministic, higher is more creative.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.01}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling: sample from the smallest token set whose cumulative probability reaches top_p.", "advanced": true, "default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}], "max_output_tokens": ["INT", {"tooltip": "Maximum tokens to generate, including the model's internal thinking. With thinking_level HIGH, a low value can leave no room for the answer; raise this if responses come back empty or truncated. The model stops early when finished, so a higher cap costs nothing extra for short replies.", "advanced": true, "default": 32768, "min": 16, "max": 65536}]}, "optional": {"files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Input Files node."}]}}}, {"key": "Gemini 3.1 Flash-Lite", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional image(s) to use as context for the model. Up to 16 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16"], "min": 0}}], "audio": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional audio clip to use as context for the model.", "template": {"input": {"required": {"audio": ["AUDIO", {}]}}, "names": ["audio_1"], "min": 0}}], "video": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional video clip to use as context for the model.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1"], "min": 0}}], "thinking_level": ["COMBO", {"tooltip": "How hard the model reasons internally before answering. HIGH improves quality on difficult tasks but costs more (thinking) tokens and is slower.", "default": "LOW", "multiselect": false, "options": ["LOW", "HIGH"]}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. Lower is more focused/deterministic, higher is more creative.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.01}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling: sample from the smallest token set whose cumulative probability reaches top_p.", "advanced": true, "default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}], "max_output_tokens": ["INT", {"tooltip": "Maximum tokens to generate, including the model's internal thinking. With thinking_level HIGH, a low value can leave no room for the answer; raise this if responses come back empty or truncated. The model stops early when finished, so a higher cap costs nothing extra for short replies.", "advanced": true, "default": 32768, "min": 16, "max": 65536}]}, "optional": {"files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Input Files node."}]}}}]}], "seed": ["INT", {"tooltip": "Seed for sampling. Set to 0 for a random seed. Deterministic output isn't guaranteed.", "default": 42, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate the model's behavior.", "advanced": true, "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "optional": ["system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "GeminiNodeV2", "display_name": "Google Gemini", "description": "Generate text responses with Google's Gemini models. Provide a text prompt and, optionally, one or more images, audio clips, videos, or files as multimodal context.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/text/Gemini", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $contains($m, \"lite\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.00025, 0.0015],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n } : {\n \"type\": \"list_usd\",\n \"usd\": [0.002, 0.012],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n )\n "}, "search_aliases": null, "essentials_category": "Text Generation", "has_intermediate_output": false}, "GeminiImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for generation", "default": "", "multiline": true}], "model": ["COMBO", {"tooltip": "The Gemini model to use for generating responses.", "multiselect": false, "options": ["gemini-2.5-flash-image"]}], "seed": ["INT", {"tooltip": "When seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used.", "default": 42, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"images": ["IMAGE", {"tooltip": "Optional image(s) to use as context for the model. To include multiple images, you can use the Batch Images node."}], "files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."}], "aspect_ratio": ["COMBO", {"tooltip": "Defaults to matching the output image size to that of your input image, or otherwise generates 1:1 squares.", "default": "auto", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9"]}], "response_modalities": ["COMBO", {"tooltip": "Choose 'IMAGE' for image-only output, or 'IMAGE+TEXT' to return both the generated image and a text response.", "advanced": true, "multiselect": false, "options": ["IMAGE+TEXT", "IMAGE"]}], "system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate an AI's behavior.", "advanced": true, "default": "You are an expert image-generation engine. You must ALWAYS produce an image.\nInterpret all user input\u2014regardless of format, intent, or abstraction\u2014as literal visual directives for image composition.\nIf a prompt is conversational or lacks specific visual details, you must creatively invent a concrete visual scenario that depicts the concept.\nPrioritize generating the visual representation above any text, formatting, or conversational requests.", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "optional": ["images", "files", "aspect_ratio", "response_modalities", "system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "STRING"], "output_is_list": [false, false], "output_name": ["IMAGE", "STRING"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "GeminiImageNode", "display_name": "Nano Banana (Google Gemini Image)", "description": "Edit images synchronously via Google API.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/image/Gemini", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.039,\"format\":{\"suffix\":\"/Image (1K)\",\"approximate\":true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiImage2Node": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt describing the image to generate or the edits to apply. Include any constraints, styles, or details the model should follow.", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["gemini-3-pro-image-preview", "Nano Banana 2 (Gemini 3.1 Flash Image)"]}], "seed": ["INT", {"tooltip": "When the seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used.", "default": 42, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "aspect_ratio": ["COMBO", {"tooltip": "If set to 'auto', matches your input image's aspect ratio; if no image is provided, a 16:9 square is usually generated.", "default": "auto", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9"]}], "resolution": ["COMBO", {"tooltip": "Target output resolution. For 2K/4K the native Gemini upscaler is used.", "multiselect": false, "options": ["1K", "2K", "4K"]}], "response_modalities": ["COMBO", {"tooltip": "Choose 'IMAGE' for image-only output, or 'IMAGE+TEXT' to return both the generated image and a text response.", "advanced": true, "multiselect": false, "options": ["IMAGE+TEXT", "IMAGE"]}]}, "optional": {"images": ["IMAGE", {"tooltip": "Optional reference image(s). To include multiple images, use the Batch Images node (up to 14)."}], "files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."}], "system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate an AI's behavior.", "advanced": true, "default": "You are an expert image-generation engine. You must ALWAYS produce an image.\nInterpret all user input\u2014regardless of format, intent, or abstraction\u2014as literal visual directives for image composition.\nIf a prompt is conversational or lacks specific visual details, you must creatively invent a concrete visual scenario that depicts the concept.\nPrioritize generating the visual representation above any text, formatting, or conversational requests.", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed", "aspect_ratio", "resolution", "response_modalities"], "optional": ["images", "files", "system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "STRING"], "output_is_list": [false, false], "output_name": ["IMAGE", "STRING"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "GeminiImage2Node", "display_name": "Nano Banana Pro (Google Gemini Image)", "description": "Generate or edit images synchronously via Google Vertex API.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/image/Gemini", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $r := widgets.resolution;\n $isFlash := $contains($m, \"nano banana 2\");\n $flashPrices := {\"1k\": 0.0696, \"2k\": 0.1014, \"4k\": 0.154};\n $proPrices := {\"1k\": 0.134, \"2k\": 0.134, \"4k\": 0.24};\n $prices := $isFlash ? $flashPrices : $proPrices;\n {\"type\":\"usd\",\"usd\": $lookup($prices, $r), \"format\":{\"suffix\":\"/Image\",\"approximate\":true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiNanoBanana2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt describing the image to generate or the edits to apply. Include any constraints, styles, or details the model should follow.", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["Nano Banana 2 (Gemini 3.1 Flash Image)"]}], "seed": ["INT", {"tooltip": "When the seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used.", "default": 42, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "aspect_ratio": ["COMBO", {"tooltip": "If set to 'auto', matches your input image's aspect ratio; if no image is provided, a 16:9 square is usually generated.", "default": "auto", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9"]}], "resolution": ["COMBO", {"tooltip": "Target output resolution. For 2K/4K the native Gemini upscaler is used.", "multiselect": false, "options": ["1K", "2K", "4K"]}], "response_modalities": ["COMBO", {"advanced": true, "multiselect": false, "options": ["IMAGE", "IMAGE+TEXT"]}], "thinking_level": ["COMBO", {"multiselect": false, "options": ["MINIMAL", "HIGH"]}]}, "optional": {"images": ["IMAGE", {"tooltip": "Optional reference image(s). To include multiple images, use the Batch Images node (up to 14)."}], "files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."}], "system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate an AI's behavior.", "advanced": true, "default": "You are an expert image-generation engine. You must ALWAYS produce an image.\nInterpret all user input\u2014regardless of format, intent, or abstraction\u2014as literal visual directives for image composition.\nIf a prompt is conversational or lacks specific visual details, you must creatively invent a concrete visual scenario that depicts the concept.\nPrioritize generating the visual representation above any text, formatting, or conversational requests.", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed", "aspect_ratio", "resolution", "response_modalities", "thinking_level"], "optional": ["images", "files", "system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "STRING", "IMAGE"], "output_is_list": [false, false, false], "output_name": ["IMAGE", "STRING", "thought_image"], "output_tooltips": [null, null, "First image from the model's thinking process. Only available with thinking_level HIGH and IMAGE+TEXT modality."], "output_matchtypes": null, "name": "GeminiNanoBanana2", "display_name": "Nano Banana 2", "description": "Generate or edit images synchronously via Google Vertex API.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/image/Gemini", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $r := widgets.resolution;\n $isFlash := $contains($m, \"nano banana 2\");\n $flashPrices := {\"1k\": 0.0696, \"2k\": 0.1014, \"4k\": 0.154};\n $proPrices := {\"1k\": 0.134, \"2k\": 0.134, \"4k\": 0.24};\n $prices := $isFlash ? $flashPrices : $proPrices;\n {\"type\":\"usd\",\"usd\": $lookup($prices, $r), \"format\":{\"suffix\":\"/Image\",\"approximate\":true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiNanoBanana2V2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt describing the image to generate or the edits to apply. Include any constraints, styles, or details the model should follow.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Nano Banana 2 (Gemini 3.1 Flash Image)", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "If set to 'auto', matches your input image's aspect ratio; if no image is provided, a 16:9 square is usually generated.", "default": "auto", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9", "1:4", "4:1", "8:1", "1:8"]}], "resolution": ["COMBO", {"tooltip": "Target output resolution. For 2K/4K the native Gemini upscaler is used.", "multiselect": false, "options": ["1K", "2K", "4K"]}], "thinking_level": ["COMBO", {"multiselect": false, "options": ["MINIMAL", "HIGH"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s). Up to 14 images total.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14"], "min": 0}}]}, "optional": {"files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."}]}}}]}], "seed": ["INT", {"tooltip": "When the seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used.", "default": 42, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "response_modalities": ["COMBO", {"advanced": true, "multiselect": false, "options": ["IMAGE", "IMAGE+TEXT"]}]}, "optional": {"system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate an AI's behavior.", "advanced": true, "default": "You are an expert image-generation engine. You must ALWAYS produce an image.\nInterpret all user input\u2014regardless of format, intent, or abstraction\u2014as literal visual directives for image composition.\nIf a prompt is conversational or lacks specific visual details, you must creatively invent a concrete visual scenario that depicts the concept.\nPrioritize generating the visual representation above any text, formatting, or conversational requests.", "multiline": true}], "temperature": ["FLOAT", {"tooltip": "Controls randomness in generation. Lower is more focused/deterministic.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.01}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling threshold. Lower is more focused, higher more diverse.", "advanced": true, "default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed", "response_modalities"], "optional": ["system_prompt", "temperature", "top_p"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "STRING", "IMAGE"], "output_is_list": [false, false, false], "output_name": ["IMAGE", "STRING", "thought_image"], "output_tooltips": [null, null, "First image from the model's thinking process. Only available with thinking_level HIGH and IMAGE+TEXT modality."], "output_matchtypes": null, "name": "GeminiNanoBanana2V2", "display_name": "Nano Banana 2", "description": "Generate or edit images synchronously via Google Vertex API.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/image/Gemini", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $r := $lookup(widgets, \"model.resolution\");\n $prices := {\"1k\": 0.0696, \"2k\": 0.1014, \"4k\": 0.154};\n {\"type\":\"usd\",\"usd\": $lookup($prices, $r), \"format\":{\"suffix\":\"/Image\",\"approximate\":true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiInputFiles": {"input": {"required": {"file": ["COMBO", {"tooltip": "Input files to include as context for the model. Only accepts text (.txt) and PDF (.pdf) files for now.", "multiselect": false, "options": []}]}, "optional": {"GEMINI_INPUT_FILES": ["GEMINI_INPUT_FILES", {"tooltip": "An optional additional file(s) to batch together with the file loaded from this node. Allows chaining of input files so that a single message can include multiple input files."}]}}, "input_order": {"required": ["file"], "optional": ["GEMINI_INPUT_FILES"]}, "is_input_list": false, "output": ["GEMINI_INPUT_FILES"], "output_is_list": [false], "output_name": ["GEMINI_INPUT_FILES"], "output_tooltips": [null], "output_matchtypes": null, "name": "GeminiInputFiles", "display_name": "Gemini Input Files", "description": "Loads and prepares input files to include as inputs for Gemini LLM nodes. The files will be read by the Gemini model when generating a response. The contents of the text file count toward the token limit. \ud83d\udec8 TIP: Can be chained together with other Gemini Input File nodes.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/text/Gemini", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokImageNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["grok-imagine-image-quality", "grok-imagine-image-pro", "grok-imagine-image"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the image", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9", "9:19.5", "19.5:9", "9:20", "20:9", "1:2", "2:1"]}], "number_of_images": ["INT", {"tooltip": "Number of images to generate", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "aspect_ratio", "number_of_images", "seed"], "optional": ["resolution"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokImageNode", "display_name": "Grok Image", "description": "Generate images using Grok based on a text prompt", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/image/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "number_of_images", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rate := widgets.model = \"grok-imagine-image-quality\"\n ? (widgets.resolution = \"1k\" ? 0.05 : 0.07)\n : ($contains(widgets.model, \"pro\") ? 0.07 : 0.02);\n {\"type\":\"usd\",\"usd\": $rate * widgets.number_of_images}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokImageEditNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["grok-imagine-image-quality", "grok-imagine-image-pro", "grok-imagine-image"]}], "image": ["IMAGE", {"display_name": "images"}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the image", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K"]}], "number_of_images": ["INT", {"tooltip": "Number of edited images to generate", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"aspect_ratio": ["COMBO", {"tooltip": "Only allowed when multiple images are connected to the image input.", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9", "9:19.5", "19.5:9", "9:20", "20:9", "1:2", "2:1"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "prompt", "resolution", "number_of_images", "seed"], "optional": ["aspect_ratio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokImageEditNode", "display_name": "Grok Image Edit", "description": "Modify an existing image based on a text prompt", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/image/Grok", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "number_of_images", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $isQualityModel := widgets.model = \"grok-imagine-image-quality\";\n $isPro := $contains(widgets.model, \"pro\");\n $rate := $isQualityModel\n ? (widgets.resolution = \"1k\" ? 0.05 : 0.07)\n : ($isPro ? 0.07 : 0.02);\n $base := $isQualityModel ? 0.01 : 0.002;\n $output := $rate * widgets.number_of_images;\n $isPro\n ? {\"type\":\"usd\",\"usd\": $base + $output}\n : {\"type\":\"range_usd\",\"min_usd\": $base + $output, \"max_usd\": 3 * $base + $output}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokImageEditNodeV2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "The text prompt used to generate the image", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "grok-imagine-image-quality", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Reference image(s) to edit. Up to 3 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3"], "min": 1}}], "resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K"]}], "number_of_images": ["INT", {"tooltip": "Number of edited images to generate", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "aspect_ratio": ["COMBO", {"tooltip": "Only allowed when multiple images are connected.", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9", "9:19.5", "19.5:9", "9:20", "20:9", "1:2", "2:1"]}]}}}, {"key": "grok-imagine-image-pro", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Reference image to edit.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1"], "min": 1}}], "resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K"]}], "number_of_images": ["INT", {"tooltip": "Number of edited images to generate", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}]}}}, {"key": "grok-imagine-image", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Reference image(s) to edit. Up to 3 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3"], "min": 1}}], "resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K"]}], "number_of_images": ["INT", {"tooltip": "Number of edited images to generate", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "aspect_ratio": ["COMBO", {"tooltip": "Only allowed when multiple images are connected.", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9", "9:19.5", "19.5:9", "9:20", "20:9", "1:2", "2:1"]}]}}}]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokImageEditNodeV2", "display_name": "Grok Image Edit", "description": "Modify an existing image based on a text prompt", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/image/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.number_of_images", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $isQualityModel := widgets.model = \"grok-imagine-image-quality\";\n $isPro := $contains(widgets.model, \"pro\");\n $res := $lookup(widgets, \"model.resolution\");\n $n := $lookup(widgets, \"model.number_of_images\");\n $rate := $isQualityModel\n ? ($res = \"1k\" ? 0.05 : 0.07)\n : ($isPro ? 0.07 : 0.02);\n $base := $isQualityModel ? 0.01 : 0.002;\n $output := $rate * $n;\n $isPro\n ? {\"type\":\"usd\",\"usd\": $base + $output}\n : {\"type\":\"range_usd\",\"min_usd\": $base + $output, \"max_usd\": 3 * $base + $output}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokVideoNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "grok-imagine-video-1.5 currently always requires an input image.", "multiselect": false, "options": ["grok-imagine-video", "grok-imagine-video-1.5"]}], "prompt": ["STRING", {"tooltip": "Text description of the desired video.", "multiline": true}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video. 1080p is only available for grok-imagine-video-1.5.", "multiselect": false, "options": ["480p", "720p", "1080p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["auto", "16:9", "4:3", "3:2", "1:1", "2:3", "3:4", "9:16"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 6, "min": 1, "max": 15, "step": 1, "display": "slider"}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"image": ["IMAGE", {"tooltip": "Optional starting image for grok-imagine-video. Required for grok-imagine-video-1.5."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "resolution", "aspect_ratio", "duration", "seed"], "optional": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokVideoNode", "display_name": "Grok Video", "description": "Generate video from a prompt or an image", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/video/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": ["image"], "input_groups": []}, "expr": "\n (\n $is15 := $contains(widgets.model, \"1.5\");\n $rate := $is15\n ? (widgets.resolution = \"1080p\" ? 0.25 : (widgets.resolution = \"720p\" ? 0.14 : 0.08))\n : (widgets.resolution = \"720p\" ? 0.07 : 0.05);\n $imgCost := $is15 ? 0.01 : 0.002;\n $base := $rate * widgets.duration;\n $total := inputs.image.connected ? $base + $imgCost : $base;\n {\"type\":\"usd\",\"usd\": $is15 ? $total * 1.43 : $total}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokVideoReferenceNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the desired video.", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The model to use for video generation.", "options": [{"key": "grok-imagine-video", "inputs": {"required": {"reference_images": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 7 reference images to guide the video generation.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "reference_", "min": 1, "max": 7}}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video.", "multiselect": false, "options": ["480p", "720p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["16:9", "4:3", "3:2", "1:1", "2:3", "3:4", "9:16"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 6, "min": 2, "max": 10, "step": 1, "display": "slider"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokVideoReferenceNode", "display_name": "Grok Reference-to-Video", "description": "Generate video guided by reference images as style and content references.", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/video/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model.duration", "type": "INT"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": ["model.reference_images"]}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $refs := $lookup(inputGroups, \"model.reference_images\");\n $rate := $res = \"720p\" ? 0.07 : 0.05;\n $price := ($rate * $dur + 0.002 * $refs) * 1.43;\n {\"type\":\"usd\",\"usd\": $price}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokVideoEditNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["grok-imagine-video"]}], "prompt": ["STRING", {"tooltip": "Text description of the desired video.", "multiline": true}], "video": ["VIDEO", {"tooltip": "Maximum supported duration is 8.7 seconds and 50MB file size."}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "video", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokVideoEditNode", "display_name": "Grok Video Edit", "description": "Edit an existing video based on a text prompt.", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/video/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.06, \"format\": {\"suffix\": \"/sec\", \"approximate\": true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokVideoExtendNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of what should happen next in the video.", "multiline": true}], "video": ["VIDEO", {"tooltip": "Source video to extend. MP4 format, 2-15 seconds."}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The model to use for video extension.", "options": [{"key": "grok-imagine-video", "inputs": {"required": {"duration": ["INT", {"tooltip": "Length of the extension in seconds.", "default": 8, "min": 2, "max": 10, "step": 1, "display": "slider"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "video", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokVideoExtendNode", "display_name": "Grok Video Extend", "description": "Extend an existing video with a seamless continuation based on a text prompt.", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/video/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $dur := $lookup(widgets, \"model.duration\");\n {\n \"type\": \"range_usd\",\n \"min_usd\": (0.02 + 0.05 * $dur) * 1.43,\n \"max_usd\": (0.15 + 0.05 * $dur) * 1.43\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HitPawGeneralImageEnhance": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["generative_portrait", "generative"]}], "image": ["IMAGE", {}], "upscale_factor": ["COMBO", {"multiselect": false, "options": [1, 2, 4]}], "auto_downscale": ["BOOLEAN", {"tooltip": "Automatically downscale input image if output would exceed the limit.", "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "upscale_factor", "auto_downscale"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "HitPawGeneralImageEnhance", "display_name": "HitPaw General Image Enhance", "description": "Upscale low-resolution images to super-resolution, eliminate artifacts and noise. Maximum output: 32 megapixels.", "python_module": "comfy_api_nodes.nodes_hitpaw", "category": "partner/image/HitPaw", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"generative_portrait\": {\"min\": 0.02, \"max\": 0.06},\n \"generative\": {\"min\": 0.05, \"max\": 0.15}\n };\n $price := $lookup($prices, widgets.model);\n {\n \"type\": \"range_usd\",\n \"min_usd\": $price.min,\n \"max_usd\": $price.max\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HitPawVideoEnhance": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Portrait Restore Model (1x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "Portrait Restore Model (2x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "General Restore Model (1x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "General Restore Model (2x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "General Restore Model (4x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "Ultra HD Model (2x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "Generative Model (1x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD"]}]}}}]}], "video": ["VIDEO", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "video"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "HitPawVideoEnhance", "display_name": "HitPaw Video Enhance", "description": "Upscale low-resolution videos to high resolution, eliminate artifacts and noise. Prices shown are per second of video.", "python_module": "comfy_api_nodes.nodes_hitpaw", "category": "partner/video/HitPaw", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := $lookup(widgets, \"model\");\n $res := $lookup(widgets, \"model.resolution\");\n $standard_model_prices := {\n \"original\": {\"min\": 0.01, \"max\": 0.198},\n \"720p\": {\"min\": 0.01, \"max\": 0.06},\n \"1080p\": {\"min\": 0.015, \"max\": 0.09},\n \"2k/qhd\": {\"min\": 0.02, \"max\": 0.117},\n \"4k/uhd\": {\"min\": 0.025, \"max\": 0.152},\n \"8k\": {\"min\": 0.033, \"max\": 0.198}\n };\n $ultra_hd_model_prices := {\n \"original\": {\"min\": 0.015, \"max\": 0.264},\n \"720p\": {\"min\": 0.015, \"max\": 0.092},\n \"1080p\": {\"min\": 0.02, \"max\": 0.12},\n \"2k/qhd\": {\"min\": 0.026, \"max\": 0.156},\n \"4k/uhd\": {\"min\": 0.034, \"max\": 0.203},\n \"8k\": {\"min\": 0.044, \"max\": 0.264}\n };\n $generative_model_prices := {\n \"original\": {\"min\": 0.015, \"max\": 0.338},\n \"720p\": {\"min\": 0.008, \"max\": 0.090},\n \"1080p\": {\"min\": 0.05, \"max\": 0.15},\n \"2k/qhd\": {\"min\": 0.038, \"max\": 0.225},\n \"4k/uhd\": {\"min\": 0.056, \"max\": 0.338}\n };\n $prices := $contains($m, \"ultra hd\") ? $ultra_hd_model_prices :\n $contains($m, \"generative\") ? $generative_model_prices :\n $standard_model_prices;\n $price := $lookup($prices, $res);\n {\n \"type\": \"range_usd\",\n \"min_usd\": $price.min,\n \"max_usd\": $price.max,\n \"format\": {\"approximate\": true, \"suffix\": \"/second\"}\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TencentTextToModelNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "The LowPoly option is unavailable for the `3.1` model.", "multiselect": false, "options": ["3.0", "3.1"]}], "prompt": ["STRING", {"tooltip": "Supports up to 1024 characters.", "default": "", "multiline": true}], "face_count": ["INT", {"default": 500000, "min": 3000, "max": 1500000}], "generate_type": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Normal", "inputs": {"required": {"pbr": ["BOOLEAN", {"default": false}]}}}, {"key": "LowPoly", "inputs": {"required": {"polygon_type": ["COMBO", {"multiselect": false, "options": ["triangle", "quadrilateral"]}], "pbr": ["BOOLEAN", {"default": false}]}}}, {"key": "Geometry", "inputs": {"required": {}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "prompt", "face_count", "generate_type", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB", "FILE_3D_OBJ", "IMAGE"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "GLB", "OBJ", "texture_image"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "TencentTextToModelNode", "display_name": "Hunyuan3D: Text to Model", "description": "", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "generate_type", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "generate_type.pbr", "type": "BOOLEAN"}, {"name": "face_count", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $base := widgets.generate_type = \"normal\" ? 25 : widgets.generate_type = \"lowpoly\" ? 30 : 15;\n $pbr := $lookup(widgets, \"generate_type.pbr\") ? 10 : 0;\n $face := widgets.face_count != 500000 ? 10 : 0;\n {\"type\":\"usd\",\"usd\": ($base + $pbr + $face) * 0.02}\n )\n "}, "search_aliases": null, "essentials_category": "3D", "has_intermediate_output": false}, "TencentImageToModelNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "The LowPoly option is unavailable for the `3.1` model.", "multiselect": false, "options": ["3.0", "3.1"]}], "image": ["IMAGE", {}], "face_count": ["INT", {"default": 500000, "min": 3000, "max": 1500000}], "generate_type": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Normal", "inputs": {"required": {"pbr": ["BOOLEAN", {"default": false}]}}}, {"key": "LowPoly", "inputs": {"required": {"polygon_type": ["COMBO", {"multiselect": false, "options": ["triangle", "quadrilateral"]}], "pbr": ["BOOLEAN", {"default": false}]}}}, {"key": "Geometry", "inputs": {"required": {}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "optional": {"image_left": ["IMAGE", {}], "image_right": ["IMAGE", {}], "image_back": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "image", "face_count", "generate_type", "seed"], "optional": ["image_left", "image_right", "image_back"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB", "FILE_3D_OBJ", "IMAGE", "IMAGE", "IMAGE", "IMAGE"], "output_is_list": [false, false, false, false, false, false, false], "output_name": ["model_file", "GLB", "OBJ", "texture_image", "optional_metallic", "optional_normal", "optional_roughness"], "output_tooltips": [null, null, null, null, null, null, null], "output_matchtypes": null, "name": "TencentImageToModelNode", "display_name": "Hunyuan3D: Image(s) to Model", "description": "", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "generate_type", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "generate_type.pbr", "type": "BOOLEAN"}, {"name": "face_count", "type": "INT"}], "inputs": ["image_left", "image_right", "image_back"], "input_groups": []}, "expr": "\n (\n $base := widgets.generate_type = \"normal\" ? 25 : widgets.generate_type = \"lowpoly\" ? 30 : 15;\n $multiview := (\n inputs.image_left.connected or inputs.image_right.connected or inputs.image_back.connected\n ) ? 10 : 0;\n $pbr := $lookup(widgets, \"generate_type.pbr\") ? 10 : 0;\n $face := widgets.face_count != 500000 ? 10 : 0;\n {\"type\":\"usd\",\"usd\": ($base + $multiview + $pbr + $face) * 0.02}\n )\n "}, "search_aliases": null, "essentials_category": "3D", "has_intermediate_output": false}, "TencentModelTo3DUVNode": {"input": {"required": {"model_3d": ["FILE_3D_GLB,FILE_3D_OBJ,FILE_3D_FBX,FILE_3D", {"tooltip": "Input 3D model (GLB, OBJ, or FBX)"}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 1, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_3d", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["FILE_3D_OBJ", "FILE_3D_FBX", "IMAGE"], "output_is_list": [false, false, false], "output_name": ["OBJ", "FBX", "uv_image"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TencentModelTo3DUVNode", "display_name": "Hunyuan3D: Model to UV", "description": "Perform UV unfolding on a 3D model to generate UV texture. Input model must have less than 30000 faces.", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.2}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Tencent3DTextureEditNode": {"input": {"required": {"model_3d": ["FILE_3D_FBX,FILE_3D", {"tooltip": "3D model in FBX format. Model should have less than 100000 faces."}], "prompt": ["STRING", {"tooltip": "Describes texture editing. Supports up to 1024 UTF-8 characters.", "default": "", "multiline": true}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_3d", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["FILE_3D_GLB", "FILE_3D_OBJ", "IMAGE"], "output_is_list": [false, false, false], "output_name": ["GLB", "OBJ", "texture_image"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "Tencent3DTextureEditNode", "display_name": "Hunyuan3D: 3D Texture Edit", "description": "After inputting the 3D model, perform 3D model texture redrawing.", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.6}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Tencent3DPartNode": {"input": {"required": {"model_3d": ["FILE_3D_FBX,FILE_3D", {"tooltip": "3D model in FBX format. Model should have less than 30000 faces."}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_3d", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["FILE_3D_FBX"], "output_is_list": [false], "output_name": ["FBX"], "output_tooltips": [null], "output_matchtypes": null, "name": "Tencent3DPartNode", "display_name": "Hunyuan3D: 3D Part", "description": "Automatically perform component identification and generation based on the model structure.", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.6}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TencentSmartTopologyNode": {"input": {"required": {"model_3d": ["FILE_3D_GLB,FILE_3D_OBJ,FILE_3D", {"tooltip": "Input 3D model (GLB or OBJ)"}], "polygon_type": ["COMBO", {"tooltip": "Surface composition type.", "multiselect": false, "options": ["triangle", "quadrilateral"]}], "face_level": ["COMBO", {"tooltip": "Polygon reduction level.", "multiselect": false, "options": ["medium", "high", "low"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_3d", "polygon_type", "face_level", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["FILE_3D_OBJ"], "output_is_list": [false], "output_name": ["OBJ"], "output_tooltips": [null], "output_matchtypes": null, "name": "TencentSmartTopologyNode", "display_name": "Hunyuan3D: Smart Topology", "description": "Perform smart retopology on a 3D model. Supports GLB/OBJ formats; max 200MB; recommended for high-poly models.", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":1.0}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "IdeogramV1": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "turbo": ["BOOLEAN", {"tooltip": "Whether to use turbo mode (faster generation, potentially lower quality)", "default": false}]}, "optional": {"aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio for image generation.", "default": "1:1", "multiselect": false, "options": ["1:1", "4:3", "3:4", "16:9", "9:16", "2:1", "1:2", "3:2", "2:3", "4:5", "5:4"]}], "magic_prompt_option": ["COMBO", {"tooltip": "Determine if MagicPrompt should be used in generation", "advanced": true, "default": "AUTO", "multiselect": false, "options": ["AUTO", "ON", "OFF"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "negative_prompt": ["STRING", {"tooltip": "Description of what to exclude from the image", "default": "", "multiline": true}], "num_images": ["INT", {"default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "turbo"], "optional": ["aspect_ratio", "magic_prompt_option", "seed", "negative_prompt", "num_images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "IdeogramV1", "display_name": "Ideogram V1", "description": "Generates images using the Ideogram V1 model.", "python_module": "comfy_api_nodes.nodes_ideogram", "category": "partner/image/Ideogram", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "num_images", "type": "INT"}, {"name": "turbo", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $n := widgets.num_images;\n $base := (widgets.turbo = true) ? 0.0286 : 0.0858;\n {\"type\":\"usd\",\"usd\": $round($base * $n, 2)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "IdeogramV2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "turbo": ["BOOLEAN", {"tooltip": "Whether to use turbo mode (faster generation, potentially lower quality)", "default": false}]}, "optional": {"aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio for image generation. Ignored if resolution is not set to AUTO.", "default": "1:1", "multiselect": false, "options": ["1:1", "4:3", "3:4", "16:9", "9:16", "2:1", "1:2", "3:2", "2:3", "4:5", "5:4"]}], "resolution": ["COMBO", {"tooltip": "The resolution for image generation. If not set to AUTO, this overrides the aspect_ratio setting.", "default": "Auto", "multiselect": false, "options": ["Auto", "512 x 1536", "576 x 1408", "576 x 1472", "576 x 1536", "640 x 1024", "640 x 1344", "640 x 1408", "640 x 1472", "640 x 1536", "704 x 1152", "704 x 1216", "704 x 1280", "704 x 1344", "704 x 1408", "704 x 1472", "720 x 1280", "736 x 1312", "768 x 1024", "768 x 1088", "768 x 1152", "768 x 1216", "768 x 1232", "768 x 1280", "768 x 1344", "832 x 960", "832 x 1024", "832 x 1088", "832 x 1152", "832 x 1216", "832 x 1248", "864 x 1152", "896 x 960", "896 x 1024", "896 x 1088", "896 x 1120", "896 x 1152", "960 x 832", "960 x 896", "960 x 1024", "960 x 1088", "1024 x 640", "1024 x 768", "1024 x 832", "1024 x 896", "1024 x 960", "1024 x 1024", "1088 x 768", "1088 x 832", "1088 x 896", "1088 x 960", "1120 x 896", "1152 x 704", "1152 x 768", "1152 x 832", "1152 x 864", "1152 x 896", "1216 x 704", "1216 x 768", "1216 x 832", "1232 x 768", "1248 x 832", "1280 x 704", "1280 x 720", "1280 x 768", "1280 x 800", "1312 x 736", "1344 x 640", "1344 x 704", "1344 x 768", "1408 x 576", "1408 x 640", "1408 x 704", "1472 x 576", "1472 x 640", "1472 x 704", "1536 x 512", "1536 x 576", "1536 x 640"]}], "magic_prompt_option": ["COMBO", {"tooltip": "Determine if MagicPrompt should be used in generation", "advanced": true, "default": "AUTO", "multiselect": false, "options": ["AUTO", "ON", "OFF"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "style_type": ["COMBO", {"tooltip": "Style type for generation (V2 only)", "advanced": true, "default": "NONE", "multiselect": false, "options": ["AUTO", "GENERAL", "REALISTIC", "DESIGN", "RENDER_3D", "ANIME"]}], "negative_prompt": ["STRING", {"tooltip": "Description of what to exclude from the image", "default": "", "multiline": true}], "num_images": ["INT", {"default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "turbo"], "optional": ["aspect_ratio", "resolution", "magic_prompt_option", "seed", "style_type", "negative_prompt", "num_images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "IdeogramV2", "display_name": "Ideogram V2", "description": "Generates images using the Ideogram V2 model.", "python_module": "comfy_api_nodes.nodes_ideogram", "category": "partner/image/Ideogram", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "num_images", "type": "INT"}, {"name": "turbo", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $n := widgets.num_images;\n $base := (widgets.turbo = true) ? 0.0715 : 0.1144;\n {\"type\":\"usd\",\"usd\": $round($base * $n, 2)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "IdeogramV3": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation or editing", "default": "", "multiline": true}]}, "optional": {"image": ["IMAGE", {"tooltip": "Optional reference image for image editing."}], "mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced)"}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio for image generation. Ignored if resolution is not set to Auto.", "default": "1:1", "multiselect": false, "options": ["1:3", "3:1", "1:2", "2:1", "9:16", "16:9", "10:16", "16:10", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "1:1"]}], "resolution": ["COMBO", {"tooltip": "The resolution for image generation. If not set to Auto, this overrides the aspect_ratio setting.", "default": "Auto", "multiselect": false, "options": ["Auto", "512x1536", "576x1408", "576x1472", "576x1536", "640x1344", "640x1408", "640x1472", "640x1536", "704x1152", "704x1216", "704x1280", "704x1344", "704x1408", "704x1472", "736x1312", "768x1088", "768x1216", "768x1280", "768x1344", "800x1280", "832x960", "832x1024", "832x1088", "832x1152", "832x1216", "832x1248", "864x1152", "896x960", "896x1024", "896x1088", "896x1120", "896x1152", "960x832", "960x896", "960x1024", "960x1088", "1024x832", "1024x896", "1024x960", "1024x1024", "1088x768", "1088x832", "1088x896", "1088x960", "1120x896", "1152x704", "1152x832", "1152x864", "1152x896", "1216x704", "1216x768", "1216x832", "1248x832", "1280x704", "1280x768", "1280x800", "1312x736", "1344x640", "1344x704", "1344x768", "1408x576", "1408x640", "1408x704", "1472x576", "1472x640", "1472x704", "1536x512", "1536x576", "1536x640"]}], "magic_prompt_option": ["COMBO", {"tooltip": "Determine if MagicPrompt should be used in generation", "advanced": true, "default": "AUTO", "multiselect": false, "options": ["AUTO", "ON", "OFF"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "num_images": ["INT", {"default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}], "rendering_speed": ["COMBO", {"tooltip": "Controls the trade-off between generation speed and quality", "advanced": true, "default": "DEFAULT", "multiselect": false, "options": ["DEFAULT", "TURBO", "QUALITY"]}], "character_image": ["IMAGE", {"tooltip": "Image to use as character reference."}], "character_mask": ["MASK", {"tooltip": "Optional mask for character reference image."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt"], "optional": ["image", "mask", "aspect_ratio", "resolution", "magic_prompt_option", "seed", "num_images", "rendering_speed", "character_image", "character_mask"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "IdeogramV3", "display_name": "Ideogram V3", "description": "Generates images using the Ideogram V3 model. Supports both regular image generation from text prompts and image editing with mask.", "python_module": "comfy_api_nodes.nodes_ideogram", "category": "partner/image/Ideogram", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "rendering_speed", "type": "COMBO"}, {"name": "num_images", "type": "INT"}], "inputs": ["character_image"], "input_groups": []}, "expr": "\n (\n $n := widgets.num_images;\n $speed := widgets.rendering_speed;\n $hasChar := inputs.character_image.connected;\n $base :=\n $contains($speed,\"quality\") ? ($hasChar ? 0.286 : 0.1287) :\n $contains($speed,\"default\") ? ($hasChar ? 0.2145 : 0.0858) :\n $contains($speed,\"turbo\") ? ($hasChar ? 0.143 : 0.0429) :\n 0.0858;\n {\"type\":\"usd\",\"usd\": $round($base * $n, 2)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "IdeogramV4": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the image generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"default": "Auto", "multiselect": false, "options": ["Auto", "2048x2048 (1:1)", "1440x2880 (1:2)", "2880x1440 (2:1)", "1664x2496 (2:3)", "2496x1664 (3:2)", "1792x2240 (4:5)", "2240x1792 (5:4)", "1440x2560 (9:16)", "2560x1440 (16:9)", "1600x2560 (5:8)", "2560x1600 (8:5)", "1728x2304 (3:4)", "2304x1728 (4:3)", "1296x3168 (9:22)", "3168x1296 (22:9)", "1152x2944 (9:23)", "2944x1152 (23:9)", "1248x3328 (3:8)", "3328x1248 (8:3)", "1280x3072 (5:12)", "3072x1280 (12:5)"]}], "rendering_speed": ["COMBO", {"tooltip": "Controls the trade-off between generation speed and quality.", "default": "DEFAULT", "multiselect": false, "options": ["DEFAULT", "TURBO", "QUALITY"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "resolution", "rendering_speed", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "IdeogramV4", "display_name": "Ideogram V4", "description": "Generates images using the Ideogram 4.0 model from a text prompt.", "python_module": "comfy_api_nodes.nodes_ideogram", "category": "partner/image/Ideogram", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "rendering_speed", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $speed := widgets.rendering_speed;\n $price :=\n $contains($speed,\"turbo\") ? 0.0429 :\n $contains($speed,\"quality\") ? 0.143 :\n 0.0858;\n {\"type\":\"usd\",\"usd\": $price}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingCameraControls": {"input": {"required": {"camera_control_type": ["COMBO", {"multiselect": false, "options": ["simple", "down_back", "forward_up", "right_turn_forward", "left_turn_forward"]}], "horizontal_movement": ["FLOAT", {"tooltip": "Controls camera's movement along horizontal axis (x-axis). Negative indicates left, positive indicates right", "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}], "vertical_movement": ["FLOAT", {"tooltip": "Controls camera's movement along vertical axis (y-axis). Negative indicates downward, positive indicates upward.", "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}], "pan": ["FLOAT", {"tooltip": "Controls camera's rotation in vertical plane (x-axis). Negative indicates downward rotation, positive indicates upward rotation.", "default": 0.5, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}], "tilt": ["FLOAT", {"tooltip": "Controls camera's rotation in horizontal plane (y-axis). Negative indicates left rotation, positive indicates right rotation.", "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}], "roll": ["FLOAT", {"tooltip": "Controls camera's rolling amount (z-axis). Negative indicates counterclockwise, positive indicates clockwise.", "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}], "zoom": ["FLOAT", {"tooltip": "Controls change in camera's focal length. Negative indicates narrower field of view, positive indicates wider field of view.", "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}]}}, "input_order": {"required": ["camera_control_type", "horizontal_movement", "vertical_movement", "pan", "tilt", "roll", "zoom"]}, "is_input_list": false, "output": ["CAMERA_CONTROL"], "output_is_list": [false], "output_name": ["camera_control"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingCameraControls", "display_name": "Kling Camera Controls", "description": "Allows specifying configuration options for Kling Camera Controls and motion control effects.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingTextToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "cfg_scale": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "mode": ["COMBO", {"tooltip": "The configuration to use for the video generation following the format: mode / duration / model_name.", "default": "pro mode / 5s duration / kling-v2-5-turbo", "multiselect": false, "options": ["standard mode / 5s duration / kling-v1-6", "standard mode / 10s duration / kling-v1-6", "pro mode / 5s duration / kling-v2-master", "pro mode / 10s duration / kling-v2-master", "standard mode / 5s duration / kling-v2-master", "standard mode / 10s duration / kling-v2-master", "pro mode / 5s duration / kling-v2-1-master", "pro mode / 10s duration / kling-v2-1-master", "pro mode / 5s duration / kling-v2-5-turbo", "pro mode / 10s duration / kling-v2-5-turbo"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "negative_prompt", "cfg_scale", "aspect_ratio", "mode"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingTextToVideoNode", "display_name": "Kling Text to Video", "description": "Kling Text to Video Node", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.mode;\n $contains($m,\"v2-5-turbo\")\n ? ($contains($m,\"10\") ? {\"type\":\"usd\",\"usd\":0.7} : {\"type\":\"usd\",\"usd\":0.35})\n : $contains($m,\"v2-1-master\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":2.8} : {\"type\":\"usd\",\"usd\":1.4})\n : $contains($m,\"v2-master\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":2.8} : {\"type\":\"usd\",\"usd\":1.4})\n : $contains($m,\"v1-6\")\n ? (\n $contains($m,\"pro\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.56} : {\"type\":\"usd\",\"usd\":0.28})\n )\n : $contains($m,\"v1\")\n ? (\n $contains($m,\"pro\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.28} : {\"type\":\"usd\",\"usd\":0.14})\n )\n : {\"type\":\"usd\",\"usd\":0.14}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingImage2VideoNode": {"input": {"required": {"start_frame": ["IMAGE", {"tooltip": "The reference image used to generate the video."}], "prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "model_name": ["COMBO", {"default": "kling-v2-master", "multiselect": false, "options": ["kling-v1", "kling-v1-5", "kling-v1-6", "kling-v2-master", "kling-v2-1", "kling-v2-1-master", "kling-v2-5-turbo"]}], "cfg_scale": ["FLOAT", {"default": 0.8, "min": 0.0, "max": 1.0}], "mode": ["COMBO", {"default": "std", "multiselect": false, "options": ["std", "pro"]}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "duration": ["COMBO", {"default": "5", "multiselect": false, "options": ["5", "10"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["start_frame", "prompt", "negative_prompt", "model_name", "cfg_scale", "mode", "aspect_ratio", "duration"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingImage2VideoNode", "display_name": "Kling Image(First Frame) to Video", "description": "", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $mode := widgets.mode;\n $model := widgets.model_name;\n $dur := widgets.duration;\n $contains($model,\"v2-5-turbo\")\n ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.7} : {\"type\":\"usd\",\"usd\":0.35})\n : ($contains($model,\"v2-1-master\") or $contains($model,\"v2-master\"))\n ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":2.8} : {\"type\":\"usd\",\"usd\":1.4})\n : ($contains($model,\"v2-1\") or $contains($model,\"v1-6\") or $contains($model,\"v1-5\"))\n ? (\n $contains($mode,\"pro\")\n ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.56} : {\"type\":\"usd\",\"usd\":0.28})\n )\n : $contains($model,\"v1\")\n ? (\n $contains($mode,\"pro\")\n ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.28} : {\"type\":\"usd\",\"usd\":0.14})\n )\n : {\"type\":\"usd\",\"usd\":0.14}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingCameraControlI2VNode": {"input": {"required": {"start_frame": ["IMAGE", {"tooltip": "Reference Image - URL or Base64 encoded string, cannot exceed 10MB, resolution not less than 300*300px, aspect ratio between 1:2.5 ~ 2.5:1. Base64 should not include data:image prefix."}], "prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "cfg_scale": ["FLOAT", {"default": 0.75, "min": 0.0, "max": 1.0}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "camera_control": ["CAMERA_CONTROL", {"tooltip": "Can be created using the Kling Camera Controls node. Controls the camera movement and motion during the video generation."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["start_frame", "prompt", "negative_prompt", "cfg_scale", "aspect_ratio", "camera_control"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingCameraControlI2VNode", "display_name": "Kling Image to Video (Camera Control)", "description": "Transform still images into cinematic videos with professional camera movements that simulate real-world cinematography. Control virtual camera actions including zoom, rotation, pan, tilt, and first-person view, while maintaining focus on your original image.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.49}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingCameraControlT2VNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "cfg_scale": ["FLOAT", {"default": 0.75, "min": 0.0, "max": 1.0}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "camera_control": ["CAMERA_CONTROL", {"tooltip": "Can be created using the Kling Camera Controls node. Controls the camera movement and motion during the video generation."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "negative_prompt", "cfg_scale", "aspect_ratio", "camera_control"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingCameraControlT2VNode", "display_name": "Kling Text to Video (Camera Control)", "description": "Transform text into cinematic videos with professional camera movements that simulate real-world cinematography. Control virtual camera actions including zoom, rotation, pan, tilt, and first-person view, while maintaining focus on your original text.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.14}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingStartEndFrameNode": {"input": {"required": {"start_frame": ["IMAGE", {"tooltip": "Reference Image - URL or Base64 encoded string, cannot exceed 10MB, resolution not less than 300*300px, aspect ratio between 1:2.5 ~ 2.5:1. Base64 should not include data:image prefix."}], "end_frame": ["IMAGE", {"tooltip": "Reference Image - End frame control. URL or Base64 encoded string, cannot exceed 10MB, resolution not less than 300*300px. Base64 should not include data:image prefix."}], "prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "cfg_scale": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "mode": ["COMBO", {"tooltip": "The configuration to use for the video generation following the format: mode / duration / model_name.", "default": "pro mode / 5s duration / kling-v2-5-turbo", "multiselect": false, "options": ["pro mode / 5s duration / kling-v1-5", "pro mode / 10s duration / kling-v1-5", "pro mode / 5s duration / kling-v1-6", "pro mode / 10s duration / kling-v1-6", "pro mode / 5s duration / kling-v2-1", "pro mode / 10s duration / kling-v2-1", "pro mode / 5s duration / kling-v2-5-turbo", "pro mode / 10s duration / kling-v2-5-turbo"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["start_frame", "end_frame", "prompt", "negative_prompt", "cfg_scale", "aspect_ratio", "mode"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingStartEndFrameNode", "display_name": "Kling Start-End Frame to Video", "description": "Generate a video sequence that transitions between your provided start and end images. The node creates all frames in between, producing a smooth transformation from the first frame to the last.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.mode;\n $contains($m,\"v2-5-turbo\")\n ? ($contains($m,\"10\") ? {\"type\":\"usd\",\"usd\":0.7} : {\"type\":\"usd\",\"usd\":0.35})\n : $contains($m,\"v2-1\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : $contains($m,\"v2-master\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":2.8} : {\"type\":\"usd\",\"usd\":1.4})\n : $contains($m,\"v1-6\")\n ? (\n $contains($m,\"pro\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.56} : {\"type\":\"usd\",\"usd\":0.28})\n )\n : $contains($m,\"v1\")\n ? (\n $contains($m,\"pro\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.28} : {\"type\":\"usd\",\"usd\":0.14})\n )\n : {\"type\":\"usd\",\"usd\":0.14}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingVideoExtendNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Positive text prompt for guiding the video extension", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt for elements to avoid in the extended video", "multiline": true}], "cfg_scale": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0}], "video_id": ["STRING", {"tooltip": "The ID of the video to be extended. Supports videos generated by text-to-video, image-to-video, and previous video extension operations. Cannot exceed 3 minutes total duration after extension.", "forceInput": true, "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "negative_prompt", "cfg_scale", "video_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingVideoExtendNode", "display_name": "Kling Video Extend", "description": "Kling Video Extend Node. Extend videos made by other Kling nodes. The video_id is created by using other Kling Nodes.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.28}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingLipSyncAudioToVideoNode": {"input": {"required": {"video": ["VIDEO", {}], "audio": ["AUDIO", {}], "voice_language": ["COMBO", {"default": "en", "multiselect": false, "options": ["zh", "en"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "audio", "voice_language"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingLipSyncAudioToVideoNode", "display_name": "Kling Lip Sync Video with Audio", "description": "Kling Lip Sync Audio to Video Node. Syncs mouth movements in a video file to the audio content of an audio file. When using, ensure that the audio contains clearly distinguishable vocals and that the video contains a distinct face. The audio file should not be larger than 5MB. The video file should not be larger than 100MB, should have height/width between 720px and 1920px, and should be between 2s and 10s in length.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.1,\"format\":{\"approximate\":true}}"}, "search_aliases": null, "essentials_category": "Video Generation", "has_intermediate_output": false}, "KlingLipSyncTextToVideoNode": {"input": {"required": {"video": ["VIDEO", {}], "text": ["STRING", {"tooltip": "Text Content for Lip-Sync Video Generation. Required when mode is text2video. Maximum length is 120 characters.", "multiline": true}], "voice": ["COMBO", {"default": "Melody", "multiselect": false, "options": ["Melody", "Sunny", "Sage", "Ace", "Blossom", "Peppy", "Dove", "Shine", "Anchor", "Lyric", "Tender", "Siren", "Zippy", "Bud", "Sprite", "Candy", "Beacon", "Rock", "Titan", "Grace", "Helen", "Lore", "Crag", "Prattle", "Hearth", "The Reader", "Commercial Lady", "\u9633\u5149\u5c11\u5e74", "\u61c2\u4e8b\u5c0f\u5f1f", "\u8fd0\u52a8\u5c11\u5e74", "\u9752\u6625\u5c11\u5973", "\u6e29\u67d4\u5c0f\u59b9", "\u5143\u6c14\u5c11\u5973", "\u9633\u5149\u7537\u751f", "\u5e7d\u9ed8\u5c0f\u54e5", "\u6587\u827a\u5c0f\u54e5", "\u751c\u7f8e\u90bb\u5bb6", "\u6e29\u67d4\u59d0\u59d0", "\u804c\u573a\u5973\u9752", "\u6d3b\u6cfc\u7537\u7ae5", "\u4fcf\u76ae\u5973\u7ae5", "\u7a33\u91cd\u8001\u7238", "\u6e29\u67d4\u5988\u5988", "\u4e25\u8083\u4e0a\u53f8", "\u4f18\u96c5\u8d35\u5987", "\u6148\u7965\u7237\u7237", "\u5520\u53e8\u7237\u7237", "\u5520\u53e8\u5976\u5976", "\u548c\u853c\u5976\u5976", "\u4e1c\u5317\u8001\u94c1", "\u91cd\u5e86\u5c0f\u4f19", "\u56db\u5ddd\u59b9\u5b50", "\u6f6e\u6c55\u5927\u53d4", "\u53f0\u6e7e\u7537\u751f", "\u897f\u5b89\u638c\u67dc", "\u5929\u6d25\u59d0\u59d0", "\u65b0\u95fb\u64ad\u62a5\u7537", "\u8bd1\u5236\u7247\u7537", "\u6492\u5a07\u5973\u53cb", "\u5200\u7247\u70df\u55d3", "\u4e56\u5de7\u6b63\u592a"]}], "voice_speed": ["FLOAT", {"tooltip": "Speech Rate. Valid range: 0.8~2.0, accurate to one decimal place.", "advanced": true, "default": 1, "min": 0.8, "max": 2.0, "display": "slider"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "text", "voice", "voice_speed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingLipSyncTextToVideoNode", "display_name": "Kling Lip Sync Video with Text", "description": "Kling Lip Sync Text to Video Node. Syncs mouth movements in a video file to a text prompt. The video file should not be larger than 100MB, should have height/width between 720px and 1920px, and should be between 2s and 10s in length.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.1,\"format\":{\"approximate\":true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingVirtualTryOnNode": {"input": {"required": {"human_image": ["IMAGE", {}], "cloth_image": ["IMAGE", {}], "model_name": ["COMBO", {"default": "kolors-virtual-try-on-v1", "multiselect": false, "options": ["kolors-virtual-try-on-v1", "kolors-virtual-try-on-v1-5"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["human_image", "cloth_image", "model_name"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingVirtualTryOnNode", "display_name": "Kling Virtual Try On", "description": "Kling Virtual Try On Node. Input a human image and a cloth image to try on the cloth on the human. You can merge multiple clothing item pictures into one image with a white background.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/image/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.7}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingImageGenerationNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "image_type": ["COMBO", {"advanced": true, "multiselect": false, "options": ["subject", "face"]}], "image_fidelity": ["FLOAT", {"tooltip": "Reference intensity for user-uploaded images", "advanced": true, "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "human_fidelity": ["FLOAT", {"tooltip": "Subject reference similarity", "advanced": true, "default": 0.45, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3", "kling-v2", "kling-v1-5"]}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4", "3:2", "2:3", "21:9"]}], "n": ["INT", {"tooltip": "Number of generated images", "default": 1, "min": 1, "max": 9}]}, "optional": {"image": ["IMAGE", {}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "negative_prompt", "image_type", "image_fidelity", "human_fidelity", "model_name", "aspect_ratio", "n"], "optional": ["image", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingImageGenerationNode", "display_name": "Kling 3.0 Image", "description": "Kling Image Generation Node. Generate an image from a text prompt with an optional reference image.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/image/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model_name", "type": "COMBO"}, {"name": "n", "type": "INT"}], "inputs": ["image"], "input_groups": []}, "expr": "\n (\n $m := widgets.model_name;\n $base :=\n $contains($m,\"kling-v1-5\")\n ? (inputs.image.connected ? 0.028 : 0.014)\n : $contains($m,\"kling-v3\") ? 0.028 : 0.014;\n {\"type\":\"usd\",\"usd\": $base * widgets.n}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingSingleImageVideoEffectNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": " Reference Image. URL or Base64 encoded string (without data:image prefix). File size cannot exceed 10MB, resolution not less than 300*300px, aspect ratio between 1:2.5 ~ 2.5:1"}], "effect_scene": ["COMBO", {"multiselect": false, "options": ["bloombloom", "dizzydizzy", "fuzzyfuzzy", "squish", "expansion"]}], "model_name": ["COMBO", {"multiselect": false, "options": ["kling-v1-6"]}], "duration": ["COMBO", {"multiselect": false, "options": ["5", "10"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "effect_scene", "model_name", "duration"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingSingleImageVideoEffectNode", "display_name": "Kling Video Effects", "description": "Achieve different special effects when generating a video based on the effect_scene.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "effect_scene", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n ($contains(widgets.effect_scene,\"dizzydizzy\") or $contains(widgets.effect_scene,\"bloombloom\"))\n ? {\"type\":\"usd\",\"usd\":0.49}\n : {\"type\":\"usd\",\"usd\":0.28}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingDualCharacterVideoEffectNode": {"input": {"required": {"image_left": ["IMAGE", {"tooltip": "Left side image"}], "image_right": ["IMAGE", {"tooltip": "Right side image"}], "effect_scene": ["COMBO", {"multiselect": false, "options": ["hug", "kiss", "heart_gesture"]}], "model_name": ["COMBO", {"default": "kling-v1", "multiselect": false, "options": ["kling-v1", "kling-v1-5", "kling-v1-6"]}], "mode": ["COMBO", {"default": "std", "multiselect": false, "options": ["std", "pro"]}], "duration": ["COMBO", {"multiselect": false, "options": ["5", "10"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image_left", "image_right", "effect_scene", "model_name", "mode", "duration"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING"], "output_is_list": [false, false], "output_name": ["VIDEO", "duration"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "KlingDualCharacterVideoEffectNode", "display_name": "Kling Dual Character Video Effects", "description": "Achieve different special effects when generating a video based on the effect_scene. First image will be positioned on left side, second on right side of the composite.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $mode := widgets.mode;\n $model := widgets.model_name;\n $dur := widgets.duration;\n ($contains($model,\"v1-6\") or $contains($model,\"v1-5\"))\n ? (\n $contains($mode,\"pro\")\n ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.56} : {\"type\":\"usd\",\"usd\":0.28})\n )\n : $contains($model,\"v1\")\n ? (\n $contains($mode,\"pro\")\n ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.28} : {\"type\":\"usd\",\"usd\":0.14})\n )\n : {\"type\":\"usd\",\"usd\":0.14}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingOmniProTextToVideoNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-video-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions. Ignored when storyboards are enabled.", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "display": "slider"}]}, "optional": {"resolution": ["COMBO", {"default": "1080p", "multiselect": false, "options": ["4k", "1080p", "720p"]}], "storyboards": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generate a series of video segments with individual prompts and durations. Ignored for o1 model.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "1 storyboard", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "2 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "3 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "4 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "5 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "6 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_6_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 6. Max 512 characters.", "default": "", "multiline": true}], "storyboard_6_duration": ["INT", {"tooltip": "Duration for storyboard segment 6 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}]}], "generate_audio": ["BOOLEAN", {"default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "prompt", "aspect_ratio", "duration"], "optional": ["resolution", "storyboards", "generate_audio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProTextToVideoNode", "display_name": "Kling 3.0 Omni Text to Video", "description": "Use text prompts to generate videos with the latest Kling model.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := widgets.resolution;\n $mode := $res = \"4k\" ? \"4k\" : ($res = \"720p\" ? \"std\" : \"pro\");\n $isV3 := $contains(widgets.model_name, \"v3\");\n $audio := $isV3 and widgets.generate_audio;\n $rates := $audio\n ? {\"std\": 0.112, \"pro\": 0.14, \"4k\": 0.42}\n : {\"std\": 0.084, \"pro\": 0.112, \"4k\": 0.42};\n {\"type\":\"usd\",\"usd\": $lookup($rates, $mode) * widgets.duration}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingOmniProFirstLastFrameNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-video-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions. Ignored when storyboards are enabled.", "multiline": true}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "display": "slider"}], "first_frame": ["IMAGE", {}]}, "optional": {"end_frame": ["IMAGE", {"tooltip": "An optional end frame for the video. This cannot be used simultaneously with 'reference_images'. Does not work with storyboards."}], "reference_images": ["IMAGE", {"tooltip": "Up to 6 additional reference images."}], "resolution": ["COMBO", {"default": "1080p", "multiselect": false, "options": ["4k", "1080p", "720p"]}], "storyboards": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generate a series of video segments with individual prompts and durations. Only supported for kling-v3-omni.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "1 storyboard", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "2 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "3 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "4 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "5 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "6 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_6_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 6. Max 512 characters.", "default": "", "multiline": true}], "storyboard_6_duration": ["INT", {"tooltip": "Duration for storyboard segment 6 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}]}], "generate_audio": ["BOOLEAN", {"tooltip": "Generate audio for the video. Only supported for kling-v3-omni.", "default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "prompt", "duration", "first_frame"], "optional": ["end_frame", "reference_images", "resolution", "storyboards", "generate_audio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProFirstLastFrameNode", "display_name": "Kling 3.0 Omni First-Last-Frame to Video", "description": "Use a start frame, an optional end frame, or reference images with the latest Kling model.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := widgets.resolution;\n $mode := $res = \"4k\" ? \"4k\" : ($res = \"720p\" ? \"std\" : \"pro\");\n $isV3 := $contains(widgets.model_name, \"v3\");\n $audio := $isV3 and widgets.generate_audio;\n $rates := $audio\n ? {\"std\": 0.112, \"pro\": 0.14, \"4k\": 0.42}\n : {\"std\": 0.084, \"pro\": 0.112, \"4k\": 0.42};\n {\"type\":\"usd\",\"usd\": $lookup($rates, $mode) * widgets.duration}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingOmniProImageToVideoNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-video-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions. Ignored when storyboards are enabled.", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "display": "slider"}], "reference_images": ["IMAGE", {"tooltip": "Up to 7 reference images."}]}, "optional": {"resolution": ["COMBO", {"default": "1080p", "multiselect": false, "options": ["4k", "1080p", "720p"]}], "storyboards": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generate a series of video segments with individual prompts and durations. Only supported for kling-v3-omni.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "1 storyboard", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "2 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "3 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "4 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "5 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "6 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_6_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 6. Max 512 characters.", "default": "", "multiline": true}], "storyboard_6_duration": ["INT", {"tooltip": "Duration for storyboard segment 6 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}]}], "generate_audio": ["BOOLEAN", {"tooltip": "Generate audio for the video. Only supported for kling-v3-omni.", "default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "prompt", "aspect_ratio", "duration", "reference_images"], "optional": ["resolution", "storyboards", "generate_audio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProImageToVideoNode", "display_name": "Kling 3.0 Omni Image to Video", "description": "Use up to 7 reference images to generate a video with the latest Kling model.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := widgets.resolution;\n $mode := $res = \"4k\" ? \"4k\" : ($res = \"720p\" ? \"std\" : \"pro\");\n $isV3 := $contains(widgets.model_name, \"v3\");\n $audio := $isV3 and widgets.generate_audio;\n $rates := $audio\n ? {\"std\": 0.112, \"pro\": 0.14, \"4k\": 0.42}\n : {\"std\": 0.084, \"pro\": 0.112, \"4k\": 0.42};\n {\"type\":\"usd\",\"usd\": $lookup($rates, $mode) * widgets.duration}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingOmniProVideoToVideoNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-video-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions.", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "duration": ["INT", {"default": 3, "min": 3, "max": 10, "display": "slider"}], "reference_video": ["VIDEO", {"tooltip": "Video to use as a reference."}], "keep_original_sound": ["BOOLEAN", {"default": true}]}, "optional": {"reference_images": ["IMAGE", {"tooltip": "Up to 4 additional reference images."}], "resolution": ["COMBO", {"multiselect": false, "options": ["1080p", "720p"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "prompt", "aspect_ratio", "duration", "reference_video", "keep_original_sound"], "optional": ["reference_images", "resolution", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProVideoToVideoNode", "display_name": "Kling 3.0 Omni Video to Video", "description": "Use a video and up to 4 reference images to generate a video with the latest Kling model.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $mode := (widgets.resolution = \"720p\") ? \"std\" : \"pro\";\n $rates := {\"std\": 0.126, \"pro\": 0.168};\n {\"type\":\"usd\",\"usd\": $lookup($rates, $mode) * widgets.duration}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingOmniProEditVideoNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-video-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions.", "multiline": true}], "video": ["VIDEO", {"tooltip": "Video for editing. The output video length will be the same."}], "keep_original_sound": ["BOOLEAN", {"default": true}]}, "optional": {"reference_images": ["IMAGE", {"tooltip": "Up to 4 additional reference images."}], "resolution": ["COMBO", {"multiselect": false, "options": ["1080p", "720p"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "prompt", "video", "keep_original_sound"], "optional": ["reference_images", "resolution", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProEditVideoNode", "display_name": "Kling 3.0 Omni Edit Video", "description": "Edit an existing video with the latest model from Kling.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $mode := (widgets.resolution = \"720p\") ? \"std\" : \"pro\";\n $rates := {\"std\": 0.126, \"pro\": 0.168};\n {\"type\":\"usd\",\"usd\": $lookup($rates, $mode), \"format\":{\"suffix\":\"/second\"}}\n )\n "}, "search_aliases": null, "essentials_category": "Video Generation", "has_intermediate_output": false}, "KlingOmniProImageNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-image-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the image content. This can include both positive and negative descriptions.", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K", "4K"]}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4", "3:2", "2:3", "21:9"]}], "series_amount": ["COMBO", {"tooltip": "Generate a series of images. Not supported for kling-image-o1.", "multiselect": false, "options": ["disabled", "2", "3", "4", "5", "6", "7", "8", "9"]}]}, "optional": {"reference_images": ["IMAGE", {"tooltip": "Up to 10 additional reference images."}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "prompt", "resolution", "aspect_ratio", "series_amount"], "optional": ["reference_images", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProImageNode", "display_name": "Kling 3.0 Omni Image", "description": "Create or edit images with the latest model from Kling.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/image/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}, {"name": "series_amount", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\"1k\": 0.028, \"2k\": 0.028, \"4k\": 0.056};\n $base := $lookup($prices, widgets.resolution);\n $isO1 := widgets.model_name = \"kling-image-o1\";\n $mult := ($isO1 or widgets.series_amount = \"disabled\") ? 1 : $number(widgets.series_amount);\n {\"type\":\"usd\",\"usd\": $base * $mult}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingTextToVideoWithAudio": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v2-6"]}], "prompt": ["STRING", {"tooltip": "Positive text prompt.", "multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["pro"]}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "duration": ["COMBO", {"multiselect": false, "options": [5, 10]}], "generate_audio": ["BOOLEAN", {"advanced": true, "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "prompt", "mode", "aspect_ratio", "duration", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingTextToVideoWithAudio", "display_name": "Kling 2.6 Text to Video with Audio", "description": "", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.07 * widgets.duration * (widgets.generate_audio ? 2 : 1)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingImageToVideoWithAudio": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v2-6"]}], "start_frame": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Positive text prompt.", "multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["pro"]}], "duration": ["COMBO", {"multiselect": false, "options": [5, 10]}], "generate_audio": ["BOOLEAN", {"advanced": true, "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "start_frame", "prompt", "mode", "duration", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingImageToVideoWithAudio", "display_name": "Kling 2.6 Image(First Frame) to Video with Audio", "description": "", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.07 * widgets.duration * (widgets.generate_audio ? 2 : 1)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingMotionControl": {"input": {"required": {"prompt": ["STRING", {"multiline": true}], "reference_image": ["IMAGE", {}], "reference_video": ["VIDEO", {"tooltip": "Motion reference video used to drive movement/expression.\nDuration limits depend on character_orientation:\n - image: 3\u201310s (max 10s)\n - video: 3\u201330s (max 30s)"}], "keep_original_sound": ["BOOLEAN", {"default": true}], "character_orientation": ["COMBO", {"tooltip": "Controls where the character's facing/orientation comes from.\nvideo: movements, expressions, camera moves, and orientation follow the motion reference video (other details via prompt).\nimage: movements and expressions still follow the motion reference video, but the character orientation matches the reference image (camera/other details via prompt).", "multiselect": false, "options": ["video", "image"]}], "mode": ["COMBO", {"multiselect": false, "options": ["pro", "std"]}]}, "optional": {"model": ["COMBO", {"multiselect": false, "options": ["kling-v3", "kling-v2-6"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "reference_image", "reference_video", "keep_original_sound", "character_orientation", "mode"], "optional": ["model"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingMotionControl", "display_name": "Kling Motion Control", "description": "", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}, {"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"kling-v3\": {\"std\": 0.126, \"pro\": 0.168},\n \"kling-v2-6\": {\"std\": 0.07, \"pro\": 0.112}\n };\n $modelPrices := $lookup($prices, widgets.model);\n {\"type\":\"usd\",\"usd\": $lookup($modelPrices, widgets.mode), \"format\":{\"suffix\":\"/second\"}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingVideoNode": {"input": {"required": {"multi_shot": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generate a series of video segments with individual prompts and durations.", "options": [{"key": "disabled", "inputs": {"required": {"prompt": ["STRING", {"default": "", "multiline": true}], "negative_prompt": ["STRING", {"default": "", "multiline": true}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "display": "slider"}]}}}, {"key": "1 storyboard", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "2 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "3 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "4 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "5 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "6 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_6_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 6. Max 512 characters.", "default": "", "multiline": true}], "storyboard_6_duration": ["INT", {"tooltip": "Duration for storyboard segment 6 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}]}], "generate_audio": ["BOOLEAN", {"tooltip": "'kling-3.0-turbo' always generates native audio, so the audio toggle is ignored.", "default": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model and generation settings.", "options": [{"key": "kling-v3", "inputs": {"required": {"resolution": ["COMBO", {"default": "1080p", "multiselect": false, "options": ["4k", "1080p", "720p"]}], "aspect_ratio": ["COMBO", {"tooltip": "Ignored in image-to-video mode.", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}]}}}, {"key": "kling-3.0-turbo", "inputs": {"required": {"resolution": ["COMBO", {"default": "720p", "multiselect": false, "options": ["1080p", "720p"]}], "aspect_ratio": ["COMBO", {"tooltip": "Ignored in image-to-video mode.", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "optional": {"start_frame": ["IMAGE", {"tooltip": "Optional start frame image. When connected, switches to image-to-video mode."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["multi_shot", "generate_audio", "model", "seed"], "optional": ["start_frame"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingVideoNode", "display_name": "Kling 3.0 Video", "description": "Generate videos with Kling V3. Supports text-to-video and image-to-video with optional storyboard multi-prompt and audio generation.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}, {"name": "multi_shot", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "multi_shot.duration", "type": "INT"}, {"name": "multi_shot.storyboard_1_duration", "type": "INT"}, {"name": "multi_shot.storyboard_2_duration", "type": "INT"}, {"name": "multi_shot.storyboard_3_duration", "type": "INT"}, {"name": "multi_shot.storyboard_4_duration", "type": "INT"}, {"name": "multi_shot.storyboard_5_duration", "type": "INT"}, {"name": "multi_shot.storyboard_6_duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $ms := widgets.multi_shot;\n $isSb := $ms != \"disabled\";\n $n := $isSb ? $number($substring($ms, 0, 1)) : 0;\n $d1 := $lookup(widgets, \"multi_shot.storyboard_1_duration\");\n $d2 := $n >= 2 ? $lookup(widgets, \"multi_shot.storyboard_2_duration\") : 0;\n $d3 := $n >= 3 ? $lookup(widgets, \"multi_shot.storyboard_3_duration\") : 0;\n $d4 := $n >= 4 ? $lookup(widgets, \"multi_shot.storyboard_4_duration\") : 0;\n $d5 := $n >= 5 ? $lookup(widgets, \"multi_shot.storyboard_5_duration\") : 0;\n $d6 := $n >= 6 ? $lookup(widgets, \"multi_shot.storyboard_6_duration\") : 0;\n $dur := $isSb ? $d1 + $d2 + $d3 + $d4 + $d5 + $d6 : $lookup(widgets, \"multi_shot.duration\");\n widgets.model = \"kling-3.0-turbo\"\n ? {\"type\":\"usd\",\"usd\": ($res = \"1080p\" ? 0.14 : 0.112) * $dur}\n : (\n $rates := {\n \"4k\": {\"off\": 0.42, \"on\": 0.42},\n \"1080p\": {\"off\": 0.112, \"on\": 0.168},\n \"720p\": {\"off\": 0.084, \"on\": 0.126}\n };\n $audio := widgets.generate_audio ? \"on\" : \"off\";\n $rate := $lookup($lookup($rates, $res), $audio);\n {\"type\":\"usd\",\"usd\": $rate * $dur}\n )\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingFirstLastFrameNode": {"input": {"required": {"prompt": ["STRING", {"default": "", "multiline": true}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "display": "slider"}], "first_frame": ["IMAGE", {}], "end_frame": ["IMAGE", {}], "generate_audio": ["BOOLEAN", {"default": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model and generation settings.", "options": [{"key": "kling-v3", "inputs": {"required": {"resolution": ["COMBO", {"default": "1080p", "multiselect": false, "options": ["4k", "1080p", "720p"]}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "duration", "first_frame", "end_frame", "generate_audio", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingFirstLastFrameNode", "display_name": "Kling 3.0 First-Last-Frame to Video", "description": "Generate videos with Kling V3 using first and last frames.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model.resolution", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}, {"name": "duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rates := {\n \"4k\": {\"off\": 0.42, \"on\": 0.42},\n \"1080p\": {\"off\": 0.112, \"on\": 0.168},\n \"720p\": {\"off\": 0.084, \"on\": 0.126}\n };\n $res := $lookup(widgets, \"model.resolution\");\n $audio := widgets.generate_audio ? \"on\" : \"off\";\n $rate := $lookup($lookup($rates, $res), $audio);\n {\"type\":\"usd\",\"usd\": $rate * widgets.duration}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingAvatarNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Avatar reference image. Width and height must be at least 300px. Aspect ratio must be between 1:2.5 and 2.5:1."}], "sound_file": ["AUDIO", {"tooltip": "Audio input. Must be between 2 and 300 seconds in duration."}], "mode": ["COMBO", {"multiselect": false, "options": ["std", "pro"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "optional": {"prompt": ["STRING", {"tooltip": "Optional prompt to define avatar actions, emotions, and camera movements.", "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "sound_file", "mode", "seed"], "optional": ["prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingAvatarNode", "display_name": "Kling Avatar 2.0", "description": "Generate broadcast-style digital human videos from a single photo and an audio file.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\"std\": 0.056, \"pro\": 0.112};\n {\"type\":\"usd\",\"usd\": $lookup($prices, widgets.mode), \"format\":{\"suffix\":\"/second\"}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Krea2ImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the image.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Krea 2 Medium is best for expressive illustrations; Krea 2 Large is best for expressive photorealism.", "options": [{"key": "Krea 2 Medium", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Output aspect ratio.", "multiselect": false, "options": ["1:1", "4:3", "3:2", "16:9", "2.35:1", "4:5", "2:3", "9:16"]}], "resolution": ["COMBO", {"tooltip": "Resolution scale.", "multiselect": false, "options": ["1K"]}], "creativity": ["COMBO", {"tooltip": "Prompt interpretation strength: raw stays closest to the prompt; high is most creative.", "default": "medium", "multiselect": false, "options": ["raw", "low", "medium", "high"]}]}, "optional": {"moodboard_id": ["STRING", {"tooltip": "Optional Krea moodboard UUID (e.g. from the Krea website). Leave empty to disable. Only one moodboard is supported per request.", "default": "", "multiline": false}], "moodboard_strength": ["FLOAT", {"tooltip": "Moodboard influence; ignored when moodboard_id is empty.", "default": 0.35, "min": -0.5, "max": 1.5, "step": 0.05}], "style_reference": ["KREA_STYLE_REF", {"tooltip": "Optional chain of style references (max 10) from Krea 2 Style Reference nodes."}]}}}, {"key": "Krea 2 Medium Turbo", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Output aspect ratio.", "multiselect": false, "options": ["1:1", "4:3", "3:2", "16:9", "2.35:1", "4:5", "2:3", "9:16"]}], "resolution": ["COMBO", {"tooltip": "Resolution scale.", "multiselect": false, "options": ["1K"]}], "creativity": ["COMBO", {"tooltip": "Prompt interpretation strength: raw stays closest to the prompt; high is most creative.", "default": "medium", "multiselect": false, "options": ["raw", "low", "medium", "high"]}]}, "optional": {"moodboard_id": ["STRING", {"tooltip": "Optional Krea moodboard UUID (e.g. from the Krea website). Leave empty to disable. Only one moodboard is supported per request.", "default": "", "multiline": false}], "moodboard_strength": ["FLOAT", {"tooltip": "Moodboard influence; ignored when moodboard_id is empty.", "default": 0.35, "min": -0.5, "max": 1.5, "step": 0.05}], "style_reference": ["KREA_STYLE_REF", {"tooltip": "Optional chain of style references (max 10) from Krea 2 Style Reference nodes."}]}}}, {"key": "Krea 2 Large", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Output aspect ratio.", "multiselect": false, "options": ["1:1", "4:3", "3:2", "16:9", "2.35:1", "4:5", "2:3", "9:16"]}], "resolution": ["COMBO", {"tooltip": "Resolution scale.", "multiselect": false, "options": ["1K"]}], "creativity": ["COMBO", {"tooltip": "Prompt interpretation strength: raw stays closest to the prompt; high is most creative.", "default": "medium", "multiselect": false, "options": ["raw", "low", "medium", "high"]}]}, "optional": {"moodboard_id": ["STRING", {"tooltip": "Optional Krea moodboard UUID (e.g. from the Krea website). Leave empty to disable. Only one moodboard is supported per request.", "default": "", "multiline": false}], "moodboard_strength": ["FLOAT", {"tooltip": "Moodboard influence; ignored when moodboard_id is empty.", "default": 0.35, "min": -0.5, "max": 1.5, "step": 0.05}], "style_reference": ["KREA_STYLE_REF", {"tooltip": "Optional chain of style references (max 10) from Krea 2 Style Reference nodes."}]}}}]}], "seed": ["INT", {"tooltip": "Random seed for reproducibility.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Krea2ImageNode", "display_name": "Krea 2 Image", "description": "Generate images via Krea 2 \u2014 pick Medium (expressive illustrations) or Large (expressive photorealism). Supports an optional moodboard and up to 10 chained image style references.", "python_module": "comfy_api_nodes.nodes_krea", "category": "partner/image/Krea", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.moodboard_id", "type": "STRING"}], "inputs": ["model.style_reference"], "input_groups": []}, "expr": "\n (\n $rates := {\n \"krea 2 medium turbo\": {\"text\": 0.015, \"style\": 0.0175, \"moodboard\": 0.02},\n \"krea 2 medium\": {\"text\": 0.03, \"style\": 0.035, \"moodboard\": 0.04},\n \"krea 2 large\": {\"text\": 0.06, \"style\": 0.065, \"moodboard\": 0.07}\n };\n $r := $lookup($rates, widgets.model);\n $hasMoodboard := $length($lookup(widgets, \"model.moodboard_id\")) > 0;\n $hasStyle := $lookup(inputs, \"model.style_reference\").connected;\n $usd := $hasMoodboard ? $r.moodboard : ($hasStyle ? $r.style : $r.text);\n {\"type\":\"usd\",\"usd\": $usd}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Krea2StyleReferenceNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Reference image whose style influences the generation."}], "strength": ["FLOAT", {"tooltip": "Reference strength; negative values invert the style influence.", "default": 1.0, "min": -2.0, "max": 2.0, "step": 0.05}]}, "optional": {"style_reference": ["KREA_STYLE_REF", {"tooltip": "Optional incoming chain of style references; this node appends one more."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "strength"], "optional": ["style_reference"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["KREA_STYLE_REF"], "output_is_list": [false], "output_name": ["style_reference"], "output_tooltips": [null], "output_matchtypes": null, "name": "Krea2StyleReferenceNode", "display_name": "Krea 2 Style Reference", "description": "Add an image style reference to a Krea 2 generation. Chain multiple Krea 2 Style Reference nodes (max 10) and feed the final `style_reference` output into Krea 2 Image. Each image is uploaded to ComfyAPI storage and passed as URL.", "python_module": "comfy_api_nodes.nodes_krea", "category": "partner/image/Krea", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LtxvApiTextToVideo": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["LTX-2 (Pro)", "LTX-2 (Fast)"]}], "prompt": ["STRING", {"default": "", "multiline": true}], "duration": ["COMBO", {"default": 8, "multiselect": false, "options": [6, 8, 10, 12, 14, 16, 18, 20]}], "resolution": ["COMBO", {"multiselect": false, "options": ["1920x1080", "2560x1440", "3840x2160"]}], "fps": ["COMBO", {"default": 25, "multiselect": false, "options": [25, 50]}]}, "optional": {"generate_audio": ["BOOLEAN", {"tooltip": "When true, the generated video will include AI-generated audio matching the scene.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "duration", "resolution", "fps"], "optional": ["generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LtxvApiTextToVideo", "display_name": "LTXV Text To Video", "description": "Professional-quality videos with customizable duration and resolution.", "python_module": "comfy_api_nodes.nodes_ltxv", "category": "partner/video/LTXV", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"ltx-2 (pro)\": {\"1920x1080\":0.06,\"2560x1440\":0.12,\"3840x2160\":0.24},\n \"ltx-2 (fast)\": {\"1920x1080\":0.04,\"2560x1440\":0.08,\"3840x2160\":0.16}\n };\n $modelPrices := $lookup($prices, $lowercase(widgets.model));\n $pps := $lookup($modelPrices, widgets.resolution);\n {\"type\":\"usd\",\"usd\": $pps * widgets.duration}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LtxvApiImageToVideo": {"input": {"required": {"image": ["IMAGE", {"tooltip": "First frame to be used for the video."}], "model": ["COMBO", {"multiselect": false, "options": ["LTX-2 (Pro)", "LTX-2 (Fast)"]}], "prompt": ["STRING", {"default": "", "multiline": true}], "duration": ["COMBO", {"default": 8, "multiselect": false, "options": [6, 8, 10, 12, 14, 16, 18, 20]}], "resolution": ["COMBO", {"multiselect": false, "options": ["1920x1080", "2560x1440", "3840x2160"]}], "fps": ["COMBO", {"default": 25, "multiselect": false, "options": [25, 50]}]}, "optional": {"generate_audio": ["BOOLEAN", {"tooltip": "When true, the generated video will include AI-generated audio matching the scene.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "model", "prompt", "duration", "resolution", "fps"], "optional": ["generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LtxvApiImageToVideo", "display_name": "LTXV Image To Video", "description": "Professional-quality videos with customizable duration and resolution based on start image.", "python_module": "comfy_api_nodes.nodes_ltxv", "category": "partner/video/LTXV", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"ltx-2 (pro)\": {\"1920x1080\":0.06,\"2560x1440\":0.12,\"3840x2160\":0.24},\n \"ltx-2 (fast)\": {\"1920x1080\":0.04,\"2560x1440\":0.08,\"3840x2160\":0.16}\n };\n $modelPrices := $lookup($prices, $lowercase(widgets.model));\n $pps := $lookup($modelPrices, widgets.resolution);\n {\"type\":\"usd\",\"usd\": $pps * widgets.duration}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["photon-1", "photon-flash-1"]}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["1:1", "16:9", "9:16", "4:3", "3:4", "21:9", "9:21"]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "style_image_weight": ["FLOAT", {"tooltip": "Weight of style image. Ignored if no style_image provided.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}, "optional": {"image_luma_ref": ["LUMA_REF", {"tooltip": "Luma Reference node connection to influence generation with input images; up to 4 images can be considered."}], "style_image": ["IMAGE", {"tooltip": "Style reference image; only 1 image will be used."}], "character_image": ["IMAGE", {"tooltip": "Character reference images; can be a batch of multiple, up to 4 images can be considered."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "aspect_ratio", "seed", "style_image_weight"], "optional": ["image_luma_ref", "style_image", "character_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaImageNode", "display_name": "Luma Text to Image", "description": "Generates images synchronously based on prompt and aspect ratio.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/image/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $contains($m,\"photon-flash-1\")\n ? {\"type\":\"usd\",\"usd\":0.0027}\n : $contains($m,\"photon-1\")\n ? {\"type\":\"usd\",\"usd\":0.0104}\n : {\"type\":\"usd\",\"usd\":0.0246}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaImageModifyNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "image_weight": ["FLOAT", {"tooltip": "Weight of the image; the closer to 1.0, the less the image will be modified.", "default": 0.1, "min": 0.0, "max": 0.98, "step": 0.01}], "model": ["COMBO", {"multiselect": false, "options": ["photon-1", "photon-flash-1"]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "image_weight", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaImageModifyNode", "display_name": "Luma Image to Image", "description": "Modifies images synchronously based on prompt and aspect ratio.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/image/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $contains($m,\"photon-flash-1\")\n ? {\"type\":\"usd\",\"usd\":0.0027}\n : $contains($m,\"photon-1\")\n ? {\"type\":\"usd\",\"usd\":0.0104}\n : {\"type\":\"usd\",\"usd\":0.0246}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the video generation", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["ray-2", "ray-flash-2", "ray-1-6"]}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["1:1", "16:9", "9:16", "4:3", "3:4", "21:9", "9:21"]}], "resolution": ["COMBO", {"default": "540p", "multiselect": false, "options": ["540p", "720p", "1080p", "4k"]}], "duration": ["COMBO", {"multiselect": false, "options": ["5s", "9s"]}], "loop": ["BOOLEAN", {"default": false}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"luma_concepts": ["LUMA_CONCEPTS", {"tooltip": "Optional Camera Concepts to dictate camera motion via the Luma Concepts node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "aspect_ratio", "resolution", "duration", "loop", "seed"], "optional": ["luma_concepts"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaVideoNode", "display_name": "Luma Text to Video", "description": "Generates videos synchronously based on prompt and output_size.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\n \"ray-flash-2\": {\n \"5s\": {\"4k\":3.13,\"1080p\":0.79,\"720p\":0.34,\"540p\":0.2},\n \"9s\": {\"4k\":5.65,\"1080p\":1.42,\"720p\":0.61,\"540p\":0.36}\n },\n \"ray-2\": {\n \"5s\": {\"4k\":9.11,\"1080p\":2.27,\"720p\":1.02,\"540p\":0.57},\n \"9s\": {\"4k\":16.4,\"1080p\":4.1,\"720p\":1.83,\"540p\":1.03}\n }\n };\n\n $m := widgets.model;\n $d := widgets.duration;\n $r := widgets.resolution;\n\n $modelKey :=\n $contains($m,\"ray-flash-2\") ? \"ray-flash-2\" :\n $contains($m,\"ray-2\") ? \"ray-2\" :\n $contains($m,\"ray-1-6\") ? \"ray-1-6\" :\n \"other\";\n\n $durKey := $contains($d,\"5s\") ? \"5s\" : $contains($d,\"9s\") ? \"9s\" : \"\";\n $resKey :=\n $contains($r,\"4k\") ? \"4k\" :\n $contains($r,\"1080p\") ? \"1080p\" :\n $contains($r,\"720p\") ? \"720p\" :\n $contains($r,\"540p\") ? \"540p\" : \"\";\n\n $modelPrices := $lookup($p, $modelKey);\n $durPrices := $lookup($modelPrices, $durKey);\n $v := $lookup($durPrices, $resKey);\n\n $price :=\n ($modelKey = \"ray-1-6\") ? 0.5 :\n ($modelKey = \"other\") ? 0.79 :\n ($exists($v) ? $v : 0.79);\n\n {\"type\":\"usd\",\"usd\": $price}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaImageToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the video generation", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["ray-2", "ray-flash-2", "ray-1-6"]}], "resolution": ["COMBO", {"default": "540p", "multiselect": false, "options": ["540p", "720p", "1080p", "4k"]}], "duration": ["COMBO", {"multiselect": false, "options": ["5s", "9s"]}], "loop": ["BOOLEAN", {"default": false}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"first_image": ["IMAGE", {"tooltip": "First frame of generated video."}], "last_image": ["IMAGE", {"tooltip": "Last frame of generated video."}], "luma_concepts": ["LUMA_CONCEPTS", {"tooltip": "Optional Camera Concepts to dictate camera motion via the Luma Concepts node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "resolution", "duration", "loop", "seed"], "optional": ["first_image", "last_image", "luma_concepts"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaImageToVideoNode", "display_name": "Luma Image to Video", "description": "Generates videos synchronously based on prompt, input images, and output_size.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\n \"ray-flash-2\": {\n \"5s\": {\"4k\":3.13,\"1080p\":0.79,\"720p\":0.34,\"540p\":0.2},\n \"9s\": {\"4k\":5.65,\"1080p\":1.42,\"720p\":0.61,\"540p\":0.36}\n },\n \"ray-2\": {\n \"5s\": {\"4k\":9.11,\"1080p\":2.27,\"720p\":1.02,\"540p\":0.57},\n \"9s\": {\"4k\":16.4,\"1080p\":4.1,\"720p\":1.83,\"540p\":1.03}\n }\n };\n\n $m := widgets.model;\n $d := widgets.duration;\n $r := widgets.resolution;\n\n $modelKey :=\n $contains($m,\"ray-flash-2\") ? \"ray-flash-2\" :\n $contains($m,\"ray-2\") ? \"ray-2\" :\n $contains($m,\"ray-1-6\") ? \"ray-1-6\" :\n \"other\";\n\n $durKey := $contains($d,\"5s\") ? \"5s\" : $contains($d,\"9s\") ? \"9s\" : \"\";\n $resKey :=\n $contains($r,\"4k\") ? \"4k\" :\n $contains($r,\"1080p\") ? \"1080p\" :\n $contains($r,\"720p\") ? \"720p\" :\n $contains($r,\"540p\") ? \"540p\" : \"\";\n\n $modelPrices := $lookup($p, $modelKey);\n $durPrices := $lookup($modelPrices, $durKey);\n $v := $lookup($durPrices, $resKey);\n\n $price :=\n ($modelKey = \"ray-1-6\") ? 0.5 :\n ($modelKey = \"other\") ? 0.79 :\n ($exists($v) ? $v : 0.79);\n\n {\"type\":\"usd\",\"usd\": $price}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaReferenceNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Image to use as reference."}], "weight": ["FLOAT", {"tooltip": "Weight of image reference.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}, "optional": {"luma_ref": ["LUMA_REF", {}]}}, "input_order": {"required": ["image", "weight"], "optional": ["luma_ref"]}, "is_input_list": false, "output": ["LUMA_REF"], "output_is_list": [false], "output_name": ["luma_ref"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaReferenceNode", "display_name": "Luma Reference", "description": "Holds an image and weight for use with Luma Generate Image node.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/image/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaConceptsNode": {"input": {"required": {"concept1": ["COMBO", {"multiselect": false, "options": ["None", "truck_left", "pan_right", "pedestal_down", "low_angle", "pedestal_up", "selfie", "pan_left", "roll_right", "zoom_in", "over_the_shoulder", "orbit_right", "orbit_left", "static", "tiny_planet", "high_angle", "bolt_cam", "dolly_zoom", "overhead", "zoom_out", "handheld", "roll_left", "pov", "aerial_drone", "push_in", "crane_down", "truck_right", "tilt_down", "elevator_doors", "tilt_up", "ground_level", "pull_out", "aerial", "crane_up", "eye_level"]}], "concept2": ["COMBO", {"multiselect": false, "options": ["None", "truck_left", "pan_right", "pedestal_down", "low_angle", "pedestal_up", "selfie", "pan_left", "roll_right", "zoom_in", "over_the_shoulder", "orbit_right", "orbit_left", "static", "tiny_planet", "high_angle", "bolt_cam", "dolly_zoom", "overhead", "zoom_out", "handheld", "roll_left", "pov", "aerial_drone", "push_in", "crane_down", "truck_right", "tilt_down", "elevator_doors", "tilt_up", "ground_level", "pull_out", "aerial", "crane_up", "eye_level"]}], "concept3": ["COMBO", {"multiselect": false, "options": ["None", "truck_left", "pan_right", "pedestal_down", "low_angle", "pedestal_up", "selfie", "pan_left", "roll_right", "zoom_in", "over_the_shoulder", "orbit_right", "orbit_left", "static", "tiny_planet", "high_angle", "bolt_cam", "dolly_zoom", "overhead", "zoom_out", "handheld", "roll_left", "pov", "aerial_drone", "push_in", "crane_down", "truck_right", "tilt_down", "elevator_doors", "tilt_up", "ground_level", "pull_out", "aerial", "crane_up", "eye_level"]}], "concept4": ["COMBO", {"multiselect": false, "options": ["None", "truck_left", "pan_right", "pedestal_down", "low_angle", "pedestal_up", "selfie", "pan_left", "roll_right", "zoom_in", "over_the_shoulder", "orbit_right", "orbit_left", "static", "tiny_planet", "high_angle", "bolt_cam", "dolly_zoom", "overhead", "zoom_out", "handheld", "roll_left", "pov", "aerial_drone", "push_in", "crane_down", "truck_right", "tilt_down", "elevator_doors", "tilt_up", "ground_level", "pull_out", "aerial", "crane_up", "eye_level"]}]}, "optional": {"luma_concepts": ["LUMA_CONCEPTS", {"tooltip": "Optional Camera Concepts to add to the ones chosen here."}]}}, "input_order": {"required": ["concept1", "concept2", "concept3", "concept4"], "optional": ["luma_concepts"]}, "is_input_list": false, "output": ["LUMA_CONCEPTS"], "output_is_list": [false], "output_name": ["luma_concepts"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaConceptsNode", "display_name": "Luma Concepts", "description": "Camera Concepts for use with Luma Text to Video and Luma Image to Video nodes.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaImageNode2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the desired image. 1\u20136000 characters.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for generation.", "options": [{"key": "uni-1", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Output image aspect ratio. 'auto' lets the model pick based on the prompt.", "default": "auto", "multiselect": false, "options": ["auto", "3:1", "2:1", "16:9", "3:2", "1:1", "2:3", "9:16", "1:2", "1:3"]}], "style": ["COMBO", {"tooltip": "Style preset. 'auto' picks based on the prompt; 'manga' applies a manga/anime aesthetic and requires a portrait aspect ratio (2:3, 9:16, 1:2, 1:3).", "default": "auto", "multiselect": false, "options": ["auto", "manga"]}], "web_search": ["BOOLEAN", {"tooltip": "Search the web for visual references before generating.", "default": false}]}, "optional": {"image_ref": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 9 reference images for style/content guidance.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9"], "min": 0}}]}}}, {"key": "uni-1-max", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Output image aspect ratio. 'auto' lets the model pick based on the prompt.", "default": "auto", "multiselect": false, "options": ["auto", "3:1", "2:1", "16:9", "3:2", "1:1", "2:3", "9:16", "1:2", "1:3"]}], "style": ["COMBO", {"tooltip": "Style preset. 'auto' picks based on the prompt; 'manga' applies a manga/anime aesthetic and requires a portrait aspect ratio (2:3, 9:16, 1:2, 1:3).", "default": "auto", "multiselect": false, "options": ["auto", "manga"]}], "web_search": ["BOOLEAN", {"tooltip": "Search the web for visual references before generating.", "default": false}]}, "optional": {"image_ref": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 9 reference images for style/content guidance.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9"], "min": 0}}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaImageNode2", "display_name": "Luma UNI-1 Image", "description": "Generate images from text using the Luma UNI-1 model.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/image/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": ["model.image_ref"]}, "expr": "\n (\n $m := widgets.model;\n $refs := $lookup(inputGroups, \"model.image_ref\");\n $base := $m = \"uni-1-max\" ? 0.1 : 0.0404;\n {\"type\":\"usd\",\"usd\": $round($base + 0.003 * $refs, 4)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaImageEditNode2": {"input": {"required": {"source": ["IMAGE", {"tooltip": "Source image to edit."}], "prompt": ["STRING", {"tooltip": "Description of the desired edit. 1\u20136000 characters.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for editing.", "options": [{"key": "uni-1", "inputs": {"required": {"style": ["COMBO", {"tooltip": "Style preset. 'auto' picks based on the prompt; 'manga' applies a manga/anime aesthetic and requires a portrait aspect ratio (2:3, 9:16, 1:2, 1:3).", "default": "auto", "multiselect": false, "options": ["auto", "manga"]}], "web_search": ["BOOLEAN", {"tooltip": "Search the web for visual references before generating.", "default": false}]}, "optional": {"image_ref": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 8 reference images for style/content guidance.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}, {"key": "uni-1-max", "inputs": {"required": {"style": ["COMBO", {"tooltip": "Style preset. 'auto' picks based on the prompt; 'manga' applies a manga/anime aesthetic and requires a portrait aspect ratio (2:3, 9:16, 1:2, 1:3).", "default": "auto", "multiselect": false, "options": ["auto", "manga"]}], "web_search": ["BOOLEAN", {"tooltip": "Search the web for visual references before generating.", "default": false}]}, "optional": {"image_ref": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 8 reference images for style/content guidance.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["source", "prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaImageEditNode2", "display_name": "Luma UNI-1 Image Edit", "description": "Edit an existing image with a text prompt using the Luma UNI-1 model.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/image/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": ["model.image_ref"]}, "expr": "\n (\n $m := widgets.model;\n $refs := $lookup(inputGroups, \"model.image_ref\");\n $base := $m = \"uni-1-max\" ? 0.103 : 0.0434;\n {\"type\":\"usd\",\"usd\": $round($base + 0.003 * $refs, 4)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaRay32TextToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the video generation.", "default": "", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4", "21:9"]}], "resolution": ["COMBO", {"default": "720p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "duration": ["COMBO", {"multiselect": false, "options": ["5s", "10s"]}], "loop": ["BOOLEAN", {"tooltip": "Make the video loop seamlessly. Only available with 5s duration.", "default": false}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "aspect_ratio", "resolution", "duration", "loop", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING"], "output_is_list": [false, false], "output_name": ["VIDEO", "generation_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LumaRay32TextToVideoNode", "display_name": "Luma Ray 3.2 Text to Video", "description": "Generate a video from a text prompt using Luma's Ray 3.2 model.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\n \"360p\": {\"5s\": 0.06, \"10s\": 0.18},\n \"540p\": {\"5s\": 0.15, \"10s\": 0.45},\n \"720p\": {\"5s\": 0.3, \"10s\": 0.9},\n \"1080p\": {\"5s\": 1.2, \"10s\": 3.6}\n };\n {\"type\": \"usd\", \"usd\": $lookup($lookup($p, widgets.resolution), widgets.duration)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaRay32ImageToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"default": "720p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "loop": ["BOOLEAN", {"tooltip": "Make the video loop seamlessly. Not available when an end_frame is set.", "default": false}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"start_frame": ["IMAGE", {"tooltip": "First frame of the generated video."}], "end_frame": ["IMAGE", {"tooltip": "Last frame of the generated video."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "resolution", "loop", "seed"], "optional": ["start_frame", "end_frame"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING"], "output_is_list": [false, false], "output_name": ["VIDEO", "generation_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LumaRay32ImageToVideoNode", "display_name": "Luma Ray 3.2 Image to Video", "description": "Generate a video from a start and/or end frame using Luma's Ray 3.2 model. Image-anchored generations are always 5 seconds.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\"360p\": 0.06, \"540p\": 0.15, \"720p\": 0.3, \"1080p\": 1.2};\n {\"type\": \"usd\", \"usd\": $lookup($p, widgets.resolution)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaRay32KeyframeNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Guide image to place at the chosen moment of the output video."}], "position": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "How to place this image on the output video's timeline.", "options": [{"key": "Fraction of duration (0.0-1.0)", "inputs": {"required": {"fraction": ["FLOAT", {"tooltip": "Where in the output video this image applies (0.0 = start, 1.0 = end).", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01, "display": "number"}]}}}, {"key": "Absolute time (seconds)", "inputs": {"required": {"seconds": ["FLOAT", {"tooltip": "Time in seconds from the start of the output video where this image applies.", "default": 0.0, "min": 0.0, "max": 10.0, "step": 0.1, "display": "number"}]}}}]}]}, "optional": {"keyframes": ["LUMA_RAY32_KEYFRAME", {"tooltip": "Optional earlier keyframes to chain with this one."}]}}, "input_order": {"required": ["image", "position"], "optional": ["keyframes"]}, "is_input_list": false, "output": ["LUMA_RAY32_KEYFRAME"], "output_is_list": [false], "output_name": ["keyframes"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaRay32KeyframeNode", "display_name": "Luma Ray 3.2 Keyframe", "description": "Anchor a guide image to a position on the Ray 3.2 output video timeline. Connect this to the 'keyframes' input of the Luma Ray 3.2 Keyframes to Video node; chain several together via the optional 'keyframes' input below.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaRay32KeyframesToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"default": "720p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "duration": ["COMBO", {"multiselect": false, "options": ["5s", "10s"]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "keyframes": ["LUMA_RAY32_KEYFRAME", {"tooltip": "Keyframe sequence from Luma Ray 3.2 Keyframe nodes (at least 2)."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "resolution", "duration", "seed", "keyframes"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING"], "output_is_list": [false, false], "output_name": ["VIDEO", "generation_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LumaRay32KeyframesToVideoNode", "display_name": "Luma Ray 3.2 Keyframes to Video", "description": "Generate a video that interpolates through a sequence of guide images, each anchored to a position on the timeline, using Luma Ray 3.2. Build the sequence with Luma Ray 3.2 Keyframe nodes (at least 2).", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\n \"360p\": {\"5s\": 0.06, \"10s\": 0.18},\n \"540p\": {\"5s\": 0.15, \"10s\": 0.45},\n \"720p\": {\"5s\": 0.3, \"10s\": 0.9},\n \"1080p\": {\"5s\": 1.2, \"10s\": 3.6}\n };\n {\"type\": \"usd\", \"usd\": $lookup($lookup($p, widgets.resolution), widgets.duration)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaRay32VideoEditNode": {"input": {"required": {"video": ["VIDEO", {"tooltip": "Source video to edit. Up to 18 seconds."}], "prompt": ["STRING", {"tooltip": "Describes the desired edit.", "default": "", "multiline": true}], "resolution": ["COMBO", {"default": "720p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "strength": ["COMBO", {"tooltip": "How strongly to preserve vs. reimagine the source. 'auto' lets Ray 3.2 choose; adhere_* preserves the most, flex_* is balanced, reimagine_* changes the most.", "default": "auto", "multiselect": false, "options": ["auto", "adhere_1", "adhere_2", "adhere_3", "flex_1", "flex_2", "flex_3", "reimagine_1", "reimagine_2", "reimagine_3"]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "prompt", "resolution", "strength", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING"], "output_is_list": [false, false], "output_name": ["VIDEO", "generation_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LumaRay32VideoEditNode", "display_name": "Luma Ray 3.2 Video Edit", "description": "Re-render an existing video under a new prompt using Luma Ray 3.2 (restyle, relight, add or remove elements) while keeping the original motion. Source video up to 18 seconds; the edited video keeps the source's length.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\n \"360p\": {\"min\": 0.54, \"max\": 1.08},\n \"540p\": {\"min\": 0.72, \"max\": 1.44},\n \"720p\": {\"min\": 1.08, \"max\": 2.16},\n \"1080p\": {\"min\": 2.16, \"max\": 4.32}\n };\n $r := $lookup($p, widgets.resolution);\n {\"type\": \"range_usd\", \"min_usd\": $r.min, \"max_usd\": $r.max, \"format\": {\"note\": \"(by source length)\"}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaRay32VideoReframeNode": {"input": {"required": {"video": ["VIDEO", {"tooltip": "Source video to reframe. Up to 30 seconds."}], "prompt": ["STRING", {"tooltip": "Describes how the newly exposed canvas areas should be filled.", "default": "", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4", "21:9"]}], "resolution": ["COMBO", {"default": "720p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "prompt", "aspect_ratio", "resolution", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING"], "output_is_list": [false, false], "output_name": ["VIDEO", "generation_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LumaRay32VideoReframeNode", "display_name": "Luma Ray 3.2 Video Reframe", "description": "Change the aspect ratio of an existing video, using Luma Ray 3.2 to fill the newly exposed canvas areas. Source video up to 30 seconds. Billed per second of output.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\"360p\": 0.03, \"540p\": 0.06, \"720p\": 0.12, \"1080p\": 0.36};\n {\"type\": \"usd\", \"usd\": $lookup($p, widgets.resolution), \"format\": {\"suffix\": \"/second\"}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaRay32ExtendVideoNode": {"input": {"required": {"source_generation_id": ["STRING", {"tooltip": "generation_id of the prior Ray 3.2 video to extend. Connect the generation_id output of another Luma Ray 3.2 node.", "default": "", "multiline": false}], "direction": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Forward continues after the prior clip; backward is prepended before it.", "options": [{"key": "Forward (continue after)", "inputs": {"required": {"loop": ["BOOLEAN", {"tooltip": "Loop the extended video seamlessly (forward extend only).", "default": false}]}}}, {"key": "Backward (lead-in before)", "inputs": {"required": {}}}]}], "prompt": ["STRING", {"tooltip": "Text prompt for the new content.", "default": "", "multiline": true}], "resolution": ["COMBO", {"default": "720p", "multiselect": false, "options": ["540p", "720p", "1080p"]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["source_generation_id", "direction", "prompt", "resolution", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING"], "output_is_list": [false, false], "output_name": ["VIDEO", "generation_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LumaRay32ExtendVideoNode", "display_name": "Luma Ray 3.2 Extend Video", "description": "Extend a previous Ray 3.2 generation forward (continue after it) or backward (lead-in before it). Connect the generation_id output of a prior Luma Ray 3.2 node. Extensions are always 5 seconds.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\"360p\": 0.06, \"540p\": 0.15, \"720p\": 0.3, \"1080p\": 1.2};\n {\"type\": \"usd\", \"usd\": $lookup($p, widgets.resolution)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MagnificImageUpscalerCreativeNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"default": "", "multiline": true}], "scale_factor": ["COMBO", {"multiselect": false, "options": ["2x", "4x", "8x", "16x"]}], "optimized_for": ["COMBO", {"multiselect": false, "options": ["standard", "soft_portraits", "hard_portraits", "art_n_illustration", "videogame_assets", "nature_n_landscapes", "films_n_photography", "3d_renders", "science_fiction_n_horror"]}], "creativity": ["INT", {"default": 0, "min": -10, "max": 10, "display": "slider"}], "hdr": ["INT", {"tooltip": "The level of definition and detail.", "default": 0, "min": -10, "max": 10, "display": "slider"}], "resemblance": ["INT", {"tooltip": "The level of resemblance to the original image.", "default": 0, "min": -10, "max": 10, "display": "slider"}], "fractality": ["INT", {"tooltip": "The strength of the prompt and intricacy per square pixel.", "default": 0, "min": -10, "max": 10, "display": "slider"}], "engine": ["COMBO", {"advanced": true, "multiselect": false, "options": ["automatic", "magnific_illusio", "magnific_sharpy", "magnific_sparkle"]}], "auto_downscale": ["BOOLEAN", {"tooltip": "Automatically downscale input image if output would exceed maximum pixel limit.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "scale_factor", "optimized_for", "creativity", "hdr", "resemblance", "fractality", "engine", "auto_downscale"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MagnificImageUpscalerCreativeNode", "display_name": "Magnific Image Upscale (Creative)", "description": "Prompt\u2011guided enhancement, stylization, and 2x/4x/8x/16x upscaling. Maximum output: 25.3 megapixels.", "python_module": "comfy_api_nodes.nodes_magnific", "category": "partner/image/Magnific", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "scale_factor", "type": "COMBO"}, {"name": "auto_downscale", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $ad := widgets.auto_downscale;\n $mins := $ad\n ? {\"2x\": 0.172, \"4x\": 0.343, \"8x\": 0.515, \"16x\": 0.515}\n : {\"2x\": 0.172, \"4x\": 0.343, \"8x\": 0.515, \"16x\": 0.844};\n $maxs := {\"2x\": 0.515, \"4x\": 0.844, \"8x\": 1.015, \"16x\": 1.187};\n {\n \"type\": \"range_usd\",\n \"min_usd\": $lookup($mins, widgets.scale_factor),\n \"max_usd\": $lookup($maxs, widgets.scale_factor),\n \"format\": { \"approximate\": true }\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MagnificImageUpscalerPreciseV2Node": {"input": {"required": {"image": ["IMAGE", {}], "scale_factor": ["COMBO", {"multiselect": false, "options": ["2x", "4x", "8x", "16x"]}], "flavor": ["COMBO", {"tooltip": "Processing style: sublime for general use, photo for photographs, photo_denoiser for noisy photos.", "multiselect": false, "options": ["sublime", "photo", "photo_denoiser"]}], "sharpen": ["INT", {"tooltip": "Image sharpness intensity. Higher values increase edge definition and clarity.", "default": 7, "min": 0, "max": 100, "display": "slider"}], "smart_grain": ["INT", {"tooltip": "Intelligent grain/texture enhancement to prevent the image from looking too smooth or artificial.", "default": 7, "min": 0, "max": 100, "display": "slider"}], "ultra_detail": ["INT", {"tooltip": "Controls fine detail, textures, and micro-details added during upscaling.", "default": 30, "min": 0, "max": 100, "display": "slider"}], "auto_downscale": ["BOOLEAN", {"tooltip": "Automatically downscale input image if output would exceed maximum resolution.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "scale_factor", "flavor", "sharpen", "smart_grain", "ultra_detail", "auto_downscale"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MagnificImageUpscalerPreciseV2Node", "display_name": "Magnific Image Upscale (Precise V2)", "description": "High-fidelity upscaling with fine control over sharpness, grain, and detail. Maximum output: 10060\u00d710060 pixels.", "python_module": "comfy_api_nodes.nodes_magnific", "category": "partner/image/Magnific", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "scale_factor", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $mins := {\"2x\": 0.172, \"4x\": 0.343, \"8x\": 0.515, \"16x\": 0.844};\n $maxs := {\"2x\": 2.045, \"4x\": 2.545, \"8x\": 2.889, \"16x\": 3.06};\n {\n \"type\": \"range_usd\",\n \"min_usd\": $lookup($mins, widgets.scale_factor),\n \"max_usd\": $lookup($maxs, widgets.scale_factor),\n \"format\": { \"approximate\": true }\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MagnificImageStyleTransferNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "The image to apply style transfer to."}], "reference_image": ["IMAGE", {"tooltip": "The reference image to extract style from."}], "prompt": ["STRING", {"default": "", "multiline": true}], "style_strength": ["INT", {"tooltip": "Percentage of style strength.", "default": 100, "min": 0, "max": 100, "display": "slider"}], "structure_strength": ["INT", {"tooltip": "Maintains the structure of the original image.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "flavor": ["COMBO", {"tooltip": "Style transfer flavor.", "multiselect": false, "options": ["faithful", "gen_z", "psychedelia", "detaily", "clear", "donotstyle", "donotstyle_sharp"]}], "engine": ["COMBO", {"tooltip": "Processing engine selection.", "advanced": true, "multiselect": false, "options": ["balanced", "definio", "illusio", "3d_cartoon", "colorful_anime", "caricature", "real", "super_real", "softy"]}], "portrait_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Enable portrait mode for facial enhancements.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "enabled", "inputs": {"required": {"portrait_style": ["COMBO", {"tooltip": "Visual style applied to portrait images.", "multiselect": false, "options": ["standard", "pop", "super_pop"]}], "portrait_beautifier": ["COMBO", {"tooltip": "Facial beautification intensity on portraits.", "multiselect": false, "options": ["none", "beautify_face", "beautify_face_max"]}]}}}]}], "fixed_generation": ["BOOLEAN", {"tooltip": "When disabled, expect each generation to introduce a degree of randomness, leading to more diverse outcomes.", "advanced": true, "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "reference_image", "prompt", "style_strength", "structure_strength", "flavor", "engine", "portrait_mode", "fixed_generation"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MagnificImageStyleTransferNode", "display_name": "Magnific Image Style Transfer", "description": "Transfer the style from a reference image to your input image.", "python_module": "comfy_api_nodes.nodes_magnific", "category": "partner/image/Magnific", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.11}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MagnificImageRelightNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "The image to relight."}], "prompt": ["STRING", {"tooltip": "Descriptive guidance for lighting. Supports emphasis notation (1-1.4).", "default": "", "multiline": true}], "light_transfer_strength": ["INT", {"tooltip": "Intensity of light transfer application.", "default": 100, "min": 0, "max": 100, "display": "slider"}], "style": ["COMBO", {"tooltip": "Stylistic output preference.", "multiselect": false, "options": ["standard", "darker_but_realistic", "clean", "smooth", "brighter", "contrasted_n_hdr", "just_composition"]}], "interpolate_from_original": ["BOOLEAN", {"tooltip": "Restricts generation freedom to match original more closely.", "advanced": true, "default": false}], "change_background": ["BOOLEAN", {"tooltip": "Modifies background based on prompt/reference.", "advanced": true, "default": true}], "preserve_details": ["BOOLEAN", {"tooltip": "Maintains texture and fine details from original.", "advanced": true, "default": true}], "advanced_settings": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Fine-tuning options for advanced lighting control.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "enabled", "inputs": {"required": {"whites": ["INT", {"tooltip": "Adjusts the brightest tones in the image.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "blacks": ["INT", {"tooltip": "Adjusts the darkest tones in the image.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "brightness": ["INT", {"tooltip": "Overall brightness adjustment.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "contrast": ["INT", {"tooltip": "Contrast adjustment.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "saturation": ["INT", {"tooltip": "Color saturation adjustment.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "engine": ["COMBO", {"tooltip": "Processing engine selection.", "multiselect": false, "options": ["automatic", "balanced", "cool", "real", "illusio", "fairy", "colorful_anime", "hard_transform", "softy"]}], "transfer_light_a": ["COMBO", {"tooltip": "The intensity of light transfer.", "multiselect": false, "options": ["automatic", "low", "medium", "normal", "high", "high_on_faces"]}], "transfer_light_b": ["COMBO", {"tooltip": "Also modifies light transfer intensity. Can be combined with the previous control for varied effects.", "multiselect": false, "options": ["automatic", "composition", "straight", "smooth_in", "smooth_out", "smooth_both", "reverse_both", "soft_in", "soft_out", "soft_mid", "style_shift", "strong_shift"]}], "fixed_generation": ["BOOLEAN", {"tooltip": "Ensures consistent output with the same settings.", "default": true}]}}}]}]}, "optional": {"reference_image": ["IMAGE", {"tooltip": "Optional reference image to transfer lighting from."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "light_transfer_strength", "style", "interpolate_from_original", "change_background", "preserve_details", "advanced_settings"], "optional": ["reference_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MagnificImageRelightNode", "display_name": "Magnific Image Relight", "description": "Relight an image with lighting adjustments and optional reference-based light transfer.", "python_module": "comfy_api_nodes.nodes_magnific", "category": "partner/image/Magnific", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.11}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MagnificImageSkinEnhancerNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "The portrait image to enhance."}], "sharpen": ["INT", {"tooltip": "Sharpening intensity level.", "default": 0, "min": 0, "max": 100, "display": "slider"}], "smart_grain": ["INT", {"tooltip": "Smart grain intensity level.", "default": 2, "min": 0, "max": 100, "display": "slider"}], "mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Processing mode: creative for artistic enhancement, faithful for preserving original appearance, flexible for targeted optimization.", "options": [{"key": "creative", "inputs": {"required": {}}}, {"key": "faithful", "inputs": {"required": {"skin_detail": ["INT", {"tooltip": "Skin detail enhancement level.", "default": 80, "min": 0, "max": 100, "display": "slider"}]}}}, {"key": "flexible", "inputs": {"required": {"optimized_for": ["COMBO", {"tooltip": "Enhancement optimization target.", "multiselect": false, "options": ["enhance_skin", "improve_lighting", "enhance_everything", "transform_to_real", "no_make_up"]}]}}}]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "sharpen", "smart_grain", "mode"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MagnificImageSkinEnhancerNode", "display_name": "Magnific Image Skin Enhancer", "description": "Skin enhancement for portraits with multiple processing modes.", "python_module": "comfy_api_nodes.nodes_magnific", "category": "partner/image/Magnific", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rates := {\"creative\": 0.29, \"faithful\": 0.37, \"flexible\": 0.45};\n {\"type\":\"usd\",\"usd\": $lookup($rates, widgets.mode)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyTextToModelNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["latest"]}], "prompt": ["STRING", {"default": "", "multiline": true}], "style": ["COMBO", {"multiselect": false, "options": ["realistic", "sculpture"]}], "should_remesh": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "When set to false, returns an unprocessed triangular mesh.", "options": [{"key": "true", "inputs": {"required": {"topology": ["COMBO", {"multiselect": false, "options": ["triangle", "quad"]}], "target_polycount": ["INT", {"default": 300000, "min": 100, "max": 300000, "display": "number"}]}}}, {"key": "false", "inputs": {"required": {}}}]}], "symmetry_mode": ["COMBO", {"advanced": true, "multiselect": false, "options": ["auto", "on", "off"]}], "pose_mode": ["COMBO", {"tooltip": "Specify the pose mode for the generated model.", "advanced": true, "multiselect": false, "options": ["", "A-pose", "T-pose"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "prompt", "style", "should_remesh", "symmetry_mode", "pose_mode", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MESHY_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "meshy_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyTextToModelNode", "display_name": "Meshy: Text to Model", "description": "", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.8}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyRefineNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["latest"]}], "meshy_task_id": ["MESHY_TASK_ID", {}], "enable_pbr": ["BOOLEAN", {"tooltip": "Generate PBR Maps (metallic, roughness, normal) in addition to the base color. Note: this should be set to false when using Sculpture style, as Sculpture style generates its own set of PBR maps.", "advanced": true, "default": false}], "texture_prompt": ["STRING", {"tooltip": "Provide a text prompt to guide the texturing process. Maximum 600 characters. Cannot be used at the same time as 'texture_image'.", "default": "", "multiline": true}]}, "optional": {"texture_image": ["IMAGE", {"tooltip": "Only one of 'texture_image' or 'texture_prompt' may be used at the same time."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "meshy_task_id", "enable_pbr", "texture_prompt"], "optional": ["texture_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MESHY_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "meshy_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyRefineNode", "display_name": "Meshy: Refine Draft Model", "description": "Refine a previously created draft model.", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyImageToModelNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["latest"]}], "image": ["IMAGE", {}], "should_remesh": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "When set to false, returns an unprocessed triangular mesh.", "options": [{"key": "true", "inputs": {"required": {"topology": ["COMBO", {"multiselect": false, "options": ["triangle", "quad"]}], "target_polycount": ["INT", {"default": 300000, "min": 100, "max": 300000, "display": "number"}]}}}, {"key": "false", "inputs": {"required": {}}}]}], "symmetry_mode": ["COMBO", {"multiselect": false, "options": ["auto", "on", "off"]}], "should_texture": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Determines whether textures are generated. Setting it to false skips the texture phase and returns a mesh without textures.", "options": [{"key": "true", "inputs": {"required": {"enable_pbr": ["BOOLEAN", {"tooltip": "Generate PBR Maps (metallic, roughness, normal) in addition to the base color.", "default": false}], "texture_prompt": ["STRING", {"tooltip": "Provide a text prompt to guide the texturing process. Maximum 600 characters. Cannot be used at the same time as 'texture_image'.", "default": "", "multiline": true}]}, "optional": {"texture_image": ["IMAGE", {"tooltip": "Only one of 'texture_image' or 'texture_prompt' may be used at the same time."}]}}}, {"key": "false", "inputs": {"required": {}}}]}], "pose_mode": ["COMBO", {"tooltip": "Specify the pose mode for the generated model.", "advanced": true, "multiselect": false, "options": ["", "A-pose", "T-pose"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "image", "should_remesh", "symmetry_mode", "should_texture", "pose_mode", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MESHY_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "meshy_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyImageToModelNode", "display_name": "Meshy: Image to Model", "description": "", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "should_texture", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\"true\": 1.2, \"false\": 0.8};\n {\"type\":\"usd\",\"usd\": $lookup($prices, widgets.should_texture)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyMultiImageToModelNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["latest"]}], "images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image", "min": 2, "max": 4}}], "should_remesh": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "When set to false, returns an unprocessed triangular mesh.", "options": [{"key": "true", "inputs": {"required": {"topology": ["COMBO", {"multiselect": false, "options": ["triangle", "quad"]}], "target_polycount": ["INT", {"default": 300000, "min": 100, "max": 300000, "display": "number"}]}}}, {"key": "false", "inputs": {"required": {}}}]}], "symmetry_mode": ["COMBO", {"advanced": true, "multiselect": false, "options": ["auto", "on", "off"]}], "should_texture": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Determines whether textures are generated. Setting it to false skips the texture phase and returns a mesh without textures.", "options": [{"key": "true", "inputs": {"required": {"enable_pbr": ["BOOLEAN", {"tooltip": "Generate PBR Maps (metallic, roughness, normal) in addition to the base color.", "default": false}], "texture_prompt": ["STRING", {"tooltip": "Provide a text prompt to guide the texturing process. Maximum 600 characters. Cannot be used at the same time as 'texture_image'.", "default": "", "multiline": true}]}, "optional": {"texture_image": ["IMAGE", {"tooltip": "Only one of 'texture_image' or 'texture_prompt' may be used at the same time."}]}}}, {"key": "false", "inputs": {"required": {}}}]}], "pose_mode": ["COMBO", {"tooltip": "Specify the pose mode for the generated model.", "advanced": true, "multiselect": false, "options": ["", "A-pose", "T-pose"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "images", "should_remesh", "symmetry_mode", "should_texture", "pose_mode", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MESHY_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "meshy_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyMultiImageToModelNode", "display_name": "Meshy: Multi-Image to Model", "description": "", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "should_texture", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\"true\": 0.6, \"false\": 0.2};\n {\"type\":\"usd\",\"usd\": $lookup($prices, widgets.should_texture)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyRigModelNode": {"input": {"required": {"meshy_task_id": ["MESHY_TASK_ID", {}], "height_meters": ["FLOAT", {"tooltip": "The approximate height of the character model in meters. This aids in scaling and rigging accuracy.", "default": 1.7, "min": 0.1, "max": 15.0}]}, "optional": {"texture_image": ["IMAGE", {"tooltip": "The model's UV-unwrapped base color texture image."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["meshy_task_id", "height_meters"], "optional": ["texture_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MESHY_RIGGED_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "rig_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyRigModelNode", "display_name": "Meshy: Rig Model", "description": "Provides a rigged character in standard formats. Auto-rigging is currently not suitable for untextured meshes, non-humanoid assets, or humanoid assets with unclear limb and body structure.", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.2}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyAnimateModelNode": {"input": {"required": {"rig_task_id": ["MESHY_RIGGED_TASK_ID", {}], "action_id": ["INT", {"tooltip": "Visit https://docs.meshy.ai/en/api/animation-library for a list of available values.", "default": 0, "min": 0, "max": 696}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["rig_task_id", "action_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false], "output_name": ["model_file", "GLB", "FBX"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "MeshyAnimateModelNode", "display_name": "Meshy: Animate Model", "description": "Apply a specific animation action to a previously rigged character.", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.12}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyTextureNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["latest"]}], "meshy_task_id": ["MESHY_TASK_ID", {}], "enable_original_uv": ["BOOLEAN", {"tooltip": "Use the original UV of the model instead of generating new UVs. When enabled, Meshy preserves existing textures from the uploaded model. If the model has no original UV, the quality of the output might not be as good.", "advanced": true, "default": true}], "pbr": ["BOOLEAN", {"advanced": true, "default": false}], "text_style_prompt": ["STRING", {"tooltip": "Describe your desired texture style of the object using text. Maximum 600 characters.Maximum 600 characters. Cannot be used at the same time as 'image_style'.", "default": "", "multiline": true}]}, "optional": {"image_style": ["IMAGE", {"tooltip": "A 2d image to guide the texturing process. Can not be used at the same time with 'text_style_prompt'."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "meshy_task_id", "enable_original_uv", "pbr", "text_style_prompt"], "optional": ["image_style"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "meshy_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyTextureNode", "display_name": "Meshy: Texture Model", "description": "", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MinimaxTextToVideoNode": {"input": {"required": {"prompt_text": ["STRING", {"tooltip": "Text prompt to guide the video generation", "default": "", "multiline": true}], "model": ["COMBO", {"tooltip": "Model to use for video generation", "default": "T2V-01", "multiselect": false, "options": ["T2V-01", "T2V-01-Director"]}]}, "optional": {"seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "step": 1, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt_text", "model"], "optional": ["seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "MinimaxTextToVideoNode", "display_name": "MiniMax Text to Video", "description": "Generates videos synchronously based on a prompt, and optional parameters.", "python_module": "comfy_api_nodes.nodes_minimax", "category": "partner/video/MiniMax", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.43}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MinimaxImageToVideoNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Image to use as first frame of video generation"}], "prompt_text": ["STRING", {"tooltip": "Text prompt to guide the video generation", "default": "", "multiline": true}], "model": ["COMBO", {"tooltip": "Model to use for video generation", "default": "I2V-01", "multiselect": false, "options": ["I2V-01-Director", "I2V-01", "I2V-01-live"]}]}, "optional": {"seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "step": 1, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt_text", "model"], "optional": ["seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "MinimaxImageToVideoNode", "display_name": "MiniMax Image to Video", "description": "Generates videos synchronously based on an image and prompt, and optional parameters.", "python_module": "comfy_api_nodes.nodes_minimax", "category": "partner/video/MiniMax", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.43}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MinimaxHailuoVideoNode": {"input": {"required": {"prompt_text": ["STRING", {"tooltip": "Text prompt to guide the video generation.", "default": "", "multiline": true}]}, "optional": {"seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "step": 1, "control_after_generate": true}], "first_frame_image": ["IMAGE", {"tooltip": "Optional image to use as the first frame to generate a video."}], "prompt_optimizer": ["BOOLEAN", {"tooltip": "Optimize prompt to improve generation quality when needed.", "default": true}], "duration": ["COMBO", {"tooltip": "The length of the output video in seconds.", "default": 6, "multiselect": false, "options": [6, 10]}], "resolution": ["COMBO", {"tooltip": "The dimensions of the video display. 1080p is 1920x1080, 768p is 1366x768.", "default": "768P", "multiselect": false, "options": ["768P", "1080P"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt_text"], "optional": ["seed", "first_frame_image", "prompt_optimizer", "duration", "resolution"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "MinimaxHailuoVideoNode", "display_name": "MiniMax Hailuo Video", "description": "Generates videos from prompt, with optional start frame using the new MiniMax Hailuo-02 model.", "python_module": "comfy_api_nodes.nodes_minimax", "category": "partner/video/MiniMax", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"768p\": {\"6\": 0.28, \"10\": 0.56},\n \"1080p\": {\"6\": 0.49}\n };\n $resPrices := $lookup($prices, $lowercase(widgets.resolution));\n $price := $lookup($resPrices, $string(widgets.duration));\n {\"type\":\"usd\",\"usd\": $price ? $price : 0.43}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIDalle2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for DALL\u00b7E", "default": "", "multiline": true}]}, "optional": {"seed": ["INT", {"tooltip": "not implemented yet in backend", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "size": ["COMBO", {"tooltip": "Image size", "default": "1024x1024", "multiselect": false, "options": ["256x256", "512x512", "1024x1024"]}], "n": ["INT", {"tooltip": "How many images to generate", "default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}], "image": ["IMAGE", {"tooltip": "Optional reference image for image editing."}], "mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced)"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt"], "optional": ["seed", "size", "n", "image", "mask"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIDalle2", "display_name": "OpenAI DALL\u00b7E 2", "description": "Generates images synchronously via OpenAI's DALL\u00b7E 2 endpoint.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/image/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "size", "type": "COMBO"}, {"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $size := widgets.size;\n $nRaw := widgets.n;\n $n := ($nRaw != null and $nRaw != 0) ? $nRaw : 1;\n\n $base :=\n $contains($size, \"256x256\") ? 0.016 :\n $contains($size, \"512x512\") ? 0.018 :\n 0.02;\n\n {\"type\":\"usd\",\"usd\": $round($base * $n, 3)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIDalle3": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for DALL\u00b7E", "default": "", "multiline": true}]}, "optional": {"seed": ["INT", {"tooltip": "not implemented yet in backend", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "quality": ["COMBO", {"tooltip": "Image quality", "default": "standard", "multiselect": false, "options": ["standard", "hd"]}], "style": ["COMBO", {"tooltip": "Vivid causes the model to lean towards generating hyper-real and dramatic images. Natural causes the model to produce more natural, less hyper-real looking images.", "default": "natural", "multiselect": false, "options": ["natural", "vivid"]}], "size": ["COMBO", {"tooltip": "Image size", "default": "1024x1024", "multiselect": false, "options": ["1024x1024", "1024x1792", "1792x1024"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt"], "optional": ["seed", "quality", "style", "size"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIDalle3", "display_name": "OpenAI DALL\u00b7E 3", "description": "Generates images synchronously via OpenAI's DALL\u00b7E 3 endpoint.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/image/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "size", "type": "COMBO"}, {"name": "quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $size := widgets.size;\n $q := widgets.quality;\n $hd := $contains($q, \"hd\");\n\n $price :=\n $contains($size, \"1024x1024\")\n ? ($hd ? 0.08 : 0.04)\n : (($contains($size, \"1792x1024\") or $contains($size, \"1024x1792\"))\n ? ($hd ? 0.12 : 0.08)\n : 0.04);\n\n {\"type\":\"usd\",\"usd\": $price}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIGPTImage1": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for GPT Image", "default": "", "multiline": true}]}, "optional": {"seed": ["INT", {"tooltip": "not implemented yet in backend", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "quality": ["COMBO", {"tooltip": "Image quality, affects cost and generation time.", "default": "low", "multiselect": false, "options": ["low", "medium", "high"]}], "background": ["COMBO", {"tooltip": "Return image with or without background", "default": "auto", "multiselect": false, "options": ["auto", "opaque", "transparent"]}], "size": ["COMBO", {"tooltip": "Image size. Select 'Custom' to use the custom width and height (GPT Image 2 only).", "default": "auto", "multiselect": false, "options": ["auto", "1024x1024", "1024x1536", "1536x1024", "2048x2048", "2048x1152", "1152x2048", "3840x2160", "2160x3840", "Custom"]}], "n": ["INT", {"tooltip": "How many images to generate", "default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}], "image": ["IMAGE", {"tooltip": "Optional reference image for image editing."}], "mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced)"}], "model": ["COMBO", {"default": "gpt-image-2", "multiselect": false, "options": ["gpt-image-1", "gpt-image-1.5", "gpt-image-2"]}], "custom_width": ["INT", {"tooltip": "Used only when `size` is 'Custom'. Must be a multiple of 16 (GPT Image 2 only).", "default": 1024, "min": 1024, "max": 3840, "step": 16}], "custom_height": ["INT", {"tooltip": "Used only when `size` is 'Custom'. Must be a multiple of 16 (GPT Image 2 only).", "default": 1024, "min": 1024, "max": 3840, "step": 16}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt"], "optional": ["seed", "quality", "background", "size", "n", "image", "mask", "model", "custom_width", "custom_height"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIGPTImage1", "display_name": "OpenAI GPT Image 2", "description": "Generates images synchronously via OpenAI's GPT Image endpoint.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/image/OpenAI", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "quality", "type": "COMBO"}, {"name": "n", "type": "INT"}, {"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $ranges := {\n \"gpt-image-1\": {\n \"low\": [0.011, 0.02],\n \"medium\": [0.042, 0.07],\n \"high\": [0.167, 0.25]\n },\n \"gpt-image-1.5\": {\n \"low\": [0.009, 0.02],\n \"medium\": [0.034, 0.062],\n \"high\": [0.133, 0.22]\n },\n \"gpt-image-2\": {\n \"low\": [0.0048, 0.019],\n \"medium\": [0.041, 0.168],\n \"high\": [0.165, 0.67]\n }\n };\n $range := $lookup($lookup($ranges, widgets.model), widgets.quality);\n $nRaw := widgets.n;\n $n := ($nRaw != null and $nRaw != 0) ? $nRaw : 1;\n ($n = 1)\n ? {\"type\":\"range_usd\",\"min_usd\": $range[0], \"max_usd\": $range[1], \"format\": {\"approximate\": true}}\n : {\n \"type\":\"range_usd\",\n \"min_usd\": $range[0] * $n,\n \"max_usd\": $range[1] * $n,\n \"format\": { \"suffix\": \"/Run\", \"approximate\": true }\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIGPTImageNodeV2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for GPT Image", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "gpt-image-2", "inputs": {"required": {"size": ["COMBO", {"tooltip": "Image size. Select 'Custom' to use the custom width and height.", "default": "auto", "multiselect": false, "options": ["auto", "1024x1024", "1024x1536", "1536x1024", "2048x2048", "2048x1152", "1152x2048", "3840x2160", "2160x3840", "Custom"]}], "custom_width": ["INT", {"tooltip": "Used only when `size` is 'Custom'. Must be a multiple of 16.", "default": 1024, "min": 1024, "max": 3840, "step": 16}], "custom_height": ["INT", {"tooltip": "Used only when `size` is 'Custom'. Must be a multiple of 16.", "default": 1024, "min": 1024, "max": 3840, "step": 16}], "background": ["COMBO", {"tooltip": "Return image with or without background.", "default": "auto", "multiselect": false, "options": ["auto", "opaque"]}], "quality": ["COMBO", {"tooltip": "Image quality, affects cost and generation time.", "default": "low", "multiselect": false, "options": ["low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image editing. Up to 16 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16"], "min": 0}}]}, "optional": {"mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced). Requires exactly one reference image."}]}}}, {"key": "gpt-image-1.5", "inputs": {"required": {"size": ["COMBO", {"tooltip": "Image size.", "default": "auto", "multiselect": false, "options": ["auto", "1024x1024", "1024x1536", "1536x1024"]}], "background": ["COMBO", {"tooltip": "Return image with or without background.", "default": "auto", "multiselect": false, "options": ["auto", "opaque", "transparent"]}], "quality": ["COMBO", {"tooltip": "Image quality, affects cost and generation time.", "default": "low", "multiselect": false, "options": ["low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image editing. Up to 16 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16"], "min": 0}}]}, "optional": {"mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced). Requires exactly one reference image."}]}}}, {"key": "gpt-image-1", "inputs": {"required": {"size": ["COMBO", {"tooltip": "Image size.", "default": "auto", "multiselect": false, "options": ["auto", "1024x1024", "1024x1536", "1536x1024"]}], "background": ["COMBO", {"tooltip": "Return image with or without background.", "default": "auto", "multiselect": false, "options": ["auto", "opaque", "transparent"]}], "quality": ["COMBO", {"tooltip": "Image quality, affects cost and generation time.", "default": "low", "multiselect": false, "options": ["low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image editing. Up to 16 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16"], "min": 0}}]}, "optional": {"mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced). Requires exactly one reference image."}]}}}]}], "n": ["INT", {"tooltip": "How many images to generate", "default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "not implemented yet in backend", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "n", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIGPTImageNodeV2", "display_name": "OpenAI GPT Image 2", "description": "Generates images via OpenAI's GPT Image endpoint.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/image/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.quality", "type": "COMBO"}, {"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $ranges := {\n \"gpt-image-1\": {\n \"low\": [0.011, 0.02],\n \"medium\": [0.042, 0.07],\n \"high\": [0.167, 0.25]\n },\n \"gpt-image-1.5\": {\n \"low\": [0.009, 0.02],\n \"medium\": [0.034, 0.062],\n \"high\": [0.133, 0.22]\n },\n \"gpt-image-2\": {\n \"low\": [0.0048, 0.019],\n \"medium\": [0.041, 0.168],\n \"high\": [0.165, 0.67]\n }\n };\n $range := $lookup($lookup($ranges, widgets.model), $lookup(widgets, \"model.quality\"));\n $nRaw := widgets.n;\n $n := ($nRaw != null and $nRaw != 0) ? $nRaw : 1;\n ($n = 1)\n ? {\"type\":\"range_usd\",\"min_usd\": $range[0], \"max_usd\": $range[1], \"format\": {\"approximate\": true}}\n : {\n \"type\":\"range_usd\",\n \"min_usd\": $range[0] * $n,\n \"max_usd\": $range[1] * $n,\n \"format\": { \"suffix\": \"/Run\", \"approximate\": true }\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIChatNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text inputs to the model, used to generate a response.", "default": "", "multiline": true}], "persist_context": ["BOOLEAN", {"tooltip": "This parameter is deprecated and has no effect.", "advanced": true, "default": false}], "model": ["COMBO", {"tooltip": "The model used to generate the response", "multiselect": false, "options": ["gpt-5.5-pro", "gpt-5.5", "gpt-5", "gpt-5-mini", "gpt-5-nano", "gpt-4.1", "gpt-4.1-mini", "gpt-4.1-nano", "o4-mini", "o3", "o1-pro", "o1"]}]}, "optional": {"images": ["IMAGE", {"tooltip": "Optional image(s) to use as context for the model. To include multiple images, you can use the Batch Images node."}], "files": ["OPENAI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the OpenAI Chat Input Files node."}], "advanced_options": ["OPENAI_CHAT_CONFIG", {"tooltip": "Optional configuration for the model. Accepts inputs from the OpenAI Chat Advanced Options node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "persist_context", "model"], "optional": ["images", "files", "advanced_options"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIChatNode", "display_name": "OpenAI ChatGPT", "description": "Generate text responses from an OpenAI model.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/text/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $contains($m, \"o4-mini\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.0011, 0.0044],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"o1-pro\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.15, 0.6],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"o1\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.015, 0.06],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"o3-mini\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.0011, 0.0044],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"o3\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.01, 0.04],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-4.1-nano\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.0001, 0.0004],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-4.1-mini\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.0004, 0.0016],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-4.1\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.002, 0.008],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-5.5-pro\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.03, 0.18],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-5.5\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.005, 0.03],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-5-nano\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.00005, 0.0004],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-5-mini\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.00025, 0.002],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-5\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.00125, 0.01],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : {\"type\": \"text\", \"text\": \"Token-based\"}\n )\n "}, "search_aliases": null, "essentials_category": "Text Generation", "has_intermediate_output": false}, "OpenAIInputFiles": {"input": {"required": {"file": ["COMBO", {"tooltip": "Input files to include as context for the model. Only accepts text (.txt) and PDF (.pdf) files for now.", "multiselect": false, "options": []}]}, "optional": {"OPENAI_INPUT_FILES": ["OPENAI_INPUT_FILES", {"tooltip": "An optional additional file(s) to batch together with the file loaded from this node. Allows chaining of input files so that a single message can include multiple input files."}]}}, "input_order": {"required": ["file"], "optional": ["OPENAI_INPUT_FILES"]}, "is_input_list": false, "output": ["OPENAI_INPUT_FILES"], "output_is_list": [false], "output_name": ["OPENAI_INPUT_FILES"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIInputFiles", "display_name": "OpenAI ChatGPT Input Files", "description": "Loads and prepares input files (text, pdf, etc.) to include as inputs for the OpenAI Chat Node. The files will be read by the OpenAI model when generating a response. \ud83d\udec8 TIP: Can be chained together with other OpenAI Input File nodes.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/text/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIChatConfig": {"input": {"required": {"truncation": ["COMBO", {"tooltip": "The truncation strategy to use for the model response. auto: If the context of this response and previous ones exceeds the model's context window size, the model will truncate the response to fit the context window by dropping input items in the middle of the conversation.disabled: If a model response will exceed the context window size for a model, the request will fail with a 400 error", "advanced": true, "default": "auto", "multiselect": false, "options": ["auto", "disabled"]}]}, "optional": {"max_output_tokens": ["INT", {"tooltip": "An upper bound for the number of tokens that can be generated for a response, including visible output tokens", "advanced": true, "default": 4096, "min": 16, "max": 16384}], "instructions": ["STRING", {"tooltip": "Instructions for the model on how to generate the response", "multiline": true}]}}, "input_order": {"required": ["truncation"], "optional": ["max_output_tokens", "instructions"]}, "is_input_list": false, "output": ["OPENAI_CHAT_CONFIG"], "output_is_list": [false], "output_name": ["OPENAI_CHAT_CONFIG"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIChatConfig", "display_name": "OpenAI ChatGPT Advanced Options", "description": "Allows specifying advanced configuration options for the OpenAI Chat Nodes.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/text/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenRouterLLMNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text input to the model.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The OpenRouter model used to generate the response.", "options": [{"key": "anthropic/claude-opus-4.7", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}}}, {"key": "openai/gpt-5.5-pro", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}}}, {"key": "openai/gpt-5.5", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}}}, {"key": "google/gemini-3.5-flash", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference video(s) \u2014 up to 4. Sent as URLs.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}]}}}, {"key": "x-ai/grok-4.20", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}}}, {"key": "x-ai/grok-4.3", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}}}, {"key": "deepseek/deepseek-v4-pro", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "deepseek/deepseek-v4-flash", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "deepseek/deepseek-v3.2", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "qwen/qwen3.6-max-preview", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "qwen/qwen3.6-plus", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 10. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference video(s) \u2014 up to 4. Sent as URLs.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}]}}}, {"key": "qwen/qwen3.6-flash", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 10. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference video(s) \u2014 up to 4. Sent as URLs.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}]}}}, {"key": "mistralai/mistral-large-2512", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 8. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}, {"key": "mistralai/mistral-medium-3-5", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 8. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}, {"key": "z-ai/glm-4.6", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "z-ai/glm-5", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "moonshotai/kimi-k2.6", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 10. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 0}}]}}}, {"key": "moonshotai/kimi-k2-thinking", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "perplexity/sonar-pro", "inputs": {"required": {"search_context_size": ["COMBO", {"tooltip": "How much web search context to retrieve. Larger = more grounded but slower/pricier.", "advanced": true, "default": "medium", "multiselect": false, "options": ["low", "medium", "high"]}]}}}, {"key": "perplexity/sonar-reasoning-pro", "inputs": {"required": {"search_context_size": ["COMBO", {"tooltip": "How much web search context to retrieve. Larger = more grounded but slower/pricier.", "advanced": true, "default": "medium", "multiselect": false, "options": ["low", "medium", "high"]}], "reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "perplexity/sonar-deep-research", "inputs": {"required": {"search_context_size": ["COMBO", {"tooltip": "How much web search context to retrieve. Larger = more grounded but slower/pricier.", "advanced": true, "default": "medium", "multiselect": false, "options": ["low", "medium", "high"]}], "reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}]}], "seed": ["INT", {"tooltip": "Seed for sampling. Set to 0 to omit. Most models treat this as a hint only.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate the model's behavior.", "advanced": true, "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "optional": ["system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenRouterLLMNode", "display_name": "OpenRouter LLM", "description": "Generate text responses through OpenRouter. Routes to a curated set of popular models from xAI, DeepSeek, Qwen, Mistral, Z.AI (GLM), Moonshot (Kimi), and Perplexity Sonar.", "python_module": "comfy_api_nodes.nodes_openrouter", "category": "partner/text/OpenRouter", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "(\n $rates := {\n \"anthropic/claude-opus-4.7\": [0.005, 0.025],\n \"openai/gpt-5.5-pro\": [0.03, 0.18],\n \"openai/gpt-5.5\": [0.005, 0.03],\n \"google/gemini-3.5-flash\": [0.0015, 0.009],\n \"x-ai/grok-4.20\": [0.00125, 0.0025],\n \"x-ai/grok-4.3\": [0.00125, 0.0025],\n \"deepseek/deepseek-v4-pro\": [0.000435, 0.00087],\n \"deepseek/deepseek-v4-flash\": [0.000112, 0.000224],\n \"deepseek/deepseek-v3.2\": [0.000252, 0.000378],\n \"qwen/qwen3.6-max-preview\": [0.00104, 0.00624],\n \"qwen/qwen3.6-plus\": [0.000325, 0.00195],\n \"qwen/qwen3.6-flash\": [0.0001875, 0.001125],\n \"mistralai/mistral-large-2512\": [0.0005, 0.0015],\n \"mistralai/mistral-medium-3-5\": [0.0015, 0.0075],\n \"z-ai/glm-4.6\": [0.00043, 0.00174],\n \"z-ai/glm-5\": [0.0006, 0.00192],\n \"moonshotai/kimi-k2.6\": [0.00073, 0.00349],\n \"moonshotai/kimi-k2-thinking\": [0.0006, 0.0025],\n \"perplexity/sonar-pro\": [0.003, 0.015],\n \"perplexity/sonar-reasoning-pro\": [0.002, 0.008],\n \"perplexity/sonar-deep-research\": [0.002, 0.008]\n };\n $r := $lookup($rates, widgets.model);\n $r ? {\n \"type\": \"list_usd\",\n \"usd\": $r,\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n } : {\"type\": \"text\", \"text\": \"Token-based\"}\n)"}, "search_aliases": null, "essentials_category": "Text Generation", "has_intermediate_output": false}, "PixverseTextToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the video generation", "default": "", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16"]}], "quality": ["COMBO", {"default": "540p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "duration_seconds": ["COMBO", {"multiselect": false, "options": [5, 8]}], "motion_mode": ["COMBO", {"multiselect": false, "options": ["normal", "fast"]}], "seed": ["INT", {"tooltip": "Seed for video generation.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "multiline": true}], "pixverse_template": ["PIXVERSE_TEMPLATE", {"tooltip": "An optional template to influence style of generation, created by the PixVerse Template node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "aspect_ratio", "quality", "duration_seconds", "motion_mode", "seed"], "optional": ["negative_prompt", "pixverse_template"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "PixverseTextToVideoNode", "display_name": "PixVerse Text to Video", "description": "Generates videos based on prompt and output_size.", "python_module": "comfy_api_nodes.nodes_pixverse", "category": "partner/video/PixVerse", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration_seconds", "type": "COMBO"}, {"name": "quality", "type": "COMBO"}, {"name": "motion_mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"5\": {\n \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"720p\": {\"normal\": 0.6, \"fast\": 1.2},\n \"540p\": {\"normal\": 0.45, \"fast\": 0.9},\n \"360p\": {\"normal\": 0.45, \"fast\": 0.9}\n },\n \"8\": {\n \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"720p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"540p\": {\"normal\": 0.9, \"fast\": 1.2},\n \"360p\": {\"normal\": 0.9, \"fast\": 1.2}\n }\n };\n $durPrices := $lookup($prices, $string(widgets.duration_seconds));\n $qualityPrices := $lookup($durPrices, widgets.quality);\n $price := $lookup($qualityPrices, widgets.motion_mode);\n {\"type\":\"usd\",\"usd\": $price ? $price : 0.9}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PixverseImageToVideoNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the video generation", "default": "", "multiline": true}], "quality": ["COMBO", {"default": "540p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "duration_seconds": ["COMBO", {"multiselect": false, "options": [5, 8]}], "motion_mode": ["COMBO", {"multiselect": false, "options": ["normal", "fast"]}], "seed": ["INT", {"tooltip": "Seed for video generation.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "multiline": true}], "pixverse_template": ["PIXVERSE_TEMPLATE", {"tooltip": "An optional template to influence style of generation, created by the PixVerse Template node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "quality", "duration_seconds", "motion_mode", "seed"], "optional": ["negative_prompt", "pixverse_template"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "PixverseImageToVideoNode", "display_name": "PixVerse Image to Video", "description": "Generates videos based on prompt and output_size.", "python_module": "comfy_api_nodes.nodes_pixverse", "category": "partner/video/PixVerse", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration_seconds", "type": "COMBO"}, {"name": "quality", "type": "COMBO"}, {"name": "motion_mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"5\": {\n \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"720p\": {\"normal\": 0.6, \"fast\": 1.2},\n \"540p\": {\"normal\": 0.45, \"fast\": 0.9},\n \"360p\": {\"normal\": 0.45, \"fast\": 0.9}\n },\n \"8\": {\n \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"720p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"540p\": {\"normal\": 0.9, \"fast\": 1.2},\n \"360p\": {\"normal\": 0.9, \"fast\": 1.2}\n }\n };\n $durPrices := $lookup($prices, $string(widgets.duration_seconds));\n $qualityPrices := $lookup($durPrices, widgets.quality);\n $price := $lookup($qualityPrices, widgets.motion_mode);\n {\"type\":\"usd\",\"usd\": $price ? $price : 0.9}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PixverseTransitionVideoNode": {"input": {"required": {"first_frame": ["IMAGE", {}], "last_frame": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the video generation", "default": "", "multiline": true}], "quality": ["COMBO", {"default": "540p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "duration_seconds": ["COMBO", {"multiselect": false, "options": [5, 8]}], "motion_mode": ["COMBO", {"multiselect": false, "options": ["normal", "fast"]}], "seed": ["INT", {"tooltip": "Seed for video generation.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["first_frame", "last_frame", "prompt", "quality", "duration_seconds", "motion_mode", "seed"], "optional": ["negative_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "PixverseTransitionVideoNode", "display_name": "PixVerse Transition Video", "description": "Generates videos based on prompt and output_size.", "python_module": "comfy_api_nodes.nodes_pixverse", "category": "partner/video/PixVerse", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration_seconds", "type": "COMBO"}, {"name": "quality", "type": "COMBO"}, {"name": "motion_mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"5\": {\n \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"720p\": {\"normal\": 0.6, \"fast\": 1.2},\n \"540p\": {\"normal\": 0.45, \"fast\": 0.9},\n \"360p\": {\"normal\": 0.45, \"fast\": 0.9}\n },\n \"8\": {\n \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"720p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"540p\": {\"normal\": 0.9, \"fast\": 1.2},\n \"360p\": {\"normal\": 0.9, \"fast\": 1.2}\n }\n };\n $durPrices := $lookup($prices, $string(widgets.duration_seconds));\n $qualityPrices := $lookup($durPrices, widgets.quality);\n $price := $lookup($qualityPrices, widgets.motion_mode);\n {\"type\":\"usd\",\"usd\": $price ? $price : 0.9}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PixverseTemplateNode": {"input": {"required": {"template": ["COMBO", {"multiselect": false, "options": ["Microwave", "Suit Swagger", "Anything, Robot", "Subject 3 Fever", "kiss kiss"]}]}}, "input_order": {"required": ["template"]}, "is_input_list": false, "output": ["PIXVERSE_TEMPLATE"], "output_is_list": [false], "output_name": ["pixverse_template"], "output_tooltips": [null], "output_matchtypes": null, "name": "PixverseTemplateNode", "display_name": "PixVerse Template", "description": "", "python_module": "comfy_api_nodes.nodes_pixverse", "category": "partner/video/PixVerse", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "QuiverTextToSVGNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the desired SVG output.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for SVG generation.", "options": [{"key": "arrow-1.1", "inputs": {"required": {"temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}, {"key": "arrow-1.1-max", "inputs": {"required": {"temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}, {"key": "arrow-preview", "inputs": {"required": {"temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"instructions": ["STRING", {"tooltip": "Additional style or formatting guidance.", "advanced": true, "default": "", "multiline": true}], "reference_images": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 4 reference images to guide the generation.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "ref_", "min": 0, "max": 4}}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "optional": ["instructions", "reference_images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["SVG"], "output_is_list": [false], "output_name": ["SVG"], "output_tooltips": [null], "output_matchtypes": null, "name": "QuiverTextToSVGNode", "display_name": "Quiver Text to SVG", "description": "Generate an SVG from a text prompt using Quiver AI.", "python_module": "comfy_api_nodes.nodes_quiver", "category": "partner/image/Quiver", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $contains(widgets.model, \"max\")\n ? {\"type\":\"usd\",\"usd\":0.3575}\n : $contains(widgets.model, \"preview\")\n ? {\"type\":\"usd\",\"usd\":0.429}\n : {\"type\":\"usd\",\"usd\":0.286}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "QuiverImageToSVGNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Input image to vectorize."}], "auto_crop": ["BOOLEAN", {"tooltip": "Automatically crop to the dominant subject.", "advanced": true, "default": false}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for SVG vectorization.", "options": [{"key": "arrow-1.1", "inputs": {"required": {"target_size": ["INT", {"tooltip": "Square resize target in pixels.", "advanced": true, "default": 1024, "min": 128, "max": 4096}], "temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}, {"key": "arrow-1.1-max", "inputs": {"required": {"target_size": ["INT", {"tooltip": "Square resize target in pixels.", "advanced": true, "default": 1024, "min": 128, "max": 4096}], "temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}, {"key": "arrow-preview", "inputs": {"required": {"target_size": ["INT", {"tooltip": "Square resize target in pixels.", "advanced": true, "default": 1024, "min": 128, "max": 4096}], "temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "auto_crop", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["SVG"], "output_is_list": [false], "output_name": ["SVG"], "output_tooltips": [null], "output_matchtypes": null, "name": "QuiverImageToSVGNode", "display_name": "Quiver Image to SVG", "description": "Vectorize a raster image into SVG using Quiver AI.", "python_module": "comfy_api_nodes.nodes_quiver", "category": "partner/image/Quiver", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $contains(widgets.model, \"max\")\n ? {\"type\":\"usd\",\"usd\":0.3575}\n : $contains(widgets.model, \"preview\")\n ? {\"type\":\"usd\",\"usd\":0.429}\n : {\"type\":\"usd\",\"usd\":0.286}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftTextToImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation.", "default": "", "multiline": true}], "size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "1024x1024", "multiselect": false, "options": ["1024x1024", "1365x1024", "1024x1365", "1536x1024", "1024x1536", "1820x1024", "1024x1820", "1024x2048", "2048x1024", "1434x1024", "1024x1434", "1024x1280", "1280x1024", "1024x1707", "1707x1024"]}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_style": ["RECRAFT_V3_STYLE", {}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "forceInput": true, "multiline": false}], "recraft_controls": ["RECRAFT_CONTROLS", {"tooltip": "Optional additional controls over the generation via the Recraft Controls node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "size", "n", "seed"], "optional": ["recraft_style", "negative_prompt", "recraft_controls"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftTextToImageNode", "display_name": "Recraft Text to Image", "description": "Generates images synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": $round(0.04 * widgets.n, 2)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftImageToImageNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation.", "default": "", "multiline": true}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "strength": ["FLOAT", {"tooltip": "Defines the difference with the original image, should lie in [0, 1], where 0 means almost identical, and 1 means miserable similarity.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_style": ["RECRAFT_V3_STYLE", {}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "forceInput": true, "multiline": false}], "recraft_controls": ["RECRAFT_CONTROLS", {"tooltip": "Optional additional controls over the generation via the Recraft Controls node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "n", "strength", "seed"], "optional": ["recraft_style", "negative_prompt", "recraft_controls"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftImageToImageNode", "display_name": "Recraft Image to Image", "description": "Modify image based on prompt and strength.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": $round(0.04 * widgets.n, 2)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftImageInpaintingNode": {"input": {"required": {"image": ["IMAGE", {}], "mask": ["MASK", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation.", "default": "", "multiline": true}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_style": ["RECRAFT_V3_STYLE", {}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "forceInput": true, "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "mask", "prompt", "n", "seed"], "optional": ["recraft_style", "negative_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftImageInpaintingNode", "display_name": "Recraft Image Inpainting", "description": "Modify image based on prompt and mask.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": $round(0.04 * widgets.n, 2)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftTextToVectorNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation.", "default": "", "multiline": true}], "substyle": ["COMBO", {"multiselect": false, "options": ["None", "bold_stroke", "chemistry", "colored_stencil", "contour_pop_art", "cosmics", "cutout", "depressive", "editorial", "emotional_flat", "engraving", "infographical", "line_art", "line_circuit", "linocut", "marker_outline", "mosaic", "naivector", "roundish_flat", "seamless", "segmented_colors", "sharp_contrast", "thin", "vector_photo", "vivid_shapes"]}], "size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "1024x1024", "multiselect": false, "options": ["1024x1024", "1365x1024", "1024x1365", "1536x1024", "1024x1536", "1820x1024", "1024x1820", "1024x2048", "2048x1024", "1434x1024", "1024x1434", "1024x1280", "1280x1024", "1024x1707", "1707x1024"]}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "forceInput": true, "multiline": false}], "recraft_controls": ["RECRAFT_CONTROLS", {"tooltip": "Optional additional controls over the generation via the Recraft Controls node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "substyle", "size", "n", "seed"], "optional": ["negative_prompt", "recraft_controls"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["SVG"], "output_is_list": [false], "output_name": ["SVG"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftTextToVectorNode", "display_name": "Recraft Text to Vector", "description": "Generates SVG synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": $round(0.08 * widgets.n, 2)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftVectorizeImageNode": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["SVG"], "output_is_list": [false], "output_name": ["SVG"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftVectorizeImageNode", "display_name": "Recraft Vectorize Image", "description": "Generates SVG synchronously from an input image.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.01}"}, "search_aliases": null, "essentials_category": "Image Tools", "has_intermediate_output": false}, "RecraftRemoveBackgroundNode": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "RecraftRemoveBackgroundNode", "display_name": "Recraft Remove Background", "description": "Remove background from image, and return processed image and mask.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.01}"}, "search_aliases": null, "essentials_category": "Image Tools", "has_intermediate_output": false}, "RecraftReplaceBackgroundNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation.", "default": "", "multiline": true}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_style": ["RECRAFT_V3_STYLE", {}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "forceInput": true, "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "n", "seed"], "optional": ["recraft_style", "negative_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftReplaceBackgroundNode", "display_name": "Recraft Replace Background", "description": "Replace background on image, based on provided prompt.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.04}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftCrispUpscaleNode": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftCrispUpscaleNode", "display_name": "Recraft Crisp Upscale Image", "description": "Upscale image synchronously.\nEnhances a given raster image using \u2018crisp upscale\u2019 tool, increasing image resolution, making the image sharper and cleaner.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.004}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftCreativeUpscaleNode": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftCreativeUpscaleNode", "display_name": "Recraft Creative Upscale Image", "description": "Upscale image synchronously.\nEnhances a given raster image using \u2018creative upscale\u2019 tool, boosting resolution with a focus on refining small details and faces.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.25}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftStyleV3RealisticImage": {"input": {"required": {"substyle": ["COMBO", {"multiselect": false, "options": ["None", "b_and_w", "enterprise", "evening_light", "faded_nostalgia", "forest_life", "hard_flash", "hdr", "motion_blur", "mystic_naturalism", "natural_light", "natural_tones", "organic_calm", "real_life_glow", "retro_realism", "retro_snapshot", "studio_portrait", "urban_drama", "village_realism", "warm_folk"]}]}}, "input_order": {"required": ["substyle"]}, "is_input_list": false, "output": ["RECRAFT_V3_STYLE"], "output_is_list": [false], "output_name": ["recraft_style"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftStyleV3RealisticImage", "display_name": "Recraft Style - Realistic Image", "description": "Select realistic_image style and optional substyle.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftStyleV3DigitalIllustration": {"input": {"required": {"substyle": ["COMBO", {"multiselect": false, "options": ["None", "2d_art_poster", "2d_art_poster_2", "antiquarian", "bold_fantasy", "child_book", "child_books", "cover", "crosshatch", "digital_engraving", "engraving_color", "expressionism", "freehand_details", "grain", "grain_20", "graphic_intensity", "hand_drawn", "hand_drawn_outline", "handmade_3d", "hard_comics", "infantile_sketch", "long_shadow", "modern_folk", "multicolor", "neon_calm", "noir", "nostalgic_pastel", "outline_details", "pastel_gradient", "pastel_sketch", "pixel_art", "plastic", "pop_art", "pop_renaissance", "seamless", "street_art", "tablet_sketch", "urban_glow", "urban_sketching", "vanilla_dreams", "young_adult_book", "young_adult_book_2"]}]}}, "input_order": {"required": ["substyle"]}, "is_input_list": false, "output": ["RECRAFT_V3_STYLE"], "output_is_list": [false], "output_name": ["recraft_style"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftStyleV3DigitalIllustration", "display_name": "Recraft Style - Digital Illustration", "description": "Select realistic_image style and optional substyle.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftStyleV3LogoRaster": {"input": {"required": {"substyle": ["COMBO", {"multiselect": false, "options": ["emblem_graffiti", "emblem_pop_art", "emblem_punk", "emblem_stamp", "emblem_vintage"]}]}}, "input_order": {"required": ["substyle"]}, "is_input_list": false, "output": ["RECRAFT_V3_STYLE"], "output_is_list": [false], "output_name": ["recraft_style"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftStyleV3LogoRaster", "display_name": "Recraft Style - Logo Raster", "description": "Select realistic_image style and optional substyle.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftStyleV3InfiniteStyleLibrary": {"input": {"required": {"style_id": ["STRING", {"tooltip": "UUID of style from Infinite Style Library.", "default": "", "multiline": false}]}}, "input_order": {"required": ["style_id"]}, "is_input_list": false, "output": ["RECRAFT_V3_STYLE"], "output_is_list": [false], "output_name": ["recraft_style"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftStyleV3InfiniteStyleLibrary", "display_name": "Recraft Style - Infinite Style Library", "description": "Choose style based on preexisting UUID from Recraft's Infinite Style Library.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftCreateStyleNode": {"input": {"required": {"style": ["COMBO", {"tooltip": "The base style of the generated images.", "multiselect": false, "options": ["realistic_image", "digital_illustration"]}], "images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image", "min": 1, "max": 5}}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["style", "images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["style_id"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftCreateStyleNode", "display_name": "Recraft Create Style", "description": "Create a custom style from reference images. Upload 1-5 images to use as style references. Total size of all images is limited to 5 MB.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.04}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftColorRGB": {"input": {"required": {"r": ["INT", {"tooltip": "Red value of color.", "default": 0, "min": 0, "max": 255}], "g": ["INT", {"tooltip": "Green value of color.", "default": 0, "min": 0, "max": 255}], "b": ["INT", {"tooltip": "Blue value of color.", "default": 0, "min": 0, "max": 255}]}, "optional": {"recraft_color": ["RECRAFT_COLOR", {}]}}, "input_order": {"required": ["r", "g", "b"], "optional": ["recraft_color"]}, "is_input_list": false, "output": ["RECRAFT_COLOR"], "output_is_list": [false], "output_name": ["recraft_color"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftColorRGB", "display_name": "Recraft Color RGB", "description": "Create Recraft Color by choosing specific RGB values.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftControls": {"input": {"required": {}, "optional": {"colors": ["RECRAFT_COLOR", {}], "background_color": ["RECRAFT_COLOR", {}]}}, "input_order": {"required": [], "optional": ["colors", "background_color"]}, "is_input_list": false, "output": ["RECRAFT_CONTROLS"], "output_is_list": [false], "output_name": ["recraft_controls"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftControls", "display_name": "Recraft Controls", "description": "Create Recraft Controls for customizing Recraft generation.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftV4TextToImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation. Maximum 10,000 characters.", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The model to use for generation.", "options": [{"key": "recraftv4", "inputs": {"required": {"size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "1024x1024", "multiselect": false, "options": ["1024x1024", "1536x768", "768x1536", "1280x832", "832x1280", "1216x896", "896x1216", "1152x896", "896x1152", "832x1344", "1280x896", "896x1280", "1344x768", "768x1344"]}]}}}, {"key": "recraftv4_pro", "inputs": {"required": {"size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "2048x2048", "multiselect": false, "options": ["2048x2048", "3072x1536", "1536x3072", "2560x1664", "1664x2560", "2432x1792", "1792x2432", "2304x1792", "1792x2304", "1664x2688", "1434x1024", "1024x1434", "2560x1792", "1792x2560"]}]}}}]}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_controls": ["RECRAFT_CONTROLS", {"tooltip": "Optional additional controls over the generation via the Recraft Controls node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "negative_prompt", "model", "n", "seed"], "optional": ["recraft_controls"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftV4TextToImageNode", "display_name": "Recraft V4 Text to Image", "description": "Generates images using Recraft V4 or V4 Pro models.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\"recraftv4\": 0.04, \"recraftv4_pro\": 0.25};\n {\"type\":\"usd\",\"usd\": $lookup($prices, widgets.model) * widgets.n}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftV4TextToVectorNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation. Maximum 10,000 characters.", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The model to use for generation.", "options": [{"key": "recraftv4", "inputs": {"required": {"size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "1024x1024", "multiselect": false, "options": ["1024x1024", "1536x768", "768x1536", "1280x832", "832x1280", "1216x896", "896x1216", "1152x896", "896x1152", "832x1344", "1280x896", "896x1280", "1344x768", "768x1344"]}]}}}, {"key": "recraftv4_pro", "inputs": {"required": {"size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "2048x2048", "multiselect": false, "options": ["2048x2048", "3072x1536", "1536x3072", "2560x1664", "1664x2560", "2432x1792", "1792x2432", "2304x1792", "1792x2304", "1664x2688", "1434x1024", "1024x1434", "2560x1792", "1792x2560"]}]}}}]}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_controls": ["RECRAFT_CONTROLS", {"tooltip": "Optional additional controls over the generation via the Recraft Controls node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "negative_prompt", "model", "n", "seed"], "optional": ["recraft_controls"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["SVG"], "output_is_list": [false], "output_name": ["SVG"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftV4TextToVectorNode", "display_name": "Recraft V4 Text to Vector", "description": "Generates SVG using Recraft V4 or V4 Pro models.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\"recraftv4\": 0.08, \"recraftv4_pro\": 0.30};\n {\"type\":\"usd\",\"usd\": $lookup($prices, widgets.model) * widgets.n}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReveImageCreateNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the desired image. Maximum 2560 characters.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model version to use for generation.", "options": [{"key": "reve-create@20250915", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output image.", "multiselect": false, "options": ["3:2", "16:9", "9:16", "2:3", "4:3", "3:4", "1:1"]}], "test_time_scaling": ["INT", {"tooltip": "Higher values produce better images but cost more credits.", "advanced": true, "default": 1, "min": 1, "max": 5, "step": 1}]}}}]}], "upscale": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Upscale the generated image. May add additional cost.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "enabled", "inputs": {"required": {"upscale_factor": ["INT", {"tooltip": "Upscale factor (2x, 3x, or 4x).", "default": 2, "min": 2, "max": 4, "step": 1}]}}}]}], "remove_background": ["BOOLEAN", {"tooltip": "Remove the background from the generated image. May add additional cost.", "default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "upscale", "remove_background", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReveImageCreateNode", "display_name": "Reve Image Create", "description": "Generate images from text descriptions using Reve.", "python_module": "comfy_api_nodes.nodes_reve", "category": "partner/image/Reve", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "upscale", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscale.upscale_factor", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $factor := $lookup(widgets, \"upscale.upscale_factor\");\n $fmt := {\"approximate\": true, \"note\": \"(base)\"};\n widgets.upscale = \"enabled\" ? (\n $factor = 4 ? {\"type\": \"usd\", \"usd\": 0.0762, \"format\": $fmt}\n : $factor = 3 ? {\"type\": \"usd\", \"usd\": 0.0591, \"format\": $fmt}\n : {\"type\": \"usd\", \"usd\": 0.0457, \"format\": $fmt}\n ) : {\"type\": \"usd\", \"usd\": 0.03432, \"format\": $fmt}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReveImageEditNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "The image to edit."}], "edit_instruction": ["STRING", {"tooltip": "Text description of how to edit the image. Maximum 2560 characters.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model version to use for editing.", "options": [{"key": "reve-edit@20250915", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output image.", "multiselect": false, "options": ["auto", "16:9", "9:16", "3:2", "2:3", "4:3", "3:4", "1:1"]}], "test_time_scaling": ["INT", {"tooltip": "Higher values produce better images but cost more credits.", "advanced": true, "default": 1, "min": 1, "max": 5, "step": 1}]}}}, {"key": "reve-edit-fast@20251030", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output image.", "multiselect": false, "options": ["auto", "16:9", "9:16", "3:2", "2:3", "4:3", "3:4", "1:1"]}], "test_time_scaling": ["INT", {"tooltip": "Higher values produce better images but cost more credits.", "advanced": true, "default": 1, "min": 1, "max": 5, "step": 1}]}}}]}], "upscale": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Upscale the generated image. May add additional cost.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "enabled", "inputs": {"required": {"upscale_factor": ["INT", {"tooltip": "Upscale factor (2x, 3x, or 4x).", "default": 2, "min": 2, "max": 4, "step": 1}]}}}]}], "remove_background": ["BOOLEAN", {"tooltip": "Remove the background from the generated image. May add additional cost.", "default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "edit_instruction", "model", "upscale", "remove_background", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReveImageEditNode", "display_name": "Reve Image Edit", "description": "Edit images using natural language instructions with Reve.", "python_module": "comfy_api_nodes.nodes_reve", "category": "partner/image/Reve", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscale", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscale.upscale_factor", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $fmt := {\"approximate\": true, \"note\": \"(base)\"};\n $isFast := $contains(widgets.model, \"fast\");\n $enabled := widgets.upscale = \"enabled\";\n $factor := $lookup(widgets, \"upscale.upscale_factor\");\n $isFast\n ? {\"type\": \"usd\", \"usd\": 0.01001, \"format\": $fmt}\n : $enabled ? (\n $factor = 4 ? {\"type\": \"usd\", \"usd\": 0.0991, \"format\": $fmt}\n : $factor = 3 ? {\"type\": \"usd\", \"usd\": 0.0819, \"format\": $fmt}\n : {\"type\": \"usd\", \"usd\": 0.0686, \"format\": $fmt}\n ) : {\"type\": \"usd\", \"usd\": 0.0572, \"format\": $fmt}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReveImageRemixNode": {"input": {"required": {"reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image_", "min": 1, "max": 6}}], "prompt": ["STRING", {"tooltip": "Text description of the desired image. May include XML img tags to reference specific images by index, e.g.
0,
1, etc.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model version to use for remixing.", "options": [{"key": "reve-remix@20250915", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output image.", "multiselect": false, "options": ["auto", "16:9", "9:16", "3:2", "2:3", "4:3", "3:4", "1:1"]}], "test_time_scaling": ["INT", {"tooltip": "Higher values produce better images but cost more credits.", "advanced": true, "default": 1, "min": 1, "max": 5, "step": 1}]}}}, {"key": "reve-remix-fast@20251030", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output image.", "multiselect": false, "options": ["auto", "16:9", "9:16", "3:2", "2:3", "4:3", "3:4", "1:1"]}], "test_time_scaling": ["INT", {"tooltip": "Higher values produce better images but cost more credits.", "advanced": true, "default": 1, "min": 1, "max": 5, "step": 1}]}}}]}], "upscale": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Upscale the generated image. May add additional cost.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "enabled", "inputs": {"required": {"upscale_factor": ["INT", {"tooltip": "Upscale factor (2x, 3x, or 4x).", "default": 2, "min": 2, "max": 4, "step": 1}]}}}]}], "remove_background": ["BOOLEAN", {"tooltip": "Remove the background from the generated image. May add additional cost.", "default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["reference_images", "prompt", "model", "upscale", "remove_background", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReveImageRemixNode", "display_name": "Reve Image Remix", "description": "Combine reference images with text prompts to create new images using Reve.", "python_module": "comfy_api_nodes.nodes_reve", "category": "partner/image/Reve", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscale", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscale.upscale_factor", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $fmt := {\"approximate\": true, \"note\": \"(base)\"};\n $isFast := $contains(widgets.model, \"fast\");\n $enabled := widgets.upscale = \"enabled\";\n $factor := $lookup(widgets, \"upscale.upscale_factor\");\n $isFast\n ? {\"type\": \"usd\", \"usd\": 0.01001, \"format\": $fmt}\n : $enabled ? (\n $factor = 4 ? {\"type\": \"usd\", \"usd\": 0.0991, \"format\": $fmt}\n : $factor = 3 ? {\"type\": \"usd\", \"usd\": 0.0819, \"format\": $fmt}\n : {\"type\": \"usd\", \"usd\": 0.0686, \"format\": $fmt}\n ) : {\"type\": \"usd\", \"usd\": 0.0572, \"format\": $fmt}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Regular": {"input": {"required": {"Images": ["IMAGE", {}]}, "optional": {"Seed": ["INT", {"default": 0, "min": 0, "max": 65535, "display": "number"}], "Material_Type": ["COMBO", {"default": "PBR", "multiselect": false, "options": ["PBR", "Shaded"]}], "Polygon_count": ["COMBO", {"default": "18K-Quad", "multiselect": false, "options": ["4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "200K-Triangle"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["Images"], "optional": ["Seed", "Material_Type", "Polygon_count"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB"], "output_is_list": [false, false], "output_name": ["3D Model Path", "GLB"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Rodin3D_Regular", "display_name": "Rodin 3D Generate - Regular Generate", "description": "Generate 3D Assets using Rodin API", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Detail": {"input": {"required": {"Images": ["IMAGE", {}]}, "optional": {"Seed": ["INT", {"default": 0, "min": 0, "max": 65535, "display": "number"}], "Material_Type": ["COMBO", {"default": "PBR", "multiselect": false, "options": ["PBR", "Shaded"]}], "Polygon_count": ["COMBO", {"default": "18K-Quad", "multiselect": false, "options": ["4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "200K-Triangle"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["Images"], "optional": ["Seed", "Material_Type", "Polygon_count"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB"], "output_is_list": [false, false], "output_name": ["3D Model Path", "GLB"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Rodin3D_Detail", "display_name": "Rodin 3D Generate - Detail Generate", "description": "Generate 3D Assets using Rodin API", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Smooth": {"input": {"required": {"Images": ["IMAGE", {}]}, "optional": {"Seed": ["INT", {"default": 0, "min": 0, "max": 65535, "display": "number"}], "Material_Type": ["COMBO", {"default": "PBR", "multiselect": false, "options": ["PBR", "Shaded"]}], "Polygon_count": ["COMBO", {"default": "18K-Quad", "multiselect": false, "options": ["4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "200K-Triangle"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["Images"], "optional": ["Seed", "Material_Type", "Polygon_count"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB"], "output_is_list": [false, false], "output_name": ["3D Model Path", "GLB"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Rodin3D_Smooth", "display_name": "Rodin 3D Generate - Smooth Generate", "description": "Generate 3D Assets using Rodin API", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Sketch": {"input": {"required": {"Images": ["IMAGE", {}]}, "optional": {"Seed": ["INT", {"default": 0, "min": 0, "max": 65535, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["Images"], "optional": ["Seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB"], "output_is_list": [false, false], "output_name": ["3D Model Path", "GLB"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Rodin3D_Sketch", "display_name": "Rodin 3D Generate - Sketch Generate", "description": "Generate 3D Assets using Rodin API", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Gen2": {"input": {"required": {"Images": ["IMAGE", {}], "TAPose": ["BOOLEAN", {"advanced": true, "default": false}]}, "optional": {"Seed": ["INT", {"default": 0, "min": 0, "max": 65535, "display": "number"}], "Material_Type": ["COMBO", {"default": "PBR", "multiselect": false, "options": ["PBR", "Shaded"]}], "Polygon_count": ["COMBO", {"default": "500K-Triangle", "multiselect": false, "options": ["4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "2K-Triangle", "20K-Triangle", "150K-Triangle", "500K-Triangle"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["Images", "TAPose"], "optional": ["Seed", "Material_Type", "Polygon_count"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB"], "output_is_list": [false, false], "output_name": ["3D Model Path", "GLB"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Rodin3D_Gen2", "display_name": "Rodin 3D Generate - Gen-2 Generate", "description": "Generate 3D Assets using Rodin API", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Gen25_Image": {"input": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "1-5 images. The first image is used for materials when multi-view.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image", "min": 1, "max": 5}}], "mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generation mode. Regular = balanced. Fast = 1K-20K faces for rapid prototyping. Extreme-High = 20K-2M faces with optional micro details.", "options": [{"key": "Regular", "inputs": {"required": {"tier": ["COMBO", {"tooltip": "Quality tier. Higher tiers produce higher-fidelity geometry.", "default": "Gen-2.5-High", "multiselect": false, "options": ["Gen-2.5-Low", "Gen-2.5-Medium", "Gen-2.5-High"]}], "polygon_count": ["COMBO", {"tooltip": "Preset face count. 'Default' uses the server's default for the selected tier.", "default": "Default", "multiselect": false, "options": ["Default", "4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "2K-Triangle", "20K-Triangle", "150K-Triangle", "500K-Triangle", "1M-Triangle"]}], "creative": ["BOOLEAN", {"tooltip": "Creative mode (Medium/High only). Enhances generative robustness.", "default": false}]}}}, {"key": "Fast", "inputs": {"required": {"tier": ["COMBO", {"default": "Gen-2.5-Low", "multiselect": false, "options": ["Gen-2.5-Extreme-Low", "Gen-2.5-Low", "Gen-2.5-Medium", "Gen-2.5-High"]}], "mesh_faces": ["INT", {"tooltip": "Mesh face count (1K-20K in Fast mode).", "default": 20000, "min": 1000, "max": 20000, "display": "number"}]}}}, {"key": "Extreme-High", "inputs": {"required": {"mesh_mode": ["COMBO", {"default": "Raw", "multiselect": false, "options": ["Raw", "Quad"]}], "mesh_faces": ["INT", {"tooltip": "Mesh face count. Raw mode: 20K-2M. Quad mode: keep under 200K (upstream may reject higher values).", "default": 1000000, "min": 20000, "max": 2000000, "display": "number"}], "is_micro": ["BOOLEAN", {"tooltip": "Enable micro detail (Extreme-High only).", "default": false}], "creative": ["BOOLEAN", {"tooltip": "Creative mode. Enhances generative robustness.", "default": false}]}}}]}], "material": ["COMBO", {"default": "Shaded", "multiselect": false, "options": ["PBR", "Shaded", "All", "None"]}], "geometry_file_format": ["COMBO", {"default": "glb", "multiselect": false, "options": ["glb", "fbx", "obj", "stl"]}]}, "optional": {"texture_mode": ["COMBO", {"tooltip": "Texture quality preset. 'Default' uses the server's default for the selected tier.", "default": "Default", "multiselect": false, "options": ["Default", "legacy", "extreme-low", "low", "medium", "high"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 65535, "control_after_generate": true, "display": "number"}], "TAPose": ["BOOLEAN", {"tooltip": "T/A pose for human-like models.", "advanced": true, "default": false}], "hd_texture": ["BOOLEAN", {"tooltip": "High-quality texture enhancement.", "advanced": true, "default": false}], "texture_delight": ["BOOLEAN", {"tooltip": "Remove baked lighting from textures.", "advanced": true, "default": false}], "use_original_alpha": ["BOOLEAN", {"tooltip": "Preserve image transparency.", "advanced": true, "default": false}], "addon_highpack": ["BOOLEAN", {"tooltip": "HighPack addon: 4K textures and ~16x faces in Quad mode.", "advanced": true, "default": false}], "bbox_width": ["INT", {"tooltip": "Bounding-box width (Y axis). Set to 0 with the others to skip bbox.", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "bbox_height": ["INT", {"tooltip": "Bounding-box height (Z axis).", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "bbox_length": ["INT", {"tooltip": "Bounding-box length (X axis).", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "height_cm": ["INT", {"tooltip": "Approximate model height in centimeters (0 to skip).", "advanced": true, "default": 0, "min": 0, "max": 10000, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["images", "mode", "material", "geometry_file_format"], "optional": ["texture_mode", "seed", "TAPose", "hd_texture", "texture_delight", "use_original_alpha", "addon_highpack", "bbox_width", "bbox_height", "bbox_length", "height_cm"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["FILE_3D"], "output_is_list": [false], "output_name": ["model_file"], "output_tooltips": [null], "output_matchtypes": null, "name": "Rodin3D_Gen25_Image", "display_name": "Rodin 3D Gen-2.5 - Image to 3D", "description": "Generate a 3D model from 1-5 reference images via Rodin Gen-2.5. Pick a mode (Fast / Regular / Extreme-High) to tune quality vs. cost.", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "addon_highpack", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n(\n $baseCredits := widgets.mode = \"extreme-high\" ? 1.0 : 0.5;\n $addonCredits := widgets.addon_highpack ? 1.0 : 0.0;\n $total := ($baseCredits * 1.5) + ($addonCredits * 0.8);\n {\"type\":\"usd\",\"usd\": $total}\n)\n"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Gen25_Text": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the 3D model.", "default": "", "multiline": true}], "mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generation mode. Regular = balanced. Fast = 1K-20K faces for rapid prototyping. Extreme-High = 20K-2M faces with optional micro details.", "options": [{"key": "Regular", "inputs": {"required": {"tier": ["COMBO", {"tooltip": "Quality tier. Higher tiers produce higher-fidelity geometry.", "default": "Gen-2.5-High", "multiselect": false, "options": ["Gen-2.5-Low", "Gen-2.5-Medium", "Gen-2.5-High"]}], "polygon_count": ["COMBO", {"tooltip": "Preset face count. 'Default' uses the server's default for the selected tier.", "default": "Default", "multiselect": false, "options": ["Default", "4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "2K-Triangle", "20K-Triangle", "150K-Triangle", "500K-Triangle", "1M-Triangle"]}], "creative": ["BOOLEAN", {"tooltip": "Creative mode (Medium/High only). Enhances generative robustness.", "default": false}]}}}, {"key": "Fast", "inputs": {"required": {"tier": ["COMBO", {"default": "Gen-2.5-Low", "multiselect": false, "options": ["Gen-2.5-Extreme-Low", "Gen-2.5-Low", "Gen-2.5-Medium", "Gen-2.5-High"]}], "mesh_faces": ["INT", {"tooltip": "Mesh face count (1K-20K in Fast mode).", "default": 20000, "min": 1000, "max": 20000, "display": "number"}]}}}, {"key": "Extreme-High", "inputs": {"required": {"mesh_mode": ["COMBO", {"default": "Raw", "multiselect": false, "options": ["Raw", "Quad"]}], "mesh_faces": ["INT", {"tooltip": "Mesh face count. Raw mode: 20K-2M. Quad mode: keep under 200K (upstream may reject higher values).", "default": 1000000, "min": 20000, "max": 2000000, "display": "number"}], "is_micro": ["BOOLEAN", {"tooltip": "Enable micro detail (Extreme-High only).", "default": false}], "creative": ["BOOLEAN", {"tooltip": "Creative mode. Enhances generative robustness.", "default": false}]}}}]}], "material": ["COMBO", {"default": "Shaded", "multiselect": false, "options": ["PBR", "Shaded", "All", "None"]}], "geometry_file_format": ["COMBO", {"default": "glb", "multiselect": false, "options": ["glb", "fbx", "obj", "stl"]}]}, "optional": {"texture_mode": ["COMBO", {"tooltip": "Texture quality preset. 'Default' uses the server's default for the selected tier.", "default": "Default", "multiselect": false, "options": ["Default", "legacy", "extreme-low", "low", "medium", "high"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 65535, "control_after_generate": true, "display": "number"}], "TAPose": ["BOOLEAN", {"tooltip": "T/A pose for human-like models.", "advanced": true, "default": false}], "hd_texture": ["BOOLEAN", {"tooltip": "High-quality texture enhancement.", "advanced": true, "default": false}], "texture_delight": ["BOOLEAN", {"tooltip": "Remove baked lighting from textures.", "advanced": true, "default": false}], "addon_highpack": ["BOOLEAN", {"tooltip": "HighPack addon: 4K textures and ~16x faces in Quad mode.", "advanced": true, "default": false}], "bbox_width": ["INT", {"tooltip": "Bounding-box width (Y axis). Set to 0 with the others to skip bbox.", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "bbox_height": ["INT", {"tooltip": "Bounding-box height (Z axis).", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "bbox_length": ["INT", {"tooltip": "Bounding-box length (X axis).", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "height_cm": ["INT", {"tooltip": "Approximate model height in centimeters (0 to skip).", "advanced": true, "default": 0, "min": 0, "max": 10000, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "mode", "material", "geometry_file_format"], "optional": ["texture_mode", "seed", "TAPose", "hd_texture", "texture_delight", "addon_highpack", "bbox_width", "bbox_height", "bbox_length", "height_cm"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["FILE_3D"], "output_is_list": [false], "output_name": ["model_file"], "output_tooltips": [null], "output_matchtypes": null, "name": "Rodin3D_Gen25_Text", "display_name": "Rodin 3D Gen-2.5 - Text to 3D", "description": "Generate a 3D model from a text prompt via Rodin Gen-2.5. Pick a mode (Fast / Regular / Extreme-High) to tune quality vs. cost.", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "addon_highpack", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n(\n $baseCredits := widgets.mode = \"extreme-high\" ? 1.0 : 0.5;\n $addonCredits := widgets.addon_highpack ? 1.0 : 0.0;\n $total := ($baseCredits * 1.5) + ($addonCredits * 0.8);\n {\"type\":\"usd\",\"usd\": $total}\n)\n"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayFirstLastFrameNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the generation", "default": "", "multiline": true}], "start_frame": ["IMAGE", {"tooltip": "Start frame to be used for the video"}], "end_frame": ["IMAGE", {"tooltip": "End frame to be used for the video. Supported for gen3a_turbo only."}], "duration": ["COMBO", {"multiselect": false, "options": [5, 10]}], "ratio": ["COMBO", {"multiselect": false, "options": ["768:1280", "1280:768"]}], "seed": ["INT", {"tooltip": "Random seed for generation", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "start_frame", "end_frame", "duration", "ratio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayFirstLastFrameNode", "display_name": "Runway First-Last-Frame to Video", "description": "Upload first and last keyframes, draft a prompt, and generate a video. More complex transitions, such as cases where the Last frame is completely different from the First frame, may benefit from the longer 10s duration. This would give the generation more time to smoothly transition between the two inputs. Before diving in, review these best practices to ensure that your input selections will set your generation up for success: https://help.runwayml.com/hc/en-us/articles/34170748696595-Creating-with-Keyframes-on-Gen-3.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/video/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.0715 * widgets.duration}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayImageToVideoNodeGen3a": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the generation", "default": "", "multiline": true}], "start_frame": ["IMAGE", {"tooltip": "Start frame to be used for the video"}], "duration": ["COMBO", {"multiselect": false, "options": [5, 10]}], "ratio": ["COMBO", {"multiselect": false, "options": ["768:1280", "1280:768"]}], "seed": ["INT", {"tooltip": "Random seed for generation", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "start_frame", "duration", "ratio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayImageToVideoNodeGen3a", "display_name": "Runway Image to Video (Gen3a Turbo)", "description": "Generate a video from a single starting frame using Gen3a Turbo model. Before diving in, review these best practices to ensure that your input selections will set your generation up for success: https://help.runwayml.com/hc/en-us/articles/33927968552339-Creating-with-Act-One-on-Gen-3-Alpha-and-Turbo.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/video/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.0715 * widgets.duration}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayImageToVideoNodeGen4": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the generation", "default": "", "multiline": true}], "start_frame": ["IMAGE", {"tooltip": "Start frame to be used for the video"}], "duration": ["COMBO", {"multiselect": false, "options": [5, 10]}], "ratio": ["COMBO", {"multiselect": false, "options": ["1280:720", "720:1280", "1104:832", "832:1104", "960:960", "1584:672"]}], "seed": ["INT", {"tooltip": "Random seed for generation", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "start_frame", "duration", "ratio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayImageToVideoNodeGen4", "display_name": "Runway Image to Video (Gen4 Turbo)", "description": "Generate a video from a single starting frame using Gen4 Turbo model. Before diving in, review these best practices to ensure that your input selections will set your generation up for success: https://help.runwayml.com/hc/en-us/articles/37327109429011-Creating-with-Gen-4-Video.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/video/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.0715 * widgets.duration}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayTextToImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the generation", "default": "", "multiline": true}], "ratio": ["COMBO", {"multiselect": false, "options": ["1920:1080", "1080:1920", "1024:1024", "1360:768", "1080:1080", "1168:880", "1440:1080", "1080:1440", "1808:768", "2112:912"]}]}, "optional": {"reference_image": ["IMAGE", {"tooltip": "Optional reference image to guide the generation"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "ratio"], "optional": ["reference_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayTextToImageNode", "display_name": "Runway Text to Image", "description": "Generate an image from a text prompt using Runway's Gen 4 model. You can also include reference image to guide the generation.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/image/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.11}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayAleph2VideoToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Describes what should appear in the output (1-1000 characters).", "default": "", "multiline": true}], "video": ["VIDEO", {"tooltip": "Input video to edit. Must be 2-30 seconds at 30 fps or lower."}], "seed": ["INT", {"tooltip": "Random seed for generation", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}], "public_figure_threshold": ["COMBO", {"tooltip": "Content moderation for recognizable public figures.", "default": "low", "multiselect": false, "options": ["auto", "low"]}]}, "optional": {"keyframes": ["RUNWAY_ALEPH2_KEYFRAME", {"tooltip": "Guidance images anchored to the input video, from Aleph2 Keyframe nodes (up to 5). Use keyframes or prompt images, not both."}], "prompt_images": ["RUNWAY_ALEPH2_PROMPT_IMAGE", {"tooltip": "Guidance images anchored to the output video, from Aleph2 Prompt Image nodes (up to 5). Use keyframes or prompt images, not both."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "video", "seed", "public_figure_threshold"], "optional": ["keyframes", "prompt_images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayAleph2VideoToVideoNode", "display_name": "Runway Aleph2 Video to Video", "description": "Edit a video with a text prompt using Runway's Aleph2 model. Aleph2 transforms your footage (restyle, relight, add or remove elements, change the viewpoint) while keeping the original motion and timing; the output resolution matches the input video, which must be 2-30 seconds at 30 fps or lower. Optionally steer the edit with either keyframes (anchored to the input video) or prompt images (anchored to the output video) - use one or the other, not both.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/video/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.4004, \"format\":{\"suffix\":\"/second\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayAleph2KeyframeNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "The guidance image to apply at the chosen moment of the input video."}], "timing": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "How to place this image on the input video's timeline.", "options": [{"key": "Absolute time (seconds)", "inputs": {"required": {"seconds": ["FLOAT", {"tooltip": "Time in seconds from start of the input video where this image applies.", "default": 0.0, "min": 0.0, "max": 30.0, "step": 0.1, "display": "number"}]}}}, {"key": "Fraction of duration (0.0-1.0)", "inputs": {"required": {"fraction": ["FLOAT", {"tooltip": "Where in the input video this image applies, as a fraction of its duration (0.0 = start, 1.0 = end).", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01, "display": "number"}]}}}]}]}, "optional": {"keyframes": ["RUNWAY_ALEPH2_KEYFRAME", {"tooltip": "Optional earlier keyframes to chain with this one."}]}}, "input_order": {"required": ["image", "timing"], "optional": ["keyframes"]}, "is_input_list": false, "output": ["RUNWAY_ALEPH2_KEYFRAME"], "output_is_list": [false], "output_name": ["keyframes"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayAleph2KeyframeNode", "display_name": "Runway Aleph2 Keyframe", "description": "Anchor a guidance image to a moment of the input (source) video, so Aleph2 steers the edit at that point of your footage. Connect this to the 'keyframes' input of the Runway Aleph2 Video to Video node; chain several together (up to 5) via the optional 'keyframes' input below.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/video/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayAleph2PromptImageNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "The guidance image to place at the chosen moment of the output video."}], "position": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "How to place this image on the output video's timeline.", "options": [{"key": "Absolute time (seconds)", "inputs": {"required": {"seconds": ["FLOAT", {"tooltip": "Time in seconds from start of the output video where this image applies.", "default": 0.0, "min": 0.0, "max": 30.0, "step": 0.1, "display": "number"}]}}}, {"key": "Fraction of duration (0.0-1.0)", "inputs": {"required": {"fraction": ["FLOAT", {"tooltip": "Where in the output video this image applies, as a fraction of its duration (0.0 = start, 1.0 = end).", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01, "display": "number"}]}}}]}]}, "optional": {"prompt_images": ["RUNWAY_ALEPH2_PROMPT_IMAGE", {"tooltip": "Optional earlier prompt images to chain with this one."}]}}, "input_order": {"required": ["image", "position"], "optional": ["prompt_images"]}, "is_input_list": false, "output": ["RUNWAY_ALEPH2_PROMPT_IMAGE"], "output_is_list": [false], "output_name": ["prompt_images"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayAleph2PromptImageNode", "display_name": "Runway Aleph2 Prompt Image", "description": "Anchor a guidance image to a moment of the output (result) video, to guide what the edited video looks like at that point. Connect this to the 'prompt_images' input of the Runway Aleph2 Video to Video node; chain several together (up to 5) via the optional 'prompt_images' input below.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/video/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SoniloVideoToMusic": {"input": {"required": {"video": ["VIDEO", {"tooltip": "Input video to generate music from. Maximum duration: 6 minutes."}], "prompt": ["STRING", {"tooltip": "Optional text prompt to guide music generation. Leave empty for best quality - the model will fully analyze the video content.", "default": "", "multiline": true}], "seed": ["INT", {"tooltip": "Seed for reproducibility. Currently ignored by the Sonilo service but kept for graph consistency.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "SoniloVideoToMusic", "display_name": "Sonilo Video to Music", "description": "Generate music from video content using Sonilo's AI model. Analyzes the video and creates matching music.", "python_module": "comfy_api_nodes.nodes_sonilo", "category": "partner/audio/Sonilo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.009,\"format\":{\"suffix\":\"/second\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SoniloTextToMusic": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt describing the music to generate.", "default": "", "multiline": true}], "duration": ["INT", {"tooltip": "Target duration in seconds. Maximum: 6 minutes.", "default": 30, "min": 1, "max": 360}], "seed": ["INT", {"tooltip": "Seed for reproducibility. Currently ignored by the Sonilo service but kept for graph consistency.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "duration", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "SoniloTextToMusic", "display_name": "Sonilo Text to Music", "description": "Generate music from a text prompt using Sonilo's AI model.", "python_module": "comfy_api_nodes.nodes_sonilo", "category": "partner/audio/Sonilo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.0025 * widgets.duration}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIVideoSora2": {"input": {"required": {"model": ["COMBO", {"default": "sora-2", "multiselect": false, "options": ["sora-2", "sora-2-pro"]}], "prompt": ["STRING", {"tooltip": "Guiding text; may be empty if an input image is present.", "default": "", "multiline": true}], "size": ["COMBO", {"default": "1280x720", "multiselect": false, "options": ["720x1280", "1280x720", "1024x1792", "1792x1024"]}], "duration": ["COMBO", {"default": 8, "multiselect": false, "options": [4, 8, 12]}]}, "optional": {"image": ["IMAGE", {}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "size", "duration"], "optional": ["image", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIVideoSora2", "display_name": "OpenAI Sora - Video (DEPRECATED)", "description": "OpenAI video and audio generation.\n\nDEPRECATION NOTICE: OpenAI will stop serving the Sora v2 API in September 2026. This node will be removed from ComfyUI at that time.", "python_module": "comfy_api_nodes.nodes_sora", "category": "partner/video/Sora", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "size", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $size := widgets.size;\n $dur := widgets.duration;\n $isPro := $contains($m, \"sora-2-pro\");\n $isSora2 := $contains($m, \"sora-2\");\n $isProSize := ($size = \"1024x1792\" or $size = \"1792x1024\");\n $perSec :=\n $isPro ? ($isProSize ? 0.5 : 0.3) :\n $isSora2 ? 0.1 :\n ($isProSize ? 0.5 : 0.1);\n {\"type\":\"usd\",\"usd\": $round($perSec * $dur, 2)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityStableImageUltraNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "What you wish to see in the output image. A strong, descriptive prompt that clearly defineselements, colors, and subjects will lead to better results. To control the weight of a given word use the format `(word:weight)`,where `word` is the word you'd like to control the weight of and `weight`is a value between 0 and 1. For example: `The sky was a crisp (blue:0.3) and (green:0.8)`would convey a sky that was blue and green, but more green than blue.", "default": "", "multiline": true}], "aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of generated image.", "default": "1:1", "multiselect": false, "options": ["1:1", "16:9", "9:16", "3:2", "2:3", "5:4", "4:5", "21:9", "9:21"]}], "style_preset": ["COMBO", {"tooltip": "Optional desired style of generated image.", "advanced": true, "multiselect": false, "options": ["None", "3d-model", "analog-film", "anime", "cinematic", "comic-book", "digital-art", "enhance", "fantasy-art", "isometric", "line-art", "low-poly", "modeling-compound", "neon-punk", "origami", "photographic", "pixel-art", "tile-texture"]}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"image": ["IMAGE", {}], "negative_prompt": ["STRING", {"tooltip": "A blurb of text describing what you do not wish to see in the output image. This is an advanced feature.", "advanced": true, "default": "", "forceInput": true, "multiline": false}], "image_denoise": ["FLOAT", {"tooltip": "Denoise of input image; 0.0 yields image identical to input, 1.0 is as if no image was provided at all.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "aspect_ratio", "style_preset", "seed"], "optional": ["image", "negative_prompt", "image_denoise"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityStableImageUltraNode", "display_name": "Stability AI Stable Image Ultra", "description": "Generates images synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/image/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.08}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityStableImageSD_3_5Node": {"input": {"required": {"prompt": ["STRING", {"tooltip": "What you wish to see in the output image. A strong, descriptive prompt that clearly defines elements, colors, and subjects will lead to better results.", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["sd3.5-large", "sd3.5-medium"]}], "aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of generated image.", "default": "1:1", "multiselect": false, "options": ["1:1", "16:9", "9:16", "3:2", "2:3", "5:4", "4:5", "21:9", "9:21"]}], "style_preset": ["COMBO", {"tooltip": "Optional desired style of generated image.", "advanced": true, "multiselect": false, "options": ["None", "3d-model", "analog-film", "anime", "cinematic", "comic-book", "digital-art", "enhance", "fantasy-art", "isometric", "line-art", "low-poly", "modeling-compound", "neon-punk", "origami", "photographic", "pixel-art", "tile-texture"]}], "cfg_scale": ["FLOAT", {"tooltip": "How strictly the diffusion process adheres to the prompt text (higher values keep your image closer to your prompt)", "default": 4.0, "min": 1.0, "max": 10.0, "step": 0.1}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"image": ["IMAGE", {}], "negative_prompt": ["STRING", {"tooltip": "Keywords of what you do not wish to see in the output image. This is an advanced feature.", "advanced": true, "default": "", "forceInput": true, "multiline": false}], "image_denoise": ["FLOAT", {"tooltip": "Denoise of input image; 0.0 yields image identical to input, 1.0 is as if no image was provided at all.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "aspect_ratio", "style_preset", "cfg_scale", "seed"], "optional": ["image", "negative_prompt", "image_denoise"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityStableImageSD_3_5Node", "display_name": "Stability AI Stable Diffusion 3.5 Image", "description": "Generates images synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/image/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $contains(widgets.model,\"large\")\n ? {\"type\":\"usd\",\"usd\":0.065}\n : {\"type\":\"usd\",\"usd\":0.035}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityUpscaleConservativeNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "What you wish to see in the output image. A strong, descriptive prompt that clearly defines elements, colors, and subjects will lead to better results.", "default": "", "multiline": true}], "creativity": ["FLOAT", {"tooltip": "Controls the likelihood of creating additional details not heavily conditioned by the init image.", "default": 0.35, "min": 0.2, "max": 0.5, "step": 0.01}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Keywords of what you do not wish to see in the output image. This is an advanced feature.", "advanced": true, "default": "", "forceInput": true, "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "creativity", "seed"], "optional": ["negative_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityUpscaleConservativeNode", "display_name": "Stability AI Upscale Conservative", "description": "Upscale image with minimal alterations to 4K resolution.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/image/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityUpscaleCreativeNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "What you wish to see in the output image. A strong, descriptive prompt that clearly defines elements, colors, and subjects will lead to better results.", "default": "", "multiline": true}], "creativity": ["FLOAT", {"tooltip": "Controls the likelihood of creating additional details not heavily conditioned by the init image.", "default": 0.3, "min": 0.1, "max": 0.5, "step": 0.01}], "style_preset": ["COMBO", {"tooltip": "Optional desired style of generated image.", "advanced": true, "multiselect": false, "options": ["None", "3d-model", "analog-film", "anime", "cinematic", "comic-book", "digital-art", "enhance", "fantasy-art", "isometric", "line-art", "low-poly", "modeling-compound", "neon-punk", "origami", "photographic", "pixel-art", "tile-texture"]}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Keywords of what you do not wish to see in the output image. This is an advanced feature.", "advanced": true, "default": "", "forceInput": true, "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "creativity", "style_preset", "seed"], "optional": ["negative_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityUpscaleCreativeNode", "display_name": "Stability AI Upscale Creative", "description": "Upscale image with minimal alterations to 4K resolution.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/image/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.6}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityUpscaleFastNode": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityUpscaleFastNode", "display_name": "Stability AI Upscale Fast", "description": "Quickly upscales an image via Stability API call to 4x its original size; intended for upscaling low-quality/compressed images.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/image/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.02}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityTextToAudio": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["stable-audio-2.5"]}], "prompt": ["STRING", {"default": "", "multiline": true}]}, "optional": {"duration": ["INT", {"tooltip": "Controls the duration in seconds of the generated audio.", "default": 190, "min": 1, "max": 190, "step": 1}], "seed": ["INT", {"tooltip": "The random seed used for generation.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}], "steps": ["INT", {"tooltip": "Controls the number of sampling steps.", "advanced": true, "default": 8, "min": 4, "max": 8, "step": 1}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt"], "optional": ["duration", "seed", "steps"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityTextToAudio", "display_name": "Stability AI Text To Audio", "description": "Generates high-quality music and sound effects from text descriptions.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/audio/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.2}"}, "search_aliases": null, "essentials_category": "Audio", "has_intermediate_output": false}, "StabilityAudioToAudio": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["stable-audio-2.5"]}], "prompt": ["STRING", {"default": "", "multiline": true}], "audio": ["AUDIO", {"tooltip": "Audio must be between 6 and 190 seconds long."}]}, "optional": {"duration": ["INT", {"tooltip": "Controls the duration in seconds of the generated audio.", "default": 190, "min": 1, "max": 190, "step": 1}], "seed": ["INT", {"tooltip": "The random seed used for generation.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}], "steps": ["INT", {"tooltip": "Controls the number of sampling steps.", "advanced": true, "default": 8, "min": 4, "max": 8, "step": 1}], "strength": ["FLOAT", {"tooltip": "Parameter controls how much influence the audio parameter has on the generated audio.", "default": 1, "min": 0.01, "max": 1.0, "step": 0.01, "display": "slider"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "audio"], "optional": ["duration", "seed", "steps", "strength"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityAudioToAudio", "display_name": "Stability AI Audio To Audio", "description": "Transforms existing audio samples into new high-quality compositions using text instructions.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/audio/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.2}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityAudioInpaint": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["stable-audio-2.5"]}], "prompt": ["STRING", {"default": "", "multiline": true}], "audio": ["AUDIO", {"tooltip": "Audio must be between 6 and 190 seconds long."}]}, "optional": {"duration": ["INT", {"tooltip": "Controls the duration in seconds of the generated audio.", "default": 190, "min": 1, "max": 190, "step": 1}], "seed": ["INT", {"tooltip": "The random seed used for generation.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}], "steps": ["INT", {"tooltip": "Controls the number of sampling steps.", "advanced": true, "default": 8, "min": 4, "max": 8, "step": 1}], "mask_start": ["INT", {"advanced": true, "default": 30, "min": 0, "max": 190, "step": 1}], "mask_end": ["INT", {"advanced": true, "default": 190, "min": 0, "max": 190, "step": 1}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "audio"], "optional": ["duration", "seed", "steps", "mask_start", "mask_end"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityAudioInpaint", "display_name": "Stability AI Audio Inpaint", "description": "Transforms part of existing audio sample using text instructions.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/audio/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.2}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TopazImageEnhance": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["Reimagine"]}], "image": ["IMAGE", {}]}, "optional": {"prompt": ["STRING", {"tooltip": "Optional text prompt for creative upscaling guidance.", "default": "", "multiline": true}], "subject_detection": ["COMBO", {"advanced": true, "multiselect": false, "options": ["All", "Foreground", "Background"]}], "face_enhancement": ["BOOLEAN", {"tooltip": "Enhance faces (if present) during processing.", "advanced": true, "default": true}], "face_enhancement_creativity": ["FLOAT", {"tooltip": "Set the creativity level for face enhancement.", "advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01, "display": "number"}], "face_enhancement_strength": ["FLOAT", {"tooltip": "Controls how sharp enhanced faces are relative to the background.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "display": "number"}], "crop_to_fill": ["BOOLEAN", {"tooltip": "By default, the image is letterboxed when the output aspect ratio differs. Enable to crop the image to fill the output dimensions.", "advanced": true, "default": false}], "output_width": ["INT", {"tooltip": "Zero value means to calculate automatically (usually it will be original size or output_height if specified).", "advanced": true, "default": 0, "min": 0, "max": 32000, "step": 1, "display": "number"}], "output_height": ["INT", {"tooltip": "Zero value means to output in the same height as original or output width.", "advanced": true, "default": 0, "min": 0, "max": 32000, "step": 1, "display": "number"}], "creativity": ["INT", {"default": 3, "min": 1, "max": 9, "step": 1, "display": "slider"}], "face_preservation": ["BOOLEAN", {"tooltip": "Preserve subjects' facial identity.", "advanced": true, "default": true}], "color_preservation": ["BOOLEAN", {"tooltip": "Preserve the original colors.", "advanced": true, "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image"], "optional": ["prompt", "subject_detection", "face_enhancement", "face_enhancement_creativity", "face_enhancement_strength", "crop_to_fill", "output_width", "output_height", "creativity", "face_preservation", "color_preservation"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "TopazImageEnhance", "display_name": "Topaz Image Enhance", "description": "Industry-standard upscaling and image enhancement.", "python_module": "comfy_api_nodes.nodes_topaz", "category": "partner/image/Topaz", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TopazVideoEnhance": {"input": {"required": {"video": ["VIDEO", {}], "upscaler_enabled": ["BOOLEAN", {"default": true}], "upscaler_model": ["COMBO", {"multiselect": false, "options": ["Starlight (Astra) Fast", "Starlight (Astra) Creative", "Starlight Precise 2.5"]}], "upscaler_resolution": ["COMBO", {"multiselect": false, "options": ["FullHD (1080p)", "4K (2160p)"]}]}, "optional": {"upscaler_creativity": ["COMBO", {"tooltip": "Creativity level (applies only to Starlight (Astra) Creative).", "advanced": true, "default": "low", "multiselect": false, "options": ["low", "middle", "high"]}], "interpolation_enabled": ["BOOLEAN", {"default": false}], "interpolation_model": ["COMBO", {"advanced": true, "default": "apo-8", "multiselect": false, "options": ["apo-8"]}], "interpolation_slowmo": ["INT", {"tooltip": "Slow-motion factor applied to the input video. For example, 2 makes the output twice as slow and doubles the duration.", "advanced": true, "default": 1, "min": 1, "max": 16, "display": "number"}], "interpolation_frame_rate": ["INT", {"tooltip": "Output frame rate.", "default": 60, "min": 15, "max": 240, "display": "number"}], "interpolation_duplicate": ["BOOLEAN", {"tooltip": "Analyze the input for duplicate frames and remove them.", "advanced": true, "default": false}], "interpolation_duplicate_threshold": ["FLOAT", {"tooltip": "Detection sensitivity for duplicate frames.", "advanced": true, "default": 0.01, "min": 0.001, "max": 0.1, "step": 0.001, "display": "number"}], "dynamic_compression_level": ["COMBO", {"tooltip": "CQP level.", "advanced": true, "default": "Low", "multiselect": false, "options": ["Low", "Mid", "High"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "upscaler_enabled", "upscaler_model", "upscaler_resolution"], "optional": ["upscaler_creativity", "interpolation_enabled", "interpolation_model", "interpolation_slowmo", "interpolation_frame_rate", "interpolation_duplicate", "interpolation_duplicate_threshold", "dynamic_compression_level"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "TopazVideoEnhance", "display_name": "Topaz Video Enhance (Legacy)", "description": "Breathe new life into video with powerful upscaling and recovery technology.", "python_module": "comfy_api_nodes.nodes_topaz", "category": "partner/video/Topaz", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TopazVideoEnhanceV2": {"input": {"required": {"video": ["VIDEO", {}], "upscaler_model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Astra 2", "inputs": {"required": {"upscaler_resolution": ["COMBO", {"multiselect": false, "options": ["FullHD (1080p)", "4K (2160p)"]}], "creativity": ["FLOAT", {"tooltip": "Creative strength of the upscale.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.1, "display": "slider"}], "prompt": ["STRING", {"tooltip": "Optional descriptive (not instructive) scene prompt.Capping input at 450 frames (~15s @ 30fps) when set.", "default": "", "multiline": true}], "sharp": ["FLOAT", {"tooltip": "Pre-enhance sharpness: 0.0=Gaussian blur, 0.5=passthrough (default), 1.0=USM sharpening.", "advanced": true, "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "realism": ["FLOAT", {"tooltip": "Pulls output toward photographic realism.Leave at 0 for the model default.", "advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}]}}}, {"key": "Starlight (Astra) Fast", "inputs": {"required": {"upscaler_resolution": ["COMBO", {"multiselect": false, "options": ["FullHD (1080p)", "4K (2160p)"]}]}}}, {"key": "Starlight (Astra) Creative", "inputs": {"required": {"upscaler_resolution": ["COMBO", {"multiselect": false, "options": ["FullHD (1080p)", "4K (2160p)"]}], "creativity": ["COMBO", {"tooltip": "Creative strength of the upscale.", "default": "low", "multiselect": false, "options": ["low", "middle", "high"]}]}}}, {"key": "Starlight Precise 2.5", "inputs": {"required": {"upscaler_resolution": ["COMBO", {"multiselect": false, "options": ["FullHD (1080p)", "4K (2160p)"]}]}}}, {"key": "Disabled", "inputs": {"required": {}}}]}], "interpolation_model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Disabled", "inputs": {"required": {}}}, {"key": "apo-8", "inputs": {"required": {"interpolation_frame_rate": ["INT", {"tooltip": "Output frame rate.", "default": 60, "min": 15, "max": 240, "display": "number"}], "interpolation_slowmo": ["INT", {"tooltip": "Slow-motion factor applied to the input video. For example, 2 makes the output twice as slow and doubles the duration.", "advanced": true, "default": 1, "min": 1, "max": 16, "display": "number"}], "interpolation_duplicate": ["BOOLEAN", {"tooltip": "Analyze the input for duplicate frames and remove them.", "advanced": true, "default": false}], "interpolation_duplicate_threshold": ["FLOAT", {"tooltip": "Detection sensitivity for duplicate frames.", "advanced": true, "default": 0.01, "min": 0.001, "max": 0.1, "step": 0.001, "display": "number"}]}}}]}]}, "optional": {"dynamic_compression_level": ["COMBO", {"tooltip": "CQP level.", "default": "Low", "multiselect": false, "options": ["Low", "Mid", "High"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "upscaler_model", "interpolation_model"], "optional": ["dynamic_compression_level"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "TopazVideoEnhanceV2", "display_name": "Topaz Video Enhance", "description": "Breathe new life into video with powerful upscaling and recovery technology.", "python_module": "comfy_api_nodes.nodes_topaz", "category": "partner/video/Topaz", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "upscaler_model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscaler_model.upscaler_resolution", "type": "COMBO"}, {"name": "interpolation_model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $model := $lookup(widgets, \"upscaler_model\");\n $res := $lookup(widgets, \"upscaler_model.upscaler_resolution\");\n $interp := $lookup(widgets, \"interpolation_model\");\n $is4k := $contains($res, \"4k\");\n $hasInterp := $interp != \"disabled\";\n $rates := {\n \"starlight (astra) fast\": {\"hd\": 0.43, \"uhd\": 0.85},\n \"starlight precise 2.5\": {\"hd\": 0.70, \"uhd\": 1.54},\n \"astra 2\": {\"hd\": 1.72, \"uhd\": 2.85},\n \"starlight (astra) creative\": {\"hd\": 2.25, \"uhd\": 3.99}\n };\n $surcharge := $is4k ? 0.28 : 0.14;\n $entry := $lookup($rates, $model);\n $base := $is4k ? $entry.uhd : $entry.hd;\n $hi := $base + ($hasInterp ? $surcharge : 0);\n $model = \"disabled\"\n ? {\"type\":\"text\",\"text\":\"Interpolation only\"}\n : ($hasInterp\n ? {\"type\":\"text\",\"text\":\"~\" & $string($base) & \"\u2013\" & $string($hi) & \" credits/src frame\"}\n : {\"type\":\"text\",\"text\":\"~\" & $string($base) & \" credits/src frame\"})\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoTextToModelNode": {"input": {"required": {"prompt": ["STRING", {"multiline": true}]}, "optional": {"negative_prompt": ["STRING", {"multiline": true}], "model_version": ["COMBO", {"default": "v2.5-20250123", "multiselect": false, "options": ["v3.1-20260211", "v3.0-20250812", "v2.5-20250123", "v2.0-20240919", "v1.4-20240625"]}], "style": ["COMBO", {"default": "None", "multiselect": false, "options": ["person:person2cartoon", "animal:venom", "object:clay", "object:steampunk", "object:christmas", "object:barbie", "gold", "ancient_bronze", "None"]}], "texture": ["BOOLEAN", {"default": true}], "pbr": ["BOOLEAN", {"default": true}], "image_seed": ["INT", {"advanced": true, "default": 42}], "model_seed": ["INT", {"advanced": true, "default": 42}], "texture_seed": ["INT", {"advanced": true, "default": 42}], "texture_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "face_limit": ["INT", {"advanced": true, "default": -1, "min": -1, "max": 2000000}], "quad": ["BOOLEAN", {"advanced": true, "default": false}], "geometry_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["prompt"], "optional": ["negative_prompt", "model_version", "style", "texture", "pbr", "image_seed", "model_seed", "texture_seed", "texture_quality", "face_limit", "quad", "geometry_quality"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoTextToModelNode", "display_name": "Tripo: Text to Model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model_version", "type": "COMBO"}, {"name": "texture", "type": "BOOLEAN"}, {"name": "pbr", "type": "BOOLEAN"}, {"name": "quad", "type": "BOOLEAN"}, {"name": "texture_quality", "type": "COMBO"}, {"name": "geometry_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $isV14 := $contains(widgets.model_version,\"v1.4\");\n $isV3OrLater := $contains(widgets.model_version,\"v3.\");\n $withTexture := widgets.texture or widgets.pbr;\n $isHdTexture := (widgets.texture_quality = \"detailed\");\n $isDetailedGeometry := (widgets.geometry_quality = \"detailed\");\n $credits := $isV14 ? 20 : (\n ($withTexture ? 20 : 10)\n + (widgets.quad ? 5 : 0)\n + ($isHdTexture ? 10 : 0)\n + (($isDetailedGeometry and $isV3OrLater) ? 20 : 0)\n );\n {\"type\":\"usd\",\"usd\": $round($credits * 0.01, 2), \"format\": {\"approximate\": true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoImageToModelNode": {"input": {"required": {"image": ["IMAGE", {}]}, "optional": {"model_version": ["COMBO", {"tooltip": "The model version to use for generation", "multiselect": false, "options": ["v3.1-20260211", "v3.0-20250812", "v2.5-20250123", "v2.0-20240919", "v1.4-20240625"]}], "style": ["COMBO", {"default": "None", "multiselect": false, "options": ["person:person2cartoon", "animal:venom", "object:clay", "object:steampunk", "object:christmas", "object:barbie", "gold", "ancient_bronze", "None"]}], "texture": ["BOOLEAN", {"default": true}], "pbr": ["BOOLEAN", {"default": true}], "model_seed": ["INT", {"advanced": true, "default": 42}], "orientation": ["COMBO", {"advanced": true, "default": "default", "multiselect": false, "options": ["align_image", "default"]}], "texture_seed": ["INT", {"advanced": true, "default": 42}], "texture_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_alignment": ["COMBO", {"advanced": true, "default": "original_image", "multiselect": false, "options": ["original_image", "geometry"]}], "face_limit": ["INT", {"advanced": true, "default": -1, "min": -1, "max": 500000}], "quad": ["BOOLEAN", {"advanced": true, "default": false}], "geometry_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["image"], "optional": ["model_version", "style", "texture", "pbr", "model_seed", "orientation", "texture_seed", "texture_quality", "texture_alignment", "face_limit", "quad", "geometry_quality"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoImageToModelNode", "display_name": "Tripo: Image to Model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model_version", "type": "COMBO"}, {"name": "texture", "type": "BOOLEAN"}, {"name": "pbr", "type": "BOOLEAN"}, {"name": "quad", "type": "BOOLEAN"}, {"name": "texture_quality", "type": "COMBO"}, {"name": "geometry_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $isV14 := $contains(widgets.model_version,\"v1.4\");\n $isV3OrLater := $contains(widgets.model_version,\"v3.\");\n $withTexture := widgets.texture or widgets.pbr;\n $isHdTexture := (widgets.texture_quality = \"detailed\");\n $isDetailedGeometry := (widgets.geometry_quality = \"detailed\");\n $credits := $isV14 ? 30 : (\n ($withTexture ? 30 : 20)\n + (widgets.quad ? 5 : 0)\n + ($isHdTexture ? 10 : 0)\n + (($isDetailedGeometry and $isV3OrLater) ? 20 : 0)\n );\n {\"type\":\"usd\",\"usd\": $round($credits * 0.01, 2), \"format\": {\"approximate\": true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoMultiviewToModelNode": {"input": {"required": {"image": ["IMAGE", {}]}, "optional": {"image_left": ["IMAGE", {}], "image_back": ["IMAGE", {}], "image_right": ["IMAGE", {}], "model_version": ["COMBO", {"tooltip": "The model version to use for generation", "multiselect": false, "options": ["v3.1-20260211", "v3.0-20250812", "v2.5-20250123", "v2.0-20240919", "v1.4-20240625"]}], "orientation": ["COMBO", {"advanced": true, "default": "default", "multiselect": false, "options": ["align_image", "default"]}], "texture": ["BOOLEAN", {"default": true}], "pbr": ["BOOLEAN", {"default": true}], "model_seed": ["INT", {"advanced": true, "default": 42}], "texture_seed": ["INT", {"advanced": true, "default": 42}], "texture_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_alignment": ["COMBO", {"advanced": true, "default": "original_image", "multiselect": false, "options": ["original_image", "geometry"]}], "face_limit": ["INT", {"advanced": true, "default": -1, "min": -1, "max": 500000}], "quad": ["BOOLEAN", {"tooltip": "This parameter is deprecated and does nothing.", "advanced": true, "default": false}], "geometry_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["image"], "optional": ["image_left", "image_back", "image_right", "model_version", "orientation", "texture", "pbr", "model_seed", "texture_seed", "texture_quality", "texture_alignment", "face_limit", "quad", "geometry_quality"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoMultiviewToModelNode", "display_name": "Tripo: Multiview to Model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model_version", "type": "COMBO"}, {"name": "texture", "type": "BOOLEAN"}, {"name": "pbr", "type": "BOOLEAN"}, {"name": "texture_quality", "type": "COMBO"}, {"name": "geometry_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $isV14 := $contains(widgets.model_version,\"v1.4\");\n $isV3OrLater := $contains(widgets.model_version,\"v3.\");\n $withTexture := widgets.texture or widgets.pbr;\n $isHdTexture := (widgets.texture_quality = \"detailed\");\n $isDetailedGeometry := (widgets.geometry_quality = \"detailed\");\n $credits := $isV14 ? 30 : (\n ($withTexture ? 30 : 20)\n + ($isHdTexture ? 10 : 0)\n + (($isDetailedGeometry and $isV3OrLater) ? 20 : 0)\n );\n {\"type\":\"usd\",\"usd\": $round($credits * 0.01, 2), \"format\": {\"approximate\": true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoP1TextToModelNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Up to 1024 characters.", "multiline": true}], "output_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "\"Geometry only\" returns an untextured mesh. \"Textured\" adds color/PBR maps.", "options": [{"key": "Geometry only", "inputs": {"required": {}}}, {"key": "Textured", "inputs": {"required": {"pbr": ["BOOLEAN", {"tooltip": "Include PBR maps. When on, base texture is forced on too.", "default": true}], "texture_quality": ["COMBO", {"default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_seed": ["INT", {"advanced": true, "default": 42}]}}}]}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Up to 255 characters.", "multiline": true}], "image_seed": ["INT", {"advanced": true, "default": 42}], "face_limit": ["INT", {"tooltip": "Target face count, 48-20000. -1 lets Tripo pick adaptively.", "advanced": true, "default": -1, "min": -1, "max": 20000}], "model_seed": ["INT", {"advanced": true, "default": 42}], "auto_size": ["BOOLEAN", {"tooltip": "Scale the output to approximate real-world meters.", "advanced": true, "default": false}], "export_uv": ["BOOLEAN", {"tooltip": "UV unwrap during generation. Turn off for faster geometry-only runs.", "advanced": true, "default": true}], "compress_geometry": ["BOOLEAN", {"tooltip": "Apply geometry-based compression. Decompress before editing.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "output_mode"], "optional": ["negative_prompt", "image_seed", "face_limit", "model_seed", "auto_size", "export_uv", "compress_geometry"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoP1TextToModelNode", "display_name": "Tripo P1: Text to Model", "description": "Tripo P1 text-to-3D. Optimized for low-poly, game-ready meshes with stable topology.", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "output_mode", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "output_mode.texture_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "( $mode := widgets.output_mode; $detailed := $lookup(widgets, \"output_mode.texture_quality\") = \"detailed\"; $credits := $mode = \"geometry only\" ? 30 : ($detailed ? 50 : 40); {\"type\":\"usd\",\"usd\": $credits * 0.01, \"format\": {\"approximate\": true}})"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoP1ImageToModelNode": {"input": {"required": {"image": ["IMAGE", {}], "output_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "\"Geometry only\" returns an untextured mesh. \"Textured\" adds color/PBR maps.", "options": [{"key": "Geometry only", "inputs": {"required": {}}}, {"key": "Textured", "inputs": {"required": {"pbr": ["BOOLEAN", {"tooltip": "Include PBR maps. When on, base texture is forced on too.", "default": true}], "texture_quality": ["COMBO", {"default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_alignment": ["COMBO", {"tooltip": "Prioritize visual fidelity to the source image, or alignment to the mesh geometry.", "default": "original_image", "multiselect": false, "options": ["original_image", "geometry"]}], "orientation": ["COMBO", {"tooltip": "Rotate the output to match the source image. Only applies when textured.", "default": "default", "multiselect": false, "options": ["default", "align_image"]}], "texture_seed": ["INT", {"advanced": true, "default": 42}]}}}]}]}, "optional": {"enable_image_autofix": ["BOOLEAN", {"tooltip": "Pre-process the input image for better generation quality.", "advanced": true, "default": false}], "face_limit": ["INT", {"tooltip": "Target face count, 48-20000. -1 lets Tripo pick adaptively.", "advanced": true, "default": -1, "min": -1, "max": 20000}], "model_seed": ["INT", {"advanced": true, "default": 42}], "auto_size": ["BOOLEAN", {"tooltip": "Scale the output to approximate real-world meters.", "advanced": true, "default": false}], "export_uv": ["BOOLEAN", {"tooltip": "UV unwrap during generation. Turn off for faster geometry-only runs.", "advanced": true, "default": true}], "compress_geometry": ["BOOLEAN", {"tooltip": "Apply geometry-based compression. Decompress before editing.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "output_mode"], "optional": ["enable_image_autofix", "face_limit", "model_seed", "auto_size", "export_uv", "compress_geometry"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoP1ImageToModelNode", "display_name": "Tripo P1: Image to Model", "description": "Tripo P1 image-to-3D. Optimized for low-poly, game-ready meshes.", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "output_mode", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "output_mode.texture_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "( $mode := widgets.output_mode; $detailed := $lookup(widgets, \"output_mode.texture_quality\") = \"detailed\"; $credits := $mode = \"geometry only\" ? 40 : ($detailed ? 60 : 50); {\"type\":\"usd\",\"usd\": $credits * 0.01, \"format\": {\"approximate\": true}})"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoP1MultiviewToModelNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Front view (0\u00b0). Required."}], "output_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "\"Geometry only\" returns an untextured mesh. \"Textured\" adds color/PBR maps.", "options": [{"key": "Geometry only", "inputs": {"required": {}}}, {"key": "Textured", "inputs": {"required": {"pbr": ["BOOLEAN", {"tooltip": "Include PBR maps. When on, base texture is forced on too.", "default": true}], "texture_quality": ["COMBO", {"default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_alignment": ["COMBO", {"tooltip": "Prioritize visual fidelity to the source image, or alignment to the mesh geometry.", "default": "original_image", "multiselect": false, "options": ["original_image", "geometry"]}], "orientation": ["COMBO", {"tooltip": "Rotate the output to match the source image. Only applies when textured.", "default": "default", "multiselect": false, "options": ["default", "align_image"]}], "texture_seed": ["INT", {"advanced": true, "default": 42}]}}}]}]}, "optional": {"image_left": ["IMAGE", {"tooltip": "Left view (90\u00b0), i.e. the subject's left side."}], "image_back": ["IMAGE", {"tooltip": "Back view (180\u00b0)."}], "image_right": ["IMAGE", {"tooltip": "Right view (270\u00b0), i.e. the subject's right side."}], "face_limit": ["INT", {"tooltip": "Target face count, 48-20000. -1 lets Tripo pick adaptively.", "advanced": true, "default": -1, "min": -1, "max": 20000}], "model_seed": ["INT", {"advanced": true, "default": 42}], "auto_size": ["BOOLEAN", {"tooltip": "Scale the output to approximate real-world meters.", "advanced": true, "default": false}], "export_uv": ["BOOLEAN", {"tooltip": "UV unwrap during generation. Turn off for faster geometry-only runs.", "advanced": true, "default": true}], "compress_geometry": ["BOOLEAN", {"tooltip": "Apply geometry-based compression. Decompress before editing.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "output_mode"], "optional": ["image_left", "image_back", "image_right", "face_limit", "model_seed", "auto_size", "export_uv", "compress_geometry"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoP1MultiviewToModelNode", "display_name": "Tripo P1: Multiview to Model", "description": "Tripo P1 multiview-to-3D from 2-4 reference images in [front, left, back, right] order. Front is required; any combination of the other three may be omitted.", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "output_mode", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "output_mode.texture_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "( $mode := widgets.output_mode; $detailed := $lookup(widgets, \"output_mode.texture_quality\") = \"detailed\"; $credits := $mode = \"geometry only\" ? 40 : ($detailed ? 60 : 50); {\"type\":\"usd\",\"usd\": $credits * 0.01, \"format\": {\"approximate\": true}})"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoImportModelNode": {"input": {"required": {"model_3d": ["FILE_3D_GLB,FILE_3D_FBX,FILE_3D_OBJ,FILE_3D_STL,FILE_3D", {"tooltip": "3D model to import (GLB / FBX / OBJ / STL, up to 150 MB). OBJ and STL files carry no embedded textures."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_3d"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["MODEL_TASK_ID"], "output_is_list": [false], "output_name": ["model task_id"], "output_tooltips": [null], "output_matchtypes": null, "name": "TripoImportModelNode", "display_name": "Tripo: Import Model", "description": "Import an external 3D model (e.g. from Rodin, Hunyuan3D or a local file) into Tripo to use it with Tripo's post-processing nodes: Texture, Rig, Convert. GLB is recommended: textures survive import only when embedded in the file. Note that texturing an imported model requires a texture prompt.", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"text\",\"text\":\"Free\"}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoTextureNode": {"input": {"required": {"model_task_id": ["MODEL_TASK_ID", {}]}, "optional": {"texture": ["BOOLEAN", {"default": true}], "pbr": ["BOOLEAN", {"default": true}], "texture_seed": ["INT", {"advanced": true, "default": 42}], "texture_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_alignment": ["COMBO", {"advanced": true, "default": "original_image", "multiselect": false, "options": ["original_image", "geometry"]}], "texture_prompt": ["STRING", {"tooltip": "Optional text guidance for texturing. Required in practice for imported models (Tripo: Import Model), which carry no source image to infer colors from.", "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model_task_id"], "optional": ["texture", "pbr", "texture_seed", "texture_quality", "texture_alignment", "texture_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoTextureNode", "display_name": "Tripo: Texture model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "texture_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $tq := widgets.texture_quality;\n {\"type\":\"usd\",\"usd\": ($contains($tq,\"detailed\") ? 0.2 : 0.1), \"format\": {\"approximate\": true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoRefineNode": {"input": {"required": {"model_task_id": ["MODEL_TASK_ID", {"tooltip": "Must be a v1.4 Tripo model"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model_task_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoRefineNode", "display_name": "Tripo: Refine Draft model", "description": "Refine a draft model created by v1.4 Tripo models only.", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.3, \"format\": {\"approximate\": true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoRigNode": {"input": {"required": {"original_model_task_id": ["MODEL_TASK_ID", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["original_model_task_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "RIG_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "rig task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoRigNode", "display_name": "Tripo: Rig model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.25, \"format\": {\"approximate\": true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoRetargetNode": {"input": {"required": {"original_model_task_id": ["RIG_TASK_ID", {}], "animation": ["COMBO", {"multiselect": false, "options": ["preset:idle", "preset:walk", "preset:run", "preset:dive", "preset:climb", "preset:jump", "preset:slash", "preset:shoot", "preset:hurt", "preset:fall", "preset:turn", "preset:quadruped:walk", "preset:hexapod:walk", "preset:octopod:walk", "preset:serpentine:march", "preset:aquatic:march"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["original_model_task_id", "animation"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "RETARGET_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "retarget task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoRetargetNode", "display_name": "Tripo: Retarget rigged model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.1, \"format\": {\"approximate\": true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoConversionNode": {"input": {"required": {"original_model_task_id": ["MODEL_TASK_ID,RIG_TASK_ID,RETARGET_TASK_ID", {}], "format": ["COMBO", {"multiselect": false, "options": ["GLTF", "USDZ", "FBX", "OBJ", "STL", "3MF"]}]}, "optional": {"quad": ["BOOLEAN", {"advanced": true, "default": false}], "face_limit": ["INT", {"advanced": true, "default": -1, "min": -1, "max": 2000000}], "texture_size": ["INT", {"advanced": true, "default": 4096, "min": 128, "max": 4096}], "texture_format": ["COMBO", {"advanced": true, "default": "JPEG", "multiselect": false, "options": ["BMP", "DPX", "HDR", "JPEG", "OPEN_EXR", "PNG", "TARGA", "TIFF", "WEBP"]}], "force_symmetry": ["BOOLEAN", {"advanced": true, "default": false}], "flatten_bottom": ["BOOLEAN", {"advanced": true, "default": false}], "flatten_bottom_threshold": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0}], "pivot_to_center_bottom": ["BOOLEAN", {"advanced": true, "default": false}], "scale_factor": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0}], "with_animation": ["BOOLEAN", {"advanced": true, "default": false}], "pack_uv": ["BOOLEAN", {"advanced": true, "default": false}], "bake": ["BOOLEAN", {"advanced": true, "default": false}], "part_names": ["STRING", {"advanced": true, "default": "", "multiline": false}], "fbx_preset": ["COMBO", {"advanced": true, "default": "blender", "multiselect": false, "options": ["blender", "mixamo", "3dsmax"]}], "export_vertex_colors": ["BOOLEAN", {"advanced": true, "default": false}], "export_orientation": ["COMBO", {"advanced": true, "default": "default", "multiselect": false, "options": ["align_image", "default"]}], "animate_in_place": ["BOOLEAN", {"advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["original_model_task_id", "format"], "optional": ["quad", "face_limit", "texture_size", "texture_format", "force_symmetry", "flatten_bottom", "flatten_bottom_threshold", "pivot_to_center_bottom", "scale_factor", "with_animation", "pack_uv", "bake", "part_names", "fbx_preset", "export_vertex_colors", "export_orientation", "animate_in_place"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "TripoConversionNode", "display_name": "Tripo: Convert model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "quad", "type": "BOOLEAN"}, {"name": "face_limit", "type": "INT"}, {"name": "texture_size", "type": "INT"}, {"name": "texture_format", "type": "COMBO"}, {"name": "flatten_bottom", "type": "BOOLEAN"}, {"name": "flatten_bottom_threshold", "type": "FLOAT"}, {"name": "pivot_to_center_bottom", "type": "BOOLEAN"}, {"name": "scale_factor", "type": "FLOAT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $face := (widgets.face_limit != null) ? widgets.face_limit : -1;\n $texSize := (widgets.texture_size != null) ? widgets.texture_size : 4096;\n $flatThresh := (widgets.flatten_bottom_threshold != null) ? widgets.flatten_bottom_threshold : 0;\n $scale := (widgets.scale_factor != null) ? widgets.scale_factor : 1;\n $texFmt := (widgets.texture_format != \"\" ? widgets.texture_format : \"jpeg\");\n $advanced :=\n widgets.quad or\n widgets.flatten_bottom or\n widgets.pivot_to_center_bottom or\n ($face != -1) or\n ($texSize != 4096) or\n ($flatThresh != 0) or\n ($scale != 1) or\n ($texFmt != \"jpeg\");\n {\"type\":\"usd\",\"usd\": ($advanced ? 0.1 : 0.05), \"format\": {\"approximate\": true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VeoVideoGenerationNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the video", "default": "", "multiline": true}], "aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video", "default": "16:9", "multiselect": false, "options": ["16:9", "9:16"]}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Negative text prompt to guide what to avoid in the video", "default": "", "multiline": true}], "duration_seconds": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 5, "min": 5, "max": 8, "step": 1, "display": "number"}], "enhance_prompt": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance", "advanced": true, "default": true}], "person_generation": ["COMBO", {"tooltip": "Whether to allow generating people in the video", "advanced": true, "default": "ALLOW", "multiselect": false, "options": ["ALLOW", "BLOCK"]}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}], "image": ["IMAGE", {"tooltip": "Optional reference image to guide video generation"}], "model": ["COMBO", {"tooltip": "Veo 2 model to use for video generation", "default": "veo-2.0-generate-001", "multiselect": false, "options": ["veo-2.0-generate-001"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "aspect_ratio"], "optional": ["negative_prompt", "duration_seconds", "enhance_prompt", "person_generation", "seed", "image", "model"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "VeoVideoGenerationNode", "display_name": "Google Veo 2 Video Generation", "description": "Generates videos from text prompts using Google's Veo 2 API", "python_module": "comfy_api_nodes.nodes_veo2", "category": "partner/video/Veo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration_seconds", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.5 * widgets.duration_seconds}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Veo3VideoGenerationNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the video", "default": "", "multiline": true}], "aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video", "default": "16:9", "multiselect": false, "options": ["16:9", "9:16"]}]}, "optional": {"resolution": ["COMBO", {"tooltip": "Output video resolution. 4K is not available for veo-3.1-lite and veo-3.0 models.", "default": "720p", "multiselect": false, "options": ["720p", "1080p", "4k"]}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt to guide what to avoid in the video", "default": "", "multiline": true}], "duration_seconds": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 8, "min": 4, "max": 8, "step": 2, "display": "number"}], "enhance_prompt": ["BOOLEAN", {"tooltip": "This parameter is deprecated and ignored.", "advanced": true, "default": true}], "person_generation": ["COMBO", {"tooltip": "Whether to allow generating people in the video", "advanced": true, "default": "ALLOW", "multiselect": false, "options": ["ALLOW", "BLOCK"]}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}], "image": ["IMAGE", {"tooltip": "Optional reference image to guide video generation"}], "model": ["COMBO", {"tooltip": "Veo 3 model to use for video generation", "multiselect": false, "options": ["veo-3.1-generate", "veo-3.1-fast-generate", "veo-3.1-lite", "veo-3.0-generate-001", "veo-3.0-fast-generate-001"]}], "generate_audio": ["BOOLEAN", {"tooltip": "Generate audio for the video. Supported by all Veo 3 models.", "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "aspect_ratio"], "optional": ["resolution", "negative_prompt", "duration_seconds", "enhance_prompt", "person_generation", "seed", "image", "model", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Veo3VideoGenerationNode", "display_name": "Google Veo 3 Video Generation", "description": "Generates videos from text prompts using Google's Veo 3 API", "python_module": "comfy_api_nodes.nodes_veo2", "category": "partner/video/Veo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}, {"name": "resolution", "type": "COMBO"}, {"name": "duration_seconds", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $r := widgets.resolution;\n $a := widgets.generate_audio;\n $seconds := widgets.duration_seconds;\n $pps :=\n $contains($m, \"lite\")\n ? ($r = \"1080p\" ? ($a ? 0.08 : 0.05) : ($a ? 0.05 : 0.03))\n : $contains($m, \"3.1-fast\")\n ? ($r = \"4k\" ? ($a ? 0.30 : 0.25) : $r = \"1080p\" ? ($a ? 0.12 : 0.10) : ($a ? 0.10 : 0.08))\n : $contains($m, \"3.1-generate\")\n ? ($r = \"4k\" ? ($a ? 0.60 : 0.40) : ($a ? 0.40 : 0.20))\n : $contains($m, \"3.0-fast\")\n ? ($a ? 0.15 : 0.10)\n : ($a ? 0.40 : 0.20);\n {\"type\":\"usd\",\"usd\": $pps * $seconds}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Veo3FirstLastFrameNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the video", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt to guide what to avoid in the video", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720p", "1080p", "4k"]}], "aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video", "default": "16:9", "multiselect": false, "options": ["16:9", "9:16"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 8, "min": 4, "max": 8, "step": 2, "display": "slider"}], "seed": ["INT", {"tooltip": "Seed for video generation", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}], "first_frame": ["IMAGE", {"tooltip": "Start frame"}], "last_frame": ["IMAGE", {"tooltip": "End frame"}], "model": ["COMBO", {"multiselect": false, "options": ["veo-3.1-generate", "veo-3.1-fast-generate", "veo-3.1-lite"]}], "generate_audio": ["BOOLEAN", {"tooltip": "Generate audio for the video.", "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "negative_prompt", "resolution", "aspect_ratio", "duration", "seed", "first_frame", "last_frame", "model", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Veo3FirstLastFrameNode", "display_name": "Google Veo 3 First-Last-Frame to Video", "description": "Generate video using prompt and first and last frames.", "python_module": "comfy_api_nodes.nodes_veo2", "category": "partner/video/Veo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $r := widgets.resolution;\n $ga := widgets.generate_audio;\n $seconds := widgets.duration;\n $pps :=\n $contains($m, \"lite\")\n ? ($r = \"1080p\" ? ($ga ? 0.08 : 0.05) : ($ga ? 0.05 : 0.03))\n : $contains($m, \"fast\")\n ? ($r = \"4k\" ? ($ga ? 0.30 : 0.25) : $r = \"1080p\" ? ($ga ? 0.12 : 0.10) : ($ga ? 0.10 : 0.08))\n : ($r = \"4k\" ? ($ga ? 0.60 : 0.40) : ($ga ? 0.40 : 0.20));\n {\"type\":\"usd\",\"usd\": $pps * $seconds}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduTextToVideoNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model name", "multiselect": false, "options": ["viduq1"]}], "prompt": ["STRING", {"tooltip": "A textual description for video generation", "multiline": true}]}, "optional": {"duration": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 5, "min": 5, "max": 5, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "resolution": ["COMBO", {"tooltip": "Supported values may vary by model & duration", "advanced": true, "multiselect": false, "options": ["1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt"], "optional": ["duration", "seed", "aspect_ratio", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduTextToVideoNode", "display_name": "Vidu Text To Video Generation", "description": "Generate video from a text prompt", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduImageToVideoNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model name", "multiselect": false, "options": ["viduq1"]}], "image": ["IMAGE", {"tooltip": "An image to be used as the start frame of the generated video"}]}, "optional": {"prompt": ["STRING", {"tooltip": "A textual description for video generation", "default": "", "multiline": true}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 5, "min": 5, "max": 5, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "resolution": ["COMBO", {"tooltip": "Supported values may vary by model & duration", "advanced": true, "multiselect": false, "options": ["1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image"], "optional": ["prompt", "duration", "seed", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduImageToVideoNode", "display_name": "Vidu Image To Video Generation", "description": "Generate video from image and optional prompt", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduReferenceVideoNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model name", "multiselect": false, "options": ["viduq1"]}], "images": ["IMAGE", {"tooltip": "Images to use as references to generate a video with consistent subjects (max 7 images)."}], "prompt": ["STRING", {"tooltip": "A textual description for video generation", "multiline": true}]}, "optional": {"duration": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 5, "min": 5, "max": 5, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "resolution": ["COMBO", {"tooltip": "Supported values may vary by model & duration", "advanced": true, "multiselect": false, "options": ["1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "images", "prompt"], "optional": ["duration", "seed", "aspect_ratio", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduReferenceVideoNode", "display_name": "Vidu Reference To Video Generation", "description": "Generate video from multiple images and a prompt", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduStartEndToVideoNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model name", "multiselect": false, "options": ["viduq1"]}], "first_frame": ["IMAGE", {"tooltip": "Start frame"}], "end_frame": ["IMAGE", {"tooltip": "End frame"}]}, "optional": {"prompt": ["STRING", {"tooltip": "A textual description for video generation", "multiline": true}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 5, "min": 5, "max": 5, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "resolution": ["COMBO", {"tooltip": "Supported values may vary by model & duration", "advanced": true, "multiselect": false, "options": ["1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "first_frame", "end_frame"], "optional": ["prompt", "duration", "seed", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduStartEndToVideoNode", "display_name": "Vidu Start End To Video Generation", "description": "Generate a video from start and end frames and a prompt", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu2TextToVideoNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["viduq2"]}], "prompt": ["STRING", {"tooltip": "A textual description for video generation, with a maximum length of 2000 characters.", "multiline": true}], "duration": ["INT", {"default": 5, "min": 1, "max": 10, "step": 1, "display": "slider"}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "3:4", "4:3", "1:1"]}], "resolution": ["COMBO", {"advanced": true, "multiselect": false, "options": ["720p", "1080p"]}], "background_music": ["BOOLEAN", {"tooltip": "Whether to add background music to the generated video.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "duration", "seed", "aspect_ratio", "resolution", "background_music"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu2TextToVideoNode", "display_name": "Vidu2 Text-to-Video Generation", "description": "Generate video from a text prompt", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $is1080 := widgets.resolution = \"1080p\";\n $base := $is1080 ? 0.1 : 0.075;\n $perSec := $is1080 ? 0.05 : 0.025;\n {\"type\":\"usd\",\"usd\": $base + $perSec * (widgets.duration - 1)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu2ImageToVideoNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["viduq2-pro-fast", "viduq2-pro", "viduq2-turbo"]}], "image": ["IMAGE", {"tooltip": "An image to be used as the start frame of the generated video."}], "prompt": ["STRING", {"tooltip": "An optional text prompt for video generation (max 2000 characters).", "default": "", "multiline": true}], "duration": ["INT", {"default": 5, "min": 1, "max": 10, "step": 1, "display": "slider"}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "resolution": ["COMBO", {"advanced": true, "multiselect": false, "options": ["720p", "1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame.", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "prompt", "duration", "seed", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu2ImageToVideoNode", "display_name": "Vidu2 Image-to-Video Generation", "description": "Generate a video from an image and an optional prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $d := widgets.duration;\n $is1080 := widgets.resolution = \"1080p\";\n $contains($m, \"pro-fast\")\n ? (\n $base := $is1080 ? 0.08 : 0.04;\n $perSec := $is1080 ? 0.02 : 0.01;\n {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n )\n : $contains($m, \"pro\")\n ? (\n $base := $is1080 ? 0.275 : 0.075;\n $perSec := $is1080 ? 0.075 : 0.05;\n {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n )\n : $contains($m, \"turbo\")\n ? (\n $is1080\n ? {\"type\":\"usd\",\"usd\": 0.175 + 0.05 * ($d - 1)}\n : (\n $d <= 1 ? {\"type\":\"usd\",\"usd\": 0.04}\n : $d <= 2 ? {\"type\":\"usd\",\"usd\": 0.05}\n : {\"type\":\"usd\",\"usd\": 0.05 + 0.05 * ($d - 2)}\n )\n )\n : {\"type\":\"usd\",\"usd\": 0.04}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu2ReferenceVideoNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["viduq2"]}], "subjects": ["COMFY_AUTOGROW_V3", {"tooltip": "For each subject, provide up to 3 reference images (7 images total across all subjects). Reference them in prompts via @subject{subject_id}.", "template": {"input": {"required": {"reference_images": ["IMAGE", {}]}}, "names": ["subject1", "subject2", "subject3", "subject4", "subject5", "subject6", "subject7"], "min": 1}}], "prompt": ["STRING", {"tooltip": "When enabled, the video will include generated speech and background music based on the prompt.", "multiline": true}], "audio": ["BOOLEAN", {"tooltip": "When enabled video will contain generated speech and background music based on the prompt.", "advanced": true, "default": false}], "duration": ["INT", {"default": 5, "min": 1, "max": 10, "step": 1, "display": "slider"}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "4:3", "3:4", "1:1"]}], "resolution": ["COMBO", {"advanced": true, "multiselect": false, "options": ["720p", "1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame.", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "subjects", "prompt", "audio", "duration", "seed", "aspect_ratio", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu2ReferenceVideoNode", "display_name": "Vidu2 Reference-to-Video Generation", "description": "Generate a video from multiple reference images and a prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "audio", "type": "BOOLEAN"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $is1080 := widgets.resolution = \"1080p\";\n $base := $is1080 ? 0.375 : 0.125;\n $perSec := $is1080 ? 0.05 : 0.025;\n $audioCost := widgets.audio = true ? 0.075 : 0;\n {\"type\":\"usd\",\"usd\": $base + $perSec * (widgets.duration - 1) + $audioCost}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu2StartEndToVideoNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["viduq2-pro-fast", "viduq2-pro", "viduq2-turbo"]}], "first_frame": ["IMAGE", {}], "end_frame": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt description (max 2000 characters).", "multiline": true}], "duration": ["INT", {"default": 5, "min": 2, "max": 8, "step": 1, "display": "slider"}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "resolution": ["COMBO", {"advanced": true, "multiselect": false, "options": ["720p", "1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame.", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "first_frame", "end_frame", "prompt", "duration", "seed", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu2StartEndToVideoNode", "display_name": "Vidu2 Start/End Frame-to-Video Generation", "description": "Generate a video from a start frame, an end frame, and a prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $d := widgets.duration;\n $is1080 := widgets.resolution = \"1080p\";\n $contains($m, \"pro-fast\")\n ? (\n $base := $is1080 ? 0.08 : 0.04;\n $perSec := $is1080 ? 0.02 : 0.01;\n {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n )\n : $contains($m, \"pro\")\n ? (\n $base := $is1080 ? 0.275 : 0.075;\n $perSec := $is1080 ? 0.075 : 0.05;\n {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n )\n : $contains($m, \"turbo\")\n ? (\n $is1080\n ? {\"type\":\"usd\",\"usd\": 0.175 + 0.05 * ($d - 1)}\n : (\n $d <= 2 ? {\"type\":\"usd\",\"usd\": 0.05}\n : {\"type\":\"usd\",\"usd\": 0.05 + 0.05 * ($d - 2)}\n )\n )\n : {\"type\":\"usd\",\"usd\": 0.04}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduExtendVideoNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for video extension.", "options": [{"key": "viduq2-pro", "inputs": {"required": {"duration": ["INT", {"tooltip": "Duration of the extended video in seconds.", "default": 4, "min": 1, "max": 7, "step": 1, "display": "slider"}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}]}}}, {"key": "viduq2-turbo", "inputs": {"required": {"duration": ["INT", {"tooltip": "Duration of the extended video in seconds.", "default": 4, "min": 1, "max": 7, "step": 1, "display": "slider"}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}]}}}]}], "video": ["VIDEO", {"tooltip": "The source video to extend."}], "prompt": ["STRING", {"tooltip": "An optional text prompt for the extended video (max 2000 characters).", "default": "", "multiline": true}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"end_frame": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "video", "prompt", "seed"], "optional": ["end_frame"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduExtendVideoNode", "display_name": "Vidu Video Extension", "description": "Extend an existing video by generating additional frames.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.duration", "type": "INT"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $d := $lookup(widgets, \"model.duration\");\n $res := $lookup(widgets, \"model.resolution\");\n $contains($m, \"pro\")\n ? (\n $base := $lookup({\"720p\": 0.15, \"1080p\": 0.3}, $res);\n $perSec := $lookup({\"720p\": 0.05, \"1080p\": 0.075}, $res);\n {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n )\n : (\n $base := $lookup({\"720p\": 0.075, \"1080p\": 0.2}, $res);\n $perSec := $lookup({\"720p\": 0.025, \"1080p\": 0.05}, $res);\n {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n )\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduMultiFrameVideoNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["viduq2-pro", "viduq2-turbo"]}], "start_image": ["IMAGE", {"tooltip": "The starting frame image. Aspect ratio must be between 1:4 and 4:1."}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "resolution": ["COMBO", {"multiselect": false, "options": ["720p", "1080p"]}], "frames": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Number of keyframe transitions (2-9).", "options": [{"key": "2", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "3", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "4", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "5", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt5": ["STRING", {"tooltip": "Text prompt for frame 5 transition.", "default": "", "multiline": true}], "end_image5": ["IMAGE", {"tooltip": "End frame image for segment 5. Aspect ratio must be between 1:4 and 4:1."}], "duration5": ["INT", {"tooltip": "Duration for segment 5 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "6", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt5": ["STRING", {"tooltip": "Text prompt for frame 5 transition.", "default": "", "multiline": true}], "end_image5": ["IMAGE", {"tooltip": "End frame image for segment 5. Aspect ratio must be between 1:4 and 4:1."}], "duration5": ["INT", {"tooltip": "Duration for segment 5 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt6": ["STRING", {"tooltip": "Text prompt for frame 6 transition.", "default": "", "multiline": true}], "end_image6": ["IMAGE", {"tooltip": "End frame image for segment 6. Aspect ratio must be between 1:4 and 4:1."}], "duration6": ["INT", {"tooltip": "Duration for segment 6 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "7", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt5": ["STRING", {"tooltip": "Text prompt for frame 5 transition.", "default": "", "multiline": true}], "end_image5": ["IMAGE", {"tooltip": "End frame image for segment 5. Aspect ratio must be between 1:4 and 4:1."}], "duration5": ["INT", {"tooltip": "Duration for segment 5 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt6": ["STRING", {"tooltip": "Text prompt for frame 6 transition.", "default": "", "multiline": true}], "end_image6": ["IMAGE", {"tooltip": "End frame image for segment 6. Aspect ratio must be between 1:4 and 4:1."}], "duration6": ["INT", {"tooltip": "Duration for segment 6 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt7": ["STRING", {"tooltip": "Text prompt for frame 7 transition.", "default": "", "multiline": true}], "end_image7": ["IMAGE", {"tooltip": "End frame image for segment 7. Aspect ratio must be between 1:4 and 4:1."}], "duration7": ["INT", {"tooltip": "Duration for segment 7 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "8", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt5": ["STRING", {"tooltip": "Text prompt for frame 5 transition.", "default": "", "multiline": true}], "end_image5": ["IMAGE", {"tooltip": "End frame image for segment 5. Aspect ratio must be between 1:4 and 4:1."}], "duration5": ["INT", {"tooltip": "Duration for segment 5 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt6": ["STRING", {"tooltip": "Text prompt for frame 6 transition.", "default": "", "multiline": true}], "end_image6": ["IMAGE", {"tooltip": "End frame image for segment 6. Aspect ratio must be between 1:4 and 4:1."}], "duration6": ["INT", {"tooltip": "Duration for segment 6 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt7": ["STRING", {"tooltip": "Text prompt for frame 7 transition.", "default": "", "multiline": true}], "end_image7": ["IMAGE", {"tooltip": "End frame image for segment 7. Aspect ratio must be between 1:4 and 4:1."}], "duration7": ["INT", {"tooltip": "Duration for segment 7 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt8": ["STRING", {"tooltip": "Text prompt for frame 8 transition.", "default": "", "multiline": true}], "end_image8": ["IMAGE", {"tooltip": "End frame image for segment 8. Aspect ratio must be between 1:4 and 4:1."}], "duration8": ["INT", {"tooltip": "Duration for segment 8 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "9", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt5": ["STRING", {"tooltip": "Text prompt for frame 5 transition.", "default": "", "multiline": true}], "end_image5": ["IMAGE", {"tooltip": "End frame image for segment 5. Aspect ratio must be between 1:4 and 4:1."}], "duration5": ["INT", {"tooltip": "Duration for segment 5 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt6": ["STRING", {"tooltip": "Text prompt for frame 6 transition.", "default": "", "multiline": true}], "end_image6": ["IMAGE", {"tooltip": "End frame image for segment 6. Aspect ratio must be between 1:4 and 4:1."}], "duration6": ["INT", {"tooltip": "Duration for segment 6 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt7": ["STRING", {"tooltip": "Text prompt for frame 7 transition.", "default": "", "multiline": true}], "end_image7": ["IMAGE", {"tooltip": "End frame image for segment 7. Aspect ratio must be between 1:4 and 4:1."}], "duration7": ["INT", {"tooltip": "Duration for segment 7 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt8": ["STRING", {"tooltip": "Text prompt for frame 8 transition.", "default": "", "multiline": true}], "end_image8": ["IMAGE", {"tooltip": "End frame image for segment 8. Aspect ratio must be between 1:4 and 4:1."}], "duration8": ["INT", {"tooltip": "Duration for segment 8 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt9": ["STRING", {"tooltip": "Text prompt for frame 9 transition.", "default": "", "multiline": true}], "end_image9": ["IMAGE", {"tooltip": "End frame image for segment 9. Aspect ratio must be between 1:4 and 4:1."}], "duration9": ["INT", {"tooltip": "Duration for segment 9 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "start_image", "seed", "resolution", "frames"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduMultiFrameVideoNode", "display_name": "Vidu Multi-Frame Video Generation", "description": "Generate a video with multiple keyframe transitions.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}, {"name": "frames", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "frames.duration1", "type": "INT"}, {"name": "frames.duration2", "type": "INT"}, {"name": "frames.duration3", "type": "INT"}, {"name": "frames.duration4", "type": "INT"}, {"name": "frames.duration5", "type": "INT"}, {"name": "frames.duration6", "type": "INT"}, {"name": "frames.duration7", "type": "INT"}, {"name": "frames.duration8", "type": "INT"}, {"name": "frames.duration9", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $n := $number(widgets.frames);\n $is1080 := widgets.resolution = \"1080p\";\n $d1 := $lookup(widgets, \"frames.duration1\");\n $d2 := $lookup(widgets, \"frames.duration2\");\n $d3 := $n >= 3 ? $lookup(widgets, \"frames.duration3\") : 0;\n $d4 := $n >= 4 ? $lookup(widgets, \"frames.duration4\") : 0;\n $d5 := $n >= 5 ? $lookup(widgets, \"frames.duration5\") : 0;\n $d6 := $n >= 6 ? $lookup(widgets, \"frames.duration6\") : 0;\n $d7 := $n >= 7 ? $lookup(widgets, \"frames.duration7\") : 0;\n $d8 := $n >= 8 ? $lookup(widgets, \"frames.duration8\") : 0;\n $d9 := $n >= 9 ? $lookup(widgets, \"frames.duration9\") : 0;\n $totalDuration := $d1 + $d2 + $d3 + $d4 + $d5 + $d6 + $d7 + $d8 + $d9;\n $contains($m, \"pro\")\n ? (\n $base := $is1080 ? 0.3 : 0.15;\n $perSec := $is1080 ? 0.075 : 0.05;\n {\"type\":\"usd\",\"usd\": $n * $base + $perSec * $totalDuration}\n )\n : (\n $base := $is1080 ? 0.2 : 0.075;\n $perSec := $is1080 ? 0.05 : 0.025;\n {\"type\":\"usd\",\"usd\": $n * $base + $perSec * $totalDuration}\n )\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu3TextToVideoNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for video generation.", "options": [{"key": "viduq3-pro", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["16:9", "9:16", "3:4", "4:3", "1:1"]}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}, {"key": "viduq3-turbo", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["16:9", "9:16", "3:4", "4:3", "1:1"]}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}]}], "prompt": ["STRING", {"tooltip": "A textual description for video generation, with a maximum length of 2000 characters.", "multiline": true}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu3TextToVideoNode", "display_name": "Vidu Q3 Text-to-Video Generation", "description": "Generate video from a text prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.duration", "type": "INT"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $d := $lookup(widgets, \"model.duration\");\n $contains(widgets.model, \"turbo\")\n ? (\n $rate := $lookup({\"720p\": 0.06, \"1080p\": 0.08}, $res);\n {\"type\":\"usd\",\"usd\": $rate * $d}\n )\n : (\n $rate := $lookup({\"720p\": 0.15, \"1080p\": 0.16}, $res);\n {\"type\":\"usd\",\"usd\": $rate * $d}\n )\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu3ImageToVideoNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for video generation.", "options": [{"key": "viduq3-pro", "inputs": {"required": {"resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p", "2K"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}, {"key": "viduq3-turbo", "inputs": {"required": {"resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}]}], "image": ["IMAGE", {"tooltip": "An image to be used as the start frame of the generated video."}], "prompt": ["STRING", {"tooltip": "An optional text prompt for video generation (max 2000 characters).", "default": "", "multiline": true}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu3ImageToVideoNode", "display_name": "Vidu Q3 Image-to-Video Generation", "description": "Generate a video from an image and an optional prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.duration", "type": "INT"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $d := $lookup(widgets, \"model.duration\");\n $contains(widgets.model, \"turbo\")\n ? (\n $rate := $lookup({\"720p\": 0.06, \"1080p\": 0.08}, $res);\n {\"type\":\"usd\",\"usd\": $rate * $d}\n )\n : (\n $rate := $lookup({\"720p\": 0.15, \"1080p\": 0.16, \"2k\": 0.2}, $res);\n {\"type\":\"usd\",\"usd\": $rate * $d}\n )\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu3StartEndToVideoNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for video generation.", "options": [{"key": "viduq3-pro", "inputs": {"required": {"resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}, {"key": "viduq3-turbo", "inputs": {"required": {"resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}]}], "first_frame": ["IMAGE", {}], "end_frame": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt description (max 2000 characters).", "multiline": true}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "first_frame", "end_frame", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu3StartEndToVideoNode", "display_name": "Vidu Q3 Start/End Frame-to-Video Generation", "description": "Generate a video from a start frame, an end frame, and a prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.duration", "type": "INT"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $d := $lookup(widgets, \"model.duration\");\n $contains(widgets.model, \"turbo\")\n ? (\n $rate := $lookup({\"720p\": 0.06, \"1080p\": 0.08}, $res);\n {\"type\":\"usd\",\"usd\": $rate * $d}\n )\n : (\n $rate := $lookup({\"720p\": 0.15, \"1080p\": 0.16}, $res);\n {\"type\":\"usd\",\"usd\": $rate * $d}\n )\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanTextToImageApi": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model to use.", "multiselect": false, "options": ["wan2.5-t2i-preview"]}], "prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "width": ["INT", {"default": 1024, "min": 768, "max": 1440, "step": 32}], "height": ["INT", {"default": 1024, "min": 768, "max": 1440, "step": 32}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt"], "optional": ["negative_prompt", "width", "height", "seed", "prompt_extend", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanTextToImageApi", "display_name": "Wan Text to Image", "description": "Generates an image based on a text prompt.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/image/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.03}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanImageToImageApi": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model to use.", "default": "wan2.5-i2i-preview", "multiselect": false, "options": ["wan2.5-i2i-preview"]}], "image": ["IMAGE", {"tooltip": "Single-image editing or multi-image fusion. Maximum 2 images."}], "prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "prompt"], "optional": ["negative_prompt", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanImageToImageApi", "display_name": "Wan Image to Image", "description": "Generates an image from one or two input images and a text prompt. The output image is currently fixed at 1.6 MP, and its aspect ratio matches the input image(s).", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/image/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.03}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanTextToVideoApi": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model to use.", "default": "wan2.6-t2v", "multiselect": false, "options": ["wan2.5-t2v-preview", "wan2.6-t2v"]}], "prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "size": ["COMBO", {"default": "720p: 1:1 (960x960)", "multiselect": false, "options": ["480p: 1:1 (624x624)", "480p: 16:9 (832x480)", "480p: 9:16 (480x832)", "720p: 1:1 (960x960)", "720p: 16:9 (1280x720)", "720p: 9:16 (720x1280)", "720p: 4:3 (1088x832)", "720p: 3:4 (832x1088)", "1080p: 1:1 (1440x1440)", "1080p: 16:9 (1920x1080)", "1080p: 9:16 (1080x1920)", "1080p: 4:3 (1632x1248)", "1080p: 3:4 (1248x1632)"]}], "duration": ["INT", {"tooltip": "A 15-second duration is available only for the Wan 2.6 model.", "default": 5, "min": 5, "max": 15, "step": 5, "display": "number"}], "audio": ["AUDIO", {"tooltip": "Audio must contain a clear, loud voice, without extraneous noise or background music."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "generate_audio": ["BOOLEAN", {"tooltip": "If no audio input is provided, generate audio automatically.", "advanced": true, "default": false}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}], "shot_type": ["COMBO", {"tooltip": "Specifies the shot type for the generated video, that is, whether the video is a single continuous shot or multiple shots with cuts. This parameter takes effect only when prompt_extend is True.", "advanced": true, "multiselect": false, "options": ["single", "multi"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt"], "optional": ["negative_prompt", "size", "duration", "audio", "seed", "generate_audio", "prompt_extend", "watermark", "shot_type"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanTextToVideoApi", "display_name": "Wan Text to Video", "description": "Generates a video based on a text prompt.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "size", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $ppsTable := { \"480p\": 0.05, \"720p\": 0.1, \"1080p\": 0.15 };\n $resKey := $substringBefore(widgets.size, \":\");\n $pps := $lookup($ppsTable, $resKey);\n { \"type\": \"usd\", \"usd\": $round($pps * widgets.duration, 2) }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanImageToVideoApi": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model to use.", "default": "wan2.6-i2v", "multiselect": false, "options": ["wan2.5-i2v-preview", "wan2.6-i2v"]}], "image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "resolution": ["COMBO", {"default": "720P", "multiselect": false, "options": ["480P", "720P", "1080P"]}], "duration": ["INT", {"tooltip": "Duration 15 available only for WAN2.6 model.", "default": 5, "min": 5, "max": 15, "step": 5, "display": "number"}], "audio": ["AUDIO", {"tooltip": "Audio must contain a clear, loud voice, without extraneous noise or background music."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "generate_audio": ["BOOLEAN", {"tooltip": "If no audio input is provided, generate audio automatically.", "advanced": true, "default": false}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}], "shot_type": ["COMBO", {"tooltip": "Specifies the shot type for the generated video, that is, whether the video is a single continuous shot or multiple shots with cuts. This parameter takes effect only when prompt_extend is True.", "advanced": true, "multiselect": false, "options": ["single", "multi"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "prompt"], "optional": ["negative_prompt", "resolution", "duration", "audio", "seed", "generate_audio", "prompt_extend", "watermark", "shot_type"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanImageToVideoApi", "display_name": "Wan Image to Video", "description": "Generates a video from the first frame and a text prompt.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $ppsTable := { \"480p\": 0.05, \"720p\": 0.1, \"1080p\": 0.15 };\n $pps := $lookup($ppsTable, widgets.resolution);\n { \"type\": \"usd\", \"usd\": $round($pps * widgets.duration, 2) }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanReferenceVideoApi": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["wan2.6-r2v"]}], "prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese. Use identifiers such as `character1` and `character2` to refer to the reference characters.", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "reference_videos": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_video": ["VIDEO", {}]}}, "names": ["character1", "character2", "character3"], "min": 1}}], "size": ["COMBO", {"multiselect": false, "options": ["720p: 1:1 (960x960)", "720p: 16:9 (1280x720)", "720p: 9:16 (720x1280)", "720p: 4:3 (1088x832)", "720p: 3:4 (832x1088)", "1080p: 1:1 (1440x1440)", "1080p: 16:9 (1920x1080)", "1080p: 9:16 (1080x1920)", "1080p: 4:3 (1632x1248)", "1080p: 3:4 (1248x1632)"]}], "duration": ["INT", {"default": 5, "min": 5, "max": 10, "step": 5, "display": "slider"}], "seed": ["INT", {"default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "shot_type": ["COMBO", {"tooltip": "Specifies the shot type for the generated video, that is, whether the video is a single continuous shot or multiple shots with cuts.", "advanced": true, "multiselect": false, "options": ["single", "multi"]}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "negative_prompt", "reference_videos", "size", "duration", "seed", "shot_type", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanReferenceVideoApi", "display_name": "Wan Reference to Video", "description": "Use the character and voice from input videos, combined with a prompt, to generate a new video that maintains character consistency.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "size", "type": "COMBO"}, {"name": "duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rate := $contains(widgets.size, \"1080p\") ? 0.15 : 0.10;\n $inputMin := 2 * $rate;\n $inputMax := 5 * $rate;\n $outputPrice := widgets.duration * $rate;\n {\n \"type\": \"range_usd\",\n \"min_usd\": $inputMin + $outputPrice,\n \"max_usd\": $inputMax + $outputPrice\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan2TextToVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "wan2.7-t2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "duration": ["INT", {"default": 5, "min": 2, "max": 15, "step": 1, "display": "number"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "optional": {"audio": ["AUDIO", {"tooltip": "Audio for driving video generation (e.g., lip sync, beat-matched motion). Duration: 3s-30s. If not provided, the model automatically generates matching background music or sound effects."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "seed", "prompt_extend", "watermark"], "optional": ["audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan2TextToVideoApi", "display_name": "Wan 2.7 Text to Video", "description": "Generates a video based on a text prompt using the Wan 2.7 model.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := { \"720p\": 0.1, \"1080p\": 0.15 };\n $pps := $lookup($ppsTable, $res);\n { \"type\": \"usd\", \"usd\": $pps * $dur }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan2ImageToVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "wan2.7-i2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "duration": ["INT", {"default": 5, "min": 2, "max": 15, "step": 1, "display": "number"}]}}}]}], "first_frame": ["IMAGE", {"tooltip": "First frame image. The output aspect ratio is derived from this image."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "optional": {"last_frame": ["IMAGE", {"tooltip": "Last frame image. The model generates a video transitioning from first to last frame."}], "audio": ["AUDIO", {"tooltip": "Audio for driving video generation (e.g., lip sync, beat-matched motion). Duration: 2s-30s. If not provided, the model automatically generates matching background music or sound effects."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "first_frame", "seed", "prompt_extend", "watermark"], "optional": ["last_frame", "audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan2ImageToVideoApi", "display_name": "Wan 2.7 Image to Video", "description": "Generate a video from a first-frame image, with optional last-frame image and audio.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := { \"720p\": 0.1, \"1080p\": 0.15 };\n $pps := $lookup($ppsTable, $res);\n { \"type\": \"usd\", \"usd\": $pps * $dur }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan2VideoContinuationApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "wan2.7-i2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "duration": ["INT", {"tooltip": "Total output duration in seconds. The model generates continuation to fill the remaining time after the input clip.", "default": 5, "min": 2, "max": 15, "step": 1, "display": "number"}]}}}]}], "first_clip": ["VIDEO", {"tooltip": "Input video to continue from. Duration: 2s-10s. The output aspect ratio is derived from this video."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "optional": {"last_frame": ["IMAGE", {"tooltip": "Last frame image. The continuation will transition towards this frame."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "first_clip", "seed", "prompt_extend", "watermark"], "optional": ["last_frame"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan2VideoContinuationApi", "display_name": "Wan 2.7 Video Continuation", "description": "Continue a video from where it left off, with optional last-frame control.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := { \"720p\": 0.1, \"1080p\": 0.15 };\n $pps := $lookup($ppsTable, $res);\n $outputPrice := $pps * $dur;\n {\n \"type\": \"range_usd\",\n \"min_usd\": 2 * $pps + $outputPrice,\n \"max_usd\": 5 * $pps + $outputPrice\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan2VideoEditApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "wan2.7-videoedit", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Editing instructions or style transfer requirements.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio. If not changed, approximates the input video ratio.", "multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "duration": ["COMBO", {"tooltip": "Output duration in seconds. 'auto' matches the input video duration. A specific value truncates from the start of the video.", "default": "auto", "multiselect": false, "options": ["auto", "2", "3", "4", "5", "6", "7", "8", "9", "10"]}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image1", "image2", "image3", "image4"], "min": 0}}]}}}]}], "video": ["VIDEO", {"tooltip": "The video to edit."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "audio_setting": ["COMBO", {"tooltip": "'auto': model decides whether to regenerate audio based on the prompt. 'origin': preserve the original audio from the input video.", "advanced": true, "default": "auto", "multiselect": false, "options": ["auto", "origin"]}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "video", "seed", "audio_setting", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan2VideoEditApi", "display_name": "Wan 2.7 Video Edit", "description": "Edit a video using text instructions, reference images, or style transfer.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := { \"720p\": 0.1, \"1080p\": 0.15 };\n $pps := $lookup($ppsTable, $res);\n { \"type\": \"usd\", \"usd\": $pps, \"format\": { \"suffix\": \"/second\", \"note\": \"(input + output)\" } }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan2ReferenceVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "wan2.7-r2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the video. Use identifiers such as 'character1' and 'character2' to refer to the reference characters.", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "duration": ["INT", {"default": 5, "min": 2, "max": 10, "step": 1, "display": "number"}], "reference_videos": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_video": ["VIDEO", {}]}}, "names": ["video1", "video2", "video3"], "min": 0}}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image1", "image2", "image3", "image4", "image5"], "min": 0}}]}}}]}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan2ReferenceVideoApi", "display_name": "Wan 2.7 Reference to Video", "description": "Generate a video featuring a person or object from reference materials. Supports single-character performances and multi-character interactions.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := { \"720p\": 0.1, \"1080p\": 0.15 };\n $pps := $lookup($ppsTable, $res);\n $outputPrice := $pps * $dur;\n {\n \"type\": \"range_usd\",\n \"min_usd\": $outputPrice,\n \"max_usd\": 5 * $pps + $outputPrice\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HappyHorseTextToVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "happyhorse-1.1-t2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4", "21:9", "9:21", "5:4", "4:5"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "step": 1, "display": "number"}]}}}, {"key": "happyhorse-1.0-t2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "step": 1, "display": "number"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "HappyHorseTextToVideoApi", "display_name": "HappyHorse Text to Video", "description": "Generates a video based on a text prompt using the HappyHorse model.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := $contains(widgets.model, \"1.1\")\n ? { \"720p\": 0.2002, \"1080p\": 0.2574 }\n : { \"720p\": 0.14, \"1080p\": 0.24 };\n $pps := $lookup($ppsTable, $res);\n { \"type\": \"usd\", \"usd\": $pps * $dur }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HappyHorseImageToVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "happyhorse-1.1-i2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "step": 1, "display": "number"}]}}}, {"key": "happyhorse-1.0-i2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "step": 1, "display": "number"}]}}}]}], "first_frame": ["IMAGE", {"tooltip": "First frame image. The output aspect ratio is derived from this image."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "first_frame", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "HappyHorseImageToVideoApi", "display_name": "HappyHorse Image to Video", "description": "Generate a video from a first-frame image using the HappyHorse model.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := $contains(widgets.model, \"1.1\")\n ? { \"720p\": 0.2002, \"1080p\": 0.2574 }\n : { \"720p\": 0.14, \"1080p\": 0.24 };\n $pps := $lookup($ppsTable, $res);\n { \"type\": \"usd\", \"usd\": $pps * $dur }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HappyHorseVideoEditApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "happyhorse-1.0-video-edit", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Editing instructions or style transfer requirements.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio. If not changed, approximates the input video ratio.", "multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image1", "image2", "image3", "image4", "image5"], "min": 0}}]}}}]}], "video": ["VIDEO", {"tooltip": "The video to edit."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "video", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "HappyHorseVideoEditApi", "display_name": "HappyHorse Video Edit", "description": "Edit a video using text instructions or reference images with the HappyHorse model. Output duration is 3-15s and matches the input video; inputs longer than 15s are truncated.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $ppsTable := { \"720p\": 0.14, \"1080p\": 0.24 };\n $pps := $lookup($ppsTable, $res);\n { \"type\": \"usd\", \"usd\": $pps, \"format\": { \"suffix\": \"/second\" } }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HappyHorseReferenceVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "happyhorse-1.1-r2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the video. Use identifiers such as 'character1' and 'character2' to refer to the reference characters.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4", "21:9", "9:21", "5:4", "4:5"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "step": 1, "display": "number"}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image1", "image2", "image3", "image4", "image5", "image6", "image7", "image8", "image9"], "min": 1}}]}}}, {"key": "happyhorse-1.0-r2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the video. Use identifiers such as 'character1' and 'character2' to refer to the reference characters.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "step": 1, "display": "number"}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image1", "image2", "image3", "image4", "image5", "image6", "image7", "image8", "image9"], "min": 1}}]}}}]}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "HappyHorseReferenceVideoApi", "display_name": "HappyHorse Reference to Video", "description": "Generate a video featuring a person or object from reference materials with the HappyHorse model. Supports single-character performances and multi-character interactions.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := $contains(widgets.model, \"1.1\")\n ? { \"720p\": 0.2002, \"1080p\": 0.2574 }\n : { \"720p\": 0.14, \"1080p\": 0.24 };\n $pps := $lookup($ppsTable, $res);\n { \"type\": \"usd\", \"usd\": $pps * $dur }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WavespeedFlashVSRNode": {"input": {"required": {"video": ["VIDEO", {}], "target_resolution": ["COMBO", {"multiselect": false, "options": ["720p", "1080p", "2K", "4K"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "target_resolution"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "WavespeedFlashVSRNode", "display_name": "FlashVSR Video Upscale", "description": "Fast, high-quality video upscaler that boosts resolution and restores clarity for low-resolution or blurry footage.", "python_module": "comfy_api_nodes.nodes_wavespeed", "category": "partner/video/WaveSpeed", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "target_resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $price_for_1sec := {\"720p\": 0.012, \"1080p\": 0.018, \"2k\": 0.024, \"4k\": 0.032};\n {\n \"type\":\"usd\",\n \"usd\": $lookup($price_for_1sec, widgets.target_resolution),\n \"format\":{\"suffix\": \"/second\", \"approximate\": true}\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WavespeedImageUpscaleNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["SeedVR2", "Ultimate"]}], "image": ["IMAGE", {}], "target_resolution": ["COMBO", {"multiselect": false, "options": ["2K", "4K", "8K"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "target_resolution"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "WavespeedImageUpscaleNode", "display_name": "WaveSpeed Image Upscale", "description": "Boost image resolution and quality, upscaling photos to 4K or 8K for sharp, detailed results.", "python_module": "comfy_api_nodes.nodes_wavespeed", "category": "partner/image/WaveSpeed", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\"seedvr2\": 0.01, \"ultimate\": 0.06};\n {\"type\":\"usd\", \"usd\": $lookup($prices, widgets.model)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveImageWebsocket": {"input": {"required": {"images": ["IMAGE"]}}, "input_order": {"required": ["images"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "SaveImageWebsocket", "display_name": "Save Image (Websocket)", "description": "", "python_module": "custom_nodes.websocket_image_save", "category": "image", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "UnetLoaderGGUF": {"input": {"required": {"unet_name": [["flux-2-klein-4b-Q4_K_M.gguf", "flux1-schnell-Q4_K_M.gguf", "qwen-image-Q4_K_M.gguf", "z-image-turbo-Q4_K_M.gguf"]]}}, "input_order": {"required": ["unet_name"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "UnetLoaderGGUF", "display_name": "Unet Loader (GGUF)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CLIPLoaderGGUF": {"input": {"required": {"clip_name": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "type": [["stable_diffusion", "stable_cascade", "sd3", "stable_audio", "mochi", "ltxv", "pixart", "cosmos", "lumina2", "wan", "hidream", "chroma", "ace", "omnigen2", "qwen_image", "hunyuan_image", "flux2", "ovis", "longcat_image", "cogvideox", "lens", "pixeldit", "ideogram4", "boogu", "krea2"]]}}, "input_order": {"required": ["clip_name", "type"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPLoaderGGUF", "display_name": "CLIPLoader (GGUF)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DualCLIPLoaderGGUF": {"input": {"required": {"clip_name1": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "clip_name2": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "type": [["sdxl", "sd3", "flux", "hunyuan_video", "hidream", "hunyuan_image", "hunyuan_video_15", "kandinsky5", "kandinsky5_image", "ltxv", "newbie", "ace"]]}}, "input_order": {"required": ["clip_name1", "clip_name2", "type"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "DualCLIPLoaderGGUF", "display_name": "DualCLIPLoader (GGUF)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "TripleCLIPLoaderGGUF": {"input": {"required": {"clip_name1": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "clip_name2": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "clip_name3": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]]}}, "input_order": {"required": ["clip_name1", "clip_name2", "clip_name3"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "TripleCLIPLoaderGGUF", "display_name": "TripleCLIPLoader (GGUF)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "QuadrupleCLIPLoaderGGUF": {"input": {"required": {"clip_name1": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "clip_name2": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "clip_name3": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "clip_name4": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]]}}, "input_order": {"required": ["clip_name1", "clip_name2", "clip_name3", "clip_name4"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "QuadrupleCLIPLoaderGGUF", "display_name": "QuadrupleCLIPLoader (GGUF)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "UnetLoaderGGUFAdvanced": {"input": {"required": {"unet_name": [["flux-2-klein-4b-Q4_K_M.gguf", "flux1-schnell-Q4_K_M.gguf", "qwen-image-Q4_K_M.gguf", "z-image-turbo-Q4_K_M.gguf"]], "dequant_dtype": [["default", "target", "float32", "float16", "bfloat16"], {"default": "default"}], "patch_dtype": [["default", "target", "float32", "float16", "bfloat16"], {"default": "default"}], "patch_on_device": ["BOOLEAN", {"default": false}]}}, "input_order": {"required": ["unet_name", "dequant_dtype", "patch_dtype", "patch_on_device"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "UnetLoaderGGUFAdvanced", "display_name": "Unet Loader (GGUF/Advanced)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}}
\ No newline at end of file
diff --git a/logs/oi_fast.json b/logs/oi_fast.json
deleted file mode 100644
index dfebacb259..0000000000
--- a/logs/oi_fast.json
+++ /dev/null
@@ -1 +0,0 @@
-{"KSampler": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model used for denoising the input latent."}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true, "tooltip": "The random seed used for creating the noise."}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000, "tooltip": "The number of steps used in the denoising process."}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01, "tooltip": "The Classifier-Free Guidance scale balances creativity and adherence to the prompt. Higher values result in images more closely matching the prompt however too high values will negatively impact quality."}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"], {"tooltip": "The algorithm used when sampling, this can affect the quality, speed, and style of the generated output."}], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal"], {"tooltip": "The scheduler controls how noise is gradually removed to form the image."}], "positive": ["CONDITIONING", {"tooltip": "The conditioning describing the attributes you want to include in the image."}], "negative": ["CONDITIONING", {"tooltip": "The conditioning describing the attributes you want to exclude from the image."}], "latent_image": ["LATENT", {"tooltip": "The latent image to denoise."}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "The amount of denoising applied, lower values will maintain the structure of the initial image allowing for image to image sampling."}]}}, "input_order": {"required": ["model", "seed", "steps", "cfg", "sampler_name", "scheduler", "positive", "negative", "latent_image", "denoise"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "KSampler", "display_name": "KSampler", "description": "Uses the provided model, positive and negative conditioning to denoise the latent image.", "python_module": "nodes", "category": "model/sampling", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The denoised latent."], "search_aliases": ["sampler", "sample", "generate", "denoise", "diffuse", "txt2img", "img2img"]}, "CheckpointLoaderSimple": {"input": {"required": {"ckpt_name": [[], {"tooltip": "The name of the checkpoint (model) to load."}]}}, "input_order": {"required": ["ckpt_name"]}, "is_input_list": false, "output": ["MODEL", "CLIP", "VAE"], "output_is_list": [false, false, false], "output_name": ["MODEL", "CLIP", "VAE"], "name": "CheckpointLoaderSimple", "display_name": "Load Checkpoint", "description": "Loads a diffusion model checkpoint, diffusion models are used to denoise latents.", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The model used for denoising latents.", "The CLIP model used for encoding text prompts.", "The VAE model used for encoding and decoding images to and from latent space."], "search_aliases": ["load model", "checkpoint", "model loader", "load checkpoint", "ckpt", "model"]}, "CLIPTextEncode": {"input": {"required": {"text": ["STRING", {"multiline": true, "dynamicPrompts": true, "tooltip": "The text to be encoded."}], "clip": ["CLIP", {"tooltip": "The CLIP model used for encoding the text."}]}}, "input_order": {"required": ["text", "clip"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "CLIPTextEncode", "display_name": "CLIP Text Encode (Prompt)", "description": "Encodes a text prompt using a CLIP model into an embedding that can be used to guide the diffusion model towards generating specific images.", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["A conditioning containing the embedded text used to guide the diffusion model."], "search_aliases": ["text", "prompt", "text prompt", "positive prompt", "negative prompt", "encode text", "text encoder", "encode prompt"]}, "CLIPSetLastLayer": {"input": {"required": {"clip": ["CLIP"], "stop_at_clip_layer": ["INT", {"default": -1, "min": -24, "max": -1, "step": 1, "advanced": true}]}}, "input_order": {"required": ["clip", "stop_at_clip_layer"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPSetLastLayer", "display_name": "CLIP Set Last Layer", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VAEDecode": {"input": {"required": {"samples": ["LATENT", {"tooltip": "The latent to be decoded."}], "vae": ["VAE", {"tooltip": "The VAE model used for decoding the latent."}]}}, "input_order": {"required": ["samples", "vae"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "VAEDecode", "display_name": "VAE Decode", "description": "Decodes latent images back into pixel space images.", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The decoded image."], "search_aliases": ["decode", "decode latent", "latent to image", "render latent"]}, "VAEEncode": {"input": {"required": {"pixels": ["IMAGE"], "vae": ["VAE"]}}, "input_order": {"required": ["pixels", "vae"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "VAEEncode", "display_name": "VAE Encode", "description": "", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": ["encode", "encode image", "image to latent"]}, "VAEEncodeForInpaint": {"input": {"required": {"pixels": ["IMAGE"], "vae": ["VAE"], "mask": ["MASK"], "grow_mask_by": ["INT", {"default": 6, "min": 0, "max": 64, "step": 1}]}}, "input_order": {"required": ["pixels", "vae", "mask", "grow_mask_by"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "VAEEncodeForInpaint", "display_name": "VAE Encode (for Inpainting)", "description": "", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VAELoader": {"input": {"required": {"vae_name": [["flux1_ae.safetensors", "flux2_ae.safetensors", "qwen_image_vae.safetensors", "zimage_vae.safetensors", "pixel_space"]]}}, "input_order": {"required": ["vae_name"]}, "is_input_list": false, "output": ["VAE"], "output_is_list": [false], "output_name": ["VAE"], "name": "VAELoader", "display_name": "Load VAE", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "EmptyLatentImage": {"input": {"required": {"width": ["INT", {"default": 512, "min": 16, "max": 16384, "step": 8, "tooltip": "The width of the latent images in pixels."}], "height": ["INT", {"default": 512, "min": 16, "max": 16384, "step": 8, "tooltip": "The height of the latent images in pixels."}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096, "tooltip": "The number of latent images in the batch."}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "EmptyLatentImage", "display_name": "Empty Latent Image", "description": "Create a new batch of empty latent images to be denoised via sampling.", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The empty latent image batch."], "search_aliases": ["empty", "empty latent", "new latent", "create latent", "blank latent", "blank"]}, "LatentUpscale": {"input": {"required": {"samples": ["LATENT"], "upscale_method": [["nearest-exact", "bilinear", "area", "bicubic", "bislerp"]], "width": ["INT", {"default": 512, "min": 0, "max": 16384, "step": 8}], "height": ["INT", {"default": 512, "min": 0, "max": 16384, "step": 8}], "crop": [["disabled", "center"]]}}, "input_order": {"required": ["samples", "upscale_method", "width", "height", "crop"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentUpscale", "display_name": "Upscale Latent", "description": "", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": ["enlarge latent", "resize latent"]}, "LatentUpscaleBy": {"input": {"required": {"samples": ["LATENT"], "upscale_method": [["nearest-exact", "bilinear", "area", "bicubic", "bislerp"]], "scale_by": ["FLOAT", {"default": 1.5, "min": 0.01, "max": 8.0, "step": 0.01}]}}, "input_order": {"required": ["samples", "upscale_method", "scale_by"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentUpscaleBy", "display_name": "Upscale Latent By", "description": "", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": ["enlarge latent", "resize latent", "scale latent"]}, "LatentFromBatch": {"input": {"required": {"samples": ["LATENT"], "batch_index": ["INT", {"default": 0, "min": -16384, "max": 16384}], "length": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["samples", "batch_index", "length"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentFromBatch", "display_name": "Get Latent From Batch", "description": "", "python_module": "nodes", "category": "model/latent/batch", "output_node": false, "has_intermediate_output": false, "search_aliases": ["select from batch", "pick latent", "batch subset"]}, "RepeatLatentBatch": {"input": {"required": {"samples": ["LATENT"], "amount": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["samples", "amount"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "RepeatLatentBatch", "display_name": "Repeat Latent Batch", "description": "", "python_module": "nodes", "category": "model/latent/batch", "output_node": false, "has_intermediate_output": false, "search_aliases": ["duplicate latent", "clone latent"]}, "SaveImage": {"input": {"required": {"images": ["IMAGE", {"tooltip": "The images to save."}], "filename_prefix": ["STRING", {"default": "ComfyUI", "tooltip": "The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes."}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["images", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "name": "SaveImage", "display_name": "Save Image", "description": "Saves the input images to your ComfyUI output directory.", "python_module": "nodes", "category": "image", "output_node": true, "has_intermediate_output": false, "search_aliases": ["save", "save image", "export image", "output image", "write image", "download"], "essentials_category": "Basics"}, "PreviewImage": {"input": {"required": {"images": ["IMAGE"]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["images"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "name": "PreviewImage", "display_name": "Preview Image", "description": "Saves the input images to your ComfyUI output directory.", "python_module": "nodes", "category": "image", "output_node": true, "has_intermediate_output": false, "search_aliases": ["preview", "preview image", "show image", "view image", "display image", "image viewer"], "essentials_category": "Basics"}, "LoadImage": {"input": {"required": {"image": [["example.png"], {"image_upload": true}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "name": "LoadImage", "display_name": "Load Image", "description": "", "python_module": "nodes", "category": "image", "output_node": false, "has_intermediate_output": false, "search_aliases": ["load image", "open image", "import image", "image input", "upload image", "read image", "image loader"], "essentials_category": "Basics"}, "LoadImageMask": {"input": {"required": {"image": [["example.png"], {"image_upload": true}], "channel": [["alpha", "red", "green", "blue"]]}}, "input_order": {"required": ["image", "channel"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "name": "LoadImageMask", "display_name": "Load Image (as Mask)", "description": "", "python_module": "nodes", "category": "image", "output_node": false, "has_intermediate_output": false, "search_aliases": ["import mask", "alpha mask", "channel mask"], "essentials_category": "Image Tools"}, "LoadImageOutput": {"input": {"required": {"image": ["COMBO", {"image_upload": true, "image_folder": "output", "remote": {"route": "/internal/files/output", "refresh_button": true, "control_after_refresh": "first"}}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "name": "LoadImageOutput", "display_name": "Load Image (from Outputs)", "description": "Load an image from the output folder. When the refresh button is clicked, the node will update the image list and automatically select the first image, allowing for easy iteration.", "python_module": "nodes", "category": "image", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["output image", "previous generation"], "essentials_category": "Basics"}, "ImageScale": {"input": {"required": {"image": ["IMAGE"], "upscale_method": [["nearest-exact", "bilinear", "area", "bicubic", "lanczos"]], "width": ["INT", {"default": 512, "min": 0, "max": 16384, "step": 1}], "height": ["INT", {"default": 512, "min": 0, "max": 16384, "step": 1}], "crop": [["disabled", "center"]]}}, "input_order": {"required": ["image", "upscale_method", "width", "height", "crop"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ImageScale", "display_name": "Upscale Image", "description": "", "python_module": "nodes", "category": "image/upscaling", "output_node": false, "has_intermediate_output": false, "search_aliases": ["resize", "resize image", "scale image", "image resize", "zoom", "zoom in", "change size"], "essentials_category": "Image Tools"}, "ImageScaleBy": {"input": {"required": {"image": ["IMAGE"], "upscale_method": [["nearest-exact", "bilinear", "area", "bicubic", "lanczos"]], "scale_by": ["FLOAT", {"default": 1.0, "min": 0.01, "max": 8.0, "step": 0.01}]}}, "input_order": {"required": ["image", "upscale_method", "scale_by"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ImageScaleBy", "display_name": "Upscale Image By", "description": "", "python_module": "nodes", "category": "image/upscaling", "output_node": false, "has_intermediate_output": false, "search_aliases": [], "essentials_category": "Image Tools"}, "ImageInvert": {"input": {"required": {"image": ["IMAGE"]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ImageInvert", "display_name": "Invert Image Colors", "description": "", "python_module": "nodes", "category": "image/color", "output_node": false, "has_intermediate_output": false, "search_aliases": ["reverse colors"], "essentials_category": "Image Tools"}, "ImageBatch": {"input": {"required": {"image1": ["IMAGE"], "image2": ["IMAGE"]}}, "input_order": {"required": ["image1", "image2"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "ImageBatch", "display_name": "Batch Images (DEPRECATED)", "description": "", "python_module": "nodes", "category": "image/batch", "output_node": false, "has_intermediate_output": false, "deprecated": true, "search_aliases": ["combine images", "merge images", "stack images"]}, "ImagePadForOutpaint": {"input": {"required": {"image": ["IMAGE"], "left": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "top": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "right": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "bottom": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "feathering": ["INT", {"default": 40, "min": 0, "max": 16384, "step": 1, "advanced": true}]}}, "input_order": {"required": ["image", "left", "top", "right", "bottom", "feathering"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "name": "ImagePadForOutpaint", "display_name": "Pad Image for Outpainting", "description": "", "python_module": "nodes", "category": "image/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["extend canvas", "expand image"]}, "EmptyImage": {"input": {"required": {"width": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "height": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "color": ["INT", {"default": 0, "min": 0, "max": 16777215, "step": 1, "display": "color"}]}}, "input_order": {"required": ["width", "height", "batch_size", "color"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "EmptyImage", "display_name": "Empty Image", "description": "", "python_module": "nodes", "category": "image", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ConditioningAverage": {"input": {"required": {"conditioning_to": ["CONDITIONING"], "conditioning_from": ["CONDITIONING"], "conditioning_to_strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning_to", "conditioning_from", "conditioning_to_strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningAverage", "display_name": "Conditioning (Average)", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["blend prompts", "interpolate conditioning", "mix prompts", "style fusion", "weighted blend"]}, "ConditioningCombine": {"input": {"required": {"conditioning_1": ["CONDITIONING"], "conditioning_2": ["CONDITIONING"]}}, "input_order": {"required": ["conditioning_1", "conditioning_2"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningCombine", "display_name": "Conditioning (Combine)", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["combine", "merge conditioning", "combine prompts", "merge prompts", "mix prompts", "add prompt"], "essentials_category": "Image Generation"}, "ConditioningConcat": {"input": {"required": {"conditioning_to": ["CONDITIONING"], "conditioning_from": ["CONDITIONING"]}}, "input_order": {"required": ["conditioning_to", "conditioning_from"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningConcat", "display_name": "Conditioning (Concat)", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ConditioningSetArea": {"input": {"required": {"conditioning": ["CONDITIONING"], "width": ["INT", {"default": 64, "min": 64, "max": 16384, "step": 8}], "height": ["INT", {"default": 64, "min": 64, "max": 16384, "step": 8}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "width", "height", "x", "y", "strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetArea", "display_name": "Conditioning (Set Area)", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["regional prompt", "area prompt", "spatial conditioning", "localized prompt"]}, "ConditioningSetAreaPercentage": {"input": {"required": {"conditioning": ["CONDITIONING"], "width": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}], "height": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}], "x": ["FLOAT", {"default": 0, "min": 0, "max": 1.0, "step": 0.01}], "y": ["FLOAT", {"default": 0, "min": 0, "max": 1.0, "step": 0.01}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "width", "height", "x", "y", "strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetAreaPercentage", "display_name": "Conditioning (Set Area with Percentage)", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ConditioningSetAreaStrength": {"input": {"required": {"conditioning": ["CONDITIONING"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetAreaStrength", "display_name": "Conditioning (Set Area Strength)", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ConditioningSetMask": {"input": {"required": {"conditioning": ["CONDITIONING"], "mask": ["MASK"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "set_cond_area": [["default", "mask bounds"]]}}, "input_order": {"required": ["conditioning", "mask", "strength", "set_cond_area"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetMask", "display_name": "Conditioning (Set Mask)", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["masked prompt", "regional inpaint conditioning", "mask conditioning"]}, "KSamplerAdvanced": {"input": {"required": {"model": ["MODEL"], "add_noise": [["enable", "disable"], {"advanced": true}], "noise_seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "sampler_name": [["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]], "scheduler": [["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal"]], "positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "latent_image": ["LATENT"], "start_at_step": ["INT", {"default": 0, "min": 0, "max": 10000, "advanced": true}], "end_at_step": ["INT", {"default": 10000, "min": 0, "max": 10000, "advanced": true}], "return_with_leftover_noise": [["disable", "enable"], {"advanced": true}]}}, "input_order": {"required": ["model", "add_noise", "noise_seed", "steps", "cfg", "sampler_name", "scheduler", "positive", "negative", "latent_image", "start_at_step", "end_at_step", "return_with_leftover_noise"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "KSamplerAdvanced", "display_name": "KSampler (Advanced)", "description": "", "python_module": "nodes", "category": "model/sampling", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SetLatentNoiseMask": {"input": {"required": {"samples": ["LATENT"], "mask": ["MASK"]}}, "input_order": {"required": ["samples", "mask"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "SetLatentNoiseMask", "display_name": "Set Latent Noise Mask", "description": "", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "LatentComposite": {"input": {"required": {"samples_to": ["LATENT"], "samples_from": ["LATENT"], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "feather": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}]}}, "input_order": {"required": ["samples_to", "samples_from", "x", "y", "feather"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentComposite", "display_name": "Latent Composite", "description": "", "python_module": "nodes", "category": "model/latent", "output_node": false, "has_intermediate_output": false, "search_aliases": ["overlay latent", "layer latent", "paste latent"]}, "LatentBlend": {"input": {"required": {"samples1": ["LATENT"], "samples2": ["LATENT"], "blend_factor": ["FLOAT", {"default": 0.5, "min": 0, "max": 1, "step": 0.01}]}}, "input_order": {"required": ["samples1", "samples2", "blend_factor"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentBlend", "display_name": "Latent Blend", "description": "", "python_module": "nodes", "category": "experimental", "output_node": false, "has_intermediate_output": false, "search_aliases": ["mix latents", "interpolate latents"]}, "LatentRotate": {"input": {"required": {"samples": ["LATENT"], "rotation": [["none", "90 degrees", "180 degrees", "270 degrees"]]}}, "input_order": {"required": ["samples", "rotation"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentRotate", "display_name": "Rotate Latent", "description": "", "python_module": "nodes", "category": "model/latent/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "LatentFlip": {"input": {"required": {"samples": ["LATENT"], "flip_method": [["x-axis: vertically", "y-axis: horizontally"]]}}, "input_order": {"required": ["samples", "flip_method"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentFlip", "display_name": "Flip Latent", "description": "", "python_module": "nodes", "category": "model/latent/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["mirror latent"]}, "LatentCrop": {"input": {"required": {"samples": ["LATENT"], "width": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 8}], "height": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 8}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}]}}, "input_order": {"required": ["samples", "width", "height", "x", "y"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LatentCrop", "display_name": "Crop Latent", "description": "", "python_module": "nodes", "category": "model/latent/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["trim latent", "cut latent"]}, "LoraLoader": {"input": {"required": {"model": ["MODEL", {"tooltip": "The diffusion model the LoRA will be applied to."}], "clip": ["CLIP", {"tooltip": "The CLIP model the LoRA will be applied to."}], "lora_name": [[], {"tooltip": "The name of the LoRA."}], "strength_model": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01, "tooltip": "How strongly to modify the diffusion model. This value can be negative."}], "strength_clip": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01, "tooltip": "How strongly to modify the CLIP model. This value can be negative."}]}}, "input_order": {"required": ["model", "clip", "lora_name", "strength_model", "strength_clip"]}, "is_input_list": false, "output": ["MODEL", "CLIP"], "output_is_list": [false, false], "output_name": ["MODEL", "CLIP"], "name": "LoraLoader", "display_name": "Load LoRA (Model and CLIP)", "description": "This LoRA loader is used to modify both diffusion and CLIP models, altering the way in which latents are denoised such as applying styles. Multiple LoRA nodes can be linked together.", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The modified diffusion model.", "The modified CLIP model."], "search_aliases": ["lora", "load lora", "apply lora", "lora loader", "lora model"], "essentials_category": "Image Generation"}, "CLIPLoader": {"input": {"required": {"clip_name": [["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "type": [["stable_diffusion", "stable_cascade", "sd3", "stable_audio", "mochi", "ltxv", "pixart", "cosmos", "lumina2", "wan", "hidream", "chroma", "ace", "omnigen2", "qwen_image", "hunyuan_image", "flux2", "ovis", "longcat_image", "cogvideox", "lens", "pixeldit", "ideogram4", "boogu", "krea2"]]}, "optional": {"device": [["default", "cpu"], {"advanced": true}]}}, "input_order": {"required": ["clip_name", "type"], "optional": ["device"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPLoader", "display_name": "Load CLIP", "description": "Recipes:\nsd: clip-l\nstable cascade: clip-g\nsd3: t5 xxl / clip-g / clip-l\nstable audio: t5 base\nmochi: t5 xxl\ncogvideox: t5 xxl (226-token padding)\ncosmos: old t5 xxl\nlumina2: gemma 2 2B\nwan: umt5 xxl\nhidream: llama-3.1 (Recommend) or t5\nomnigen2: qwen vl 2.5 3B\nlens: gpt-oss-20b\npixeldit: gemma 2 2B elm", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "UNETLoader": {"input": {"required": {"unet_name": [[]], "weight_dtype": [["default", "fp8_e4m3fn", "fp8_e4m3fn_fast", "fp8_e5m2"], {"advanced": true}]}}, "input_order": {"required": ["unet_name", "weight_dtype"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "UNETLoader", "display_name": "Load Diffusion Model", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DualCLIPLoader": {"input": {"required": {"clip_name1": [["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "clip_name2": [["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "type": [["sdxl", "sd3", "flux", "hunyuan_video", "hidream", "hunyuan_image", "hunyuan_video_15", "kandinsky5", "kandinsky5_image", "ltxv", "newbie", "ace"]]}, "optional": {"device": [["default", "cpu"], {"advanced": true}]}}, "input_order": {"required": ["clip_name1", "clip_name2", "type"], "optional": ["device"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "DualCLIPLoader", "display_name": "Load CLIP (Dual)", "description": "Recipes:\nsdxl: clip-l, clip-g\nsd3: clip-l, clip-g / clip-l, t5 / clip-g, t5\nflux: clip-l, t5\nhidream: at least one of t5 or llama, recommended t5 and llama\nhunyuan_image: qwen2.5vl 7b and byt5 small\nnewbie: gemma-3-4b-it, jina clip v2", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CLIPVisionEncode": {"input": {"required": {"clip_vision": ["CLIP_VISION"], "image": ["IMAGE"], "crop": [["center", "none"]]}}, "input_order": {"required": ["clip_vision", "image", "crop"]}, "is_input_list": false, "output": ["CLIP_VISION_OUTPUT"], "output_is_list": [false], "output_name": ["CLIP_VISION_OUTPUT"], "name": "CLIPVisionEncode", "display_name": "CLIP Vision Encode", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "StyleModelApply": {"input": {"required": {"conditioning": ["CONDITIONING"], "style_model": ["STYLE_MODEL"], "clip_vision_output": ["CLIP_VISION_OUTPUT"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.001}], "strength_type": [["multiply", "attn_bias"]]}}, "input_order": {"required": ["conditioning", "style_model", "clip_vision_output", "strength", "strength_type"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "StyleModelApply", "display_name": "Apply Style Model", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": ["style transfer"]}, "unCLIPConditioning": {"input": {"required": {"conditioning": ["CONDITIONING"], "clip_vision_output": ["CLIP_VISION_OUTPUT"], "strength": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}], "noise_augmentation": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "clip_vision_output", "strength", "noise_augmentation"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "unCLIPConditioning", "display_name": "unCLIPConditioning", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ControlNetApply": {"input": {"required": {"conditioning": ["CONDITIONING"], "control_net": ["CONTROL_NET"], "image": ["IMAGE"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "control_net", "image", "strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ControlNetApply", "display_name": "Apply ControlNet (DEPRECATED)", "description": "", "python_module": "nodes", "category": "model/conditioning/controlnet", "output_node": false, "has_intermediate_output": false, "deprecated": true, "search_aliases": []}, "ControlNetApplyAdvanced": {"input": {"required": {"positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "control_net": ["CONTROL_NET"], "image": ["IMAGE"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}, "optional": {"vae": ["VAE"]}}, "input_order": {"required": ["positive", "negative", "control_net", "image", "strength", "start_percent", "end_percent"], "optional": ["vae"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "name": "ControlNetApplyAdvanced", "display_name": "Apply ControlNet", "description": "", "python_module": "nodes", "category": "model/conditioning/controlnet", "output_node": false, "has_intermediate_output": false, "search_aliases": ["controlnet", "apply controlnet", "use controlnet", "control net"]}, "ControlNetLoader": {"input": {"required": {"control_net_name": [[]]}}, "input_order": {"required": ["control_net_name"]}, "is_input_list": false, "output": ["CONTROL_NET"], "output_is_list": [false], "output_name": ["CONTROL_NET"], "name": "ControlNetLoader", "display_name": "Load ControlNet Model", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": ["controlnet", "control net", "cn", "load controlnet", "controlnet loader"]}, "DiffControlNetLoader": {"input": {"required": {"model": ["MODEL"], "control_net_name": [[]]}}, "input_order": {"required": ["model", "control_net_name"]}, "is_input_list": false, "output": ["CONTROL_NET"], "output_is_list": [false], "output_name": ["CONTROL_NET"], "name": "DiffControlNetLoader", "display_name": "Load ControlNet Model (diff)", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "StyleModelLoader": {"input": {"required": {"style_model_name": [[]]}}, "input_order": {"required": ["style_model_name"]}, "is_input_list": false, "output": ["STYLE_MODEL"], "output_is_list": [false], "output_name": ["STYLE_MODEL"], "name": "StyleModelLoader", "display_name": "Load Style Model", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CLIPVisionLoader": {"input": {"required": {"clip_name": [[]]}}, "input_order": {"required": ["clip_name"]}, "is_input_list": false, "output": ["CLIP_VISION"], "output_is_list": [false], "output_name": ["CLIP_VISION"], "name": "CLIPVisionLoader", "display_name": "Load CLIP Vision", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VAEDecodeTiled": {"input": {"required": {"samples": ["LATENT"], "vae": ["VAE"], "tile_size": ["INT", {"default": 512, "min": 64, "max": 4096, "step": 32, "advanced": true}], "overlap": ["INT", {"default": 64, "min": 0, "max": 4096, "step": 32, "advanced": true}], "temporal_size": ["INT", {"default": 64, "min": 8, "max": 4096, "step": 4, "tooltip": "Only used for video VAEs: Amount of frames to decode at a time.", "advanced": true}], "temporal_overlap": ["INT", {"default": 8, "min": 4, "max": 4096, "step": 4, "tooltip": "Only used for video VAEs: Amount of frames to overlap.", "advanced": true}]}}, "input_order": {"required": ["samples", "vae", "tile_size", "overlap", "temporal_size", "temporal_overlap"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "VAEDecodeTiled", "display_name": "VAE Decode (Tiled)", "description": "", "python_module": "nodes", "category": "experimental", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VAEEncodeTiled": {"input": {"required": {"pixels": ["IMAGE"], "vae": ["VAE"], "tile_size": ["INT", {"default": 512, "min": 64, "max": 4096, "step": 64, "advanced": true}], "overlap": ["INT", {"default": 64, "min": 0, "max": 4096, "step": 32, "advanced": true}], "temporal_size": ["INT", {"default": 64, "min": 8, "max": 4096, "step": 4, "tooltip": "Only used for video VAEs: Amount of frames to encode at a time.", "advanced": true}], "temporal_overlap": ["INT", {"default": 8, "min": 4, "max": 4096, "step": 4, "tooltip": "Only used for video VAEs: Amount of frames to overlap.", "advanced": true}]}}, "input_order": {"required": ["pixels", "vae", "tile_size", "overlap", "temporal_size", "temporal_overlap"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "VAEEncodeTiled", "display_name": "VAE Encode (Tiled)", "description": "", "python_module": "nodes", "category": "experimental", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "unCLIPCheckpointLoader": {"input": {"required": {"ckpt_name": [[]]}}, "input_order": {"required": ["ckpt_name"]}, "is_input_list": false, "output": ["MODEL", "CLIP", "VAE", "CLIP_VISION"], "output_is_list": [false, false, false, false], "output_name": ["MODEL", "CLIP", "VAE", "CLIP_VISION"], "name": "unCLIPCheckpointLoader", "display_name": "Load unCLIP Checkpoint", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "GLIGENLoader": {"input": {"required": {"gligen_name": [[]]}}, "input_order": {"required": ["gligen_name"]}, "is_input_list": false, "output": ["GLIGEN"], "output_is_list": [false], "output_name": ["GLIGEN"], "name": "GLIGENLoader", "display_name": "Load GLIGEN Model", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "GLIGENTextBoxApply": {"input": {"required": {"conditioning_to": ["CONDITIONING"], "clip": ["CLIP"], "gligen_textbox_model": ["GLIGEN"], "text": ["STRING", {"multiline": true, "dynamicPrompts": true}], "width": ["INT", {"default": 64, "min": 8, "max": 16384, "step": 8}], "height": ["INT", {"default": 64, "min": 8, "max": 16384, "step": 8}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}]}}, "input_order": {"required": ["conditioning_to", "clip", "gligen_textbox_model", "text", "width", "height", "x", "y"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "GLIGENTextBoxApply", "display_name": "Apply GLIGEN Text Box", "description": "", "python_module": "nodes", "category": "model/conditioning/gligen", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "InpaintModelConditioning": {"input": {"required": {"positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "vae": ["VAE"], "pixels": ["IMAGE"], "mask": ["MASK"], "noise_mask": ["BOOLEAN", {"default": true, "tooltip": "Add a noise mask to the latent so sampling will only happen within the mask. Might improve results or completely break things depending on the model."}]}}, "input_order": {"required": ["positive", "negative", "vae", "pixels", "mask", "noise_mask"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "name": "InpaintModelConditioning", "display_name": "InpaintModelConditioning", "description": "", "python_module": "nodes", "category": "model/conditioning", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CheckpointLoader": {"input": {"required": {"config_name": [["anything_v3.yaml", "v1-inference.yaml", "v1-inference_clip_skip_2.yaml", "v1-inference_clip_skip_2_fp16.yaml", "v1-inference_fp16.yaml", "v1-inpainting-inference.yaml", "v2-inference-v.yaml", "v2-inference-v_fp32.yaml", "v2-inference.yaml", "v2-inference_fp32.yaml", "v2-inpainting-inference.yaml"]], "ckpt_name": [[]]}}, "input_order": {"required": ["config_name", "ckpt_name"]}, "is_input_list": false, "output": ["MODEL", "CLIP", "VAE"], "output_is_list": [false, false, false], "output_name": ["MODEL", "CLIP", "VAE"], "name": "CheckpointLoader", "display_name": "Load Checkpoint With Config (DEPRECATED)", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "deprecated": true, "search_aliases": ["load model", "model loader"]}, "DiffusersLoader": {"input": {"required": {"model_path": [[]]}}, "input_order": {"required": ["model_path"]}, "is_input_list": false, "output": ["MODEL", "CLIP", "VAE"], "output_is_list": [false, false, false], "output_name": ["MODEL", "CLIP", "VAE"], "name": "DiffusersLoader", "display_name": "Load Diffusers Model (DEPRECATED)", "description": "", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "deprecated": true, "search_aliases": ["load diffusers model"]}, "LoadLatent": {"input": {"required": {"latent": [[]]}}, "input_order": {"required": ["latent"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "name": "LoadLatent", "display_name": "LoadLatent", "description": "", "python_module": "nodes", "category": "experimental", "output_node": false, "has_intermediate_output": false, "search_aliases": ["import latent", "open latent"]}, "SaveLatent": {"input": {"required": {"samples": ["LATENT"], "filename_prefix": ["STRING", {"default": "latents/ComfyUI"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["samples", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["samples"], "name": "SaveLatent", "display_name": "SaveLatent", "description": "", "python_module": "nodes", "category": "experimental", "output_node": true, "has_intermediate_output": false, "search_aliases": ["export latent"]}, "ConditioningZeroOut": {"input": {"required": {"conditioning": ["CONDITIONING"]}}, "input_order": {"required": ["conditioning"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningZeroOut", "display_name": "Conditioning Zero Out", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": ["null conditioning", "clear conditioning"]}, "ConditioningSetTimestepRange": {"input": {"required": {"conditioning": ["CONDITIONING"], "start": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["conditioning", "start", "end"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetTimestepRange", "display_name": "ConditioningSetTimestepRange", "description": "", "python_module": "nodes", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "LoraLoaderModelOnly": {"input": {"required": {"model": ["MODEL"], "lora_name": [[]], "strength_model": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "lora_name", "strength_model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "LoraLoaderModelOnly", "display_name": "Load LoRA", "description": "This LoRAs loader is used to modify the diffusion model, altering the way in which latents are denoised such as applying styles. Multiple LoRA nodes can be linked together.", "python_module": "nodes", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The modified diffusion model.", "The modified CLIP model."], "search_aliases": ["lora", "load lora", "apply lora", "lora loader", "lora model"], "essentials_category": "Image Generation"}, "LatentAdd": {"input": {"required": {"samples1": ["LATENT", {}], "samples2": ["LATENT", {}]}}, "input_order": {"required": ["samples1", "samples2"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentAdd", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine latents", "sum latents"], "essentials_category": null, "has_intermediate_output": false}, "LatentSubtract": {"input": {"required": {"samples1": ["LATENT", {}], "samples2": ["LATENT", {}]}}, "input_order": {"required": ["samples1", "samples2"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentSubtract", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["difference latent", "remove features"], "essentials_category": null, "has_intermediate_output": false}, "LatentMultiply": {"input": {"required": {"samples": ["LATENT", {}], "multiplier": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["samples", "multiplier"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentMultiply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["scale latent", "amplify latent", "latent gain"], "essentials_category": null, "has_intermediate_output": false}, "LatentInterpolate": {"input": {"required": {"samples1": ["LATENT", {}], "samples2": ["LATENT", {}], "ratio": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["samples1", "samples2", "ratio"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentInterpolate", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["blend latent", "mix latent", "lerp latent", "transition"], "essentials_category": null, "has_intermediate_output": false}, "LatentConcat": {"input": {"required": {"samples1": ["LATENT", {}], "samples2": ["LATENT", {}], "dim": ["COMBO", {"multiselect": false, "options": ["x", "-x", "y", "-y", "t", "-t"]}]}}, "input_order": {"required": ["samples1", "samples2", "dim"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentConcat", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["join latents", "stitch latents"], "essentials_category": null, "has_intermediate_output": false}, "LatentCut": {"input": {"required": {"samples": ["LATENT", {}], "dim": ["COMBO", {"multiselect": false, "options": ["x", "y", "t"]}], "index": ["INT", {"default": 0, "min": -16384, "max": 16384, "step": 1}], "amount": ["INT", {"default": 1, "min": 1, "max": 16384, "step": 1}]}}, "input_order": {"required": ["samples", "dim", "index", "amount"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentCut", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["crop latent", "slice latent", "extract region"], "essentials_category": null, "has_intermediate_output": false}, "LatentCutToBatch": {"input": {"required": {"samples": ["LATENT", {}], "dim": ["COMBO", {"multiselect": false, "options": ["t", "x", "y"]}], "slice_size": ["INT", {"default": 1, "min": 1, "max": 16384, "step": 1}]}}, "input_order": {"required": ["samples", "dim", "slice_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentCutToBatch", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["slice to batch", "split latent", "tile latent"], "essentials_category": null, "has_intermediate_output": false}, "LatentBatch": {"input": {"required": {"samples1": ["LATENT", {}], "samples2": ["LATENT", {}]}}, "input_order": {"required": ["samples1", "samples2"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentBatch", "display_name": "Batch Latents (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/batch", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine latents", "merge latents", "join latents"], "essentials_category": null, "has_intermediate_output": false}, "LatentBatchSeedBehavior": {"input": {"required": {"samples": ["LATENT", {}], "seed_behavior": ["COMBO", {"default": "fixed", "multiselect": false, "options": ["random", "fixed"]}]}}, "input_order": {"required": ["samples", "seed_behavior"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentBatchSeedBehavior", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LatentApplyOperation": {"input": {"required": {"samples": ["LATENT", {}], "operation": ["LATENT_OPERATION", {}]}}, "input_order": {"required": ["samples", "operation"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentApplyOperation", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced/operations", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["transform latent"], "essentials_category": null, "has_intermediate_output": false}, "LatentApplyOperationCFG": {"input": {"required": {"model": ["MODEL", {}], "operation": ["LATENT_OPERATION", {}]}}, "input_order": {"required": ["model", "operation"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentApplyOperationCFG", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced/operations", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LatentOperationTonemapReinhard": {"input": {"required": {"multiplier": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["multiplier"]}, "is_input_list": false, "output": ["LATENT_OPERATION"], "output_is_list": [false], "output_name": ["LATENT_OPERATION"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentOperationTonemapReinhard", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced/operations", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["hdr latent"], "essentials_category": null, "has_intermediate_output": false}, "LatentOperationSharpen": {"input": {"required": {"sharpen_radius": ["INT", {"advanced": true, "default": 9, "min": 1, "max": 31, "step": 1}], "sigma": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.1, "max": 10.0, "step": 0.1}], "alpha": ["FLOAT", {"advanced": true, "default": 0.1, "min": 0.0, "max": 5.0, "step": 0.01}]}}, "input_order": {"required": ["sharpen_radius", "sigma", "alpha"]}, "is_input_list": false, "output": ["LATENT_OPERATION"], "output_is_list": [false], "output_name": ["LATENT_OPERATION"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentOperationSharpen", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/advanced/operations", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReplaceVideoLatentFrames": {"input": {"required": {"destination": ["LATENT", {"tooltip": "The destination latent where frames will be replaced."}], "index": ["INT", {"tooltip": "The starting latent frame index in the destination latent where the source latent frames will be placed. Negative values count from the end.", "default": 0, "min": -16384, "max": 16384, "step": 1}]}, "optional": {"source": ["LATENT", {"tooltip": "The source latent providing frames to insert into the destination latent. If not provided, the destination latent is returned unchanged."}]}}, "input_order": {"required": ["destination", "index"], "optional": ["source"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReplaceVideoLatentFrames", "display_name": "Replace Video Latent Frames", "description": "", "python_module": "comfy_extras.nodes_latent", "category": "model/latent/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HypernetworkLoader": {"input": {"required": {"model": ["MODEL", {}], "hypernetwork_name": ["COMBO", {"multiselect": false, "options": []}], "strength": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "hypernetwork_name", "strength"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "HypernetworkLoader", "display_name": "Load Hypernetwork", "description": "", "python_module": "comfy_extras.nodes_hypernetwork", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "UpscaleModelLoader": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["UPSCALE_MODEL"], "output_is_list": [false], "output_name": ["UPSCALE_MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "UpscaleModelLoader", "display_name": "Load Upscale Model", "description": "", "python_module": "comfy_extras.nodes_upscale_model", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageUpscaleWithModel": {"input": {"required": {"upscale_model": ["UPSCALE_MODEL", {}], "image": ["IMAGE", {}]}}, "input_order": {"required": ["upscale_model", "image"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageUpscaleWithModel", "display_name": "Upscale Image (using Model)", "description": "", "python_module": "comfy_extras.nodes_upscale_model", "category": "image/upscaling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["upscale", "upscaler", "upsc", "enlarge image", "super resolution", "hires", "superres", "increase resolution"], "essentials_category": null, "has_intermediate_output": false}, "ImageBlend": {"input": {"required": {"image1": ["IMAGE", {}], "image2": ["IMAGE", {}], "blend_factor": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "blend_mode": ["COMBO", {"multiselect": false, "options": ["normal", "multiply", "screen", "overlay", "soft_light", "difference"]}]}}, "input_order": {"required": ["image1", "image2", "blend_factor", "blend_mode"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageBlend", "display_name": "Blend Images", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["mix images"], "essentials_category": "Image Tools", "has_intermediate_output": false}, "ImageBlur": {"input": {"required": {"image": ["IMAGE", {}], "blur_radius": ["INT", {"default": 1, "min": 1, "max": 31, "step": 1}], "sigma": ["FLOAT", {"default": 1.0, "min": 0.1, "max": 10.0, "step": 0.1}]}}, "input_order": {"required": ["image", "blur_radius", "sigma"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageBlur", "display_name": "Blur Image", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageQuantize": {"input": {"required": {"image": ["IMAGE", {}], "colors": ["INT", {"default": 256, "min": 1, "max": 256, "step": 1}], "dither": ["COMBO", {"multiselect": false, "options": ["none", "floyd-steinberg", "bayer-2", "bayer-4", "bayer-8", "bayer-16"]}]}}, "input_order": {"required": ["image", "colors", "dither"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageQuantize", "display_name": "Quantize Image", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageSharpen": {"input": {"required": {"image": ["IMAGE", {}], "sharpen_radius": ["INT", {"advanced": true, "default": 1, "min": 1, "max": 31, "step": 1}], "sigma": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.1, "max": 10.0, "step": 0.01}], "alpha": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 5.0, "step": 0.01}]}}, "input_order": {"required": ["image", "sharpen_radius", "sigma", "alpha"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageSharpen", "display_name": "Sharpen Image", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageScaleToTotalPixels": {"input": {"required": {"image": ["IMAGE", {}], "upscale_method": ["COMBO", {"multiselect": false, "options": ["nearest-exact", "bilinear", "area", "bicubic", "lanczos"]}], "megapixels": ["FLOAT", {"default": 1.0, "min": 0.01, "max": 16.0, "step": 0.01}], "resolution_steps": ["INT", {"advanced": true, "default": 1, "min": 1, "max": 256}]}}, "input_order": {"required": ["image", "upscale_method", "megapixels", "resolution_steps"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageScaleToTotalPixels", "display_name": "Scale Image to Total Pixels", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/upscaling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ResizeImageMaskNode": {"input": {"required": {"input": ["COMFY_MATCHTYPE_V3", {"template": {"template_id": "input_type", "allowed_types": "IMAGE,MASK"}}], "resize_type": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Select how to resize: by exact dimensions, scale factor, matching another image, etc.", "options": [{"key": "scale dimensions", "inputs": {"required": {"width": ["INT", {"tooltip": "Target width in pixels. Set to 0 to auto-calculate from height while preserving aspect ratio.", "default": 512, "min": 0, "max": 16384, "step": 1}], "height": ["INT", {"tooltip": "Target height in pixels. Set to 0 to auto-calculate from width while preserving aspect ratio.", "default": 512, "min": 0, "max": 16384, "step": 1}], "crop": ["COMBO", {"tooltip": "How to handle aspect ratio mismatch: 'disabled' stretches to fit, 'center' crops to maintain aspect ratio.", "default": "center", "multiselect": false, "options": ["disabled", "center"]}]}}}, {"key": "scale by multiplier", "inputs": {"required": {"multiplier": ["FLOAT", {"tooltip": "Scale factor (e.g., 2.0 doubles size, 0.5 halves size).", "default": 1.0, "min": 0.01, "max": 8.0, "step": 0.01}]}}}, {"key": "scale longer dimension", "inputs": {"required": {"longer_size": ["INT", {"tooltip": "The longer edge will be resized to this value. Aspect ratio is preserved.", "default": 512, "min": 0, "max": 16384, "step": 1}]}}}, {"key": "scale shorter dimension", "inputs": {"required": {"shorter_size": ["INT", {"tooltip": "The shorter edge will be resized to this value. Aspect ratio is preserved.", "default": 512, "min": 0, "max": 16384, "step": 1}]}}}, {"key": "scale width", "inputs": {"required": {"width": ["INT", {"tooltip": "Target width in pixels. Height auto-adjusts to preserve aspect ratio.", "default": 512, "min": 0, "max": 16384, "step": 1}]}}}, {"key": "scale height", "inputs": {"required": {"height": ["INT", {"tooltip": "Target height in pixels. Width auto-adjusts to preserve aspect ratio.", "default": 512, "min": 0, "max": 16384, "step": 1}]}}}, {"key": "scale total pixels", "inputs": {"required": {"megapixels": ["FLOAT", {"tooltip": "Target total megapixels (e.g., 1.0 \u2248 1024\u00d71024). Aspect ratio is preserved.", "default": 1.0, "min": 0.01, "max": 16.0, "step": 0.01}]}}}, {"key": "match size", "inputs": {"required": {"match": ["IMAGE,MASK", {"tooltip": "Resize input to match the dimensions of this reference image or mask."}], "crop": ["COMBO", {"tooltip": "How to handle aspect ratio mismatch: 'disabled' stretches to fit, 'center' crops to maintain aspect ratio.", "default": "center", "multiselect": false, "options": ["disabled", "center"]}]}}}, {"key": "scale to multiple", "inputs": {"required": {"multiple": ["INT", {"tooltip": "Resize so width and height are divisible by this number. Useful for latent alignment (e.g., 8 or 64).", "default": 8, "min": 1, "max": 16384, "step": 1}]}}}]}], "scale_method": ["COMBO", {"tooltip": "Interpolation algorithm. 'area' is best for downscaling, 'lanczos' for upscaling, 'nearest-exact' for pixel art.", "default": "area", "multiselect": false, "options": ["nearest-exact", "bilinear", "area", "bicubic", "lanczos"]}]}}, "input_order": {"required": ["input", "resize_type", "scale_method"]}, "is_input_list": false, "output": ["COMFY_MATCHTYPE_V3"], "output_is_list": [false], "output_name": ["resized"], "output_tooltips": [null], "output_matchtypes": ["input_type"], "name": "ResizeImageMaskNode", "display_name": "Resize Image/Mask", "description": "Resize an image or mask using various scaling methods.", "python_module": "comfy_extras.nodes_post_processing", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["resize", "resize image", "resize mask", "scale", "scale image", "scale mask", "image resize", "change size", "dimensions", "shrink", "enlarge"], "essentials_category": null, "has_intermediate_output": false}, "BatchImagesNode": {"input": {"required": {"images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image", "min": 1, "max": 50}}]}}, "input_order": {"required": ["images"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "BatchImagesNode", "display_name": "Batch Images", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["batch", "image batch", "batch images", "combine images", "merge images", "stack images"], "essentials_category": "Image Tools", "has_intermediate_output": false}, "BatchMasksNode": {"input": {"required": {"masks": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"mask": ["MASK", {}]}}, "prefix": "mask", "min": 1, "max": 50}}]}}, "input_order": {"required": ["masks"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "BatchMasksNode", "display_name": "Batch Masks", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine masks", "stack masks", "merge masks"], "essentials_category": null, "has_intermediate_output": false}, "BatchLatentsNode": {"input": {"required": {"latents": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"latent": ["LATENT", {}]}}, "prefix": "latent", "min": 1, "max": 50}}]}}, "input_order": {"required": ["latents"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "BatchLatentsNode", "display_name": "Batch Latents", "description": "", "python_module": "comfy_extras.nodes_post_processing", "category": "model/latent/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine latents", "stack latents", "merge latents"], "essentials_category": null, "has_intermediate_output": false}, "ColorTransfer": {"input": {"required": {"image_target": ["IMAGE", {"tooltip": "Image(s) to apply the color transform to."}], "image_ref": ["IMAGE", {"tooltip": "Reference image(s) to match colors to."}], "method": ["COMBO", {"multiselect": false, "options": ["reinhard_lab", "mkl_lab", "histogram"]}], "source_stats": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "per_frame: each frame matched to image_ref individually. uniform: pool stats across all source frames as baseline, match to image_ref. target_frame: use one chosen frame as the baseline for the transform to image_ref, applied uniformly to all frames (preserves relative differences)", "options": [{"key": "per_frame", "inputs": {"required": {}}}, {"key": "uniform", "inputs": {"required": {}}}, {"key": "target_frame", "inputs": {"required": {"target_index": ["INT", {"tooltip": "Frame index used as the source baseline for computing the transform to image_ref", "default": 0, "min": 0, "max": 10000}]}}}]}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["image_target", "image_ref", "method", "source_stats", "strength"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["image"], "output_tooltips": [null], "output_matchtypes": null, "name": "ColorTransfer", "display_name": "Transfer Color", "description": "Match the colors of one image to another using various algorithms.", "python_module": "comfy_extras.nodes_post_processing", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["color match", "color grading", "color correction", "match colors", "color transform", "mkl", "reinhard", "histogram"], "essentials_category": null, "has_intermediate_output": false}, "LatentCompositeMasked": {"input": {"required": {"destination": ["LATENT", {}], "source": ["LATENT", {}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 8}], "resize_source": ["BOOLEAN", {"default": false}]}, "optional": {"mask": ["MASK", {}]}}, "input_order": {"required": ["destination", "source", "x", "y", "resize_source"], "optional": ["mask"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentCompositeMasked", "display_name": "Latent Composite Masked", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "model/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["overlay latent", "layer latent", "paste latent", "inpaint latent"], "essentials_category": null, "has_intermediate_output": false}, "ImageCompositeMasked": {"input": {"required": {"destination": ["IMAGE", {}], "source": ["IMAGE", {}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "resize_source": ["BOOLEAN", {"default": false}]}, "optional": {"mask": ["MASK", {}]}}, "input_order": {"required": ["destination", "source", "x", "y", "resize_source"], "optional": ["mask"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageCompositeMasked", "display_name": "Image Composite Masked", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/compositing", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["overlay", "layer", "paste image", "images composition"], "essentials_category": null, "has_intermediate_output": false}, "MaskToImage": {"input": {"required": {"mask": ["MASK", {}]}}, "input_order": {"required": ["mask"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MaskToImage", "display_name": "Convert Mask to Image", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["convert mask"], "essentials_category": null, "has_intermediate_output": false}, "ImageToMask": {"input": {"required": {"image": ["IMAGE", {}], "channel": ["COMBO", {"multiselect": false, "options": ["red", "green", "blue", "alpha"]}]}}, "input_order": {"required": ["image", "channel"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageToMask", "display_name": "Convert Image to Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["extract channel", "channel to mask"], "essentials_category": null, "has_intermediate_output": false}, "ImageColorToMask": {"input": {"required": {"image": ["IMAGE", {}], "color": ["INT", {"default": 0, "min": 0, "max": 16777215, "step": 1, "display": "number"}]}}, "input_order": {"required": ["image", "color"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageColorToMask", "display_name": "Convert Image Color to Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["color keying", "chroma key"], "essentials_category": null, "has_intermediate_output": false}, "SolidMask": {"input": {"required": {"value": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "width": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "height": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}]}}, "input_order": {"required": ["value", "width", "height"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "SolidMask", "display_name": "Create Solid Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "InvertMask": {"input": {"required": {"mask": ["MASK", {}]}}, "input_order": {"required": ["mask"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "InvertMask", "display_name": "Invert Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["reverse mask", "flip mask"], "essentials_category": null, "has_intermediate_output": false}, "CropMask": {"input": {"required": {"mask": ["MASK", {}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "width": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "height": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}]}}, "input_order": {"required": ["mask", "x", "y", "width", "height"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "CropMask", "display_name": "Crop Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["cut mask", "extract mask region", "mask slice"], "essentials_category": null, "has_intermediate_output": false}, "MaskComposite": {"input": {"required": {"destination": ["MASK", {}], "source": ["MASK", {}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "operation": ["COMBO", {"multiselect": false, "options": ["multiply", "add", "subtract", "and", "or", "xor"]}]}}, "input_order": {"required": ["destination", "source", "x", "y", "operation"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "MaskComposite", "display_name": "Combine Masks", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine masks", "blend masks", "layer masks", "masks composition"], "essentials_category": null, "has_intermediate_output": false}, "FeatherMask": {"input": {"required": {"mask": ["MASK", {}], "left": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "top": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "right": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "bottom": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}]}}, "input_order": {"required": ["mask", "left", "top", "right", "bottom"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "FeatherMask", "display_name": "Feather Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["soft edge mask", "blur mask edges", "gradient mask edge"], "essentials_category": null, "has_intermediate_output": false}, "GrowMask": {"input": {"required": {"mask": ["MASK", {}], "expand": ["INT", {"default": 0, "min": -16384, "max": 16384, "step": 1}], "tapered_corners": ["BOOLEAN", {"advanced": true, "default": true}]}}, "input_order": {"required": ["mask", "expand", "tapered_corners"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrowMask", "display_name": "Grow Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["expand mask", "shrink mask"], "essentials_category": null, "has_intermediate_output": false}, "ThresholdMask": {"input": {"required": {"mask": ["MASK", {}], "value": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["mask", "value"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "ThresholdMask", "display_name": "Threshold Mask", "description": "", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["binary mask"], "essentials_category": null, "has_intermediate_output": false}, "MaskPreview": {"input": {"required": {"mask": ["MASK", {}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["mask"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "MaskPreview", "display_name": "Preview Mask", "description": "Saves the input images to your ComfyUI output directory.", "python_module": "comfy_extras.nodes_mask", "category": "image/mask", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["show mask", "view mask", "inspect mask", "debug mask"], "essentials_category": null, "has_intermediate_output": false}, "PorterDuffImageComposite": {"input": {"required": {"source": ["IMAGE", {}], "source_alpha": ["MASK", {}], "destination": ["IMAGE", {}], "destination_alpha": ["MASK", {}], "mode": ["COMBO", {"default": "DST", "multiselect": false, "options": ["ADD", "CLEAR", "DARKEN", "DST", "DST_ATOP", "DST_IN", "DST_OUT", "DST_OVER", "LIGHTEN", "MULTIPLY", "OVERLAY", "SCREEN", "SRC", "SRC_ATOP", "SRC_IN", "SRC_OUT", "SRC_OVER", "XOR"]}]}}, "input_order": {"required": ["source", "source_alpha", "destination", "destination_alpha", "mode"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "PorterDuffImageComposite", "display_name": "Porter-Duff Image Composite", "description": "", "python_module": "comfy_extras.nodes_compositing", "category": "image/compositing", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["alpha composite", "blend modes", "layer blend", "transparency blend"], "essentials_category": null, "has_intermediate_output": false}, "SplitImageWithAlpha": {"input": {"required": {"image": ["IMAGE", {}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SplitImageWithAlpha", "display_name": "Split Image with Alpha", "description": "", "python_module": "comfy_extras.nodes_compositing", "category": "image/compositing", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["extract alpha", "separate transparency", "remove alpha"], "essentials_category": null, "has_intermediate_output": false}, "JoinImageWithAlpha": {"input": {"required": {"image": ["IMAGE", {}], "alpha": ["MASK", {}]}}, "input_order": {"required": ["image", "alpha"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "JoinImageWithAlpha", "display_name": "Join Image with Alpha", "description": "", "python_module": "comfy_extras.nodes_compositing", "category": "image/compositing", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["add transparency", "apply alpha", "composite alpha", "RGBA"], "essentials_category": null, "has_intermediate_output": false}, "RebatchLatents": {"input": {"required": {"latents": ["LATENT", {}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["latents", "batch_size"]}, "is_input_list": true, "output": ["LATENT"], "output_is_list": [true], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "RebatchLatents", "display_name": "Rebatch Latents", "description": "", "python_module": "comfy_extras.nodes_rebatch", "category": "model/latent/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RebatchImages": {"input": {"required": {"images": ["IMAGE", {}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["images", "batch_size"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RebatchImages", "display_name": "Rebatch Images", "description": "", "python_module": "comfy_extras.nodes_rebatch", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ModelMergeSimple": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "ratio": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "ratio"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSimple", "display_name": "ModelMergeSimple", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeBlocks": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "input": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "out": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "input", "middle", "out"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeBlocks", "display_name": "ModelMergeBlocks", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeSubtract": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "multiplier": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "multiplier"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSubtract", "display_name": "ModelMergeSubtract", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeAdd": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"]}}, "input_order": {"required": ["model1", "model2"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeAdd", "display_name": "ModelMergeAdd", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CheckpointSave": {"input": {"required": {"model": ["MODEL"], "clip": ["CLIP"], "vae": ["VAE"], "filename_prefix": ["STRING", {"default": "checkpoints/ComfyUI"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["model", "clip", "vae", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "CheckpointSave", "display_name": "Save Checkpoint", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": true, "has_intermediate_output": false, "search_aliases": ["save model", "export checkpoint", "merge save"]}, "CLIPMergeSimple": {"input": {"required": {"clip1": ["CLIP"], "clip2": ["CLIP"], "ratio": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["clip1", "clip2", "ratio"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPMergeSimple", "display_name": "CLIPMergeSimple", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CLIPMergeSubtract": {"input": {"required": {"clip1": ["CLIP"], "clip2": ["CLIP"], "multiplier": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["clip1", "clip2", "multiplier"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPMergeSubtract", "display_name": "CLIPMergeSubtract", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": false, "has_intermediate_output": false, "search_aliases": ["clip difference", "text encoder subtract"]}, "CLIPMergeAdd": {"input": {"required": {"clip1": ["CLIP"], "clip2": ["CLIP"]}}, "input_order": {"required": ["clip1", "clip2"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPMergeAdd", "display_name": "CLIPMergeAdd", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": false, "has_intermediate_output": false, "search_aliases": ["combine clip"]}, "CLIPSave": {"input": {"required": {"clip": ["CLIP"], "filename_prefix": ["STRING", {"default": "clip/ComfyUI"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["clip", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "CLIPSave", "display_name": "CLIPSave", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "VAESave": {"input": {"required": {"vae": ["VAE"], "filename_prefix": ["STRING", {"default": "vae/ComfyUI_vae"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["vae", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "VAESave", "display_name": "VAESave", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "ModelSave": {"input": {"required": {"model": ["MODEL"], "filename_prefix": ["STRING", {"default": "diffusion_models/ComfyUI"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["model", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "ModelSave", "display_name": "ModelSave", "description": "", "python_module": "comfy_extras.nodes_model_merging", "category": "model/merging", "output_node": true, "has_intermediate_output": false, "search_aliases": ["export model", "checkpoint save"]}, "TomePatchModel": {"input": {"required": {"model": ["MODEL", {}], "ratio": ["FLOAT", {"default": 0.3, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "ratio"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "TomePatchModel", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_tomesd", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeSDXLRefiner": {"input": {"required": {"ascore": ["FLOAT", {"default": 6.0, "min": 0.0, "max": 1000.0, "step": 0.01}], "width": ["INT", {"default": 1024, "min": 0, "max": 16384}], "height": ["INT", {"default": 1024, "min": 0, "max": 16384}], "text": ["STRING", {"multiline": true, "dynamicPrompts": true}], "clip": ["CLIP", {}]}}, "input_order": {"required": ["ascore", "width", "height", "text", "clip"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeSDXLRefiner", "display_name": "CLIP Text Encode (SDXL Refiner)", "description": "", "python_module": "comfy_extras.nodes_clip_sdxl", "category": "model/conditioning/stable diffusion", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeSDXL": {"input": {"required": {"clip": ["CLIP", {}], "width": ["INT", {"default": 1024, "min": 0, "max": 16384}], "height": ["INT", {"default": 1024, "min": 0, "max": 16384}], "crop_w": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 16384}], "crop_h": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 16384}], "target_width": ["INT", {"default": 1024, "min": 0, "max": 16384}], "target_height": ["INT", {"default": 1024, "min": 0, "max": 16384}], "text_g": ["STRING", {"multiline": true, "dynamicPrompts": true}], "text_l": ["STRING", {"multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["clip", "width", "height", "crop_w", "crop_h", "target_width", "target_height", "text_g", "text_l"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeSDXL", "display_name": "CLIP Text Encode (SDXL)", "description": "", "python_module": "comfy_extras.nodes_clip_sdxl", "category": "model/conditioning/stable diffusion", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Canny": {"input": {"required": {"image": ["IMAGE", {}], "low_threshold": ["FLOAT", {"default": 0.4, "min": 0.01, "max": 0.99, "step": 0.01}], "high_threshold": ["FLOAT", {"default": 0.8, "min": 0.01, "max": 0.99, "step": 0.01}]}}, "input_order": {"required": ["image", "low_threshold", "high_threshold"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Canny", "display_name": "Detect Edges (Canny)", "description": "", "python_module": "comfy_extras.nodes_canny", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["edge detection", "outline", "contour detection", "line art"], "essentials_category": "Image Tools", "has_intermediate_output": false}, "FreeU": {"input": {"required": {"model": ["MODEL", {}], "b1": ["FLOAT", {"advanced": true, "default": 1.1, "min": 0.0, "max": 10.0, "step": 0.01}], "b2": ["FLOAT", {"advanced": true, "default": 1.2, "min": 0.0, "max": 10.0, "step": 0.01}], "s1": ["FLOAT", {"advanced": true, "default": 0.9, "min": 0.0, "max": 10.0, "step": 0.01}], "s2": ["FLOAT", {"advanced": true, "default": 0.2, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "b1", "b2", "s1", "s2"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "FreeU", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_freelunch", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FreeU_V2": {"input": {"required": {"model": ["MODEL", {}], "b1": ["FLOAT", {"advanced": true, "default": 1.3, "min": 0.0, "max": 10.0, "step": 0.01}], "b2": ["FLOAT", {"advanced": true, "default": 1.4, "min": 0.0, "max": 10.0, "step": 0.01}], "s1": ["FLOAT", {"advanced": true, "default": 0.9, "min": 0.0, "max": 10.0, "step": 0.01}], "s2": ["FLOAT", {"advanced": true, "default": 0.2, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "b1", "b2", "s1", "s2"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "FreeU_V2", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_freelunch", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerCustom": {"input": {"required": {"model": ["MODEL", {}], "add_noise": ["BOOLEAN", {"advanced": true, "default": true}], "noise_seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "sampler": ["SAMPLER", {}], "sigmas": ["SIGMAS", {}], "latent_image": ["LATENT", {}]}}, "input_order": {"required": ["model", "add_noise", "noise_seed", "cfg", "positive", "negative", "sampler", "sigmas", "latent_image"]}, "is_input_list": false, "output": ["LATENT", "LATENT"], "output_is_list": [false, false], "output_name": ["output", "denoised_output"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SamplerCustom", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/custom", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CFGOverride": {"input": {"required": {"model": ["MODEL", {}], "cfg": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["model", "cfg", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "CFGOverride", "display_name": "CFG Override", "description": "Override cfg to a fixed value over a [start, end] percent (sigma) range. With multiple overrides, the one nearest the sampler wins on overlap.", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/guiders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BasicScheduler": {"input": {"required": {"model": ["MODEL", {}], "scheduler": ["COMBO", {"multiselect": false, "options": ["simple", "sgm_uniform", "karras", "exponential", "ddim_uniform", "beta", "normal", "linear_quadratic", "kl_optimal"]}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "scheduler", "steps", "denoise"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "BasicScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KarrasScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "sigma_max": ["FLOAT", {"advanced": true, "default": 14.614642, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "sigma_min": ["FLOAT", {"advanced": true, "default": 0.0291675, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "rho": ["FLOAT", {"advanced": true, "default": 7.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["steps", "sigma_max", "sigma_min", "rho"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "KarrasScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ExponentialScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "sigma_max": ["FLOAT", {"advanced": true, "default": 14.614642, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "sigma_min": ["FLOAT", {"advanced": true, "default": 0.0291675, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["steps", "sigma_max", "sigma_min"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "ExponentialScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PolyexponentialScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "sigma_max": ["FLOAT", {"advanced": true, "default": 14.614642, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "sigma_min": ["FLOAT", {"advanced": true, "default": 0.0291675, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "rho": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["steps", "sigma_max", "sigma_min", "rho"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "PolyexponentialScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LaplaceScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "sigma_max": ["FLOAT", {"advanced": true, "default": 14.614642, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "sigma_min": ["FLOAT", {"advanced": true, "default": 0.0291675, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "mu": ["FLOAT", {"advanced": true, "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.1, "round": false}], "beta": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0.0, "max": 10.0, "step": 0.1, "round": false}]}}, "input_order": {"required": ["steps", "sigma_max", "sigma_min", "mu", "beta"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "LaplaceScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VPScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "beta_d": ["FLOAT", {"advanced": true, "default": 19.9, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "beta_min": ["FLOAT", {"advanced": true, "default": 0.1, "min": 0.0, "max": 5000.0, "step": 0.01, "round": false}], "eps_s": ["FLOAT", {"advanced": true, "default": 0.001, "min": 0.0, "max": 1.0, "step": 0.0001, "round": false}]}}, "input_order": {"required": ["steps", "beta_d", "beta_min", "eps_s"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "VPScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BetaSamplingScheduler": {"input": {"required": {"model": ["MODEL", {}], "steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "alpha": ["FLOAT", {"advanced": true, "default": 0.6, "min": 0.0, "max": 50.0, "step": 0.01, "round": false}], "beta": ["FLOAT", {"advanced": true, "default": 0.6, "min": 0.0, "max": 50.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["model", "steps", "alpha", "beta"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "BetaSamplingScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SDTurboScheduler": {"input": {"required": {"model": ["MODEL", {}], "steps": ["INT", {"default": 1, "min": 1, "max": 10}], "denoise": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "steps", "denoise"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "SDTurboScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KSamplerSelect": {"input": {"required": {"sampler_name": ["COMBO", {"multiselect": false, "options": ["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2", "exp_heun_2_x0", "exp_heun_2_x0_sde", "dpm_2", "dpm_2_ancestral", "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_2m_sde_heun", "dpmpp_2m_sde_heun_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis", "res_multistep", "res_multistep_cfg_pp", "res_multistep_ancestral", "res_multistep_ancestral_cfg_pp", "gradient_estimation", "gradient_estimation_cfg_pp", "er_sde", "seeds_2", "seeds_3", "sa_solver", "sa_solver_pece", "ddim", "uni_pc", "uni_pc_bh2"]}]}}, "input_order": {"required": ["sampler_name"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "KSamplerSelect", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerEulerAncestral": {"input": {"required": {"eta": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["eta", "s_noise"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerEulerAncestral", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerEulerAncestralCFGPP": {"input": {"required": {"eta": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["eta", "s_noise"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerEulerAncestralCFGPP", "display_name": "SamplerEulerAncestralCFG++", "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerLMS": {"input": {"required": {"order": ["INT", {"advanced": true, "default": 4, "min": 1, "max": 100}]}}, "input_order": {"required": ["order"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerLMS", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerDPMPP_3M_SDE": {"input": {"required": {"eta": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "noise_device": ["COMBO", {"advanced": true, "multiselect": false, "options": ["gpu", "cpu"]}]}}, "input_order": {"required": ["eta", "s_noise", "noise_device"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerDPMPP_3M_SDE", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerDPMPP_2M_SDE": {"input": {"required": {"solver_type": ["COMBO", {"multiselect": false, "options": ["midpoint", "heun"]}], "eta": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "noise_device": ["COMBO", {"advanced": true, "multiselect": false, "options": ["gpu", "cpu"]}]}}, "input_order": {"required": ["solver_type", "eta", "s_noise", "noise_device"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerDPMPP_2M_SDE", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerDPMPP_SDE": {"input": {"required": {"eta": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "r": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "noise_device": ["COMBO", {"advanced": true, "multiselect": false, "options": ["gpu", "cpu"]}]}}, "input_order": {"required": ["eta", "s_noise", "r", "noise_device"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerDPMPP_SDE", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerDPMPP_2S_Ancestral": {"input": {"required": {"eta": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["eta", "s_noise"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerDPMPP_2S_Ancestral", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerDPMAdaptative": {"input": {"required": {"order": ["INT", {"advanced": true, "default": 3, "min": 2, "max": 3}], "rtol": ["FLOAT", {"advanced": true, "default": 0.05, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "atol": ["FLOAT", {"advanced": true, "default": 0.0078, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "h_init": ["FLOAT", {"advanced": true, "default": 0.05, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "pcoeff": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "icoeff": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "dcoeff": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "accept_safety": ["FLOAT", {"advanced": true, "default": 0.81, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "eta": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["order", "rtol", "atol", "h_init", "pcoeff", "icoeff", "dcoeff", "accept_safety", "eta", "s_noise"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerDPMAdaptative", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerER_SDE": {"input": {"required": {"solver_type": ["COMBO", {"multiselect": false, "options": ["ER-SDE", "Reverse-time SDE", "ODE"]}], "max_stage": ["INT", {"advanced": true, "default": 3, "min": 1, "max": 3}], "eta": ["FLOAT", {"tooltip": "Stochastic strength of reverse-time SDE.\nWhen eta=0, it reduces to deterministic ODE. This setting doesn't apply to ER-SDE solver type.", "advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["solver_type", "max_stage", "eta", "s_noise"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerER_SDE", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerSASolver": {"input": {"required": {"model": ["MODEL", {}], "eta": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01, "round": false}], "sde_start_percent": ["FLOAT", {"advanced": true, "default": 0.2, "min": 0.0, "max": 1.0, "step": 0.001}], "sde_end_percent": ["FLOAT", {"advanced": true, "default": 0.8, "min": 0.0, "max": 1.0, "step": 0.001}], "s_noise": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "predictor_order": ["INT", {"advanced": true, "default": 3, "min": 1, "max": 6}], "corrector_order": ["INT", {"advanced": true, "default": 4, "min": 0, "max": 6}], "use_pece": ["BOOLEAN", {"advanced": true}], "simple_order_2": ["BOOLEAN", {"advanced": true}]}}, "input_order": {"required": ["model", "eta", "sde_start_percent", "sde_end_percent", "s_noise", "predictor_order", "corrector_order", "use_pece", "simple_order_2"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerSASolver", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["sde"], "essentials_category": null, "has_intermediate_output": false}, "SamplerSEEDS2": {"input": {"required": {"solver_type": ["COMBO", {"multiselect": false, "options": ["phi_1", "phi_2"]}], "eta": ["FLOAT", {"tooltip": "Stochastic strength", "advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "s_noise": ["FLOAT", {"tooltip": "SDE noise multiplier", "advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": false}], "r": ["FLOAT", {"tooltip": "Relative step size for the intermediate stage (c2 node)", "advanced": true, "default": 0.5, "min": 0.01, "max": 1.0, "step": 0.01, "round": false}]}}, "input_order": {"required": ["solver_type", "eta", "s_noise", "r"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerSEEDS2", "display_name": null, "description": "This sampler node can represent multiple samplers:\n\nseeds_2\n- default setting\n\nexp_heun_2_x0\n- solver_type=phi_2, r=1.0, eta=0.0\n\nexp_heun_2_x0_sde\n- solver_type=phi_2, r=1.0, eta=1.0, s_noise=1.0", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["sde", "exp heun"], "essentials_category": null, "has_intermediate_output": false}, "SplitSigmas": {"input": {"required": {"sigmas": ["SIGMAS", {}], "step": ["INT", {"default": 0, "min": 0, "max": 10000}]}}, "input_order": {"required": ["sigmas", "step"]}, "is_input_list": false, "output": ["SIGMAS", "SIGMAS"], "output_is_list": [false, false], "output_name": ["high_sigmas", "low_sigmas"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SplitSigmas", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SplitSigmasDenoise": {"input": {"required": {"sigmas": ["SIGMAS", {}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["sigmas", "denoise"]}, "is_input_list": false, "output": ["SIGMAS", "SIGMAS"], "output_is_list": [false, false], "output_name": ["high_sigmas", "low_sigmas"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SplitSigmasDenoise", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FlipSigmas": {"input": {"required": {"sigmas": ["SIGMAS", {}]}}, "input_order": {"required": ["sigmas"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "FlipSigmas", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SetFirstSigma": {"input": {"required": {"sigmas": ["SIGMAS", {}], "sigma": ["FLOAT", {"default": 136.0, "min": 0.0, "max": 20000.0, "step": 0.001, "round": false}]}}, "input_order": {"required": ["sigmas", "sigma"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "SetFirstSigma", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ExtendIntermediateSigmas": {"input": {"required": {"sigmas": ["SIGMAS", {}], "steps": ["INT", {"default": 2, "min": 1, "max": 100}], "start_at_sigma": ["FLOAT", {"default": -1.0, "min": -1.0, "max": 20000.0, "step": 0.01, "round": false}], "end_at_sigma": ["FLOAT", {"default": 12.0, "min": 0.0, "max": 20000.0, "step": 0.01, "round": false}], "spacing": ["COMBO", {"multiselect": false, "options": ["linear", "cosine", "sine"]}]}}, "input_order": {"required": ["sigmas", "steps", "start_at_sigma", "end_at_sigma", "spacing"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "ExtendIntermediateSigmas", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["interpolate sigmas"], "essentials_category": null, "has_intermediate_output": false}, "SamplingPercentToSigma": {"input": {"required": {"model": ["MODEL", {}], "sampling_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.0001}], "return_actual_sigma": ["BOOLEAN", {"tooltip": "Return the actual sigma value instead of the value used for interval checks.\nThis only affects results at 0.0 and 1.0.", "default": false}]}}, "input_order": {"required": ["model", "sampling_percent", "return_actual_sigma"]}, "is_input_list": false, "output": ["FLOAT"], "output_is_list": [false], "output_name": ["sigma_value"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplingPercentToSigma", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/sigmas", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CFGGuider": {"input": {"required": {"model": ["MODEL", {}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}]}}, "input_order": {"required": ["model", "positive", "negative", "cfg"]}, "is_input_list": false, "output": ["GUIDER"], "output_is_list": [false], "output_name": ["GUIDER"], "output_tooltips": [null], "output_matchtypes": null, "name": "CFGGuider", "display_name": "CFG Guider", "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/guiders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "DualCFGGuider": {"input": {"required": {"model": ["MODEL", {}], "cond1": ["CONDITIONING", {}], "cond2": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "cfg_conds": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "cfg_cond2_negative": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "style": ["COMBO", {"multiselect": false, "options": ["regular", "nested"]}]}}, "input_order": {"required": ["model", "cond1", "cond2", "negative", "cfg_conds", "cfg_cond2_negative", "style"]}, "is_input_list": false, "output": ["GUIDER"], "output_is_list": [false], "output_name": ["GUIDER"], "output_tooltips": [null], "output_matchtypes": null, "name": "DualCFGGuider", "display_name": "Dual CFG Guider", "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/guiders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["dual prompt guidance"], "essentials_category": null, "has_intermediate_output": false}, "DualModelGuider": {"input": {"required": {"model": ["MODEL", {"tooltip": "Model used for the positive (conditional) pass."}], "positive": ["CONDITIONING", {}], "cfg": ["FLOAT", {"default": 4.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}]}, "optional": {"model_negative": ["MODEL", {"tooltip": "Model used for the negative (unconditional) pass. Use the same model for ordinary CFG."}], "negative": ["CONDITIONING", {"tooltip": "Negative conditioning run on the negative model. Leave unconnected for a text-free (image-only) unconditional pass."}]}}, "input_order": {"required": ["model", "positive", "cfg"], "optional": ["model_negative", "negative"]}, "is_input_list": false, "output": ["GUIDER"], "output_is_list": [false], "output_name": ["GUIDER"], "output_tooltips": [null], "output_matchtypes": null, "name": "DualModelGuider", "display_name": "Dual Model CFG Guider", "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/guiders", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BasicGuider": {"input": {"required": {"model": ["MODEL", {}], "conditioning": ["CONDITIONING", {}]}}, "input_order": {"required": ["model", "conditioning"]}, "is_input_list": false, "output": ["GUIDER"], "output_is_list": [false], "output_name": ["GUIDER"], "output_tooltips": [null], "output_matchtypes": null, "name": "BasicGuider", "display_name": "Basic Guider", "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/guiders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RandomNoise": {"input": {"required": {"noise_seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}}, "input_order": {"required": ["noise_seed"]}, "is_input_list": false, "output": ["NOISE"], "output_is_list": [false], "output_name": ["NOISE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RandomNoise", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/noise", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "DisableNoise": {"input": {"required": {}}, "input_order": {"required": []}, "is_input_list": false, "output": ["NOISE"], "output_is_list": [false], "output_name": ["NOISE"], "output_tooltips": [null], "output_matchtypes": null, "name": "DisableNoise", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/noise", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["zero noise"], "essentials_category": null, "has_intermediate_output": false}, "AddNoise": {"input": {"required": {"model": ["MODEL", {}], "noise": ["NOISE", {}], "sigmas": ["SIGMAS", {}], "latent_image": ["LATENT", {}]}}, "input_order": {"required": ["model", "noise", "sigmas", "latent_image"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "AddNoise", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "experimental/custom_sampling/noise", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerCustomAdvanced": {"input": {"required": {"noise": ["NOISE", {}], "guider": ["GUIDER", {}], "sampler": ["SAMPLER", {}], "sigmas": ["SIGMAS", {}], "latent_image": ["LATENT", {}]}}, "input_order": {"required": ["noise", "guider", "sampler", "sigmas", "latent_image"]}, "is_input_list": false, "output": ["LATENT", "LATENT"], "output_is_list": [false, false], "output_name": ["output", "denoised_output"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SamplerCustomAdvanced", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "model/sampling/custom", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ManualSigmas": {"input": {"required": {"sigmas": ["STRING", {"default": "1, 0.5", "multiline": false}]}}, "input_order": {"required": ["sigmas"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "ManualSigmas", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_custom_sampler", "category": "experimental/custom_sampling", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["custom noise schedule", "define sigmas"], "essentials_category": null, "has_intermediate_output": false}, "HyperTile": {"input": {"required": {"model": ["MODEL", {}], "tile_size": ["INT", {"advanced": true, "default": 256, "min": 1, "max": 2048}], "swap_size": ["INT", {"advanced": true, "default": 2, "min": 1, "max": 128}], "max_depth": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 10}], "scale_depth": ["BOOLEAN", {"advanced": true, "default": false}]}}, "input_order": {"required": ["model", "tile_size", "swap_size", "max_depth", "scale_depth"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "HyperTile", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hypertile", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ModelSamplingDiscrete": {"input": {"required": {"model": ["MODEL"], "sampling": [["eps", "v_prediction", "lcm", "x0", "img_to_img", "img_to_img_flow"]], "zsnr": ["BOOLEAN", {"default": false, "advanced": true}]}}, "input_order": {"required": ["model", "sampling", "zsnr"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingDiscrete", "display_name": "ModelSamplingDiscrete", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingContinuousEDM": {"input": {"required": {"model": ["MODEL"], "sampling": [["v_prediction", "edm", "edm_playground_v2.5", "eps", "cosmos_rflow"]], "sigma_max": ["FLOAT", {"default": 120.0, "min": 0.0, "max": 1000.0, "step": 0.001, "round": false, "advanced": true}], "sigma_min": ["FLOAT", {"default": 0.002, "min": 0.0, "max": 1000.0, "step": 0.001, "round": false, "advanced": true}]}}, "input_order": {"required": ["model", "sampling", "sigma_max", "sigma_min"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingContinuousEDM", "display_name": "ModelSamplingContinuousEDM", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingContinuousV": {"input": {"required": {"model": ["MODEL"], "sampling": [["v_prediction"]], "sigma_max": ["FLOAT", {"default": 500.0, "min": 0.0, "max": 1000.0, "step": 0.001, "round": false, "advanced": true}], "sigma_min": ["FLOAT", {"default": 0.03, "min": 0.0, "max": 1000.0, "step": 0.001, "round": false, "advanced": true}]}}, "input_order": {"required": ["model", "sampling", "sigma_max", "sigma_min"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingContinuousV", "display_name": "ModelSamplingContinuousV", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingStableCascade": {"input": {"required": {"model": ["MODEL"], "shift": ["FLOAT", {"default": 2.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "shift"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingStableCascade", "display_name": "ModelSamplingStableCascade", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch/stable cascade", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingSD3": {"input": {"required": {"model": ["MODEL"], "shift": ["FLOAT", {"default": 3.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "shift"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingSD3", "display_name": "ModelSamplingSD3", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch/stable diffusion", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingAuraFlow": {"input": {"required": {"model": ["MODEL"], "shift": ["FLOAT", {"default": 1.73, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "shift"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingAuraFlow", "display_name": "ModelSamplingAuraFlow", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelSamplingFlux": {"input": {"required": {"model": ["MODEL"], "max_shift": ["FLOAT", {"default": 1.15, "min": 0.0, "max": 100.0, "step": 0.01, "advanced": true}], "base_shift": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 100.0, "step": 0.01, "advanced": true}], "width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 8}]}}, "input_order": {"required": ["model", "max_shift", "base_shift", "width", "height"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelSamplingFlux", "display_name": "ModelSamplingFlux", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch/flux", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelNoiseScale": {"input": {"required": {"model": ["MODEL"], "noise_scale": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 64.0, "step": 0.01, "tooltip": "Absolute training noise scale. For example HiDream-O1 base: 8.0, dev: 7.5."}]}}, "input_order": {"required": ["model", "noise_scale"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelNoiseScale", "display_name": "ModelNoiseScale", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "RescaleCFG": {"input": {"required": {"model": ["MODEL"], "multiplier": ["FLOAT", {"default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "multiplier"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "RescaleCFG", "display_name": "RescaleCFG", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "model/patch", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelComputeDtype": {"input": {"required": {"model": ["MODEL"], "dtype": [["default", "fp32", "fp16", "bf16"], {"advanced": true}]}}, "input_order": {"required": ["model", "dtype"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelComputeDtype", "display_name": "ModelComputeDtype", "description": "", "python_module": "comfy_extras.nodes_model_advanced", "category": "advanced/debug", "output_node": false, "has_intermediate_output": false, "search_aliases": ["model precision", "change dtype"]}, "PatchModelAddDownscale": {"input": {"required": {"model": ["MODEL", {}], "block_number": ["INT", {"advanced": true, "default": 3, "min": 1, "max": 32, "step": 1}], "downscale_factor": ["FLOAT", {"default": 2.0, "min": 0.1, "max": 9.0, "step": 0.001}], "start_percent": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"advanced": true, "default": 0.35, "min": 0.0, "max": 1.0, "step": 0.001}], "downscale_after_skip": ["BOOLEAN", {"advanced": true, "default": true}], "downscale_method": ["COMBO", {"multiselect": false, "options": ["bicubic", "nearest-exact", "bilinear", "area", "bislerp"]}], "upscale_method": ["COMBO", {"multiselect": false, "options": ["bicubic", "nearest-exact", "bilinear", "area", "bislerp"]}]}}, "input_order": {"required": ["model", "block_number", "downscale_factor", "start_percent", "end_percent", "downscale_after_skip", "downscale_method", "upscale_method"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "PatchModelAddDownscale", "display_name": "PatchModelAddDownscale (Kohya Deep Shrink)", "description": "", "python_module": "comfy_extras.nodes_model_downscale", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageCrop": {"input": {"required": {"image": ["IMAGE", {}], "width": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "height": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "x": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "y": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}]}}, "input_order": {"required": ["image", "width", "height", "x", "y"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageCrop", "display_name": "Crop Image (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["trim"], "essentials_category": "Image Tools", "has_intermediate_output": false}, "ImageCropV2": {"input": {"required": {"image": ["IMAGE", {}], "crop_region": ["BOUNDING_BOX", {"default": {"x": 0, "y": 0, "width": 512, "height": 512}, "socketless": true, "component": "ImageCrop"}]}}, "input_order": {"required": ["image", "crop_region"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageCropV2", "display_name": "Crop Image", "description": "Crop an image to the specified dimensions.", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["crop", "cut", "trim"], "essentials_category": "Image Tools", "has_intermediate_output": true}, "PrimitiveBoundingBox": {"input": {"required": {"x": ["INT", {"default": 0, "min": 0, "max": 16384}], "y": ["INT", {"default": 0, "min": 0, "max": 16384}], "width": ["INT", {"default": 512, "min": 1, "max": 16384}], "height": ["INT", {"default": 512, "min": 1, "max": 16384}]}}, "input_order": {"required": ["x", "y", "width", "height"]}, "is_input_list": false, "output": ["BOUNDING_BOX"], "output_is_list": [false], "output_name": ["BOUNDING_BOX"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveBoundingBox", "display_name": "Bounding Box", "description": "", "python_module": "comfy_extras.nodes_images", "category": "utilities/primitive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RepeatImageBatch": {"input": {"required": {"image": ["IMAGE", {}], "amount": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["image", "amount"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RepeatImageBatch", "display_name": "Repeat Image Batch", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["duplicate image", "clone image"], "essentials_category": null, "has_intermediate_output": false}, "ImageFromBatch": {"input": {"required": {"image": ["IMAGE", {}], "batch_index": ["INT", {"default": 0, "min": -16384, "max": 16384}], "length": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["image", "batch_index", "length"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageFromBatch", "display_name": "Get Image from Batch", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["select image", "pick from batch", "extract image"], "essentials_category": null, "has_intermediate_output": false}, "ImageAddNoise": {"input": {"required": {"image": ["IMAGE", {}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "strength": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["image", "seed", "strength"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageAddNoise", "display_name": "Add Noise to Image", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["film grain"], "essentials_category": null, "has_intermediate_output": false}, "SaveAnimatedWEBP": {"input": {"required": {"images": ["IMAGE", {}], "filename_prefix": ["STRING", {"default": "ComfyUI", "multiline": false}], "fps": ["FLOAT", {"default": 6.0, "min": 0.01, "max": 1000.0, "step": 0.01}], "lossless": ["BOOLEAN", {"default": true}], "quality": ["INT", {"default": 80, "min": 0, "max": 100}], "method": ["COMBO", {"multiselect": false, "options": ["default", "fastest", "slowest"]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "filename_prefix", "fps", "lossless", "quality", "method"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveAnimatedWEBP", "display_name": "Save Animated WEBP", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveAnimatedPNG": {"input": {"required": {"images": ["IMAGE", {}], "filename_prefix": ["STRING", {"default": "ComfyUI", "multiline": false}], "fps": ["FLOAT", {"default": 6.0, "min": 0.01, "max": 1000.0, "step": 0.01}], "compress_level": ["INT", {"advanced": true, "default": 4, "min": 0, "max": 9}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "filename_prefix", "fps", "compress_level"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveAnimatedPNG", "display_name": "Save Animated PNG", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveImageAdvanced": {"input": {"required": {"images": ["IMAGE", {"tooltip": "The images to save."}], "filename_prefix": ["STRING", {"tooltip": "The prefix for the file to save. May include formatting tokens such as %date:yyyy-MM-dd% or %Empty Latent Image.width%.", "default": "ComfyUI", "multiline": false}], "format": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The file format in which to save the image.", "options": [{"key": "png", "inputs": {"required": {"bit_depth": ["COMBO", {"advanced": true, "default": "8-bit", "multiselect": false, "options": ["8-bit", "16-bit"]}], "input_color_space": ["COMBO", {"advanced": true, "default": "sRGB", "multiselect": false, "options": ["sRGB"]}]}}}, {"key": "exr", "inputs": {"required": {"bit_depth": ["COMBO", {"advanced": true, "default": "32-bit float", "multiselect": false, "options": ["32-bit float"]}], "input_color_space": ["COMBO", {"tooltip": "Colorspace of the input tensor. The EXR is always written as scene-linear in the matching gamut.\nsRGB \u2014 input is sRGB-encoded Rec.709; the inverse sRGB EOTF is applied.\nHDR \u2014 input is HLG-encoded Rec.2020 (BT.2100); the inverse HLG OETF is applied to get scene-linear light.\nlinear \u2014 input is already scene-linear (Rec.709 primaries); written through unchanged. Use this for renderer/compositor output.", "advanced": true, "default": "sRGB", "multiselect": false, "options": ["sRGB", "HDR", "linear"]}]}}}]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "filename_prefix", "format"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveImageAdvanced", "display_name": "Save Image (Advanced)", "description": "Saves the input images to your ComfyUI output directory.", "python_module": "comfy_extras.nodes_images", "category": "image", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["save", "save image", "export image", "output image", "write image"], "essentials_category": "Basics", "has_intermediate_output": false}, "SaveSVGNode": {"input": {"required": {"svg": ["SVG", {}], "filename_prefix": ["STRING", {"tooltip": "The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes.", "default": "svg/ComfyUI", "multiline": false}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["svg", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["SVG"], "output_is_list": [false], "output_name": ["svg"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveSVGNode", "display_name": "Save SVG", "description": "Save SVG files on disk.", "python_module": "comfy_extras.nodes_images", "category": "image", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export vector", "save vector graphics"], "essentials_category": null, "has_intermediate_output": false}, "ImageStitch": {"input": {"required": {"image1": ["IMAGE", {}], "direction": ["COMBO", {"default": "right", "multiselect": false, "options": ["right", "down", "left", "up"]}], "match_image_size": ["BOOLEAN", {"default": true}], "spacing_width": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 1024, "step": 2}], "spacing_color": ["COMBO", {"advanced": true, "default": "white", "multiselect": false, "options": ["white", "black", "red", "green", "blue"]}]}, "optional": {"image2": ["IMAGE", {}]}}, "input_order": {"required": ["image1", "direction", "match_image_size", "spacing_width", "spacing_color"], "optional": ["image2"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageStitch", "display_name": "Stitch Images", "description": "Stitches image2 to image1 in the specified direction.\nIf image2 is not provided, returns image1 unchanged.\nOptional spacing can be added between images.", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["combine images", "join images", "concatenate images", "side by side"], "essentials_category": null, "has_intermediate_output": false}, "ResizeAndPadImage": {"input": {"required": {"image": ["IMAGE", {}], "target_width": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "target_height": ["INT", {"default": 512, "min": 1, "max": 16384, "step": 1}], "padding_color": ["COMBO", {"advanced": true, "multiselect": false, "options": ["white", "black"]}], "interpolation": ["COMBO", {"advanced": true, "multiselect": false, "options": ["area", "bicubic", "nearest-exact", "bilinear", "lanczos"]}]}}, "input_order": {"required": ["image", "target_width", "target_height", "padding_color", "interpolation"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ResizeAndPadImage", "display_name": "Resize And Pad Image", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["fit to size"], "essentials_category": null, "has_intermediate_output": false}, "GetImageSize": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image"], "hidden": ["unique_id"]}, "is_input_list": false, "output": ["INT", "INT", "INT"], "output_is_list": [false, false, false], "output_name": ["width", "height", "batch_size"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "GetImageSize", "display_name": "Get Image Size", "description": "Returns width and height of the image, and passes it through unchanged.", "python_module": "comfy_extras.nodes_images", "category": "image", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["dimensions", "resolution", "image info"], "essentials_category": null, "has_intermediate_output": false}, "ImageRotate": {"input": {"required": {"image": ["IMAGE", {}], "rotation": ["COMBO", {"multiselect": false, "options": ["none", "90 degrees", "180 degrees", "270 degrees"]}]}}, "input_order": {"required": ["image", "rotation"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageRotate", "display_name": "Rotate Image", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["turn", "flip orientation"], "essentials_category": "Image Tools", "has_intermediate_output": false}, "ImageFlip": {"input": {"required": {"image": ["IMAGE", {}], "flip_method": ["COMBO", {"multiselect": false, "options": ["x-axis: vertically", "y-axis: horizontally"]}]}}, "input_order": {"required": ["image", "flip_method"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageFlip", "display_name": "Flip Image", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["mirror", "reflect"], "essentials_category": null, "has_intermediate_output": false}, "ImageScaleToMaxDimension": {"input": {"required": {"image": ["IMAGE", {}], "upscale_method": ["COMBO", {"multiselect": false, "options": ["area", "lanczos", "bilinear", "nearest-exact", "bilinear", "bicubic"]}], "largest_size": ["INT", {"default": 512, "min": 0, "max": 16384, "step": 1}]}}, "input_order": {"required": ["image", "upscale_method", "largest_size"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageScaleToMaxDimension", "display_name": "Scale Image to Max Dimension", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/upscaling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SplitImageToTileList": {"input": {"required": {"image": ["IMAGE", {}], "tile_width": ["INT", {"default": 1024, "min": 64, "max": 16384}], "tile_height": ["INT", {"default": 1024, "min": 64, "max": 16384}], "overlap": ["INT", {"default": 128, "min": 0, "max": 4096}]}}, "input_order": {"required": ["image", "tile_width", "tile_height", "overlap"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "SplitImageToTileList", "display_name": "Split Image into List of Tiles", "description": "Splits an image into a batched list of tiles with a specified overlap.", "python_module": "comfy_extras.nodes_images", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["split image", "tile image", "slice image"], "essentials_category": null, "has_intermediate_output": false}, "ImageMergeTileList": {"input": {"required": {"image_list": ["IMAGE", {}], "final_width": ["INT", {"default": 1024, "min": 64, "max": 32768}], "final_height": ["INT", {"default": 1024, "min": 64, "max": 32768}], "overlap": ["INT", {"default": 128, "min": 0, "max": 4096}]}}, "input_order": {"required": ["image_list", "final_width", "final_height", "overlap"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageMergeTileList", "display_name": "Merge List of Tiles to Image", "description": "", "python_module": "comfy_extras.nodes_images", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["split image", "tile image", "slice image"], "essentials_category": null, "has_intermediate_output": false}, "ImageOnlyCheckpointLoader": {"input": {"required": {"ckpt_name": [[]]}}, "input_order": {"required": ["ckpt_name"]}, "is_input_list": false, "output": ["MODEL", "CLIP_VISION", "VAE"], "output_is_list": [false, false, false], "output_name": ["MODEL", "CLIP_VISION", "VAE"], "name": "ImageOnlyCheckpointLoader", "display_name": "Load Checkpoint Image Only (img2vid model)", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "SVD_img2vid_Conditioning": {"input": {"required": {"clip_vision": ["CLIP_VISION"], "init_image": ["IMAGE"], "vae": ["VAE"], "width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 576, "min": 16, "max": 16384, "step": 8}], "video_frames": ["INT", {"default": 14, "min": 1, "max": 4096}], "motion_bucket_id": ["INT", {"default": 127, "min": 1, "max": 1023, "advanced": true}], "fps": ["INT", {"default": 6, "min": 1, "max": 1024}], "augmentation_level": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 10.0, "step": 0.01, "advanced": true}]}}, "input_order": {"required": ["clip_vision", "init_image", "vae", "width", "height", "video_frames", "motion_bucket_id", "fps", "augmentation_level"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "name": "SVD_img2vid_Conditioning", "display_name": "SVD_img2vid_Conditioning", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "model/conditioning/stable video", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VideoLinearCFGGuidance": {"input": {"required": {"model": ["MODEL"], "min_cfg": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.5, "round": 0.01, "advanced": true}]}}, "input_order": {"required": ["model", "min_cfg"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "VideoLinearCFGGuidance", "display_name": "Video Linear CFG Guidance", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "model/sampling/guiders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "VideoTriangleCFGGuidance": {"input": {"required": {"model": ["MODEL"], "min_cfg": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.5, "round": 0.01, "advanced": true}]}}, "input_order": {"required": ["model", "min_cfg"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "VideoTriangleCFGGuidance", "display_name": "Video Triangle CFG Guidance", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "model/sampling/guiders", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ImageOnlyCheckpointSave": {"input": {"required": {"model": ["MODEL"], "clip_vision": ["CLIP_VISION"], "vae": ["VAE"], "filename_prefix": ["STRING", {"default": "checkpoints/ComfyUI"}]}, "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}}, "input_order": {"required": ["model", "clip_vision", "vae", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "ImageOnlyCheckpointSave", "display_name": "ImageOnlyCheckpointSave", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "model/merging", "output_node": true, "has_intermediate_output": false, "search_aliases": ["save model", "export checkpoint", "merge save"]}, "ConditioningSetAreaPercentageVideo": {"input": {"required": {"conditioning": ["CONDITIONING"], "width": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}], "height": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}], "temporal": ["FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}], "x": ["FLOAT", {"default": 0, "min": 0, "max": 1.0, "step": 0.01}], "y": ["FLOAT", {"default": 0, "min": 0, "max": 1.0, "step": 0.01}], "z": ["FLOAT", {"default": 0, "min": 0, "max": 1.0, "step": 0.01}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["conditioning", "width", "height", "temporal", "x", "y", "z", "strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetAreaPercentageVideo", "display_name": "Conditioning (Set Area with Percentage for Video)", "description": "", "python_module": "comfy_extras.nodes_video_model", "category": "model/conditioning/transform", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "Ideogram4Scheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 200}], "width": ["INT", {"default": 1024, "min": 256, "max": 8192, "step": 16}], "height": ["INT", {"default": 1024, "min": 256, "max": 8192, "step": 16}], "mu": ["FLOAT", {"default": 0.0, "min": -10.0, "max": 10.0, "step": 0.05}], "std": ["FLOAT", {"default": 1.75, "min": 0.1, "max": 5.0, "step": 0.05}]}}, "input_order": {"required": ["steps", "width", "height", "mu", "std"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "Ideogram4Scheduler", "display_name": "Ideogram 4 Scheduler", "description": "", "python_module": "comfy_extras.nodes_ideogram4", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TrainLoraNode": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to train the LoRA on."}], "latents": ["LATENT", {"tooltip": "The Latents to use for training, serve as dataset/input of the model."}], "positive": ["CONDITIONING", {"tooltip": "The positive conditioning to use for training."}], "batch_size": ["INT", {"tooltip": "The batch size to use for training.", "default": 1, "min": 1, "max": 10000}], "grad_accumulation_steps": ["INT", {"tooltip": "The number of gradient accumulation steps to use for training.", "default": 1, "min": 1, "max": 1024}], "steps": ["INT", {"tooltip": "The number of steps to train the LoRA for.", "default": 16, "min": 1, "max": 100000}], "learning_rate": ["FLOAT", {"tooltip": "The learning rate to use for training.", "default": 0.0005, "min": 1e-07, "max": 1.0, "step": 1e-07}], "rank": ["INT", {"tooltip": "The rank of the LoRA layers.", "default": 8, "min": 1, "max": 128}], "optimizer": ["COMBO", {"tooltip": "The optimizer to use for training.", "default": "AdamW", "multiselect": false, "options": ["AdamW", "Adam", "SGD", "RMSprop"]}], "loss_function": ["COMBO", {"tooltip": "The loss function to use for training.", "default": "MSE", "multiselect": false, "options": ["MSE", "L1", "Huber", "SmoothL1"]}], "seed": ["INT", {"tooltip": "The seed to use for training (used in generator for LoRA weight initialization and noise sampling)", "default": 0, "min": 0, "max": 18446744073709551615}], "training_dtype": ["COMBO", {"tooltip": "The dtype to use for training. 'none' preserves the model's native compute dtype instead of overriding it. For fp16 models, GradScaler is automatically enabled.", "default": "bf16", "multiselect": false, "options": ["bf16", "fp32", "none"]}], "lora_dtype": ["COMBO", {"tooltip": "The dtype to use for lora.", "default": "bf16", "multiselect": false, "options": ["bf16", "fp32"]}], "quantized_backward": ["BOOLEAN", {"tooltip": "When using training_dtype 'none' and training on quantized model, doing backward with quantized matmul when enabled.", "default": false}], "algorithm": ["COMBO", {"tooltip": "The algorithm to use for training.", "default": "LoRA", "multiselect": false, "options": ["LoRA", "LoHa", "LoKr", "OFT"]}], "gradient_checkpointing": ["BOOLEAN", {"tooltip": "Use gradient checkpointing for training.", "default": true}], "checkpoint_depth": ["INT", {"tooltip": "Depth level for gradient checkpointing.", "default": 1, "min": 1, "max": 5}], "offloading": ["BOOLEAN", {"tooltip": "Offload model weights to CPU during training to save GPU memory.", "default": false}], "existing_lora": ["COMBO", {"tooltip": "The existing LoRA to append to. Set to None for new LoRA.", "default": "[None]", "multiselect": false, "options": ["[None]"]}], "bucket_mode": ["BOOLEAN", {"tooltip": "Enable resolution bucket mode. When enabled, expects pre-bucketed latents from ResolutionBucket node.", "default": false}], "bypass_mode": ["BOOLEAN", {"tooltip": "Enable bypass mode for training. When enabled, adapters are applied via forward hooks instead of weight modification. Useful for quantized models where weights cannot be directly modified.", "default": false}]}}, "input_order": {"required": ["model", "latents", "positive", "batch_size", "grad_accumulation_steps", "steps", "learning_rate", "rank", "optimizer", "loss_function", "seed", "training_dtype", "lora_dtype", "quantized_backward", "algorithm", "gradient_checkpointing", "checkpoint_depth", "offloading", "existing_lora", "bucket_mode", "bypass_mode"]}, "is_input_list": true, "output": ["LORA_MODEL", "LOSS_MAP", "INT"], "output_is_list": [false, false, false], "output_name": ["lora", "loss_map", "steps"], "output_tooltips": ["LoRA weights", "Loss history", "Total training steps"], "output_matchtypes": null, "name": "TrainLoraNode", "display_name": "Train LoRA", "description": "", "python_module": "comfy_extras.nodes_train", "category": "model/training", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LoraModelLoader": {"input": {"required": {"model": ["MODEL", {"tooltip": "The diffusion model the LoRA will be applied to."}], "lora": ["LORA_MODEL", {"tooltip": "The LoRA model to apply to the diffusion model."}], "strength_model": ["FLOAT", {"tooltip": "How strongly to modify the diffusion model. This value can be negative.", "default": 1.0, "min": -100.0, "max": 100.0}], "bypass": ["BOOLEAN", {"tooltip": "When enabled, applies LoRA in bypass mode without modifying base model weights. Useful for training and when model weights are offloaded.", "default": false}]}}, "input_order": {"required": ["model", "lora", "strength_model", "bypass"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["model"], "output_tooltips": ["The modified diffusion model."], "output_matchtypes": null, "name": "LoraModelLoader", "display_name": "Load LoRA Model", "description": "", "python_module": "comfy_extras.nodes_train", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveLoRA": {"input": {"required": {"lora": ["LORA_MODEL", {"tooltip": "The LoRA model to save. Do not use the model with LoRA layers."}], "prefix": ["STRING", {"tooltip": "The prefix to use for the saved LoRA file.", "default": "loras/ComfyUI_trained_lora", "multiline": false}]}, "optional": {"steps": ["INT", {"tooltip": "Optional: The number of steps the LoRA has been trained for, used to name the saved file."}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["lora", "prefix"], "optional": ["steps"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveLoRA", "display_name": "Save LoRA Weights", "description": "", "python_module": "comfy_extras.nodes_train", "category": "model/merging", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export lora"], "essentials_category": null, "has_intermediate_output": false}, "LossGraphNode": {"input": {"required": {"loss": ["LOSS_MAP", {"tooltip": "Loss map from training node."}], "filename_prefix": ["STRING", {"tooltip": "Prefix for the saved loss graph image.", "default": "loss_graph", "multiline": false}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["loss", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "LossGraphNode", "display_name": "Plot Loss Graph", "description": "", "python_module": "comfy_extras.nodes_train", "category": "model/training", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["training chart", "training visualization", "plot loss"], "essentials_category": null, "has_intermediate_output": false}, "LoadImageDataSetFromFolder": {"input": {"required": {"folder": ["COMBO", {"tooltip": "The folder to load images from.", "multiselect": false, "options": ["3d"]}]}}, "input_order": {"required": ["folder"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["images"], "output_tooltips": ["List of loaded images"], "output_matchtypes": null, "name": "LoadImageDataSetFromFolder", "display_name": "Load Image (from Folder)", "description": "Load a dataset of images from a specified folder and return a list of images. Supported formats: PNG, JPG, JPEG, WEBP.", "python_module": "comfy_extras.nodes_dataset", "category": "image", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["load folder", "load from folder", "load dataset", "load images", "import dataset"], "essentials_category": null, "has_intermediate_output": false}, "LoadImageTextDataSetFromFolder": {"input": {"required": {"folder": ["COMBO", {"tooltip": "The folder to load images and text captions from.", "multiselect": false, "options": ["3d"]}]}}, "input_order": {"required": ["folder"]}, "is_input_list": false, "output": ["IMAGE", "STRING"], "output_is_list": [true, true], "output_name": ["images", "texts"], "output_tooltips": ["List of loaded images", "List of text captions"], "output_matchtypes": null, "name": "LoadImageTextDataSetFromFolder", "display_name": "Load Image-Text (from Folder)", "description": "Load a dataset of pairs of images and text captions from a specified folder and return them as a list. Supported formats: PNG, JPG, JPEG, WEBP.", "python_module": "comfy_extras.nodes_dataset", "category": "image", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["load folder", "load from folder", "load dataset", "load images", "import dataset"], "essentials_category": null, "has_intermediate_output": false}, "SaveImageDataSetToFolder": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to save."}], "folder_name": ["STRING", {"tooltip": "Name of the folder to save images to (inside output directory).", "default": "dataset", "multiline": false}], "filename_prefix": ["STRING", {"tooltip": "Prefix for saved image filenames.", "advanced": true, "default": "image", "multiline": false}], "mode": ["COMBO", {"tooltip": "Whether to overwrite existing files or increment filenames to avoid overwriting.", "default": "overwrite", "multiselect": false, "options": ["overwrite", "increment"]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "folder_name", "filename_prefix", "mode"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": true, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveImageDataSetToFolder", "display_name": "Save Image (to Folder) (DEPRECATED)", "description": "Save a dataset of images to a specified folder. Supported formats: PNG.", "python_module": "comfy_extras.nodes_dataset", "category": "image", "output_node": true, "deprecated": true, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["save folder", "save to folder", "save dataset", "save images", "export dataset"], "essentials_category": null, "has_intermediate_output": false}, "SaveImageTextDataSetToFolder": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to save."}], "folder_name": ["STRING", {"tooltip": "Name of the folder to save images to (inside output directory).", "default": "dataset", "multiline": false}], "filename_prefix": ["STRING", {"tooltip": "Prefix for saved image filenames.", "advanced": true, "default": "image", "multiline": false}], "mode": ["COMBO", {"tooltip": "Whether to overwrite existing files or increment filenames to avoid overwriting.", "default": "overwrite", "multiselect": false, "options": ["overwrite", "increment"]}]}, "optional": {"texts": ["STRING", {"tooltip": "List of text captions to save.", "forceInput": true, "multiline": false}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "folder_name", "filename_prefix", "mode"], "optional": ["texts"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": true, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveImageTextDataSetToFolder", "display_name": "Save Image-Text (to Folder)", "description": "Save a dataset of pairs of images and text captions to a specified folder. Images are saved as PNG files and captions are saved as TXT files with the same filename_prefix.", "python_module": "comfy_extras.nodes_dataset", "category": "image", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["save folder", "save to folder", "save dataset", "save images", "save text", "export dataset"], "essentials_category": null, "has_intermediate_output": false}, "ResizeImagesByShorterEdge": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "shorter_edge": ["INT", {"tooltip": "Target dimension for the shorter edge.", "default": 512, "min": 1, "max": 8192}]}}, "input_order": {"required": ["images", "shorter_edge"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "ResizeImagesByShorterEdge", "display_name": "Resize Images by Shorter Edge (DEPRECATED)", "description": "Resize images so that the shorter edge matches the specified dimension while preserving aspect ratio.", "python_module": "comfy_extras.nodes_dataset", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ResizeImagesByLongerEdge": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "longer_edge": ["INT", {"tooltip": "Target dimension for the longer edge.", "default": 1024, "min": 1, "max": 8192}]}}, "input_order": {"required": ["images", "longer_edge"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "ResizeImagesByLongerEdge", "display_name": "Resize Images by Longer Edge (DEPRECATED)", "description": "Resize images so that the longer edge matches the specified dimension while preserving aspect ratio.", "python_module": "comfy_extras.nodes_dataset", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CenterCropImages": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "width": ["INT", {"tooltip": "Crop width.", "default": 512, "min": 1, "max": 8192}], "height": ["INT", {"tooltip": "Crop height.", "default": 512, "min": 1, "max": 8192}]}}, "input_order": {"required": ["images", "width", "height"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "CenterCropImages", "display_name": "Crop Image (Center)", "description": "Center crop an image to the specified dimensions.", "python_module": "comfy_extras.nodes_dataset", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["crop", "cut", "trim"], "essentials_category": null, "has_intermediate_output": false}, "RandomCropImages": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "width": ["INT", {"tooltip": "Crop width.", "default": 512, "min": 1, "max": 8192}], "height": ["INT", {"tooltip": "Crop height.", "default": 512, "min": 1, "max": 8192}], "seed": ["INT", {"tooltip": "Random seed.", "default": 0, "min": 0, "max": 18446744073709551615}]}}, "input_order": {"required": ["images", "width", "height", "seed"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "RandomCropImages", "display_name": "Crop Image (Random)", "description": "Randomly crop an image to the specified dimensions.", "python_module": "comfy_extras.nodes_dataset", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["crop", "cut", "trim"], "essentials_category": null, "has_intermediate_output": false}, "NormalizeImages": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "mean": ["FLOAT", {"tooltip": "Mean value for normalization.", "advanced": true, "default": 0.5, "min": 0.0, "max": 1.0}], "std": ["FLOAT", {"tooltip": "Standard deviation for normalization.", "advanced": true, "default": 0.5, "min": 0.001, "max": 1.0}]}}, "input_order": {"required": ["images", "mean", "std"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "NormalizeImages", "display_name": "Normalize Image Colors", "description": "Normalize images using mean and standard deviation.", "python_module": "comfy_extras.nodes_dataset", "category": "image/color", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["normalize", "normalize colors"], "essentials_category": null, "has_intermediate_output": false}, "AdjustBrightness": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "factor": ["FLOAT", {"tooltip": "Brightness factor. 1.0 = no change, <1.0 = darker, >1.0 = brighter.", "default": 1.0, "min": 0.0, "max": 2.0}]}}, "input_order": {"required": ["images", "factor"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "AdjustBrightness", "display_name": "Adjust Brightness", "description": "Adjust the brightness of an image.", "python_module": "comfy_extras.nodes_dataset", "category": "image/adjustments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["brightness"], "essentials_category": null, "has_intermediate_output": false}, "AdjustContrast": {"input": {"required": {"images": ["IMAGE", {"tooltip": "Image to process."}], "factor": ["FLOAT", {"tooltip": "Contrast factor. 1.0 = no change, <1.0 = less contrast, >1.0 = more contrast.", "default": 1.0, "min": 0.0, "max": 2.0}]}}, "input_order": {"required": ["images", "factor"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "AdjustContrast", "display_name": "Adjust Contrast", "description": "Adjust the contrast of an image.", "python_module": "comfy_extras.nodes_dataset", "category": "image/adjustments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["contrast"], "essentials_category": null, "has_intermediate_output": false}, "ShuffleDataset": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to process."}], "seed": ["INT", {"tooltip": "Random seed.", "default": 0, "min": 0, "max": 18446744073709551615}]}}, "input_order": {"required": ["images", "seed"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "ShuffleDataset", "display_name": "Shuffle Images List", "description": "Randomly shuffle the order of images in a list.", "python_module": "comfy_extras.nodes_dataset", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["shuffle", "randomize", "mix"], "essentials_category": null, "has_intermediate_output": false}, "ShuffleImageTextDataset": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to shuffle."}], "texts": ["STRING", {"tooltip": "List of texts to shuffle.", "forceInput": true, "multiline": false}], "seed": ["INT", {"tooltip": "Random seed.", "default": 0, "min": 0, "max": 18446744073709551615}]}}, "input_order": {"required": ["images", "texts", "seed"]}, "is_input_list": true, "output": ["IMAGE", "STRING"], "output_is_list": [true, true], "output_name": ["images", "texts"], "output_tooltips": ["Shuffled images", "Shuffled texts"], "output_matchtypes": null, "name": "ShuffleImageTextDataset", "display_name": "Shuffle Pairs of Image-Text", "description": "Randomly shuffle the order of pairs of image-text in a list.", "python_module": "comfy_extras.nodes_dataset", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["shuffle", "randomize", "mix"], "essentials_category": null, "has_intermediate_output": false}, "TextToLowercase": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}]}}, "input_order": {"required": ["texts"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "TextToLowercase", "display_name": "Convert Text to Lowercase (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TextToUppercase": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}]}}, "input_order": {"required": ["texts"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "TextToUppercase", "display_name": "Convert Text to Uppercase (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TruncateText": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}], "max_length": ["INT", {"tooltip": "Maximum text length.", "default": 77, "min": 1, "max": 10000}]}}, "input_order": {"required": ["texts", "max_length"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "TruncateText", "display_name": "Truncate Text", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AddTextPrefix": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}], "prefix": ["STRING", {"tooltip": "Prefix to add.", "default": "", "multiline": false}]}}, "input_order": {"required": ["texts", "prefix"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "AddTextPrefix", "display_name": "Add Text Prefix (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AddTextSuffix": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}], "suffix": ["STRING", {"tooltip": "Suffix to add.", "default": "", "multiline": false}]}}, "input_order": {"required": ["texts", "suffix"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "AddTextSuffix", "display_name": "Add Text Suffix (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReplaceText": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}], "find": ["STRING", {"tooltip": "Text to find.", "default": "", "multiline": false}], "replace": ["STRING", {"tooltip": "Text to replace with.", "default": "", "multiline": false}]}}, "input_order": {"required": ["texts", "find", "replace"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "ReplaceText", "display_name": "Replace Text (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StripWhitespace": {"input": {"required": {"texts": ["STRING", {"tooltip": "Text to process.", "multiline": false}]}}, "input_order": {"required": ["texts"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "StripWhitespace", "display_name": "Strip Whitespace (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageDeduplication": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to process."}], "similarity_threshold": ["FLOAT", {"tooltip": "Similarity threshold (0-1). Higher means more similar. Images above this threshold are considered duplicates.", "advanced": true, "default": 0.95, "min": 0.0, "max": 1.0}]}}, "input_order": {"required": ["images", "similarity_threshold"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "ImageDeduplication", "display_name": "Deduplicate Images", "description": "Remove duplicate or very similar images from a list.", "python_module": "comfy_extras.nodes_dataset", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["deduplicate", "remove duplicates", "similarity filter"], "essentials_category": null, "has_intermediate_output": false}, "ImageGrid": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to process."}], "columns": ["INT", {"tooltip": "Number of columns in the grid.", "default": 4, "min": 1, "max": 20}], "cell_width": ["INT", {"tooltip": "Width of each cell in the grid.", "advanced": true, "default": 256, "min": 32, "max": 2048}], "cell_height": ["INT", {"tooltip": "Height of each cell in the grid.", "advanced": true, "default": 256, "min": 32, "max": 2048}], "padding": ["INT", {"tooltip": "Padding between images.", "advanced": true, "default": 4, "min": 0, "max": 50}]}}, "input_order": {"required": ["images", "columns", "cell_width", "cell_height", "padding"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "ImageGrid", "display_name": "Make Image Grid", "description": "Arrange multiple images into a grid layout.", "python_module": "comfy_extras.nodes_dataset", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["grid", "collage", "combine"], "essentials_category": null, "has_intermediate_output": false}, "MergeImageLists": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to process."}]}}, "input_order": {"required": ["images"]}, "is_input_list": true, "output": ["IMAGE"], "output_is_list": [true], "output_name": ["images"], "output_tooltips": ["Processed images"], "output_matchtypes": null, "name": "MergeImageLists", "display_name": "Merge Image Lists (DEPRECATED)", "description": "Concatenate multiple image lists into one.", "python_module": "comfy_extras.nodes_dataset", "category": "image/batch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["list", "merge list", "make list"], "essentials_category": null, "has_intermediate_output": false}, "MergeTextLists": {"input": {"required": {"texts": ["STRING", {"tooltip": "List of texts to process.", "multiline": false}]}}, "input_order": {"required": ["texts"]}, "is_input_list": true, "output": ["STRING"], "output_is_list": [null], "output_name": ["texts"], "output_tooltips": ["Processed texts"], "output_matchtypes": null, "name": "MergeTextLists", "display_name": "Merge Text Lists (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_dataset", "category": "text", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MakeTrainingDataset": {"input": {"required": {"images": ["IMAGE", {"tooltip": "List of images to encode."}], "vae": ["VAE", {"tooltip": "VAE model for encoding images to latents."}], "clip": ["CLIP", {"tooltip": "CLIP model for encoding text to conditioning."}]}, "optional": {"texts": ["STRING", {"tooltip": "List of text captions. Can be length n (matching images), 1 (repeated for all), or omitted (uses empty string).", "forceInput": true, "multiline": false}]}}, "input_order": {"required": ["images", "vae", "clip"], "optional": ["texts"]}, "is_input_list": true, "output": ["LATENT", "CONDITIONING"], "output_is_list": [true, true], "output_name": ["latents", "conditioning"], "output_tooltips": ["List of latent dicts", "List of conditioning lists"], "output_matchtypes": null, "name": "MakeTrainingDataset", "display_name": "Make Training Dataset", "description": "Encode images with VAE and texts with CLIP to create a training dataset of latents and conditionings.", "python_module": "comfy_extras.nodes_dataset", "category": "model/training", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["encode dataset"], "essentials_category": null, "has_intermediate_output": false}, "SaveTrainingDataset": {"input": {"required": {"latents": ["LATENT", {"tooltip": "List of latent dicts from MakeTrainingDataset."}], "conditioning": ["CONDITIONING", {"tooltip": "List of conditioning lists from MakeTrainingDataset."}], "folder_name": ["STRING", {"tooltip": "Name of folder to save dataset (inside output directory).", "default": "training_dataset", "multiline": false}], "shard_size": ["INT", {"tooltip": "Number of samples per shard file.", "advanced": true, "default": 1000, "min": 1, "max": 100000}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["latents", "conditioning", "folder_name", "shard_size"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": true, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveTrainingDataset", "display_name": "Save Training Dataset", "description": "Save encoded training dataset (latents + conditioning) to disk for efficient loading during training.", "python_module": "comfy_extras.nodes_dataset", "category": "model/training", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export dataset", "save dataset"], "essentials_category": null, "has_intermediate_output": false}, "LoadTrainingDataset": {"input": {"required": {"folder_name": ["STRING", {"tooltip": "Name of folder containing the saved dataset (inside output directory).", "default": "training_dataset", "multiline": false}]}}, "input_order": {"required": ["folder_name"]}, "is_input_list": false, "output": ["LATENT", "CONDITIONING"], "output_is_list": [true, true], "output_name": ["latents", "conditioning"], "output_tooltips": ["List of latent dicts", "List of conditioning lists"], "output_matchtypes": null, "name": "LoadTrainingDataset", "display_name": "Load Training Dataset", "description": "Load encoded training dataset (latents + conditioning) from disk for use in training.", "python_module": "comfy_extras.nodes_dataset", "category": "model/training", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["import dataset", "training data"], "essentials_category": null, "has_intermediate_output": false}, "ResolutionBucket": {"input": {"required": {"latents": ["LATENT", {"tooltip": "List of latent dicts to bucket by resolution."}], "conditioning": ["CONDITIONING", {"tooltip": "List of conditioning lists (must match latents length)."}]}}, "input_order": {"required": ["latents", "conditioning"]}, "is_input_list": true, "output": ["LATENT", "CONDITIONING"], "output_is_list": [true, true], "output_name": ["latents", "conditioning"], "output_tooltips": ["List of batched latent dicts, one per resolution bucket.", "List of condition lists, one per resolution bucket."], "output_matchtypes": null, "name": "ResolutionBucket", "display_name": "Resolution Bucket", "description": "Group latents and conditionings into buckets", "python_module": "comfy_extras.nodes_dataset", "category": "model/training", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["bucket by resolution", "group by resolution", "batch by resolution"], "essentials_category": null, "has_intermediate_output": false}, "SelfAttentionGuidance": {"input": {"required": {"model": ["MODEL", {}], "scale": ["FLOAT", {"default": 0.5, "min": -2.0, "max": 5.0, "step": 0.01}], "blur_sigma": ["FLOAT", {"advanced": true, "default": 2.0, "min": 0.0, "max": 10.0, "step": 0.1}]}}, "input_order": {"required": ["model", "scale", "blur_sigma"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SelfAttentionGuidance", "display_name": "Self-Attention Guidance", "description": "", "python_module": "comfy_extras.nodes_sag", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PerpNeg": {"input": {"required": {"model": ["MODEL", {}], "empty_conditioning": ["CONDITIONING", {}], "neg_scale": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "empty_conditioning", "neg_scale"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "PerpNeg", "display_name": "Perp-Neg (DEPRECATED by Perp-Neg Guider)", "description": "", "python_module": "comfy_extras.nodes_perpneg", "category": "experimental", "output_node": false, "deprecated": true, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PerpNegGuider": {"input": {"required": {"model": ["MODEL", {}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "empty_conditioning": ["CONDITIONING", {}], "cfg": ["FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step": 0.1, "round": 0.01}], "neg_scale": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "positive", "negative", "empty_conditioning", "cfg", "neg_scale"]}, "is_input_list": false, "output": ["GUIDER"], "output_is_list": [false], "output_name": ["GUIDER"], "output_tooltips": [null], "output_matchtypes": null, "name": "PerpNegGuider", "display_name": "Perp-Neg Guider", "description": "", "python_module": "comfy_extras.nodes_perpneg", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StableZero123_Conditioning": {"input": {"required": {"clip_vision": ["CLIP_VISION", {}], "init_image": ["IMAGE", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 256, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 256, "min": 16, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "elevation": ["FLOAT", {"default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}], "azimuth": ["FLOAT", {"default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}]}}, "input_order": {"required": ["clip_vision", "init_image", "vae", "width", "height", "batch_size", "elevation", "azimuth"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "StableZero123_Conditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable3d", "category": "model/conditioning/stable zero123", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StableZero123_Conditioning_Batched": {"input": {"required": {"clip_vision": ["CLIP_VISION", {}], "init_image": ["IMAGE", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 256, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 256, "min": 16, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "elevation": ["FLOAT", {"default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}], "azimuth": ["FLOAT", {"default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}], "elevation_batch_increment": ["FLOAT", {"advanced": true, "default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}], "azimuth_batch_increment": ["FLOAT", {"advanced": true, "default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": false}]}}, "input_order": {"required": ["clip_vision", "init_image", "vae", "width", "height", "batch_size", "elevation", "azimuth", "elevation_batch_increment", "azimuth_batch_increment"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "StableZero123_Conditioning_Batched", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable3d", "category": "model/conditioning/stable zero123", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SV3D_Conditioning": {"input": {"required": {"clip_vision": ["CLIP_VISION", {}], "init_image": ["IMAGE", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 576, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 576, "min": 16, "max": 16384, "step": 8}], "video_frames": ["INT", {"default": 21, "min": 1, "max": 4096}], "elevation": ["FLOAT", {"default": 0.0, "min": -90.0, "max": 90.0, "step": 0.1, "round": false}]}}, "input_order": {"required": ["clip_vision", "init_image", "vae", "width", "height", "video_frames", "elevation"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "SV3D_Conditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable3d", "category": "model/conditioning/stable video 3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SD_4XUpscale_Conditioning": {"input": {"required": {"images": ["IMAGE", {}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "scale_ratio": ["FLOAT", {"default": 4.0, "min": 0.0, "max": 10.0, "step": 0.01}], "noise_augmentation": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["images", "positive", "negative", "scale_ratio", "noise_augmentation"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "SD_4XUpscale_Conditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_sdupscale", "category": "model/conditioning/stable diffusion upscaler", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PhotoMakerLoader": {"input": {"required": {"photomaker_model_name": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["photomaker_model_name"]}, "is_input_list": false, "output": ["PHOTOMAKER"], "output_is_list": [false], "output_name": ["PHOTOMAKER"], "output_tooltips": [null], "output_matchtypes": null, "name": "PhotoMakerLoader", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_photomaker", "category": "experimental/photomaker", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PhotoMakerEncode": {"input": {"required": {"photomaker": ["PHOTOMAKER", {}], "image": ["IMAGE", {}], "clip": ["CLIP", {}], "text": ["STRING", {"default": "photograph of photomaker", "multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["photomaker", "image", "clip", "text"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "PhotoMakerEncode", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_photomaker", "category": "experimental/photomaker", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodePixArtAlpha": {"input": {"required": {"width": ["INT", {"default": 1024, "min": 0, "max": 16384}], "height": ["INT", {"default": 1024, "min": 0, "max": 16384}], "text": ["STRING", {"multiline": true, "dynamicPrompts": true}], "clip": ["CLIP", {}]}}, "input_order": {"required": ["width", "height", "text", "clip"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodePixArtAlpha", "display_name": "CLIP Text Encode (PixArt Alpha)", "description": "Encodes text and sets the resolution conditioning for PixArt Alpha. Does not apply to PixArt Sigma.", "python_module": "comfy_extras.nodes_pixart", "category": "model/conditioning/pixart", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["pixart prompt"], "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeControlnet": {"input": {"required": {"clip": ["CLIP", {}], "conditioning": ["CONDITIONING", {}], "text": ["STRING", {"multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["clip", "conditioning", "text"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeControlnet", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cond", "category": "experimental/conditioning", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "T5TokenizerOptions": {"input": {"required": {"clip": ["CLIP", {}], "min_padding": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 10000, "step": 1}], "min_length": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 10000, "step": 1}]}}, "input_order": {"required": ["clip", "min_padding", "min_length"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "T5TokenizerOptions", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cond", "category": "experimental/conditioning", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Morphology": {"input": {"required": {"image": ["IMAGE", {}], "operation": ["COMBO", {"multiselect": false, "options": ["erode", "dilate", "open", "close", "gradient", "bottom_hat", "top_hat"]}], "kernel_size": ["INT", {"default": 3, "min": 3, "max": 999, "step": 1}]}}, "input_order": {"required": ["image", "operation", "kernel_size"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Morphology", "display_name": "Apply Morphology", "description": "", "python_module": "comfy_extras.nodes_morphology", "category": "image/filters", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["erode", "dilate"], "essentials_category": null, "has_intermediate_output": false}, "ImageRGBToYUV": {"input": {"required": {"image": ["IMAGE", {}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE", "IMAGE", "IMAGE"], "output_is_list": [false, false, false], "output_name": ["Y", "U", "V"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "ImageRGBToYUV", "display_name": "Image RGB to YUV", "description": "", "python_module": "comfy_extras.nodes_morphology", "category": "image/color", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["color space conversion"], "essentials_category": null, "has_intermediate_output": false}, "ImageYUVToRGB": {"input": {"required": {"Y": ["IMAGE", {}], "U": ["IMAGE", {}], "V": ["IMAGE", {}]}}, "input_order": {"required": ["Y", "U", "V"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ImageYUVToRGB", "display_name": "Image YUV to RGB", "description": "", "python_module": "comfy_extras.nodes_morphology", "category": "image/color", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["color space conversion"], "essentials_category": null, "has_intermediate_output": false}, "StableCascade_EmptyLatentImage": {"input": {"required": {"width": ["INT", {"default": 1024, "min": 256, "max": 16384, "step": 8}], "height": ["INT", {"default": 1024, "min": 256, "max": 16384, "step": 8}], "compression": ["INT", {"advanced": true, "default": 42, "min": 4, "max": 128, "step": 1}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "compression", "batch_size"]}, "is_input_list": false, "output": ["LATENT", "LATENT"], "output_is_list": [false, false], "output_name": ["stage_c", "stage_b"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "StableCascade_EmptyLatentImage", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable_cascade", "category": "model/latent/stable cascade", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StableCascade_StageB_Conditioning": {"input": {"required": {"conditioning": ["CONDITIONING", {}], "stage_c": ["LATENT", {}]}}, "input_order": {"required": ["conditioning", "stage_c"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StableCascade_StageB_Conditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable_cascade", "category": "model/conditioning/stable cascade", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StableCascade_StageC_VAEEncode": {"input": {"required": {"image": ["IMAGE", {}], "vae": ["VAE", {}], "compression": ["INT", {"advanced": true, "default": 42, "min": 4, "max": 128, "step": 1}]}}, "input_order": {"required": ["image", "vae", "compression"]}, "is_input_list": false, "output": ["LATENT", "LATENT"], "output_is_list": [false, false], "output_name": ["stage_c", "stage_b"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "StableCascade_StageC_VAEEncode", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable_cascade", "category": "model/latent/stable cascade", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StableCascade_SuperResolutionControlnet": {"input": {"required": {"image": ["IMAGE", {}], "vae": ["VAE", {}]}}, "input_order": {"required": ["image", "vae"]}, "is_input_list": false, "output": ["IMAGE", "LATENT", "LATENT"], "output_is_list": [false, false, false], "output_name": ["controlnet_input", "stage_c", "stage_b"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "StableCascade_SuperResolutionControlnet", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_stable_cascade", "category": "experimental/stable_cascade", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "DifferentialDiffusion": {"input": {"required": {"model": ["MODEL", {}]}, "optional": {"strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model"], "optional": ["strength"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "DifferentialDiffusion", "display_name": "Differential Diffusion", "description": "", "python_module": "comfy_extras.nodes_differential_diffusion", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["inpaint gradient", "variable denoise strength"], "essentials_category": null, "has_intermediate_output": false}, "InstructPixToPixConditioning": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "pixels": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "pixels"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "InstructPixToPixConditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_ip2p", "category": "model/conditioning/instructpix2pix", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ModelMergeSD1": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "time_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "label_emb.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "out.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "time_embed.", "label_emb.", "input_blocks.0.", "input_blocks.1.", "input_blocks.2.", "input_blocks.3.", "input_blocks.4.", "input_blocks.5.", "input_blocks.6.", "input_blocks.7.", "input_blocks.8.", "input_blocks.9.", "input_blocks.10.", "input_blocks.11.", "middle_block.0.", "middle_block.1.", "middle_block.2.", "output_blocks.0.", "output_blocks.1.", "output_blocks.2.", "output_blocks.3.", "output_blocks.4.", "output_blocks.5.", "output_blocks.6.", "output_blocks.7.", "output_blocks.8.", "output_blocks.9.", "output_blocks.10.", "output_blocks.11.", "out."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSD1", "display_name": "ModelMergeSD1", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeSD2": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "time_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "label_emb.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "out.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "time_embed.", "label_emb.", "input_blocks.0.", "input_blocks.1.", "input_blocks.2.", "input_blocks.3.", "input_blocks.4.", "input_blocks.5.", "input_blocks.6.", "input_blocks.7.", "input_blocks.8.", "input_blocks.9.", "input_blocks.10.", "input_blocks.11.", "middle_block.0.", "middle_block.1.", "middle_block.2.", "output_blocks.0.", "output_blocks.1.", "output_blocks.2.", "output_blocks.3.", "output_blocks.4.", "output_blocks.5.", "output_blocks.6.", "output_blocks.7.", "output_blocks.8.", "output_blocks.9.", "output_blocks.10.", "output_blocks.11.", "out."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSD2", "display_name": "ModelMergeSD2", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeSDXL": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "time_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "label_emb.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.0": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.1": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.2": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.3": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.4": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.5": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.6": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.7": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "input_blocks.8": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.0": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.1": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "middle_block.2": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.0": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.1": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.2": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.3": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.4": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.5": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.6": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.7": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "output_blocks.8": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "out.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "time_embed.", "label_emb.", "input_blocks.0", "input_blocks.1", "input_blocks.2", "input_blocks.3", "input_blocks.4", "input_blocks.5", "input_blocks.6", "input_blocks.7", "input_blocks.8", "middle_block.0", "middle_block.1", "middle_block.2", "output_blocks.0", "output_blocks.1", "output_blocks.2", "output_blocks.3", "output_blocks.4", "output_blocks.5", "output_blocks.6", "output_blocks.7", "output_blocks.8", "out."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSDXL", "display_name": "ModelMergeSDXL", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeSD3_2B": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "context_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "y_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embed.", "x_embedder.", "context_embedder.", "y_embedder.", "t_embedder.", "joint_blocks.0.", "joint_blocks.1.", "joint_blocks.2.", "joint_blocks.3.", "joint_blocks.4.", "joint_blocks.5.", "joint_blocks.6.", "joint_blocks.7.", "joint_blocks.8.", "joint_blocks.9.", "joint_blocks.10.", "joint_blocks.11.", "joint_blocks.12.", "joint_blocks.13.", "joint_blocks.14.", "joint_blocks.15.", "joint_blocks.16.", "joint_blocks.17.", "joint_blocks.18.", "joint_blocks.19.", "joint_blocks.20.", "joint_blocks.21.", "joint_blocks.22.", "joint_blocks.23.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSD3_2B", "display_name": "ModelMergeSD3_2B", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeAuraflow": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "init_x_linear.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "positional_encoding": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "cond_seq_linear.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "register_tokens": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_layers.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_layers.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_layers.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_layers.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_layers.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "modF.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_linear.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "init_x_linear.", "positional_encoding", "cond_seq_linear.", "register_tokens", "t_embedder.", "double_layers.0.", "double_layers.1.", "double_layers.2.", "double_layers.3.", "single_layers.0.", "single_layers.1.", "single_layers.2.", "single_layers.3.", "single_layers.4.", "single_layers.5.", "single_layers.6.", "single_layers.7.", "single_layers.8.", "single_layers.9.", "single_layers.10.", "single_layers.11.", "single_layers.12.", "single_layers.13.", "single_layers.14.", "single_layers.15.", "single_layers.16.", "single_layers.17.", "single_layers.18.", "single_layers.19.", "single_layers.20.", "single_layers.21.", "single_layers.22.", "single_layers.23.", "single_layers.24.", "single_layers.25.", "single_layers.26.", "single_layers.27.", "single_layers.28.", "single_layers.29.", "single_layers.30.", "single_layers.31.", "modF.", "final_linear."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeAuraflow", "display_name": "ModelMergeAuraflow", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeFlux1": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "img_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "time_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "guidance_in": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "vector_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txt_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "double_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.36.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "single_blocks.37.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "img_in.", "time_in.", "guidance_in", "vector_in.", "txt_in.", "double_blocks.0.", "double_blocks.1.", "double_blocks.2.", "double_blocks.3.", "double_blocks.4.", "double_blocks.5.", "double_blocks.6.", "double_blocks.7.", "double_blocks.8.", "double_blocks.9.", "double_blocks.10.", "double_blocks.11.", "double_blocks.12.", "double_blocks.13.", "double_blocks.14.", "double_blocks.15.", "double_blocks.16.", "double_blocks.17.", "double_blocks.18.", "single_blocks.0.", "single_blocks.1.", "single_blocks.2.", "single_blocks.3.", "single_blocks.4.", "single_blocks.5.", "single_blocks.6.", "single_blocks.7.", "single_blocks.8.", "single_blocks.9.", "single_blocks.10.", "single_blocks.11.", "single_blocks.12.", "single_blocks.13.", "single_blocks.14.", "single_blocks.15.", "single_blocks.16.", "single_blocks.17.", "single_blocks.18.", "single_blocks.19.", "single_blocks.20.", "single_blocks.21.", "single_blocks.22.", "single_blocks.23.", "single_blocks.24.", "single_blocks.25.", "single_blocks.26.", "single_blocks.27.", "single_blocks.28.", "single_blocks.29.", "single_blocks.30.", "single_blocks.31.", "single_blocks.32.", "single_blocks.33.", "single_blocks.34.", "single_blocks.35.", "single_blocks.36.", "single_blocks.37.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeFlux1", "display_name": "ModelMergeFlux1", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeSD35_Large": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "context_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "y_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.36.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "joint_blocks.37.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embed.", "x_embedder.", "context_embedder.", "y_embedder.", "t_embedder.", "joint_blocks.0.", "joint_blocks.1.", "joint_blocks.2.", "joint_blocks.3.", "joint_blocks.4.", "joint_blocks.5.", "joint_blocks.6.", "joint_blocks.7.", "joint_blocks.8.", "joint_blocks.9.", "joint_blocks.10.", "joint_blocks.11.", "joint_blocks.12.", "joint_blocks.13.", "joint_blocks.14.", "joint_blocks.15.", "joint_blocks.16.", "joint_blocks.17.", "joint_blocks.18.", "joint_blocks.19.", "joint_blocks.20.", "joint_blocks.21.", "joint_blocks.22.", "joint_blocks.23.", "joint_blocks.24.", "joint_blocks.25.", "joint_blocks.26.", "joint_blocks.27.", "joint_blocks.28.", "joint_blocks.29.", "joint_blocks.30.", "joint_blocks.31.", "joint_blocks.32.", "joint_blocks.33.", "joint_blocks.34.", "joint_blocks.35.", "joint_blocks.36.", "joint_blocks.37.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeSD35_Large", "display_name": "ModelMergeSD35_Large", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeMochiPreview": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_frequencies.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t5_y_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t5_yproj.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.36.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.37.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.38.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.39.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.40.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.41.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.42.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.43.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.44.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.45.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.46.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.47.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_frequencies.", "t_embedder.", "t5_y_embedder.", "t5_yproj.", "blocks.0.", "blocks.1.", "blocks.2.", "blocks.3.", "blocks.4.", "blocks.5.", "blocks.6.", "blocks.7.", "blocks.8.", "blocks.9.", "blocks.10.", "blocks.11.", "blocks.12.", "blocks.13.", "blocks.14.", "blocks.15.", "blocks.16.", "blocks.17.", "blocks.18.", "blocks.19.", "blocks.20.", "blocks.21.", "blocks.22.", "blocks.23.", "blocks.24.", "blocks.25.", "blocks.26.", "blocks.27.", "blocks.28.", "blocks.29.", "blocks.30.", "blocks.31.", "blocks.32.", "blocks.33.", "blocks.34.", "blocks.35.", "blocks.36.", "blocks.37.", "blocks.38.", "blocks.39.", "blocks.40.", "blocks.41.", "blocks.42.", "blocks.43.", "blocks.44.", "blocks.45.", "blocks.46.", "blocks.47.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeMochiPreview", "display_name": "ModelMergeMochiPreview", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeLTXV": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "patchify_proj.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "adaln_single.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "caption_projection.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "scale_shift_table": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "proj_out.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "patchify_proj.", "adaln_single.", "caption_projection.", "transformer_blocks.0.", "transformer_blocks.1.", "transformer_blocks.2.", "transformer_blocks.3.", "transformer_blocks.4.", "transformer_blocks.5.", "transformer_blocks.6.", "transformer_blocks.7.", "transformer_blocks.8.", "transformer_blocks.9.", "transformer_blocks.10.", "transformer_blocks.11.", "transformer_blocks.12.", "transformer_blocks.13.", "transformer_blocks.14.", "transformer_blocks.15.", "transformer_blocks.16.", "transformer_blocks.17.", "transformer_blocks.18.", "transformer_blocks.19.", "transformer_blocks.20.", "transformer_blocks.21.", "transformer_blocks.22.", "transformer_blocks.23.", "transformer_blocks.24.", "transformer_blocks.25.", "transformer_blocks.26.", "transformer_blocks.27.", "scale_shift_table", "proj_out."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeLTXV", "display_name": "ModelMergeLTXV", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeCosmos7B": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "extra_pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "affline_norm.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embedder.", "extra_pos_embedder.", "x_embedder.", "t_embedder.", "affline_norm.", "blocks.block0.", "blocks.block1.", "blocks.block2.", "blocks.block3.", "blocks.block4.", "blocks.block5.", "blocks.block6.", "blocks.block7.", "blocks.block8.", "blocks.block9.", "blocks.block10.", "blocks.block11.", "blocks.block12.", "blocks.block13.", "blocks.block14.", "blocks.block15.", "blocks.block16.", "blocks.block17.", "blocks.block18.", "blocks.block19.", "blocks.block20.", "blocks.block21.", "blocks.block22.", "blocks.block23.", "blocks.block24.", "blocks.block25.", "blocks.block26.", "blocks.block27.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeCosmos7B", "display_name": "ModelMergeCosmos7B", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeCosmos14B": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "extra_pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "affline_norm.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.block35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embedder.", "extra_pos_embedder.", "x_embedder.", "t_embedder.", "affline_norm.", "blocks.block0.", "blocks.block1.", "blocks.block2.", "blocks.block3.", "blocks.block4.", "blocks.block5.", "blocks.block6.", "blocks.block7.", "blocks.block8.", "blocks.block9.", "blocks.block10.", "blocks.block11.", "blocks.block12.", "blocks.block13.", "blocks.block14.", "blocks.block15.", "blocks.block16.", "blocks.block17.", "blocks.block18.", "blocks.block19.", "blocks.block20.", "blocks.block21.", "blocks.block22.", "blocks.block23.", "blocks.block24.", "blocks.block25.", "blocks.block26.", "blocks.block27.", "blocks.block28.", "blocks.block29.", "blocks.block30.", "blocks.block31.", "blocks.block32.", "blocks.block33.", "blocks.block34.", "blocks.block35.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeCosmos14B", "display_name": "ModelMergeCosmos14B", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeWAN2_1": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "patch_embedding.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "time_embedding.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "time_projection.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "text_embedding.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "img_emb.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.36.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.37.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.38.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.39.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "head.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "patch_embedding.", "time_embedding.", "time_projection.", "text_embedding.", "img_emb.", "blocks.0.", "blocks.1.", "blocks.2.", "blocks.3.", "blocks.4.", "blocks.5.", "blocks.6.", "blocks.7.", "blocks.8.", "blocks.9.", "blocks.10.", "blocks.11.", "blocks.12.", "blocks.13.", "blocks.14.", "blocks.15.", "blocks.16.", "blocks.17.", "blocks.18.", "blocks.19.", "blocks.20.", "blocks.21.", "blocks.22.", "blocks.23.", "blocks.24.", "blocks.25.", "blocks.26.", "blocks.27.", "blocks.28.", "blocks.29.", "blocks.30.", "blocks.31.", "blocks.32.", "blocks.33.", "blocks.34.", "blocks.35.", "blocks.36.", "blocks.37.", "blocks.38.", "blocks.39.", "head."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeWAN2_1", "display_name": "ModelMergeWAN2_1", "description": "1.3B model has 30 blocks, 14B model has 40 blocks. Image to video model has the extra img_emb.", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeCosmosPredict2_2B": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedding_norm.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embedder.", "x_embedder.", "t_embedder.", "t_embedding_norm.", "blocks.0.", "blocks.1.", "blocks.2.", "blocks.3.", "blocks.4.", "blocks.5.", "blocks.6.", "blocks.7.", "blocks.8.", "blocks.9.", "blocks.10.", "blocks.11.", "blocks.12.", "blocks.13.", "blocks.14.", "blocks.15.", "blocks.16.", "blocks.17.", "blocks.18.", "blocks.19.", "blocks.20.", "blocks.21.", "blocks.22.", "blocks.23.", "blocks.24.", "blocks.25.", "blocks.26.", "blocks.27.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeCosmosPredict2_2B", "display_name": "ModelMergeCosmosPredict2_2B", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeCosmosPredict2_14B": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "x_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedder.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "t_embedding_norm.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "final_layer.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embedder.", "x_embedder.", "t_embedder.", "t_embedding_norm.", "blocks.0.", "blocks.1.", "blocks.2.", "blocks.3.", "blocks.4.", "blocks.5.", "blocks.6.", "blocks.7.", "blocks.8.", "blocks.9.", "blocks.10.", "blocks.11.", "blocks.12.", "blocks.13.", "blocks.14.", "blocks.15.", "blocks.16.", "blocks.17.", "blocks.18.", "blocks.19.", "blocks.20.", "blocks.21.", "blocks.22.", "blocks.23.", "blocks.24.", "blocks.25.", "blocks.26.", "blocks.27.", "blocks.28.", "blocks.29.", "blocks.30.", "blocks.31.", "blocks.32.", "blocks.33.", "blocks.34.", "blocks.35.", "final_layer."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeCosmosPredict2_14B", "display_name": "ModelMergeCosmosPredict2_14B", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeQwenImage": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "pos_embeds.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "img_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txt_norm.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txt_in.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "time_text_embed.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.28.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.29.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.30.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.31.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.32.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.33.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.34.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.35.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.36.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.37.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.38.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.39.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.40.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.41.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.42.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.43.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.44.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.45.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.46.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.47.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.48.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.49.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.50.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.51.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.52.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.53.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.54.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.55.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.56.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.57.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.58.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "transformer_blocks.59.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "proj_out.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "pos_embeds.", "img_in.", "txt_norm.", "txt_in.", "time_text_embed.", "transformer_blocks.0.", "transformer_blocks.1.", "transformer_blocks.2.", "transformer_blocks.3.", "transformer_blocks.4.", "transformer_blocks.5.", "transformer_blocks.6.", "transformer_blocks.7.", "transformer_blocks.8.", "transformer_blocks.9.", "transformer_blocks.10.", "transformer_blocks.11.", "transformer_blocks.12.", "transformer_blocks.13.", "transformer_blocks.14.", "transformer_blocks.15.", "transformer_blocks.16.", "transformer_blocks.17.", "transformer_blocks.18.", "transformer_blocks.19.", "transformer_blocks.20.", "transformer_blocks.21.", "transformer_blocks.22.", "transformer_blocks.23.", "transformer_blocks.24.", "transformer_blocks.25.", "transformer_blocks.26.", "transformer_blocks.27.", "transformer_blocks.28.", "transformer_blocks.29.", "transformer_blocks.30.", "transformer_blocks.31.", "transformer_blocks.32.", "transformer_blocks.33.", "transformer_blocks.34.", "transformer_blocks.35.", "transformer_blocks.36.", "transformer_blocks.37.", "transformer_blocks.38.", "transformer_blocks.39.", "transformer_blocks.40.", "transformer_blocks.41.", "transformer_blocks.42.", "transformer_blocks.43.", "transformer_blocks.44.", "transformer_blocks.45.", "transformer_blocks.46.", "transformer_blocks.47.", "transformer_blocks.48.", "transformer_blocks.49.", "transformer_blocks.50.", "transformer_blocks.51.", "transformer_blocks.52.", "transformer_blocks.53.", "transformer_blocks.54.", "transformer_blocks.55.", "transformer_blocks.56.", "transformer_blocks.57.", "transformer_blocks.58.", "transformer_blocks.59.", "proj_out."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeQwenImage", "display_name": "ModelMergeQwenImage", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "ModelMergeKrea2": {"input": {"required": {"model1": ["MODEL"], "model2": ["MODEL"], "first.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "tmlp.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txtmlp.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "tproj.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txtfusion.layerwise_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txtfusion.layerwise_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txtfusion.projector.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txtfusion.refiner_blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "txtfusion.refiner_blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.0.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.1.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.2.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.3.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.4.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.5.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.6.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.7.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.8.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.9.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.10.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.11.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.12.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.13.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.14.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.15.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.16.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.17.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.18.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.19.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.20.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.21.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.22.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.23.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.24.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.25.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.26.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "blocks.27.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "last.": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model1", "model2", "first.", "tmlp.", "txtmlp.", "tproj.", "txtfusion.layerwise_blocks.0.", "txtfusion.layerwise_blocks.1.", "txtfusion.projector.", "txtfusion.refiner_blocks.0.", "txtfusion.refiner_blocks.1.", "blocks.0.", "blocks.1.", "blocks.2.", "blocks.3.", "blocks.4.", "blocks.5.", "blocks.6.", "blocks.7.", "blocks.8.", "blocks.9.", "blocks.10.", "blocks.11.", "blocks.12.", "blocks.13.", "blocks.14.", "blocks.15.", "blocks.16.", "blocks.17.", "blocks.18.", "blocks.19.", "blocks.20.", "blocks.21.", "blocks.22.", "blocks.23.", "blocks.24.", "blocks.25.", "blocks.26.", "blocks.27.", "last."]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ModelMergeKrea2", "display_name": "ModelMergeKrea2", "description": "", "python_module": "comfy_extras.nodes_model_merging_model_specific", "category": "model/merging/model specific", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "PerturbedAttentionGuidance": {"input": {"required": {"model": ["MODEL", {}], "scale": ["FLOAT", {"default": 3.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": 0.01}]}}, "input_order": {"required": ["model", "scale"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "PerturbedAttentionGuidance", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_pag", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AlignYourStepsScheduler": {"input": {"required": {"model_type": ["COMBO", {"multiselect": false, "options": ["SD1", "SDXL", "SVD"]}], "steps": ["INT", {"default": 10, "min": 1, "max": 10000}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model_type", "steps", "denoise"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "AlignYourStepsScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_align_your_steps", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["AYS scheduler"], "essentials_category": null, "has_intermediate_output": false}, "UNetSelfAttentionMultiply": {"input": {"required": {"model": ["MODEL", {}], "q": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "k": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "v": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "out": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "q", "k", "v", "out"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "UNetSelfAttentionMultiply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_attention_multiply", "category": "experimental/attention_experiments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "UNetCrossAttentionMultiply": {"input": {"required": {"model": ["MODEL", {}], "q": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "k": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "v": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "out": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "q", "k", "v", "out"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "UNetCrossAttentionMultiply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_attention_multiply", "category": "experimental/attention_experiments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPAttentionMultiply": {"input": {"required": {"clip": ["CLIP", {}], "q": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "k": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "v": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "out": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["clip", "q", "k", "v", "out"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPAttentionMultiply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_attention_multiply", "category": "experimental/attention_experiments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["clip attention scale", "text encoder attention"], "essentials_category": null, "has_intermediate_output": false}, "UNetTemporalAttentionMultiply": {"input": {"required": {"model": ["MODEL", {}], "self_structural": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "self_temporal": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "cross_structural": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "cross_temporal": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "self_structural", "self_temporal", "cross_structural", "cross_temporal"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "UNetTemporalAttentionMultiply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_attention_multiply", "category": "experimental/attention_experiments", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerLCMUpscale": {"input": {"required": {"scale_ratio": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.1, "max": 20.0, "step": 0.01}], "scale_steps": ["INT", {"advanced": true, "default": -1, "min": -1, "max": 1000, "step": 1}], "upscale_method": ["COMBO", {"multiselect": false, "options": ["bislerp", "nearest-exact", "bilinear", "area", "bicubic"]}]}}, "input_order": {"required": ["scale_ratio", "scale_steps", "upscale_method"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerLCMUpscale", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_advanced_samplers", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerLCM": {"input": {"required": {"s_noise": ["FLOAT", {"tooltip": "Per-step noise multiplier at the first step (1.0 = match training).", "default": 1.0, "min": 0.0, "max": 64.0, "step": 0.01}], "s_noise_end": ["FLOAT", {"tooltip": "Per-step noise multiplier at the last step. Set equal to s_noise for a constant schedule.", "default": 1.0, "min": 0.0, "max": 64.0, "step": 0.01}], "noise_clip_std": ["FLOAT", {"tooltip": "Clamp per-step noise to +/- N*std. 0 disables.", "default": 0.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["s_noise", "s_noise_end", "noise_clip_std"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerLCM", "display_name": null, "description": "LCM sampler with tunable per-step noise. s_noise is a multiplier on the model's training noise scale", "python_module": "comfy_extras.nodes_advanced_samplers", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerEulerCFGpp": {"input": {"required": {"version": ["COMBO", {"advanced": true, "multiselect": false, "options": ["regular", "alternative"]}]}}, "input_order": {"required": ["version"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerEulerCFGpp", "display_name": "SamplerEulerCFG++", "description": "", "python_module": "comfy_extras.nodes_advanced_samplers", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WebcamCapture": {"input": {"required": {"image": ["WEBCAM", {}], "width": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "height": ["INT", {"default": 0, "min": 0, "max": 16384, "step": 1}], "capture_on_queue": ["BOOLEAN", {"default": true}]}}, "input_order": {"required": ["image", "width", "height", "capture_on_queue"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "name": "WebcamCapture", "display_name": "Webcam Capture", "description": "", "python_module": "comfy_extras.nodes_webcam", "category": "image", "output_node": false, "has_intermediate_output": false, "search_aliases": ["camera input", "live capture", "camera feed", "snapshot"], "essentials_category": "Basics"}, "EmptyLatentAudio": {"input": {"required": {"seconds": ["FLOAT", {"default": 47.6, "min": 1.0, "max": 1000.0, "step": 0.1}], "batch_size": ["INT", {"tooltip": "The number of latent images in the batch.", "default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["seconds", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyLatentAudio", "display_name": "Empty Latent Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "model/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": "Audio", "has_intermediate_output": false}, "VAEEncodeAudio": {"input": {"required": {"audio": ["AUDIO", {}], "vae": ["VAE", {}]}}, "input_order": {"required": ["audio", "vae"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "VAEEncodeAudio", "display_name": "VAE Encode Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "model/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["audio to latent"], "essentials_category": null, "has_intermediate_output": false}, "VAEDecodeAudio": {"input": {"required": {"samples": ["LATENT", {}], "vae": ["VAE", {}]}}, "input_order": {"required": ["samples", "vae"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "VAEDecodeAudio", "display_name": "VAE Decode Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "model/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["latent to audio"], "essentials_category": null, "has_intermediate_output": false}, "VAEDecodeAudioTiled": {"input": {"required": {"samples": ["LATENT", {}], "vae": ["VAE", {}], "tile_size": ["INT", {"default": 512, "min": 32, "max": 8192, "step": 8}], "overlap": ["INT", {"default": 64, "min": 0, "max": 1024, "step": 8}]}}, "input_order": {"required": ["samples", "vae", "tile_size", "overlap"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "VAEDecodeAudioTiled", "display_name": "VAE Decode Audio (Tiled)", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "model/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["latent to audio"], "essentials_category": null, "has_intermediate_output": false}, "SaveAudio": {"input": {"required": {"audio": ["AUDIO", {}], "filename_prefix": ["STRING", {"default": "audio/ComfyUI", "multiline": false}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["audio", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["audio"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveAudio", "display_name": "Save Audio (FLAC) (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": true, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export flac"], "essentials_category": "Audio", "has_intermediate_output": false}, "SaveAudioMP3": {"input": {"required": {"audio": ["AUDIO", {}], "filename_prefix": ["STRING", {"default": "audio/ComfyUI", "multiline": false}], "quality": ["COMBO", {"default": "V0", "multiselect": false, "options": ["V0", "128k", "320k"]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["audio", "filename_prefix", "quality"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["audio"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveAudioMP3", "display_name": "Save Audio (MP3) (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": true, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export mp3"], "essentials_category": "Audio", "has_intermediate_output": false}, "SaveAudioOpus": {"input": {"required": {"audio": ["AUDIO", {}], "filename_prefix": ["STRING", {"default": "audio/ComfyUI", "multiline": false}], "quality": ["COMBO", {"default": "128k", "multiselect": false, "options": ["64k", "96k", "128k", "192k", "320k"]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["audio", "filename_prefix", "quality"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["audio"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveAudioOpus", "display_name": "Save Audio (Opus) (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": true, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export opus"], "essentials_category": null, "has_intermediate_output": false}, "SaveAudioAdvanced": {"input": {"required": {"audio": ["AUDIO", {"tooltip": "The audio to save."}], "filename_prefix": ["STRING", {"tooltip": "The prefix for the file to save. May include formatting tokens such as %date:yyyy-MM-dd%.", "default": "audio/ComfyUI", "multiline": false}], "format": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The file format in which to save the audio.", "options": [{"key": "flac", "inputs": {"required": {}}}, {"key": "mp3", "inputs": {"required": {"quality": ["COMBO", {"default": "V0", "multiselect": false, "options": ["V0", "128k", "320k"]}]}}}, {"key": "opus", "inputs": {"required": {"quality": ["COMBO", {"default": "128k", "multiselect": false, "options": ["64k", "96k", "128k", "192k", "320k"]}]}}}]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["audio", "filename_prefix", "format"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["audio"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveAudioAdvanced", "display_name": "Save Audio (Advanced)", "description": "Saves the input audio to your ComfyUI output directory.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["save audio", "export audio", "output audio", "write audio", "flac", "mp3", "opus"], "essentials_category": null, "has_intermediate_output": false}, "LoadAudio": {"input": {"required": {"audio": ["COMBO", {"multiselect": false, "options": [], "audio_upload": true}]}}, "input_order": {"required": ["audio"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LoadAudio", "display_name": "Load Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["import audio", "open audio", "audio file"], "essentials_category": "Audio", "has_intermediate_output": false}, "PreviewAudio": {"input": {"required": {"audio": ["AUDIO", {}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["audio"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["audio"], "output_tooltips": [null], "output_matchtypes": null, "name": "PreviewAudio", "display_name": "Preview Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["play audio"], "essentials_category": null, "has_intermediate_output": false}, "ConditioningStableAudio": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "seconds_start": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1000.0, "step": 0.1}], "seconds_total": ["FLOAT", {"default": 47.0, "min": 0.0, "max": 1000.0, "step": 0.1}]}}, "input_order": {"required": ["positive", "negative", "seconds_start", "seconds_total"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ConditioningStableAudio", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_audio", "category": "model/conditioning/stable audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecordAudio": {"input": {"required": {"audio": ["AUDIO_RECORD", {}]}}, "input_order": {"required": ["audio"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecordAudio", "display_name": "Record Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["microphone input", "audio capture", "voice input"], "essentials_category": null, "has_intermediate_output": false}, "TrimAudioDuration": {"input": {"required": {"audio": ["AUDIO", {}], "start_index": ["FLOAT", {"tooltip": "Start time in seconds, can be negative to count from the end (supports sub-seconds).", "default": 0.0, "min": -18446744073709551615, "max": 18446744073709551615, "step": 0.01}], "duration": ["FLOAT", {"tooltip": "Duration in seconds", "default": 60.0, "min": 0.0, "step": 0.01}]}}, "input_order": {"required": ["audio", "start_index", "duration"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "TrimAudioDuration", "display_name": "Trim Audio Duration", "description": "Trim audio tensor into chosen time range.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["cut audio", "audio clip", "shorten audio"], "essentials_category": null, "has_intermediate_output": false}, "SplitAudioChannels": {"input": {"required": {"audio": ["AUDIO", {}]}}, "input_order": {"required": ["audio"]}, "is_input_list": false, "output": ["AUDIO", "AUDIO"], "output_is_list": [false, false], "output_name": ["left", "right"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SplitAudioChannels", "display_name": "Split Audio Channels", "description": "Separates the audio into left and right channels.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["stereo to mono"], "essentials_category": null, "has_intermediate_output": false}, "JoinAudioChannels": {"input": {"required": {"audio_left": ["AUDIO", {}], "audio_right": ["AUDIO", {}]}}, "input_order": {"required": ["audio_left", "audio_right"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["audio"], "output_tooltips": [null], "output_matchtypes": null, "name": "JoinAudioChannels", "display_name": "Join Audio Channels", "description": "Joins left and right mono audio channels into a stereo audio.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AudioConcat": {"input": {"required": {"audio1": ["AUDIO", {}], "audio2": ["AUDIO", {}], "direction": ["COMBO", {"tooltip": "Whether to append audio2 after or before audio1.", "default": "after", "multiselect": false, "options": ["after", "before"]}]}}, "input_order": {"required": ["audio1", "audio2", "direction"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioConcat", "display_name": "Concatenate Audio", "description": "Concatenates the audio1 to audio2 in the specified direction.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["join audio", "combine audio", "append audio"], "essentials_category": null, "has_intermediate_output": false}, "AudioMerge": {"input": {"required": {"audio1": ["AUDIO", {}], "audio2": ["AUDIO", {}], "merge_method": ["COMBO", {"tooltip": "The method used to combine the audio waveforms.", "multiselect": false, "options": ["add", "mean", "subtract", "multiply"]}]}}, "input_order": {"required": ["audio1", "audio2", "merge_method"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioMerge", "display_name": "Merge Audio", "description": "Combine two audio tracks by overlaying their waveforms.", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["mix audio", "overlay audio", "layer audio"], "essentials_category": null, "has_intermediate_output": false}, "AudioAdjustVolume": {"input": {"required": {"audio": ["AUDIO", {}], "volume": ["INT", {"tooltip": "Volume adjustment in decibels (dB). 0 = no change, +6 = double, -6 = half, etc", "default": 1, "min": -100, "max": 100}]}}, "input_order": {"required": ["audio", "volume"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioAdjustVolume", "display_name": "Adjust Audio Volume", "description": "Adjust the volume of the audio by a specified amount in decibels (dB).", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["audio gain", "loudness", "audio level"], "essentials_category": null, "has_intermediate_output": false}, "EmptyAudio": {"input": {"required": {"duration": ["FLOAT", {"tooltip": "Duration of the empty audio clip in seconds", "default": 60.0, "min": 0.0, "max": 18446744073709551615, "step": 0.01}], "sample_rate": ["INT", {"tooltip": "Sample rate of the empty audio clip.", "advanced": true, "default": 44100, "min": 1, "max": 192000}], "channels": ["INT", {"tooltip": "Number of audio channels (1 for mono, 2 for stereo).", "advanced": true, "default": 2, "min": 1, "max": 2}]}}, "input_order": {"required": ["duration", "sample_rate", "channels"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyAudio", "display_name": "Empty Audio", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["blank audio"], "essentials_category": null, "has_intermediate_output": false}, "AudioEqualizer3Band": {"input": {"required": {"audio": ["AUDIO", {}], "low_gain_dB": ["FLOAT", {"tooltip": "Gain for Low frequencies (Bass)", "default": 0.0, "min": -24.0, "max": 24.0, "step": 0.1}], "low_freq": ["INT", {"tooltip": "Cutoff frequency for Low shelf", "default": 100, "min": 20, "max": 500}], "mid_gain_dB": ["FLOAT", {"tooltip": "Gain for Mid frequencies", "default": 0.0, "min": -24.0, "max": 24.0, "step": 0.1}], "mid_freq": ["INT", {"tooltip": "Center frequency for Mids", "default": 1000, "min": 200, "max": 4000}], "mid_q": ["FLOAT", {"tooltip": "Q factor (bandwidth) for Mids", "default": 0.707, "min": 0.1, "max": 10.0, "step": 0.1}], "high_gain_dB": ["FLOAT", {"tooltip": "Gain for High frequencies (Treble)", "default": 0.0, "min": -24.0, "max": 24.0, "step": 0.1}], "high_freq": ["INT", {"tooltip": "Cutoff frequency for High shelf", "default": 5000, "min": 1000, "max": 15000}]}}, "input_order": {"required": ["audio", "low_gain_dB", "low_freq", "mid_gain_dB", "mid_freq", "mid_q", "high_gain_dB", "high_freq"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioEqualizer3Band", "display_name": "Audio Equalizer (3-Band)", "description": "", "python_module": "comfy_extras.nodes_audio", "category": "audio", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["eq", "bass boost", "treble boost", "equalizer"], "essentials_category": null, "has_intermediate_output": false}, "TripleCLIPLoader": {"input": {"required": {"clip_name1": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}], "clip_name2": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}], "clip_name3": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}]}}, "input_order": {"required": ["clip_name1", "clip_name2", "clip_name3"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "TripleCLIPLoader", "display_name": "Load CLIP (Triple)", "description": "Recipes:\nsd3: clip-l, clip-g, t5", "python_module": "comfy_extras.nodes_sd3", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptySD3LatentImage": {"input": {"required": {"width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptySD3LatentImage", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_sd3", "category": "model/latent/stable diffusion", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeSD3": {"input": {"required": {"clip": ["CLIP", {}], "clip_l": ["STRING", {"multiline": true, "dynamicPrompts": true}], "clip_g": ["STRING", {"multiline": true, "dynamicPrompts": true}], "t5xxl": ["STRING", {"multiline": true, "dynamicPrompts": true}], "empty_padding": ["COMBO", {"advanced": true, "multiselect": false, "options": ["none", "empty_prompt"]}]}}, "input_order": {"required": ["clip", "clip_l", "clip_g", "t5xxl", "empty_padding"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeSD3", "display_name": "CLIP Text Encode (SD3)", "description": "", "python_module": "comfy_extras.nodes_sd3", "category": "model/conditioning/stable diffusion", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["sd3 prompt"], "essentials_category": null, "has_intermediate_output": false}, "ControlNetApplySD3": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "control_net": ["CONTROL_NET", {}], "vae": ["VAE", {}], "image": ["IMAGE", {}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["positive", "negative", "control_net", "vae", "image", "strength", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ControlNetApplySD3", "display_name": "Apply Controlnet with VAE", "description": "", "python_module": "comfy_extras.nodes_sd3", "category": "model/conditioning/controlnet", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SkipLayerGuidanceSD3": {"input": {"required": {"model": ["MODEL", {}], "layers": ["STRING", {"advanced": true, "default": "7, 8, 9", "multiline": false}], "scale": ["FLOAT", {"default": 3.0, "min": 0.0, "max": 10.0, "step": 0.1}], "start_percent": ["FLOAT", {"advanced": true, "default": 0.01, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"advanced": true, "default": 0.15, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["model", "layers", "scale", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SkipLayerGuidanceSD3", "display_name": null, "description": "Generic version of SkipLayerGuidance node that can be used on every DiT model.", "python_module": "comfy_extras.nodes_sd3", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GITSScheduler": {"input": {"required": {"coeff": ["FLOAT", {"advanced": true, "default": 1.2, "min": 0.8, "max": 1.5, "step": 0.05}], "steps": ["INT", {"default": 10, "min": 2, "max": 1000}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["coeff", "steps", "denoise"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "GITSScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_gits", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SetUnionControlNetType": {"input": {"required": {"control_net": ["CONTROL_NET", {}], "type": ["COMBO", {"multiselect": false, "options": ["auto", "openpose", "depth", "hed/pidi/scribble/ted", "canny/lineart/anime_lineart/mlsd", "normal", "segment", "tile", "repaint"]}]}}, "input_order": {"required": ["control_net", "type"]}, "is_input_list": false, "output": ["CONTROL_NET"], "output_is_list": [false], "output_name": ["CONTROL_NET"], "output_tooltips": [null], "output_matchtypes": null, "name": "SetUnionControlNetType", "display_name": "Set Union ControlNet Type", "description": "", "python_module": "comfy_extras.nodes_controlnet", "category": "model/conditioning/controlnet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["set controlnet type", "union controlnet type"], "essentials_category": null, "has_intermediate_output": false}, "ControlNetInpaintingAliMamaApply": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "control_net": ["CONTROL_NET", {}], "vae": ["VAE", {}], "image": ["IMAGE", {}], "mask": ["MASK", {}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "start_percent": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["positive", "negative", "control_net", "vae", "image", "mask", "strength", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ControlNetInpaintingAliMamaApply", "display_name": "Apply ControlNet Inpainting (AliMama)", "description": "", "python_module": "comfy_extras.nodes_controlnet", "category": "model/conditioning/controlnet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["masked controlnet"], "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeHunyuanDiT": {"input": {"required": {"clip": ["CLIP", {}], "bert": ["STRING", {"multiline": true, "dynamicPrompts": true}], "mt5xl": ["STRING", {"multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["clip", "bert", "mt5xl"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeHunyuanDiT", "display_name": "CLIP Text Encode (Hunyuan Image)", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/conditioning/hunyuan image", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TextEncodeHunyuanVideo_ImageToVideo": {"input": {"required": {"clip": ["CLIP", {}], "clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "prompt": ["STRING", {"multiline": true, "dynamicPrompts": true}], "image_interleave": ["INT", {"tooltip": "How much the image influences things vs the text prompt. Higher number means more influence from the text prompt.", "advanced": true, "default": 2, "min": 1, "max": 512}]}}, "input_order": {"required": ["clip", "clip_vision_output", "prompt", "image_interleave"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeHunyuanVideo_ImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/conditioning/hunyuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyHunyuanLatentVideo": {"input": {"required": {"width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 25, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyHunyuanLatentVideo", "display_name": "Empty HunyuanVideo 1.0 Latent", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/latent/hunyuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyHunyuanVideo15Latent": {"input": {"required": {"width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 25, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyHunyuanVideo15Latent", "display_name": "Empty HunyuanVideo 1.5 Latent", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/latent/hunyuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HunyuanVideo15ImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 33, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"start_image": ["IMAGE", {}], "clip_vision_output": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["start_image", "clip_vision_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "HunyuanVideo15ImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/conditioning/hunyuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HunyuanVideo15SuperResolution": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "latent": ["LATENT", {}], "noise_augmentation": ["FLOAT", {"advanced": true, "default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01}]}, "optional": {"vae": ["VAE", {}], "start_image": ["IMAGE", {}], "clip_vision_output": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": ["positive", "negative", "latent", "noise_augmentation"], "optional": ["vae", "start_image", "clip_vision_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "HunyuanVideo15SuperResolution", "display_name": "Hunyuan Video 1.5 Super Resolution", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/conditioning/hunyuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HunyuanVideo15LatentUpscaleWithModel": {"input": {"required": {"model": ["LATENT_UPSCALE_MODEL", {}], "samples": ["LATENT", {}], "upscale_method": ["COMBO", {"default": "bilinear", "multiselect": false, "options": ["nearest-exact", "bilinear", "area", "bicubic", "bislerp"]}], "width": ["INT", {"default": 1280, "min": 0, "max": 16384, "step": 8}], "height": ["INT", {"default": 720, "min": 0, "max": 16384, "step": 8}], "crop": ["COMBO", {"multiselect": false, "options": ["disabled", "center"]}]}}, "input_order": {"required": ["model", "samples", "upscale_method", "width", "height", "crop"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "HunyuanVideo15LatentUpscaleWithModel", "display_name": "Hunyuan Video 15 Latent Upscale With Model", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/latent/hunyhuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LatentUpscaleModelLoader": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["LATENT_UPSCALE_MODEL"], "output_is_list": [false], "output_name": ["LATENT_UPSCALE_MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "LatentUpscaleModelLoader", "display_name": "Load Latent Upscale Model", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HunyuanImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 53, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "guidance_type": ["COMBO", {"advanced": true, "multiselect": false, "options": ["v1 (concat)", "v2 (replace)", "custom"]}]}, "optional": {"start_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "vae", "width", "height", "length", "batch_size", "guidance_type"], "optional": ["start_image"]}, "is_input_list": false, "output": ["CONDITIONING", "LATENT"], "output_is_list": [false, false], "output_name": ["positive", "latent"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "HunyuanImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/conditioning/hunyuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyHunyuanImageLatent": {"input": {"required": {"width": ["INT", {"default": 2048, "min": 64, "max": 16384, "step": 32}], "height": ["INT", {"default": 2048, "min": 64, "max": 16384, "step": 32}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyHunyuanImageLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/latent/hunyuan image", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HunyuanRefinerLatent": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "latent": ["LATENT", {}], "noise_augmentation": ["FLOAT", {"advanced": true, "default": 0.1, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["positive", "negative", "latent", "noise_augmentation"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "HunyuanRefinerLatent", "display_name": "Hunyuan Latent Refiner", "description": "", "python_module": "comfy_extras.nodes_hunyuan", "category": "model/conditioning/hunyuan video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Epsilon Scaling": {"input": {"required": {"model": ["MODEL", {}], "scaling_factor": ["FLOAT", {"advanced": true, "default": 1.005, "min": 0.5, "max": 1.5, "step": 0.001, "display": "number"}]}}, "input_order": {"required": ["model", "scaling_factor"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "Epsilon Scaling", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_eps", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TemporalScoreRescaling": {"input": {"required": {"model": ["MODEL", {}], "tsr_k": ["FLOAT", {"tooltip": "Controls the rescaling strength.\nLower k produces more detailed results; higher k produces smoother results in image generation. Setting k = 1 disables rescaling.", "advanced": true, "default": 0.95, "min": 0.01, "max": 100.0, "step": 0.001, "display": "number"}], "tsr_sigma": ["FLOAT", {"tooltip": "Controls how early rescaling takes effect.\nLarger values take effect earlier.", "advanced": true, "default": 1.0, "min": 0.01, "max": 100.0, "step": 0.001, "display": "number"}]}}, "input_order": {"required": ["model", "tsr_k", "tsr_sigma"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["patched_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "TemporalScoreRescaling", "display_name": "TSR - Temporal Score Rescaling", "description": "[Post-CFG Function]\nTSR - Temporal Score Rescaling (2510.01184)\n\nRescaling the model's score or noise to steer the sampling diversity.\n", "python_module": "comfy_extras.nodes_eps", "category": "model/patch/unet", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeFlux": {"input": {"required": {"clip": ["CLIP", {}], "clip_l": ["STRING", {"multiline": true, "dynamicPrompts": true}], "t5xxl": ["STRING", {"multiline": true, "dynamicPrompts": true}], "guidance": ["FLOAT", {"default": 3.5, "min": 0.0, "max": 100.0, "step": 0.1}]}}, "input_order": {"required": ["clip", "clip_l", "t5xxl", "guidance"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeFlux", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_flux", "category": "model/conditioning/flux", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxGuidance": {"input": {"required": {"conditioning": ["CONDITIONING", {}], "guidance": ["FLOAT", {"default": 3.5, "min": 0.0, "max": 100.0, "step": 0.1}]}}, "input_order": {"required": ["conditioning", "guidance"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxGuidance", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_flux", "category": "model/conditioning/flux", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxDisableGuidance": {"input": {"required": {"conditioning": ["CONDITIONING", {}]}}, "input_order": {"required": ["conditioning"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxDisableGuidance", "display_name": null, "description": "This node completely disables the guidance embed on Flux and Flux like models", "python_module": "comfy_extras.nodes_flux", "category": "model/conditioning/flux", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxKontextImageScale": {"input": {"required": {"image": ["IMAGE", {}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxKontextImageScale", "display_name": null, "description": "This node resizes the image to one that is more optimal for flux kontext.", "python_module": "comfy_extras.nodes_flux", "category": "model/conditioning/flux", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxKontextMultiReferenceLatentMethod": {"input": {"required": {"conditioning": ["CONDITIONING", {}], "reference_latents_method": ["COMBO", {"advanced": true, "multiselect": false, "options": ["offset", "index", "uxo/uno", "index_timestep_zero"]}]}}, "input_order": {"required": ["conditioning", "reference_latents_method"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxKontextMultiReferenceLatentMethod", "display_name": "Edit Model Reference Method", "description": "", "python_module": "comfy_extras.nodes_flux", "category": "model/conditioning/flux", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyFlux2LatentImage": {"input": {"required": {"width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyFlux2LatentImage", "display_name": "Empty Flux 2 Latent", "description": "", "python_module": "comfy_extras.nodes_flux", "category": "model/latent/flux", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Flux2Scheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 4096}], "width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 1}], "height": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 1}]}}, "input_order": {"required": ["steps", "width", "height"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "Flux2Scheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_flux", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxKVCache": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to use KV Cache on."}]}}, "input_order": {"required": ["model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The patched model with KV Cache enabled."], "output_matchtypes": null, "name": "FluxKVCache", "display_name": "Flux KV Cache", "description": "Enables KV Cache optimization for reference images on Flux family models.", "python_module": "comfy_extras.nodes_flux", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LoraSave": {"input": {"required": {"filename_prefix": ["STRING", {"default": "loras/ComfyUI_extracted_lora", "multiline": false}], "rank": ["INT", {"advanced": true, "default": 8, "min": 1, "max": 4096, "step": 1}], "lora_type": ["COMBO", {"advanced": true, "multiselect": false, "options": ["standard", "full_diff"]}], "bias_diff": ["BOOLEAN", {"advanced": true, "default": true}]}, "optional": {"model_diff": ["MODEL", {"tooltip": "The ModelSubtract output to be converted to a lora."}], "text_encoder_diff": ["CLIP", {"tooltip": "The CLIPSubtract output to be converted to a lora."}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["filename_prefix", "rank", "lora_type", "bias_diff"], "optional": ["model_diff", "text_encoder_diff"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "LoraSave", "display_name": "Extract and Save Lora", "description": "", "python_module": "comfy_extras.nodes_lora_extract", "category": "experimental", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export lora"], "essentials_category": null, "has_intermediate_output": false}, "TorchCompileModel": {"input": {"required": {"model": ["MODEL", {}], "backend": ["COMBO", {"advanced": true, "multiselect": false, "options": ["inductor", "cudagraphs"]}]}}, "input_order": {"required": ["model", "backend"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "TorchCompileModel", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_torch_compile", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyMochiLatentVideo": {"input": {"required": {"width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 25, "min": 7, "max": 16384, "step": 6}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyMochiLatentVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_mochi", "category": "model/latent/mochi", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SkipLayerGuidanceDiT": {"input": {"required": {"model": ["MODEL", {}], "double_layers": ["STRING", {"advanced": true, "default": "7, 8, 9", "multiline": false}], "single_layers": ["STRING", {"advanced": true, "default": "7, 8, 9", "multiline": false}], "scale": ["FLOAT", {"default": 3.0, "min": 0.0, "max": 10.0, "step": 0.1}], "start_percent": ["FLOAT", {"advanced": true, "default": 0.01, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"advanced": true, "default": 0.15, "min": 0.0, "max": 1.0, "step": 0.001}], "rescaling_scale": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "double_layers", "single_layers", "scale", "start_percent", "end_percent", "rescaling_scale"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SkipLayerGuidanceDiT", "display_name": null, "description": "Generic version of SkipLayerGuidance node that can be used on every DiT model.", "python_module": "comfy_extras.nodes_slg", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SkipLayerGuidanceDiTSimple": {"input": {"required": {"model": ["MODEL", {}], "double_layers": ["STRING", {"advanced": true, "default": "7, 8, 9", "multiline": false}], "single_layers": ["STRING", {"advanced": true, "default": "7, 8, 9", "multiline": false}], "start_percent": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["model", "double_layers", "single_layers", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SkipLayerGuidanceDiTSimple", "display_name": null, "description": "Simple version of the SkipLayerGuidanceDiT node that only modifies the uncond pass.", "python_module": "comfy_extras.nodes_slg", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Mahiro": {"input": {"required": {"model": ["MODEL", {}]}}, "input_order": {"required": ["model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["patched_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "Mahiro", "display_name": "Positive-Biased Guidance", "description": "Modify the guidance to scale more on the 'direction' of the positive prompt rather than the difference between the negative prompt.", "python_module": "comfy_extras.nodes_mahiro", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["mahiro", "mahiro cfg", "similarity-adaptive guidance", "positive-biased cfg"], "essentials_category": null, "has_intermediate_output": false}, "LTXVLatentUpsampler": {"input": {"required": {"samples": ["LATENT", {}], "upscale_model": ["LATENT_UPSCALE_MODEL", {}], "vae": ["VAE", {}]}}, "input_order": {"required": ["samples", "upscale_model", "vae"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVLatentUpsampler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt_upsampler", "category": "model/latent/ltxv", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVAudioVAELoader": {"input": {"required": {"ckpt_name": ["COMBO", {"tooltip": "Audio VAE checkpoint to load.", "multiselect": false, "options": []}]}}, "input_order": {"required": ["ckpt_name"]}, "is_input_list": false, "output": ["VAE"], "output_is_list": [false], "output_name": ["Audio VAE"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVAudioVAELoader", "display_name": "Load LTXV Audio VAE", "description": "", "python_module": "comfy_extras.nodes_lt_audio", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVAudioVAEEncode": {"input": {"required": {"audio": ["AUDIO", {"tooltip": "The audio to be encoded."}], "audio_vae": ["VAE", {"display_name": "Audio VAE", "tooltip": "The Audio VAE model to use for encoding."}]}}, "input_order": {"required": ["audio", "audio_vae"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["Audio Latent"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVAudioVAEEncode", "display_name": "LTXV Audio VAE Encode", "description": "", "python_module": "comfy_extras.nodes_lt_audio", "category": "model/latent/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVAudioVAEDecode": {"input": {"required": {"samples": ["LATENT", {"tooltip": "The latent to be decoded."}], "audio_vae": ["VAE", {"display_name": "Audio VAE", "tooltip": "The Audio VAE model used for decoding the latent."}]}}, "input_order": {"required": ["samples", "audio_vae"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["Audio"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVAudioVAEDecode", "display_name": "LTXV Audio VAE Decode", "description": "", "python_module": "comfy_extras.nodes_lt_audio", "category": "model/latent/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVEmptyLatentAudio": {"input": {"required": {"frames_number": ["INT", {"tooltip": "Number of frames.", "default": 97, "min": 1, "max": 1000, "step": 1, "display": "number"}], "frame_rate": ["INT", {"tooltip": "Number of frames per second.", "default": 25, "min": 1, "max": 1000, "step": 1, "display": "number"}], "batch_size": ["INT", {"tooltip": "The number of latent audio samples in the batch.", "default": 1, "min": 1, "max": 4096, "display": "number"}], "audio_vae": ["VAE", {"display_name": "Audio VAE", "tooltip": "The Audio VAE model to get configuration from."}]}}, "input_order": {"required": ["frames_number", "frame_rate", "batch_size", "audio_vae"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["Latent"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVEmptyLatentAudio", "display_name": "LTXV Empty Latent Audio", "description": "", "python_module": "comfy_extras.nodes_lt_audio", "category": "model/latent/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXAVTextEncoderLoader": {"input": {"required": {"text_encoder": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}], "ckpt_name": ["COMBO", {"multiselect": false, "options": []}], "device": ["COMBO", {"advanced": true, "multiselect": false, "options": ["default", "cpu"]}]}}, "input_order": {"required": ["text_encoder", "ckpt_name", "device"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXAVTextEncoderLoader", "display_name": "Load LTXV Audio Text Encoder", "description": "Recipes:\nltxav: gemma 3 12B", "python_module": "comfy_extras.nodes_lt_audio", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyLTXVLatentVideo": {"input": {"required": {"width": ["INT", {"default": 768, "min": 64, "max": 16384, "step": 32}], "height": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 32}], "length": ["INT", {"default": 97, "min": 1, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyLTXVLatentVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/latent/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVImgToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "image": ["IMAGE", {}], "width": ["INT", {"default": 768, "min": 64, "max": 16384, "step": 32}], "height": ["INT", {"default": 512, "min": 64, "max": 16384, "step": 32}], "length": ["INT", {"default": 97, "min": 9, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0}]}}, "input_order": {"required": ["positive", "negative", "vae", "image", "width", "height", "length", "batch_size", "strength"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "LTXVImgToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVImgToVideoInplace": {"input": {"required": {"vae": ["VAE", {}], "image": ["IMAGE", {}], "latent": ["LATENT", {}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0}], "bypass": ["BOOLEAN", {"tooltip": "Bypass the conditioning.", "default": false}]}}, "input_order": {"required": ["vae", "image", "latent", "strength", "bypass"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["latent"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVImgToVideoInplace", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ModelSamplingLTXV": {"input": {"required": {"model": ["MODEL", {}], "max_shift": ["FLOAT", {"default": 2.05, "min": 0.0, "max": 100.0, "step": 0.01}], "base_shift": ["FLOAT", {"default": 0.95, "min": 0.0, "max": 100.0, "step": 0.01}]}, "optional": {"latent": ["LATENT", {}]}}, "input_order": {"required": ["model", "max_shift", "base_shift"], "optional": ["latent"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "ModelSamplingLTXV", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/patch/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVConditioning": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "frame_rate": ["FLOAT", {"default": 25.0, "min": 0.0, "max": 1000.0, "step": 0.01}]}}, "input_order": {"required": ["positive", "negative", "frame_rate"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LTXVConditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVScheduler": {"input": {"required": {"steps": ["INT", {"default": 20, "min": 1, "max": 10000}], "max_shift": ["FLOAT", {"default": 2.05, "min": 0.0, "max": 100.0, "step": 0.01}], "base_shift": ["FLOAT", {"default": 0.95, "min": 0.0, "max": 100.0, "step": 0.01}], "stretch": ["BOOLEAN", {"tooltip": "Stretch the sigmas to be in the range [terminal, 1].", "advanced": true, "default": true}], "terminal": ["FLOAT", {"tooltip": "The terminal value of the sigmas after stretching.", "advanced": true, "default": 0.1, "min": 0.0, "max": 0.99, "step": 0.01}]}, "optional": {"latent": ["LATENT", {}]}}, "input_order": {"required": ["steps", "max_shift", "base_shift", "stretch", "terminal"], "optional": ["latent"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GetICLoRAParameters": {"input": {"required": {"iclora_model": ["MODEL", {"tooltip": "Direct output from a LoRA Loader for the specific IC-LoRA from which to extract the metadata."}]}}, "input_order": {"required": ["iclora_model"]}, "is_input_list": false, "output": ["IC_LORA_PARAMETERS"], "output_is_list": [false], "output_name": ["iclora_parameters"], "output_tooltips": ["IC-LoRA parameters extracted from the LoRA metadata (eg. reference_downscale_factor). Connect to LTXVAddGuide if the LoRA requires special handling of the guides."], "output_matchtypes": null, "name": "GetICLoRAParameters", "display_name": "Get IC-LoRA Parameters", "description": "Extracts IC-LoRA parameters from the safetensors metadata of a LoRA-loaded model and outputs them for LTXVAddGuide (eg. reference_downscale_factor).", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["ic-lora", "ic lora", "iclora", "downscale factor", "reference downscale"], "essentials_category": null, "has_intermediate_output": false}, "LTXVAddGuide": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "latent": ["LATENT", {}], "image": ["IMAGE", {"tooltip": "Image or video to condition the latent video on. Must be 8*n + 1 frames. If the video is not 8*n + 1 frames, it will be cropped to the nearest 8*n + 1 frames."}], "frame_idx": ["INT", {"tooltip": "Frame index to start the conditioning at. For single-frame images or videos with 1-8 frames, any frame_idx value is acceptable. For videos with 9+ frames, frame_idx must be divisible by 8, otherwise it will be rounded down to the nearest multiple of 8. Negative values are counted from the end of the video.", "default": 0, "min": -9999, "max": 9999}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}, "optional": {"attention_mask": ["MASK", {"tooltip": "Optional pixel-space spatial mask. Controls per-region conditioning influence via self-attention, multiplied by strength."}], "iclora_parameters": ["IC_LORA_PARAMETERS", {"tooltip": "Optional IC-LoRA parameters from a Get IC-LoRA Parameters node. Used for adjusting guide processing as required by certain IC-LoRAs (eg. those with a reference_downscale_factor > 1). When chained, each LTXVAddGuide uses only the parameters connected to it."}]}}, "input_order": {"required": ["positive", "negative", "vae", "latent", "image", "frame_idx", "strength"], "optional": ["attention_mask", "iclora_parameters"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "LTXVAddGuide", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVPreprocess": {"input": {"required": {"image": ["IMAGE", {}], "img_compression": ["INT", {"tooltip": "Amount of compression to apply on image.", "default": 35, "min": 0, "max": 100}]}}, "input_order": {"required": ["image", "img_compression"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["output_image"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVPreprocess", "display_name": "LTXV Preprocess", "description": "", "python_module": "comfy_extras.nodes_lt", "category": "video/preprocessors", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVCropGuides": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "latent": ["LATENT", {}]}}, "input_order": {"required": ["positive", "negative", "latent"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "LTXVCropGuides", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVConcatAVLatent": {"input": {"required": {"video_latent": ["LATENT", {}], "audio_latent": ["LATENT", {}]}}, "input_order": {"required": ["video_latent", "audio_latent"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["latent"], "output_tooltips": [null], "output_matchtypes": null, "name": "LTXVConcatAVLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lt", "category": "model/latent/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVSeparateAVLatent": {"input": {"required": {"av_latent": ["LATENT", {}]}}, "input_order": {"required": ["av_latent"]}, "is_input_list": false, "output": ["LATENT", "LATENT"], "output_is_list": [false, false], "output_name": ["video_latent", "audio_latent"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LTXVSeparateAVLatent", "display_name": null, "description": "LTXV Separate AV Latent", "python_module": "comfy_extras.nodes_lt", "category": "model/latent/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVReferenceAudio": {"input": {"required": {"model": ["MODEL", {}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "reference_audio": ["AUDIO", {"tooltip": "Reference audio clip whose speaker identity to transfer. ~5 seconds recommended (training duration). Shorter or longer clips may degrade voice identity transfer."}], "audio_vae": ["VAE", {"display_name": "Audio VAE", "tooltip": "LTXV Audio VAE for encoding."}], "identity_guidance_scale": ["FLOAT", {"tooltip": "Strength of identity guidance. Runs an extra forward pass without reference each step to amplify speaker identity. Set to 0 to disable (no extra pass).", "default": 3.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": 0.01}], "start_percent": ["FLOAT", {"tooltip": "Start of the sigma range where identity guidance is active.", "advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"tooltip": "End of the sigma range where identity guidance is active.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["model", "positive", "negative", "reference_audio", "audio_vae", "identity_guidance_scale", "start_percent", "end_percent"]}, "is_input_list": false, "output": ["MODEL", "CONDITIONING", "CONDITIONING"], "output_is_list": [false, false, false], "output_name": ["MODEL", "positive", "negative"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "LTXVReferenceAudio", "display_name": "LTXV Reference Audio (ID-LoRA)", "description": "Set reference audio for ID-LoRA speaker identity transfer. Encodes a reference audio clip into the conditioning and optionally patches the model with identity guidance (extra forward pass without reference, amplifying the speaker identity effect).", "python_module": "comfy_extras.nodes_lt", "category": "model/conditioning/ltxv", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CreateHookLora": {"input": {"required": {"lora_name": [[]], "strength_model": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}], "strength_clip": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}]}, "optional": {"prev_hooks": ["HOOKS"]}}, "input_order": {"required": ["lora_name", "strength_model", "strength_clip"], "optional": ["prev_hooks"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CreateHookLora", "display_name": "Create Hook LoRA", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/create", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "CreateHookLoraModelOnly": {"input": {"required": {"lora_name": [[]], "strength_model": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}]}, "optional": {"prev_hooks": ["HOOKS"]}}, "input_order": {"required": ["lora_name", "strength_model"], "optional": ["prev_hooks"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CreateHookLoraModelOnly", "display_name": "Create Hook LoRA (MO)", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/create", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "CreateHookModelAsLora": {"input": {"required": {"ckpt_name": [[]], "strength_model": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}], "strength_clip": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}]}, "optional": {"prev_hooks": ["HOOKS"]}}, "input_order": {"required": ["ckpt_name", "strength_model", "strength_clip"], "optional": ["prev_hooks"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CreateHookModelAsLora", "display_name": "Create Hook Model as LoRA", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/create", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "CreateHookModelAsLoraModelOnly": {"input": {"required": {"ckpt_name": [[]], "strength_model": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}]}, "optional": {"prev_hooks": ["HOOKS"]}}, "input_order": {"required": ["ckpt_name", "strength_model"], "optional": ["prev_hooks"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CreateHookModelAsLoraModelOnly", "display_name": "Create Hook Model as LoRA (MO)", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/create", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "SetHookKeyframes": {"input": {"required": {"hooks": ["HOOKS"]}, "optional": {"hook_kf": ["HOOK_KEYFRAMES"]}}, "input_order": {"required": ["hooks"], "optional": ["hook_kf"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "SetHookKeyframes", "display_name": "Set Hook Keyframes", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/scheduling", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "CreateHookKeyframe": {"input": {"required": {"strength_mult": ["FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}]}, "optional": {"prev_hook_kf": ["HOOK_KEYFRAMES"]}}, "input_order": {"required": ["strength_mult", "start_percent"], "optional": ["prev_hook_kf"]}, "is_input_list": false, "output": ["HOOK_KEYFRAMES"], "output_is_list": [false], "output_name": ["HOOK_KF"], "name": "CreateHookKeyframe", "display_name": "Create Hook Keyframe", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/scheduling", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["hook scheduling", "strength animation", "timed hook"]}, "CreateHookKeyframesInterpolated": {"input": {"required": {"strength_start": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.001}], "strength_end": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.001}], "interpolation": [["linear", "ease_in", "ease_out", "ease_in_out"]], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "keyframes_count": ["INT", {"default": 5, "min": 2, "max": 100, "step": 1}], "print_keyframes": ["BOOLEAN", {"default": false, "advanced": true}]}, "optional": {"prev_hook_kf": ["HOOK_KEYFRAMES"]}}, "input_order": {"required": ["strength_start", "strength_end", "interpolation", "start_percent", "end_percent", "keyframes_count", "print_keyframes"], "optional": ["prev_hook_kf"]}, "is_input_list": false, "output": ["HOOK_KEYFRAMES"], "output_is_list": [false], "output_name": ["HOOK_KF"], "name": "CreateHookKeyframesInterpolated", "display_name": "Create Hook Keyframes Interp.", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/scheduling", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["ease hook strength", "smooth hook transition", "interpolate keyframes"]}, "CreateHookKeyframesFromFloats": {"input": {"required": {"floats_strength": ["FLOATS", {"default": -1, "min": -1, "step": 0.001, "forceInput": true}], "start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}], "print_keyframes": ["BOOLEAN", {"default": false, "advanced": true}]}, "optional": {"prev_hook_kf": ["HOOK_KEYFRAMES"]}}, "input_order": {"required": ["floats_strength", "start_percent", "end_percent", "print_keyframes"], "optional": ["prev_hook_kf"]}, "is_input_list": false, "output": ["HOOK_KEYFRAMES"], "output_is_list": [false], "output_name": ["HOOK_KF"], "name": "CreateHookKeyframesFromFloats", "display_name": "Create Hook Keyframes From Floats", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/scheduling", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["batch keyframes", "strength list to keyframes"]}, "CombineHooks2": {"input": {"required": {}, "optional": {"hooks_A": ["HOOKS"], "hooks_B": ["HOOKS"]}}, "input_order": {"required": [], "optional": ["hooks_A", "hooks_B"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CombineHooks2", "display_name": "Combine Hooks [2]", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/combine", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["merge hooks"]}, "CombineHooks4": {"input": {"required": {}, "optional": {"hooks_A": ["HOOKS"], "hooks_B": ["HOOKS"], "hooks_C": ["HOOKS"], "hooks_D": ["HOOKS"]}}, "input_order": {"required": [], "optional": ["hooks_A", "hooks_B", "hooks_C", "hooks_D"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CombineHooks4", "display_name": "Combine Hooks [4]", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/combine", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "CombineHooks8": {"input": {"required": {}, "optional": {"hooks_A": ["HOOKS"], "hooks_B": ["HOOKS"], "hooks_C": ["HOOKS"], "hooks_D": ["HOOKS"], "hooks_E": ["HOOKS"], "hooks_F": ["HOOKS"], "hooks_G": ["HOOKS"], "hooks_H": ["HOOKS"]}}, "input_order": {"required": [], "optional": ["hooks_A", "hooks_B", "hooks_C", "hooks_D", "hooks_E", "hooks_F", "hooks_G", "hooks_H"]}, "is_input_list": false, "output": ["HOOKS"], "output_is_list": [false], "output_name": ["HOOKS"], "name": "CombineHooks8", "display_name": "Combine Hooks [8]", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/combine", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "ConditioningSetProperties": {"input": {"required": {"cond_NEW": ["CONDITIONING"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "set_cond_area": [["default", "mask bounds"]]}, "optional": {"mask": ["MASK"], "hooks": ["HOOKS"], "timesteps": ["TIMESTEPS_RANGE"]}}, "input_order": {"required": ["cond_NEW", "strength", "set_cond_area"], "optional": ["mask", "hooks", "timesteps"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetProperties", "display_name": "Cond Set Props", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond single", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "ConditioningSetPropertiesAndCombine": {"input": {"required": {"cond": ["CONDITIONING"], "cond_NEW": ["CONDITIONING"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "set_cond_area": [["default", "mask bounds"]]}, "optional": {"mask": ["MASK"], "hooks": ["HOOKS"], "timesteps": ["TIMESTEPS_RANGE"]}}, "input_order": {"required": ["cond", "cond_NEW", "strength", "set_cond_area"], "optional": ["mask", "hooks", "timesteps"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetPropertiesAndCombine", "display_name": "Cond Set Props Combine", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond single", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "PairConditioningSetProperties": {"input": {"required": {"positive_NEW": ["CONDITIONING"], "negative_NEW": ["CONDITIONING"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "set_cond_area": [["default", "mask bounds"]]}, "optional": {"mask": ["MASK"], "hooks": ["HOOKS"], "timesteps": ["TIMESTEPS_RANGE"]}}, "input_order": {"required": ["positive_NEW", "negative_NEW", "strength", "set_cond_area"], "optional": ["mask", "hooks", "timesteps"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "name": "PairConditioningSetProperties", "display_name": "Cond Pair Set Props", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond pair", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "PairConditioningSetPropertiesAndCombine": {"input": {"required": {"positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "positive_NEW": ["CONDITIONING"], "negative_NEW": ["CONDITIONING"], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "set_cond_area": [["default", "mask bounds"]]}, "optional": {"mask": ["MASK"], "hooks": ["HOOKS"], "timesteps": ["TIMESTEPS_RANGE"]}}, "input_order": {"required": ["positive", "negative", "positive_NEW", "negative_NEW", "strength", "set_cond_area"], "optional": ["mask", "hooks", "timesteps"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "name": "PairConditioningSetPropertiesAndCombine", "display_name": "Cond Pair Set Props Combine", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond pair", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "ConditioningSetDefaultCombine": {"input": {"required": {"cond": ["CONDITIONING"], "cond_DEFAULT": ["CONDITIONING"]}, "optional": {"hooks": ["HOOKS"]}}, "input_order": {"required": ["cond", "cond_DEFAULT"], "optional": ["hooks"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "name": "ConditioningSetDefaultCombine", "display_name": "Cond Set Default Combine", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond single", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "PairConditioningSetDefaultCombine": {"input": {"required": {"positive": ["CONDITIONING"], "negative": ["CONDITIONING"], "positive_DEFAULT": ["CONDITIONING"], "negative_DEFAULT": ["CONDITIONING"]}, "optional": {"hooks": ["HOOKS"]}}, "input_order": {"required": ["positive", "negative", "positive_DEFAULT", "negative_DEFAULT"], "optional": ["hooks"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "name": "PairConditioningSetDefaultCombine", "display_name": "Cond Pair Set Default Combine", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond pair", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "PairConditioningCombine": {"input": {"required": {"positive_A": ["CONDITIONING"], "negative_A": ["CONDITIONING"], "positive_B": ["CONDITIONING"], "negative_B": ["CONDITIONING"]}}, "input_order": {"required": ["positive_A", "negative_A", "positive_B", "negative_B"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "name": "PairConditioningCombine", "display_name": "Cond Pair Combine", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/cond pair", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "SetClipHooks": {"input": {"required": {"clip": ["CLIP"], "apply_to_conds": ["BOOLEAN", {"default": true, "advanced": true}], "schedule_clip": ["BOOLEAN", {"default": false, "advanced": true}]}, "optional": {"hooks": ["HOOKS"]}}, "input_order": {"required": ["clip", "apply_to_conds", "schedule_clip"], "optional": ["hooks"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "SetClipHooks", "display_name": "Set CLIP Hooks", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks/clip", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "ConditioningTimestepsRange": {"input": {"required": {"start_percent": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}], "end_percent": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["start_percent", "end_percent"]}, "is_input_list": false, "output": ["TIMESTEPS_RANGE", "TIMESTEPS_RANGE", "TIMESTEPS_RANGE"], "output_is_list": [false, false, false], "output_name": ["TIMESTEPS_RANGE", "BEFORE_RANGE", "AFTER_RANGE"], "name": "ConditioningTimestepsRange", "display_name": "Timesteps Range", "description": "", "python_module": "comfy_extras.nodes_hooks", "category": "advanced/hooks", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": ["prompt scheduling", "timestep segments", "conditioning phases"]}, "MultiGPU_WorkUnits": {"input": {"required": {"model": ["MODEL", {}], "max_gpus": ["INT", {"default": 2, "min": 1, "step": 1}]}}, "input_order": {"required": ["model", "max_gpus"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "MultiGPU_WorkUnits", "display_name": "MultiGPU CFG Split", "description": "Prepares model to have sampling accelerated via splitting work units.\n\nShould be placed after nodes that modify the model object itself, such as compile or attention-switch nodes.\n\nOther than those exceptions, this node can be placed in any order.", "python_module": "comfy_extras.nodes_multigpu", "category": "advanced/multigpu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SelectModelDevice": {"input": {"required": {"model": ["MODEL", {}], "device": ["COMBO", {"multiselect": false, "options": ["default", "cpu"]}]}}, "input_order": {"required": ["model", "device"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SelectModelDevice", "display_name": "Select Model Device", "description": "Place the diffusion model on a specific device (default / cpu / gpu:N).\n\n- \"default\" restores the device assigned by the loader (even after a\n prior Select Model Device call).\n- \"cpu\" pins both the load and offload device to CPU.\n- \"gpu:N\" pins the load device to the Nth available GPU; the offload\n device is restored to the loader's original choice.\n\nWhen the requested device differs from the device the input model is\nalready on, a fresh model is spawned via the loader's reload factory\n(cached_patcher_init) so the new patcher owns independent weights on\nthe new device. Loaders that don't support multigpu (no factory) will\ncause the node to pass through unchanged with a warning.\n\nIf the workflow already has MultiGPU CFG Split applied and the chosen\nGPU collides with one of the existing multigpu clones, that clone is\ndropped so two patchers don't end up bound to the same device.\n\nWhen the selected device does not exist on the current machine\n(e.g. a workflow built on a 2-GPU box opened on a 1-GPU box),\nthe node passes the model through unchanged and logs a message\ninstead of failing.\n\nNOTE: Placing Select Model Device *after* a node that has already\nconsumed the same model (e.g. a KSampler that ran on this model on\nthe original device) is not recommended -- any state the prior\nconsumer mutated on the original model will be observed when the\nselected device matches the original (fast path). Place Select Model\nDevice before any consumer of the model.", "python_module": "comfy_extras.nodes_multigpu", "category": "advanced/multigpu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SelectCLIPDevice": {"input": {"required": {"clip": ["CLIP", {}], "device": ["COMBO", {"multiselect": false, "options": ["default", "cpu"]}]}}, "input_order": {"required": ["clip", "device"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "SelectCLIPDevice", "display_name": "Select CLIP Device", "description": "Place the CLIP text encoder on a specific device (default / cpu / gpu:N).\n\n- \"default\" restores the device assigned by the loader.\n- \"cpu\" pins both the load and offload device to CPU.\n- \"gpu:N\" pins the load device to the Nth available GPU.\n\nWhen the selected device does not exist on the current machine\n(e.g. a workflow built on a 2-GPU box opened on a 1-GPU box),\nthe node passes the CLIP through unchanged and logs a message\ninstead of failing.", "python_module": "comfy_extras.nodes_multigpu", "category": "advanced/multigpu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SelectVAEDevice": {"input": {"required": {"vae": ["VAE", {}], "device": ["COMBO", {"multiselect": false, "options": ["default"]}]}}, "input_order": {"required": ["vae", "device"]}, "is_input_list": false, "output": ["VAE"], "output_is_list": [false], "output_name": ["VAE"], "output_tooltips": [null], "output_matchtypes": null, "name": "SelectVAEDevice", "display_name": "Select VAE Device", "description": "Place the VAE on a specific device (default / gpu:N).\n\n- \"default\" restores the device assigned by the loader.\n- \"gpu:N\" pins the load device to the Nth available GPU; the offload\n device is set to the standard VAE offload device.\n\nCPU is intentionally not exposed in the UI for the VAE; if a workflow\nsupplies \"cpu\" anyway (e.g. opened from another machine), the request\nis dropped with a log message and the VAE is passed through unchanged.\n\nWhen the selected device does not exist on the current machine\n(e.g. a workflow built on a 2-GPU box opened on a 1-GPU box),\nthe node passes the VAE through unchanged and logs a message\ninstead of failing.", "python_module": "comfy_extras.nodes_multigpu", "category": "advanced/multigpu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Load3D": {"input": {"required": {"model_file": ["COMBO", {"multiselect": false, "options": ["none"], "file_upload": true}], "image": ["LOAD_3D", {}], "width": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}], "height": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}]}}, "input_order": {"required": ["model_file", "image", "width", "height"]}, "is_input_list": false, "output": ["IMAGE", "MASK", "STRING", "IMAGE", "LOAD3D_CAMERA", "VIDEO", "FILE_3D", "LOAD3D_MODEL_INFO"], "output_is_list": [false, false, false, false, false, false, false, false], "output_name": ["image", "mask", "mesh_path", "normal", "camera_info", "recording_video", "model_3d", "model_3d_info"], "output_tooltips": [null, null, null, null, null, null, null, null], "output_matchtypes": null, "name": "Load3D", "display_name": "Load 3D & Animation", "description": "", "python_module": "comfy_extras.nodes_load_3d", "category": "3d", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": "Basics", "has_intermediate_output": false}, "Load3DAdvanced": {"input": {"required": {"model_file": ["COMBO", {"multiselect": false, "options": ["none"], "file_upload": true}], "viewport_state": ["LOAD_3D", {}], "width": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}], "height": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}]}}, "input_order": {"required": ["model_file", "viewport_state", "width", "height"]}, "is_input_list": false, "output": ["FILE_3D", "LOAD3D_MODEL_INFO", "LOAD3D_CAMERA", "INT", "INT"], "output_is_list": [false, false, false, false, false], "output_name": ["model_3d", "model_3d_info", "camera_info", "width", "height"], "output_tooltips": [null, null, null, null, null], "output_matchtypes": null, "name": "Load3DAdvanced", "display_name": "Load 3D (Advanced)", "description": "", "python_module": "comfy_extras.nodes_load_3d", "category": "3d", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["load mesh", "load gltf", "load glb", "load obj", "load fbx", "load stl"], "essentials_category": null, "has_intermediate_output": false}, "Preview3D": {"input": {"required": {"model_file": ["STRING,FILE_3D_GLB,FILE_3D_GLTF,FILE_3D_FBX,FILE_3D_OBJ,FILE_3D_STL,FILE_3D_USDZ,FILE_3D", {"default": "", "widgetType": "STRING", "multiline": false, "tooltip": "3D model file or path string"}]}, "optional": {"camera_info": ["LOAD3D_CAMERA", {"advanced": true}], "bg_image": ["IMAGE", {"advanced": true}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model_file"], "optional": ["camera_info", "bg_image"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "Preview3D", "display_name": "Preview 3D & Animation", "description": "", "python_module": "comfy_extras.nodes_load_3d", "category": "3d", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["view mesh", "3d viewer"], "essentials_category": null, "has_intermediate_output": false}, "Preview3DAdvanced": {"input": {"required": {"model_3d": ["FILE_3D_GLB,FILE_3D_GLTF,FILE_3D_FBX,FILE_3D_OBJ,FILE_3D_STL,FILE_3D_USDZ,FILE_3D", {"tooltip": "3D model file from an upstream 3D node."}], "viewport_state": ["LOAD_3D", {}], "width": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}], "height": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}]}, "optional": {"model_3d_info": ["LOAD3D_MODEL_INFO", {"advanced": true}], "camera_info": ["LOAD3D_CAMERA", {"advanced": true}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model_3d", "viewport_state", "width", "height"], "optional": ["model_3d_info", "camera_info"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["FILE_3D", "LOAD3D_MODEL_INFO", "LOAD3D_CAMERA", "INT", "INT"], "output_is_list": [false, false, false, false, false], "output_name": ["model_3d", "model_3d_info", "camera_info", "width", "height"], "output_tooltips": [null, null, null, null, null], "output_matchtypes": null, "name": "Preview3DAdvanced", "display_name": "Preview 3D (Advanced)", "description": "", "python_module": "comfy_extras.nodes_load_3d", "category": "3d", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["preview 3d", "3d viewer", "view mesh", "frame 3d", "3d camera output"], "essentials_category": null, "has_intermediate_output": false}, "PreviewGaussianSplat": {"input": {"required": {"model_3d": ["FILE_3D_SPLAT_ANY,FILE_3D_PLY,FILE_3D_SPLAT,FILE_3D_SPZ,FILE_3D_KSPLAT", {"tooltip": "A gaussian splat 3D file."}], "viewport_state": ["LOAD_3D", {}], "width": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}], "height": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}]}, "optional": {"model_3d_info": ["LOAD3D_MODEL_INFO", {"advanced": true}], "camera_info": ["LOAD3D_CAMERA", {"advanced": true}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model_3d", "viewport_state", "width", "height"], "optional": ["model_3d_info", "camera_info"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["FILE_3D_SPLAT_ANY", "LOAD3D_MODEL_INFO", "LOAD3D_CAMERA", "INT", "INT"], "output_is_list": [false, false, false, false, false], "output_name": ["model_3d", "model_3d_info", "camera_info", "width", "height"], "output_tooltips": [null, null, null, null, null], "output_matchtypes": null, "name": "PreviewGaussianSplat", "display_name": "Preview Splat", "description": "", "python_module": "comfy_extras.nodes_load_3d", "category": "3d", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["view splat", "view gaussian", "view gaussian splat", "preview gaussian", "preview gaussian splat", "view 3dgs", "preview 3dgs", "preview ply", "preview spz", "preview splat", "preview ksplat"], "essentials_category": null, "has_intermediate_output": false}, "PreviewPointCloud": {"input": {"required": {"model_3d": ["FILE_3D_POINT_CLOUD_ANY,FILE_3D_PLY", {"tooltip": "Point cloud file (.ply)"}], "viewport_state": ["LOAD_3D", {}], "width": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}], "height": ["INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}]}, "optional": {"model_3d_info": ["LOAD3D_MODEL_INFO", {"advanced": true}], "camera_info": ["LOAD3D_CAMERA", {"advanced": true}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model_3d", "viewport_state", "width", "height"], "optional": ["model_3d_info", "camera_info"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["FILE_3D_POINT_CLOUD_ANY", "LOAD3D_MODEL_INFO", "LOAD3D_CAMERA", "INT", "INT"], "output_is_list": [false, false, false, false, false], "output_name": ["model_3d", "model_3d_info", "camera_info", "width", "height"], "output_tooltips": [null, null, null, null, null], "output_matchtypes": null, "name": "PreviewPointCloud", "display_name": "Preview Point Cloud", "description": "", "python_module": "comfy_extras.nodes_load_3d", "category": "3d", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["view point cloud", "view pointcloud", "preview point cloud", "preview pointcloud", "preview ply"], "essentials_category": null, "has_intermediate_output": false}, "EmptyCosmosLatentVideo": {"input": {"required": {"width": ["INT", {"default": 1280, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 704, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 121, "min": 1, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyCosmosLatentVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cosmos", "category": "model/latent/cosmos", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CosmosImageToVideoLatent": {"input": {"required": {"vae": ["VAE", {}], "width": ["INT", {"default": 1280, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 704, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 121, "min": 1, "max": 16384, "step": 8}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"start_image": ["IMAGE", {}], "end_image": ["IMAGE", {}]}}, "input_order": {"required": ["vae", "width", "height", "length", "batch_size"], "optional": ["start_image", "end_image"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "CosmosImageToVideoLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cosmos", "category": "model/conditioning/cosmos", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CosmosPredict2ImageToVideoLatent": {"input": {"required": {"vae": ["VAE", {}], "width": ["INT", {"default": 848, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 93, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"start_image": ["IMAGE", {}], "end_image": ["IMAGE", {}]}}, "input_order": {"required": ["vae", "width", "height", "length", "batch_size"], "optional": ["start_image", "end_image"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "CosmosPredict2ImageToVideoLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cosmos", "category": "model/conditioning/cosmos", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveWEBM": {"input": {"required": {"images": ["IMAGE", {"tooltip": "RGBA images are saved with their alpha channel as transparency (vp9 codec only)."}], "filename_prefix": ["STRING", {"default": "ComfyUI", "multiline": false}], "codec": ["COMBO", {"multiselect": false, "options": ["vp9", "av1"]}], "fps": ["FLOAT", {"default": 24.0, "min": 0.01, "max": 1000.0, "step": 0.01}], "crf": ["FLOAT", {"tooltip": "Higher crf means lower quality with a smaller file size, lower crf means higher quality higher filesize.", "default": 32.0, "min": 0, "max": 63.0, "step": 1}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["images", "filename_prefix", "codec", "fps", "crf"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["images"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveWEBM", "display_name": "Save WEBM", "description": "", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export webm"], "essentials_category": null, "has_intermediate_output": false}, "SaveVideo": {"input": {"required": {"video": ["VIDEO", {"tooltip": "The video to save."}], "filename_prefix": ["STRING", {"tooltip": "The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes.", "default": "video/ComfyUI", "multiline": false}], "format": ["COMBO", {"tooltip": "The format to save the video as.", "default": "auto", "multiselect": false, "options": ["auto", "mp4"]}], "codec": ["COMBO", {"tooltip": "The codec to use for the video.", "default": "auto", "multiselect": false, "options": ["auto", "h264"]}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["video", "filename_prefix", "format", "codec"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["video"], "output_tooltips": [null], "output_matchtypes": null, "name": "SaveVideo", "display_name": "Save Video", "description": "Saves the input images to your ComfyUI output directory.", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export video"], "essentials_category": "Basics", "has_intermediate_output": false}, "CreateVideo": {"input": {"required": {"images": ["IMAGE", {"tooltip": "The images to create a video from."}], "fps": ["FLOAT", {"default": 30.0, "min": 1.0, "max": 120.0, "step": 1.0}]}, "optional": {"audio": ["AUDIO", {"tooltip": "The audio to add to the video."}], "bit_depth": ["INT", {"tooltip": "Bit depth of the created video. 10-bit keeps smoother gradients with less banding, but some players and downstream nodes may not support it.", "default": 8, "min": 8, "max": 10, "step": 2, "display": "number"}]}}, "input_order": {"required": ["images", "fps"], "optional": ["audio", "bit_depth"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "CreateVideo", "display_name": "Create Video", "description": "Create a video from images.", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["images to video"], "essentials_category": "Video Tools", "has_intermediate_output": false}, "GetVideoComponents": {"input": {"required": {"video": ["VIDEO", {"tooltip": "The video to extract components from."}]}}, "input_order": {"required": ["video"]}, "is_input_list": false, "output": ["IMAGE", "AUDIO", "FLOAT", "INT"], "output_is_list": [false, false, false, false], "output_name": ["images", "audio", "fps", "bit_depth"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "GetVideoComponents", "display_name": "Get Video Components", "description": "Extracts all components from a video: frames, audio, framerate, and bit depth.", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["extract frames", "split video", "video to images", "demux"], "essentials_category": null, "has_intermediate_output": false}, "LoadVideo": {"input": {"required": {"file": ["COMBO", {"multiselect": false, "options": [], "video_upload": true}]}}, "input_order": {"required": ["file"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LoadVideo", "display_name": "Load Video", "description": "", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["import video", "open video", "video file"], "essentials_category": "Basics", "has_intermediate_output": false}, "Video Slice": {"input": {"required": {"video": ["VIDEO", {}], "start_time": ["FLOAT", {"tooltip": "Start time in seconds", "default": 0.0, "min": -100000.0, "max": 100000.0, "step": 0.001}], "duration": ["FLOAT", {"tooltip": "Duration in seconds, or 0 for unlimited duration", "default": 0.0, "min": 0.0, "step": 0.001}], "strict_duration": ["BOOLEAN", {"tooltip": "If True, when the specified duration is not possible, an error will be raised.", "default": false}]}}, "input_order": {"required": ["video", "start_time", "duration", "strict_duration"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Video Slice", "display_name": "Trim Video", "description": "", "python_module": "comfy_extras.nodes_video", "category": "video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["trim video duration", "skip first frames", "frame load cap", "start time"], "essentials_category": "Video Tools", "has_intermediate_output": false}, "CLIPTextEncodeLumina2": {"input": {"required": {"system_prompt": ["COMBO", {"tooltip": "Lumina2 provide two types of system prompts:Superior: You are an assistant designed to generate superior images with the superior degree of image-text alignment based on textual prompts or user prompts. Alignment: You are an assistant designed to generate high-quality images with the highest degree of image-text alignment based on textual prompts.", "multiselect": false, "options": ["superior", "alignment"]}], "user_prompt": ["STRING", {"tooltip": "The text to be encoded.", "multiline": true, "dynamicPrompts": true}], "clip": ["CLIP", {"tooltip": "The CLIP model used for encoding the text."}]}}, "input_order": {"required": ["system_prompt", "user_prompt", "clip"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": ["A conditioning containing the embedded text used to guide the diffusion model."], "output_matchtypes": null, "name": "CLIPTextEncodeLumina2", "display_name": "CLIP Text Encode (Lumina 2)", "description": "Encodes a system prompt and a user prompt using a CLIP model into an embedding that can be used to guide the diffusion model towards generating specific images.", "python_module": "comfy_extras.nodes_lumina2", "category": "model/conditioning/lumina", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["lumina prompt"], "essentials_category": null, "has_intermediate_output": false}, "RenormCFG": {"input": {"required": {"model": ["MODEL", {}], "cfg_trunc": ["FLOAT", {"advanced": true, "default": 100, "min": 0.0, "max": 100.0, "step": 0.01}], "renorm_cfg": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "cfg_trunc", "renorm_cfg"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "RenormCFG", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lumina2", "category": "model/patch", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanTrackToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "tracks": ["STRING", {"default": "[]", "multiline": true}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "temperature": ["FLOAT", {"advanced": true, "default": 220.0, "min": 1.0, "max": 1000.0, "step": 0.1}], "topk": ["INT", {"advanced": true, "default": 2, "min": 1, "max": 10}], "start_image": ["IMAGE", {}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "tracks", "width", "height", "length", "batch_size", "temperature", "topk", "start_image"], "optional": ["clip_vision_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanTrackToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/move", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["motion tracking", "trajectory video", "point tracking", "keypoint animation"], "essentials_category": null, "has_intermediate_output": false}, "WanImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["clip_vision_output", "start_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanFunControlToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}], "control_video": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["clip_vision_output", "start_image", "control_video"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanFunControlToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/fun control", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan22FunControlToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"ref_image": ["IMAGE", {}], "control_video": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["ref_image", "control_video"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "Wan22FunControlToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/fun control", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanFunInpaintToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}], "end_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["clip_vision_output", "start_image", "end_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanFunInpaintToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/fun inpaint", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanFirstLastFrameToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"clip_vision_start_image": ["CLIP_VISION_OUTPUT", {}], "clip_vision_end_image": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}], "end_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["clip_vision_start_image", "clip_vision_end_image", "start_image", "end_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanFirstLastFrameToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanVaceToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1000.0, "step": 0.01}]}, "optional": {"control_video": ["IMAGE", {}], "control_masks": ["MASK", {}], "reference_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size", "strength"], "optional": ["control_video", "control_masks", "reference_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT", "INT"], "output_is_list": [false, false, false, false], "output_name": ["positive", "negative", "latent", "trim_latent"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "WanVaceToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/vace", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["video conditioning", "video control"], "essentials_category": null, "has_intermediate_output": false}, "TrimVideoLatent": {"input": {"required": {"samples": ["LATENT", {}], "trim_amount": ["INT", {"default": 0, "min": 0, "max": 99999}]}}, "input_order": {"required": ["samples", "trim_amount"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "TrimVideoLatent", "display_name": "Trim Video Latent", "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanCameraImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}], "camera_conditions": ["WAN_CAMERA_EMBEDDING", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["clip_vision_output", "start_image", "camera_conditions"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanCameraImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/camera", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanPhantomSubjectToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"images": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["images"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false, false], "output_name": ["positive", "negative_text", "negative_img_text", "latent"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "WanPhantomSubjectToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/phantom subject", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanSoundImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 77, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"audio_encoder_output": ["AUDIO_ENCODER_OUTPUT", {}], "ref_image": ["IMAGE", {}], "control_video": ["IMAGE", {}], "ref_motion": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["audio_encoder_output", "ref_image", "control_video", "ref_motion"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanSoundImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/sound", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanSoundImageToVideoExtend": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "length": ["INT", {"default": 77, "min": 1, "max": 16384, "step": 4}], "video_latent": ["LATENT", {}]}, "optional": {"audio_encoder_output": ["AUDIO_ENCODER_OUTPUT", {}], "ref_image": ["IMAGE", {}], "control_video": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "length", "video_latent"], "optional": ["audio_encoder_output", "ref_image", "control_video"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanSoundImageToVideoExtend", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/sound", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanHuMoImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 97, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"audio_encoder_output": ["AUDIO_ENCODER_OUTPUT", {}], "ref_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["audio_encoder_output", "ref_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanHuMoImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/humo", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanAnimateToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 77, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "continue_motion_max_frames": ["INT", {"default": 5, "min": 1, "max": 16384, "step": 4}], "video_frame_offset": ["INT", {"tooltip": "The amount of frames to seek in all the input videos. Used for generating longer videos by chunk. Connect to the video_frame_offset output of the previous node for extending a video.", "default": 0, "min": 0, "max": 16384, "step": 1}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "reference_image": ["IMAGE", {}], "face_video": ["IMAGE", {}], "pose_video": ["IMAGE", {}], "background_video": ["IMAGE", {}], "character_mask": ["MASK", {}], "continue_motion": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size", "continue_motion_max_frames", "video_frame_offset"], "optional": ["clip_vision_output", "reference_image", "face_video", "pose_video", "background_video", "character_mask", "continue_motion"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT", "INT", "INT", "INT"], "output_is_list": [false, false, false, false, false, false], "output_name": ["positive", "negative", "latent", "trim_latent", "trim_image", "video_frame_offset"], "output_tooltips": [null, null, null, null, null, null], "output_matchtypes": null, "name": "WanAnimateToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/animate", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan22ImageToVideoLatent": {"input": {"required": {"vae": ["VAE", {}], "width": ["INT", {"default": 1280, "min": 32, "max": 16384, "step": 32}], "height": ["INT", {"default": 704, "min": 32, "max": 16384, "step": 32}], "length": ["INT", {"default": 49, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"start_image": ["IMAGE", {}]}}, "input_order": {"required": ["vae", "width", "height", "length", "batch_size"], "optional": ["start_image"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan22ImageToVideoLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanInfiniteTalkToVideo": {"input": {"required": {"mode": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "single_speaker", "inputs": {"required": {}}}, {"key": "two_speakers", "inputs": {"required": {}, "optional": {"audio_encoder_output_2": ["AUDIO_ENCODER_OUTPUT", {}], "mask_1": ["MASK", {"tooltip": "Mask for the first speaker, required if using two audio inputs."}], "mask_2": ["MASK", {"tooltip": "Mask for the second speaker, required if using two audio inputs."}]}}}]}], "model": ["MODEL", {}], "model_patch": ["MODEL_PATCH", {}], "positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "audio_encoder_output_1": ["AUDIO_ENCODER_OUTPUT", {}], "motion_frame_count": ["INT", {"tooltip": "Number of previous frames to use as motion context.", "advanced": true, "default": 9, "min": 1, "max": 33, "step": 1}], "audio_scale": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}], "start_image": ["IMAGE", {}], "previous_frames": ["IMAGE", {}]}}, "input_order": {"required": ["mode", "model", "model_patch", "positive", "negative", "vae", "width", "height", "length", "audio_encoder_output_1", "motion_frame_count", "audio_scale"], "optional": ["clip_vision_output", "start_image", "previous_frames"]}, "is_input_list": false, "output": ["MODEL", "CONDITIONING", "CONDITIONING", "LATENT", "INT"], "output_is_list": [false, false, false, false, false], "output_name": ["model", "positive", "negative", "latent", "trim_image"], "output_tooltips": [null, null, null, null, null], "output_matchtypes": null, "name": "WanInfiniteTalkToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wan", "category": "model/conditioning/wan/infinite talk", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BerniniConditioning": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 8192, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 8192, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 8192, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"source_video": ["IMAGE", {"tooltip": "Source video to edit or restyle (v2v, rv2v). Resized to width/height and trimmed to length."}], "reference_video": ["IMAGE", {"tooltip": "Video to insert into the source video (ads2v)."}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {"tooltip": "Reference image injected as an in-context token (r2v, rv2v)."}]}}, "prefix": "reference_image_", "min": 0, "max": 8}}], "ref_max_size": ["INT", {"tooltip": "Max size for the long edge of reference_video and reference_images. Resized with preserved aspect ratio and snapped to 16px.", "default": 848, "min": 16, "max": 8192, "step": 16}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["source_video", "reference_video", "reference_images", "ref_max_size"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "BerniniConditioning", "display_name": "Bernini Conditioning", "description": "Conditioning node for Bernini in-context video/image conditioning. It can be used for the following tasks: t2v (text-to-video), v2v (video-to-video), rv2v (reference-guided video editing), r2v (reference-to-video), ads2v (insert image/video into video).Reference images injected as in-context tokens (r2v, rv2v) are encoded independently at their own native aspect ratio (long edge capped at ref_max_size)", "python_module": "comfy_extras.nodes_bernini", "category": "model/conditioning/bernini", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LotusConditioning": {"input": {"required": {}}, "input_order": {"required": []}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["conditioning"], "output_tooltips": [null], "output_matchtypes": null, "name": "LotusConditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_lotus", "category": "model/conditioning/lotus", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyLatentHunyuan3Dv2": {"input": {"required": {"resolution": ["INT", {"default": 3072, "min": 1, "max": 8192}], "batch_size": ["INT", {"tooltip": "The number of latent images in the batch.", "default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["resolution", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyLatentHunyuan3Dv2", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "model/latent/hunyuan 3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Hunyuan3Dv2Conditioning": {"input": {"required": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": ["clip_vision_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Hunyuan3Dv2Conditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "model/conditioning/hunyuan 3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Hunyuan3Dv2ConditioningMultiView": {"input": {"required": {}, "optional": {"front": ["CLIP_VISION_OUTPUT", {}], "left": ["CLIP_VISION_OUTPUT", {}], "back": ["CLIP_VISION_OUTPUT", {}], "right": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": [], "optional": ["front", "left", "back", "right"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Hunyuan3Dv2ConditioningMultiView", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "model/conditioning/hunyuan 3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VAEDecodeHunyuan3D": {"input": {"required": {"samples": ["LATENT", {}], "vae": ["VAE", {}], "num_chunks": ["INT", {"advanced": true, "default": 8000, "min": 1000, "max": 500000}], "octree_resolution": ["INT", {"advanced": true, "default": 256, "min": 16, "max": 512}]}}, "input_order": {"required": ["samples", "vae", "num_chunks", "octree_resolution"]}, "is_input_list": false, "output": ["VOXEL"], "output_is_list": [false], "output_name": ["VOXEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "VAEDecodeHunyuan3D", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "model/latent/hunyuan 3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VoxelToMeshBasic": {"input": {"required": {"voxel": ["VOXEL", {}], "threshold": ["FLOAT", {"default": 0.6, "min": -1.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["voxel", "threshold"]}, "is_input_list": false, "output": ["MESH"], "output_is_list": [false], "output_name": ["MESH"], "output_tooltips": [null], "output_matchtypes": null, "name": "VoxelToMeshBasic", "display_name": "Voxel to Mesh (Basic) (DEPRECATED)", "description": "Converts a voxel grid to a mesh.", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "3d", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VoxelToMesh": {"input": {"required": {"voxel": ["VOXEL", {}], "algorithm": ["COMBO", {"multiselect": false, "options": ["surface net", "basic"]}], "threshold": ["FLOAT", {"default": 0.6, "min": -1.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["voxel", "algorithm", "threshold"]}, "is_input_list": false, "output": ["MESH"], "output_is_list": [false], "output_name": ["MESH"], "output_tooltips": [null], "output_matchtypes": null, "name": "VoxelToMesh", "display_name": "Voxel to Mesh", "description": "Converts a voxel grid to a mesh.", "python_module": "comfy_extras.nodes_hunyuan3d", "category": "3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PrimitiveString": {"input": {"required": {"value": ["STRING", {"multiline": false}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveString", "display_name": "Text String (DEPRECATED)", "description": "", "python_module": "comfy_extras.nodes_primitive", "category": "utilities/primitive", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["text", "string", "text box", "prompt"], "essentials_category": null, "has_intermediate_output": false}, "PrimitiveStringMultiline": {"input": {"required": {"value": ["STRING", {"multiline": true}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveStringMultiline", "display_name": "Input Text", "description": "", "python_module": "comfy_extras.nodes_primitive", "category": "utilities/primitive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["text", "string", "text multiline", "string multiline", "text box", "prompt"], "essentials_category": "Basics", "has_intermediate_output": false}, "PrimitiveInt": {"input": {"required": {"value": ["INT", {"min": -9223372036854775807, "max": 9223372036854775807, "control_after_generate": "fixed"}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["INT"], "output_is_list": [false], "output_name": ["INT"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveInt", "display_name": "Int", "description": "", "python_module": "comfy_extras.nodes_primitive", "category": "utilities/primitive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PrimitiveFloat": {"input": {"required": {"value": ["FLOAT", {"min": -9223372036854775807, "max": 9223372036854775807, "step": 0.1}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["FLOAT"], "output_is_list": [false], "output_name": ["FLOAT"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveFloat", "display_name": "Float", "description": "", "python_module": "comfy_extras.nodes_primitive", "category": "utilities/primitive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PrimitiveBoolean": {"input": {"required": {"value": ["BOOLEAN", {}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "output_tooltips": [null], "output_matchtypes": null, "name": "PrimitiveBoolean", "display_name": "Boolean", "description": "", "python_module": "comfy_extras.nodes_primitive", "category": "utilities/primitive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CFGZeroStar": {"input": {"required": {"model": ["MODEL", {}]}}, "input_order": {"required": ["model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["patched_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "CFGZeroStar", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cfg", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CFGNorm": {"input": {"required": {"model": ["MODEL", {}], "strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}]}, "optional": {"pre_cfg": ["BOOLEAN", {"tooltip": "If true, rescale the combined noise BEFORE the sampler's CFG combine, without clamping (can amplify). Matches the norm-scaled CFG used by models like Lens. Default false keeps the original post-CFG x0-space attenuate-only behavior.", "default": false}]}}, "input_order": {"required": ["model", "strength"], "optional": ["pre_cfg"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["patched_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "CFGNorm", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_cfg", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OptimalStepsScheduler": {"input": {"required": {"model_type": ["COMBO", {"multiselect": false, "options": ["FLUX", "Wan", "Chroma"]}], "steps": ["INT", {"default": 20, "min": 3, "max": 1000}], "denoise": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model_type", "steps", "denoise"]}, "is_input_list": false, "output": ["SIGMAS"], "output_is_list": [false], "output_name": ["SIGMAS"], "output_tooltips": [null], "output_matchtypes": null, "name": "OptimalStepsScheduler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_optimalsteps", "category": "model/sampling/schedulers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "QuadrupleCLIPLoader": {"input": {"required": {"clip_name1": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}], "clip_name2": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}], "clip_name3": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}], "clip_name4": ["COMBO", {"multiselect": false, "options": ["clip_l.safetensors", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]}]}}, "input_order": {"required": ["clip_name1", "clip_name2", "clip_name3", "clip_name4"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "output_tooltips": [null], "output_matchtypes": null, "name": "QuadrupleCLIPLoader", "display_name": "Load CLIP (Quadruple)", "description": "Recipes:\nhidream: long clip-l, long clip-g, t5xxl, llama_8b_3.1_instruct", "python_module": "comfy_extras.nodes_hidream", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeHiDream": {"input": {"required": {"clip": ["CLIP", {}], "clip_l": ["STRING", {"multiline": true, "dynamicPrompts": true}], "clip_g": ["STRING", {"multiline": true, "dynamicPrompts": true}], "t5xxl": ["STRING", {"multiline": true, "dynamicPrompts": true}], "llama": ["STRING", {"multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["clip", "clip_l", "clip_g", "t5xxl", "llama"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeHiDream", "display_name": "CLIP Text Encode (HiDream)", "description": "", "python_module": "comfy_extras.nodes_hidream", "category": "model/conditioning/hidream", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["hidream prompt"], "essentials_category": null, "has_intermediate_output": false}, "FreSca": {"input": {"required": {"model": ["MODEL", {}], "scale_low": ["FLOAT", {"tooltip": "Scaling factor for low-frequency components", "advanced": true, "default": 1.0, "min": 0, "max": 10, "step": 0.01}], "scale_high": ["FLOAT", {"tooltip": "Scaling factor for high-frequency components", "advanced": true, "default": 1.25, "min": 0, "max": 10, "step": 0.01}], "freq_cutoff": ["INT", {"tooltip": "Number of frequency indices around center to consider as low-frequency", "advanced": true, "default": 20, "min": 1, "max": 10000, "step": 1}]}}, "input_order": {"required": ["model", "scale_low", "scale_high", "freq_cutoff"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "FreSca", "display_name": "FreSca", "description": "Applies frequency-dependent scaling to the guidance", "python_module": "comfy_extras.nodes_fresca", "category": "experimental", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["frequency guidance"], "essentials_category": null, "has_intermediate_output": false}, "APG": {"input": {"required": {"model": ["MODEL", {}], "eta": ["FLOAT", {"tooltip": "Controls the scale of the parallel guidance vector. Default CFG behavior at a setting of 1.", "advanced": true, "default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}], "norm_threshold": ["FLOAT", {"tooltip": "Normalize guidance vector to this value, normalization disable at a setting of 0.", "advanced": true, "default": 5.0, "min": 0.0, "max": 50.0, "step": 0.1}], "momentum": ["FLOAT", {"tooltip": "Controls a running average of guidance during diffusion, disabled at a setting of 0.", "advanced": true, "default": 0.0, "min": -5.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "eta", "norm_threshold", "momentum"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "APG", "display_name": "Adaptive Projected Guidance", "description": "", "python_module": "comfy_extras.nodes_apg", "category": "model/sampling/custom", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PreviewAny": {"input": {"required": {"source": ["*", {}]}}, "input_order": {"required": ["source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "name": "PreviewAny", "display_name": "Preview as Text", "description": "", "python_module": "comfy_extras.nodes_preview_any", "category": "utilities", "output_node": true, "has_intermediate_output": false, "search_aliases": ["show output", "inspect", "debug", "print value", "show text"]}, "TextEncodeAceStepAudio": {"input": {"required": {"clip": ["CLIP", {}], "tags": ["STRING", {"multiline": true, "dynamicPrompts": true}], "lyrics": ["STRING", {"multiline": true, "dynamicPrompts": true}], "lyrics_strength": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["clip", "tags", "lyrics", "lyrics_strength"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeAceStepAudio", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_ace", "category": "model/conditioning/ace", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyAceStepLatentAudio": {"input": {"required": {"seconds": ["FLOAT", {"default": 120.0, "min": 1.0, "max": 1000.0, "step": 0.1}], "batch_size": ["INT", {"tooltip": "The number of latent images in the batch.", "default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["seconds", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyAceStepLatentAudio", "display_name": "Empty Ace Step 1.0 Latent Audio", "description": "", "python_module": "comfy_extras.nodes_ace", "category": "model/latent/ace", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TextEncodeAceStepAudio1.5": {"input": {"required": {"clip": ["CLIP", {}], "tags": ["STRING", {"multiline": true, "dynamicPrompts": true}], "lyrics": ["STRING", {"multiline": true, "dynamicPrompts": true}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "bpm": ["INT", {"default": 120, "min": 10, "max": 300}], "duration": ["FLOAT", {"default": 120.0, "min": 0.0, "max": 2000.0, "step": 0.1}], "timesignature": ["COMBO", {"multiselect": false, "options": ["2", "3", "4", "6"]}], "language": ["COMBO", {"default": "en", "multiselect": false, "options": ["ar", "az", "bg", "bn", "ca", "cs", "da", "de", "el", "en", "es", "fa", "fi", "fr", "he", "hi", "hr", "ht", "hu", "id", "is", "it", "ja", "ko", "la", "lt", "ms", "ne", "nl", "no", "pa", "pl", "pt", "ro", "ru", "sa", "sk", "sr", "sv", "sw", "ta", "te", "th", "tl", "tr", "uk", "ur", "vi", "yue", "zh", "unknown"]}], "keyscale": ["COMBO", {"multiselect": false, "options": ["C major", "C# major", "Db major", "D major", "D# major", "Eb major", "E major", "F major", "F# major", "Gb major", "G major", "G# major", "Ab major", "A major", "A# major", "Bb major", "B major", "C minor", "C# minor", "Db minor", "D minor", "D# minor", "Eb minor", "E minor", "F minor", "F# minor", "Gb minor", "G minor", "G# minor", "Ab minor", "A minor", "A# minor", "Bb minor", "B minor"]}], "generate_audio_codes": ["BOOLEAN", {"tooltip": "Enable the LLM that generates audio codes. This can be slow but will increase the quality of the generated audio. Turn this off if you are giving the model an audio reference.", "advanced": true, "default": true}], "cfg_scale": ["FLOAT", {"advanced": true, "default": 2.0, "min": 0.0, "max": 100.0, "step": 0.1}], "temperature": ["FLOAT", {"advanced": true, "default": 0.85, "min": 0.0, "max": 2.0, "step": 0.01}], "top_p": ["FLOAT", {"advanced": true, "default": 0.9, "min": 0.0, "max": 2000.0, "step": 0.01}], "top_k": ["INT", {"advanced": true, "default": 0, "min": 0, "max": 100}], "min_p": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}]}}, "input_order": {"required": ["clip", "tags", "lyrics", "seed", "bpm", "duration", "timesignature", "language", "keyscale", "generate_audio_codes", "cfg_scale", "temperature", "top_p", "top_k", "min_p"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeAceStepAudio1.5", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_ace", "category": "model/conditioning/ace", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyAceStep1.5LatentAudio": {"input": {"required": {"seconds": ["FLOAT", {"default": 120.0, "min": 1.0, "max": 1000.0, "step": 0.01}], "batch_size": ["INT", {"tooltip": "The number of latent images in the batch.", "default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["seconds", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyAceStep1.5LatentAudio", "display_name": "Empty Ace Step 1.5 Latent Audio", "description": "", "python_module": "comfy_extras.nodes_ace", "category": "model/latent/ace", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReferenceTimbreAudio": {"input": {"required": {"conditioning": ["CONDITIONING", {}]}, "optional": {"latent": ["LATENT", {}]}}, "input_order": {"required": ["conditioning"], "optional": ["latent"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReferenceTimbreAudio", "display_name": "Set Reference Audio", "description": "This node sets the reference audio for ace step 1.5", "python_module": "comfy_extras.nodes_ace", "category": "model/conditioning", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StringFormat": {"input": {"required": {"values": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"value": ["*", {}]}}, "names": ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"], "min": 0}}], "f_string": ["STRING", {"default": "{a}", "multiline": true}]}}, "input_order": {"required": ["values", "f_string"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringFormat", "display_name": "Format Text", "description": "Same as Python's string format method. Supports all of Python's format options and features.", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["string", "format"], "essentials_category": null, "has_intermediate_output": false}, "StringConcatenate": {"input": {"required": {"string_a": ["STRING", {"multiline": true}], "string_b": ["STRING", {"multiline": true}], "delimiter": ["STRING", {"default": "", "multiline": false}]}}, "input_order": {"required": ["string_a", "string_b", "delimiter"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringConcatenate", "display_name": "Concatenate Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["concatenate", "text concat", "join text", "merge text", "combine strings", "string concat", "append text", "combine text"], "essentials_category": null, "has_intermediate_output": false}, "StringSubstring": {"input": {"required": {"string": ["STRING", {"multiline": true}], "start": ["INT", {}], "end": ["INT", {}]}}, "input_order": {"required": ["string", "start", "end"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringSubstring", "display_name": "Substring", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["substring", "extract text", "text portion"], "essentials_category": null, "has_intermediate_output": false}, "StringLength": {"input": {"required": {"string": ["STRING", {"multiline": true}]}}, "input_order": {"required": ["string"]}, "is_input_list": false, "output": ["INT"], "output_is_list": [false], "output_name": ["length"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringLength", "display_name": "Text Length", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["character count", "text size", "string length"], "essentials_category": null, "has_intermediate_output": false}, "CaseConverter": {"input": {"required": {"string": ["STRING", {"multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["UPPERCASE", "lowercase", "Capitalize", "Title Case"]}]}}, "input_order": {"required": ["string", "mode"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CaseConverter", "display_name": "Convert Text Case", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["case converter", "text case", "uppercase", "lowercase", "capitalize"], "essentials_category": null, "has_intermediate_output": false}, "StringTrim": {"input": {"required": {"string": ["STRING", {"multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["Both", "Left", "Right"]}]}}, "input_order": {"required": ["string", "mode"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringTrim", "display_name": "Trim Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["trim", "clean whitespace", "remove whitespace", "remove spaces", "strip"], "essentials_category": null, "has_intermediate_output": false}, "StringReplace": {"input": {"required": {"string": ["STRING", {"multiline": true}], "find": ["STRING", {"multiline": true}], "replace": ["STRING", {"multiline": true}]}}, "input_order": {"required": ["string", "find", "replace"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringReplace", "display_name": "Replace Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["replace", "find and replace", "substitute", "swap text"], "essentials_category": null, "has_intermediate_output": false}, "StringContains": {"input": {"required": {"string": ["STRING", {"multiline": true}], "substring": ["STRING", {"multiline": true}], "case_sensitive": ["BOOLEAN", {"advanced": true, "default": true}]}}, "input_order": {"required": ["string", "substring", "case_sensitive"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["contains"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringContains", "display_name": "Contains Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["contains", "text includes", "string includes"], "essentials_category": null, "has_intermediate_output": false}, "StringCompare": {"input": {"required": {"string_a": ["STRING", {"multiline": true}], "string_b": ["STRING", {"multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["Starts With", "Ends With", "Equal"]}], "case_sensitive": ["BOOLEAN", {"advanced": true, "default": true}]}}, "input_order": {"required": ["string_a", "string_b", "mode", "case_sensitive"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "output_tooltips": [null], "output_matchtypes": null, "name": "StringCompare", "display_name": "Compare Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["compare", "text match", "string equals", "starts with", "ends with"], "essentials_category": null, "has_intermediate_output": false}, "RegexMatch": {"input": {"required": {"string": ["STRING", {"multiline": true}], "regex_pattern": ["STRING", {"multiline": true}], "case_insensitive": ["BOOLEAN", {"advanced": true, "default": true}], "multiline": ["BOOLEAN", {"advanced": true, "default": false}], "dotall": ["BOOLEAN", {"advanced": true, "default": false}]}}, "input_order": {"required": ["string", "regex_pattern", "case_insensitive", "multiline", "dotall"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["matches"], "output_tooltips": [null], "output_matchtypes": null, "name": "RegexMatch", "display_name": "Match Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["regex match", "regex", "pattern match", "text contains", "string match"], "essentials_category": null, "has_intermediate_output": false}, "RegexExtract": {"input": {"required": {"string": ["STRING", {"multiline": true}], "regex_pattern": ["STRING", {"multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["First Match", "All Matches", "First Group", "All Groups"]}], "case_insensitive": ["BOOLEAN", {"advanced": true, "default": true}], "multiline": ["BOOLEAN", {"advanced": true, "default": false}], "dotall": ["BOOLEAN", {"advanced": true, "default": false}], "group_index": ["INT", {"advanced": true, "default": 1, "min": 0, "max": 100}]}}, "input_order": {"required": ["string", "regex_pattern", "mode", "case_insensitive", "multiline", "dotall", "group_index"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "RegexExtract", "display_name": "Extract Text", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["regex extract", "regex", "pattern extract", "text parser", "parse text"], "essentials_category": null, "has_intermediate_output": false}, "RegexReplace": {"input": {"required": {"string": ["STRING", {"multiline": true}], "regex_pattern": ["STRING", {"multiline": true}], "replace": ["STRING", {"multiline": true}]}, "optional": {"case_insensitive": ["BOOLEAN", {"advanced": true, "default": true}], "multiline": ["BOOLEAN", {"advanced": true, "default": false}], "dotall": ["BOOLEAN", {"tooltip": "When enabled, the dot (.) character will match any character including newline characters. When disabled, dots won't match newlines.", "advanced": true, "default": false}], "count": ["INT", {"tooltip": "Maximum number of replacements to make. Set to 0 to replace all occurrences (default). Set to 1 to replace only the first match, 2 for the first two matches, etc.", "advanced": true, "default": 0, "min": 0, "max": 100}]}}, "input_order": {"required": ["string", "regex_pattern", "replace"], "optional": ["case_insensitive", "multiline", "dotall", "count"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "RegexReplace", "display_name": "Replace Text (Regex)", "description": "Find and replace text using regex patterns.", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["regex replace", "regex", "pattern replace", "substitution"], "essentials_category": null, "has_intermediate_output": false}, "JsonExtractString": {"input": {"required": {"json_string": ["STRING", {"multiline": true}], "key": ["STRING", {"multiline": false}]}}, "input_order": {"required": ["json_string", "key"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "JsonExtractString", "display_name": "Extract Text from JSON", "description": "", "python_module": "comfy_extras.nodes_string", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["json", "extract json", "parse json", "json value", "read json"], "essentials_category": null, "has_intermediate_output": false}, "WanCameraEmbedding": {"input": {"required": {"camera_pose": ["COMBO", {"default": "Static", "multiselect": false, "options": ["Static", "Pan Up", "Pan Down", "Pan Left", "Pan Right", "Zoom In", "Zoom Out", "Anti Clockwise (ACW)", "ClockWise (CW)"]}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}]}, "optional": {"speed": ["FLOAT", {"default": 1.0, "min": 0, "max": 10.0, "step": 0.1}], "fx": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0, "max": 1, "step": 1e-09}], "fy": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0, "max": 1, "step": 1e-09}], "cx": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0, "max": 1, "step": 0.01}], "cy": ["FLOAT", {"advanced": true, "default": 0.5, "min": 0, "max": 1, "step": 0.01}]}}, "input_order": {"required": ["camera_pose", "width", "height", "length"], "optional": ["speed", "fx", "fy", "cx", "cy"]}, "is_input_list": false, "output": ["WAN_CAMERA_EMBEDDING", "INT", "INT", "INT"], "output_is_list": [false, false, false, false], "output_name": ["camera_embedding", "width", "height", "length"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "WanCameraEmbedding", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_camera_trajectory", "category": "model/conditioning/wan/camera", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReferenceLatent": {"input": {"required": {"conditioning": ["CONDITIONING", {}]}, "optional": {"latent": ["LATENT", {}]}}, "input_order": {"required": ["conditioning"], "optional": ["latent"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReferenceLatent", "display_name": "Set Reference Latent", "description": "This node sets the guiding latent for an edit model. If the model supports it you can chain multiple to set multiple reference images.", "python_module": "comfy_extras.nodes_edit_model", "category": "model/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TCFG": {"input": {"required": {"model": ["MODEL", {}]}}, "input_order": {"required": ["model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["patched_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "TCFG", "display_name": "Tangential Damping CFG", "description": "TCFG \u2013 Tangential Damping CFG (2503.18137)\n\nRefine the uncond (negative) to align with the cond (positive) for improving quality.", "python_module": "comfy_extras.nodes_tcfg", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ContextWindowsManual": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to apply context windows to during sampling."}], "context_length": ["INT", {"tooltip": "The length of the context window.", "default": 16, "min": 1}], "context_overlap": ["INT", {"tooltip": "The overlap of the context window.", "default": 4, "min": 0}], "context_schedule": ["COMBO", {"tooltip": "Step-dependent scheduling algorithm for context windows.", "default": "standard_static", "multiselect": false, "options": ["standard_static", "standard_uniform", "looped_uniform", "batched"]}], "context_stride": ["INT", {"tooltip": "The stride of the context window; only applicable to uniform schedules.", "default": 1, "min": 1}], "closed_loop": ["BOOLEAN", {"tooltip": "Whether to close the context window loop; only applicable to looped schedules.", "default": false}], "fuse_method": ["COMBO", {"tooltip": "The method to use to fuse the context windows.", "default": "pyramid", "multiselect": false, "options": ["pyramid", "relative", "flat", "overlap-linear"]}], "dim": ["INT", {"tooltip": "The dimension to apply the context windows to.", "default": 0, "min": 0, "max": 5}], "freenoise": ["BOOLEAN", {"tooltip": "Whether to apply FreeNoise noise shuffling, improves window blending.", "default": false}], "cond_retain_index_list": ["STRING", {"tooltip": "List of latent indices to retain in the conditioning tensors for each window. For concat-style I2V models (e.g. Wan I2V, HunyuanVideo I2V, Cosmos I2V, SVD) the encoded start image lives in the c_concat conditioning channels; setting this to '0' will retain that start image content at sub-pos 0 of every window.", "default": "", "multiline": false}], "split_conds_to_windows": ["BOOLEAN", {"tooltip": "Whether to split multiple conditionings (created by ConditionCombine) to each window based on region index.", "default": false}], "latent_retain_index_list": ["STRING", {"tooltip": "List of latent indices to retain in the noise latent itself for each window. Use for workflows where reference content (e.g. a start image) lives directly in the noise latent rather than in separate conditioning channels (e.g. inplace-style I2V like LTXV, AnimateDiff). Independent of cond_retain_index_list.", "default": "", "multiline": false}], "causal_window_fix": ["BOOLEAN", {"tooltip": "Whether to add a causal fix frame to non-0-indexed context windows.", "default": true}]}}, "input_order": {"required": ["model", "context_length", "context_overlap", "context_schedule", "context_stride", "closed_loop", "fuse_method", "dim", "freenoise", "cond_retain_index_list", "split_conds_to_windows", "latent_retain_index_list", "causal_window_fix"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The model with context windows applied during sampling."], "output_matchtypes": null, "name": "ContextWindowsManual", "display_name": "Context Windows (Manual)", "description": "Manually set context windows.", "python_module": "comfy_extras.nodes_context_windows", "category": "model/patch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanContextWindowsManual": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to apply context windows to during sampling."}], "context_length": ["INT", {"tooltip": "The length of the context window in real frames. Must be 4*n + 1.", "default": 81, "min": 1, "max": 16384, "step": 4}], "context_overlap": ["INT", {"tooltip": "The overlap of the context window in real frames.", "default": 30, "min": 0}], "context_schedule": ["COMBO", {"tooltip": "Step-dependent scheduling algorithm for context windows.", "default": "standard_uniform", "multiselect": false, "options": ["standard_static", "standard_uniform", "looped_uniform", "batched"]}], "context_stride": ["INT", {"tooltip": "The stride of the context window; only applicable to uniform schedules.", "advanced": true, "default": 1, "min": 1}], "closed_loop": ["BOOLEAN", {"tooltip": "Whether to close the context window loop; only applicable to looped schedules.", "advanced": true, "default": false}], "fuse_method": ["COMBO", {"tooltip": "The method to use to fuse the context windows.", "default": "pyramid", "multiselect": false, "options": ["pyramid", "relative", "flat", "overlap-linear"]}], "freenoise": ["BOOLEAN", {"tooltip": "Whether to apply FreeNoise noise shuffling, improves window blending.", "advanced": true, "default": true}], "retain_first_frame": ["BOOLEAN", {"tooltip": "Retain the first I2V frame in every context window (may help retain initial reference).", "default": false}], "split_conds_to_windows": ["BOOLEAN", {"tooltip": "Whether to split multiple conditionings (created by ConditionCombine) to each window based on region index.", "advanced": true, "default": false}]}}, "input_order": {"required": ["model", "context_length", "context_overlap", "context_schedule", "context_stride", "closed_loop", "fuse_method", "freenoise", "retain_first_frame", "split_conds_to_windows"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The model with context windows applied during sampling."], "output_matchtypes": null, "name": "WanContextWindowsManual", "display_name": "Wan Context Windows", "description": "Set context windows for Wan-like models.", "python_module": "comfy_extras.nodes_context_windows", "category": "model/patch/wan", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LTXVContextWindows": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to apply context windows to during sampling."}], "context_length": ["INT", {"tooltip": "The length of the context window in real frames. Must be 8*n + 1.", "default": 145, "min": 1, "max": 16384, "step": 8}], "context_overlap": ["INT", {"tooltip": "The overlap of the context window in real frames.", "default": 40, "min": 0, "step": 8}], "context_schedule": ["COMBO", {"tooltip": "Step-dependent scheduling algorithm for context windows.", "default": "standard_uniform", "multiselect": false, "options": ["standard_static", "standard_uniform", "looped_uniform", "batched"]}], "context_stride": ["INT", {"tooltip": "The stride of the context window; only applicable to uniform schedules.", "advanced": true, "default": 1, "min": 1}], "closed_loop": ["BOOLEAN", {"tooltip": "Whether to close the context window loop; only applicable to looped schedules.", "advanced": true, "default": false}], "fuse_method": ["COMBO", {"tooltip": "The method to use to fuse the context windows.", "default": "pyramid", "multiselect": false, "options": ["pyramid", "relative", "flat", "overlap-linear"]}], "freenoise": ["BOOLEAN", {"tooltip": "Whether to apply FreeNoise noise shuffling, improves window blending.", "advanced": true, "default": true}], "retain_first_frame": ["BOOLEAN", {"tooltip": "Retain the first latent frame in every context window (may help retain initial reference).", "default": false}], "split_conds_to_windows": ["BOOLEAN", {"tooltip": "Whether to split multiple conditionings (created by ConditionCombine) to each window based on region index.", "advanced": true, "default": false}]}}, "input_order": {"required": ["model", "context_length", "context_overlap", "context_schedule", "context_stride", "closed_loop", "fuse_method", "freenoise", "retain_first_frame", "split_conds_to_windows"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The model with context windows applied during sampling."], "output_matchtypes": null, "name": "LTXVContextWindows", "display_name": "LTXV Context Windows", "description": "Set context windows for LTXV-like models.", "python_module": "comfy_extras.nodes_context_windows", "category": "model/patch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TextEncodeQwenImageEdit": {"input": {"required": {"clip": ["CLIP", {}], "prompt": ["STRING", {"multiline": true, "dynamicPrompts": true}]}, "optional": {"vae": ["VAE", {}], "image": ["IMAGE", {}]}}, "input_order": {"required": ["clip", "prompt"], "optional": ["vae", "image"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeQwenImageEdit", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_qwen", "category": "model/conditioning/qwen image", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TextEncodeQwenImageEditPlus": {"input": {"required": {"clip": ["CLIP", {}], "prompt": ["STRING", {"multiline": true, "dynamicPrompts": true}]}, "optional": {"vae": ["VAE", {}], "image1": ["IMAGE", {}], "image2": ["IMAGE", {}], "image3": ["IMAGE", {}]}}, "input_order": {"required": ["clip", "prompt"], "optional": ["vae", "image1", "image2", "image3"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeQwenImageEditPlus", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_qwen", "category": "model/conditioning/qwen image", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyQwenImageLayeredLatentImage": {"input": {"required": {"width": ["INT", {"default": 640, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 640, "min": 16, "max": 16384, "step": 16}], "layers": ["INT", {"default": 3, "min": 0, "max": 16384, "step": 1}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "layers", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyQwenImageLayeredLatentImage", "display_name": "Empty Qwen Image Layered Latent", "description": "", "python_module": "comfy_extras.nodes_qwen", "category": "model/latent/qwen", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TextEncodeBooguEdit": {"input": {"required": {"clip": ["CLIP", {}], "prompt": ["STRING", {"multiline": true, "dynamicPrompts": true}], "negative_prompt": ["STRING", {"advanced": true, "multiline": true, "dynamicPrompts": true}], "vae": ["VAE", {}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Reference image(s) to edit. Boogu focuses on one reference per sample; more are allowed.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16"], "min": 0}}]}}, "input_order": {"required": ["clip", "prompt", "negative_prompt", "vae", "images"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "TextEncodeBooguEdit", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_boogu", "category": "model/conditioning/boogu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyChromaRadianceLatentImage": {"input": {"required": {"width": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 1024, "min": 16, "max": 16384, "step": 16}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyChromaRadianceLatentImage", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_chroma_radiance", "category": "model/latent/chroma radiance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ChromaRadianceOptions": {"input": {"required": {"model": ["MODEL", {}], "preserve_wrapper": ["BOOLEAN", {"tooltip": "When enabled, will delegate to an existing model function wrapper if it exists. Generally should be left enabled.", "default": true}], "start_sigma": ["FLOAT", {"tooltip": "First sigma that these options will be in effect.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0}], "end_sigma": ["FLOAT", {"tooltip": "Last sigma that these options will be in effect.", "advanced": true, "default": 0.0, "min": 0.0, "max": 1.0}], "nerf_tile_size": ["INT", {"tooltip": "Allows overriding the default NeRF tile size. -1 means use the default (32). 0 means use non-tiling mode (may require a lot of VRAM).", "advanced": true, "default": -1, "min": -1}], "force_sequential_txt_ids": ["BOOLEAN", {"tooltip": "Force usage of sequential text token IDs instead of zeroes. Should be used for checkpoints from 2026-05-22 to 2026-06-01 that are trained in this way but do not contain the __sequential__ key in the state dict.", "advanced": true, "default": false}]}}, "input_order": {"required": ["model", "preserve_wrapper", "start_sigma", "end_sigma", "nerf_tile_size", "force_sequential_txt_ids"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "ChromaRadianceOptions", "display_name": null, "description": "Allows setting advanced options for the Chroma Radiance model.", "python_module": "comfy_extras.nodes_chroma_radiance", "category": "model/patch/chroma radiance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PiDConditioning": {"input": {"required": {"positive": ["CONDITIONING", {}], "latent": ["LATENT", {"tooltip": "latent (from VAEEncode or a KSampler)."}], "latent_format": ["COMBO", {"tooltip": "Flux1 (16-ch) and Flux2 (128-ch) latents are auto-detected from channel dim under 'flux'. For SD3 (16-ch), SDXL (4-ch), or QwenImage (16-ch), select manually.", "default": "flux", "multiselect": false, "options": ["flux", "sd3", "sdxl", "qwenimage"]}], "degrade_sigma": ["FLOAT", {"tooltip": "0 = clean latent. Increase to denoise corrupted latent outputs.", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["positive", "latent", "latent_format", "degrade_sigma"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "PiDConditioning", "display_name": "PiD Conditioning", "description": "Attaches a latent and a degrade_sigma scalar to a CONDITIONING for PiD decoding/upscaling", "python_module": "comfy_extras.nodes_pid", "category": "model/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ModelPatchLoader": {"input": {"required": {"name": [[]]}}, "input_order": {"required": ["name"]}, "is_input_list": false, "output": ["MODEL_PATCH"], "output_is_list": [false], "output_name": ["MODEL_PATCH"], "name": "ModelPatchLoader", "display_name": "Load Model Patch", "description": "", "python_module": "comfy_extras.nodes_model_patch", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "QwenImageDiffsynthControlnet": {"input": {"required": {"model": ["MODEL"], "model_patch": ["MODEL_PATCH"], "vae": ["VAE"], "image": ["IMAGE"], "strength": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}, "optional": {"mask": ["MASK"]}}, "input_order": {"required": ["model", "model_patch", "vae", "image", "strength"], "optional": ["mask"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "QwenImageDiffsynthControlnet", "display_name": "Apply Qwen Image DiffSynth ControlNet", "description": "", "python_module": "comfy_extras.nodes_model_patch", "category": "model/patch/qwen", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "ZImageFunControlnet": {"input": {"required": {"model": ["MODEL"], "model_patch": ["MODEL_PATCH"], "vae": ["VAE"], "strength": ["FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}]}, "optional": {"image": ["IMAGE"], "inpaint_image": ["IMAGE"], "mask": ["MASK"]}}, "input_order": {"required": ["model", "model_patch", "vae", "strength"], "optional": ["image", "inpaint_image", "mask"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "ZImageFunControlnet", "display_name": "Apply Z-Image Fun ControlNet", "description": "", "python_module": "comfy_extras.nodes_model_patch", "category": "model/patch/z-image", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "USOStyleReference": {"input": {"required": {"model": ["MODEL"], "model_patch": ["MODEL_PATCH"], "clip_vision_output": ["CLIP_VISION_OUTPUT"]}}, "input_order": {"required": ["model", "model_patch", "clip_vision_output"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "USOStyleReference", "display_name": "Apply USO Style Reference", "description": "", "python_module": "comfy_extras.nodes_model_patch", "category": "model/patch/flux", "output_node": false, "has_intermediate_output": false, "experimental": true, "search_aliases": []}, "SUPIRApply": {"input": {"required": {"model": ["MODEL", {}], "model_patch": ["MODEL_PATCH", {}], "vae": ["VAE", {}], "image": ["IMAGE", {}], "strength_start": ["FLOAT", {"tooltip": "Control strength at the start of sampling (high sigma).", "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "strength_end": ["FLOAT", {"tooltip": "Control strength at the end of sampling (low sigma). Linearly interpolated from start.", "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "restore_cfg": ["FLOAT", {"tooltip": "Pulls denoised output toward the input latent. Higher = stronger fidelity to input. 0 to disable.", "advanced": true, "default": 4.0, "min": 0.0, "max": 20.0, "step": 0.1}], "restore_cfg_s_tmin": ["FLOAT", {"tooltip": "Sigma threshold below which restore_cfg is disabled.", "advanced": true, "default": 0.05, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "model_patch", "vae", "image", "strength_start", "strength_end", "restore_cfg", "restore_cfg_s_tmin"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "SUPIRApply", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_model_patch", "category": "model/patch/supir", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EasyCache": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to add EasyCache to."}], "reuse_threshold": ["FLOAT", {"tooltip": "The threshold for reusing cached steps.", "advanced": true, "default": 0.2, "min": 0.0, "max": 3.0, "step": 0.01}], "start_percent": ["FLOAT", {"tooltip": "The relative sampling step to begin use of EasyCache.", "advanced": true, "default": 0.15, "min": 0.0, "max": 1.0, "step": 0.01}], "end_percent": ["FLOAT", {"tooltip": "The relative sampling step to end use of EasyCache.", "advanced": true, "default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}], "verbose": ["BOOLEAN", {"tooltip": "Whether to log verbose information.", "advanced": true, "default": false}]}}, "input_order": {"required": ["model", "reuse_threshold", "start_percent", "end_percent", "verbose"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The model with EasyCache."], "output_matchtypes": null, "name": "EasyCache", "display_name": "EasyCache", "description": "Native EasyCache implementation.", "python_module": "comfy_extras.nodes_easycache", "category": "advanced/debug", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LazyCache": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to add LazyCache to."}], "reuse_threshold": ["FLOAT", {"tooltip": "The threshold for reusing cached steps.", "advanced": true, "default": 0.2, "min": 0.0, "max": 3.0, "step": 0.01}], "start_percent": ["FLOAT", {"tooltip": "The relative sampling step to begin use of LazyCache.", "advanced": true, "default": 0.15, "min": 0.0, "max": 1.0, "step": 0.01}], "end_percent": ["FLOAT", {"tooltip": "The relative sampling step to end use of LazyCache.", "advanced": true, "default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}], "verbose": ["BOOLEAN", {"tooltip": "Whether to log verbose information.", "advanced": true, "default": false}]}}, "input_order": {"required": ["model", "reuse_threshold", "start_percent", "end_percent", "verbose"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The model with LazyCache."], "output_matchtypes": null, "name": "LazyCache", "display_name": "LazyCache", "description": "A homebrew version of EasyCache - even 'easier' version of EasyCache to implement. Overall works worse than EasyCache, but better in some rare cases AND universal compatibility with everything in ComfyUI.", "python_module": "comfy_extras.nodes_easycache", "category": "advanced/debug", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AudioEncoderLoader": {"input": {"required": {"audio_encoder_name": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["audio_encoder_name"]}, "is_input_list": false, "output": ["AUDIO_ENCODER"], "output_is_list": [false], "output_name": ["AUDIO_ENCODER"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioEncoderLoader", "display_name": "Load Audio Encoder", "description": "", "python_module": "comfy_extras.nodes_audio_encoder", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "AudioEncoderEncode": {"input": {"required": {"audio_encoder": ["AUDIO_ENCODER", {}], "audio": ["AUDIO", {}]}}, "input_order": {"required": ["audio_encoder", "audio"]}, "is_input_list": false, "output": ["AUDIO_ENCODER_OUTPUT"], "output_is_list": [false], "output_name": ["AUDIO_ENCODER_OUTPUT"], "output_tooltips": [null], "output_matchtypes": null, "name": "AudioEncoderEncode", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_audio_encoder", "category": "model/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ScaleROPE": {"input": {"required": {"model": ["MODEL", {}], "scale_x": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.1}], "shift_x": ["FLOAT", {"advanced": true, "default": 0.0, "min": -256.0, "max": 256.0, "step": 0.1}], "scale_y": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.1}], "shift_y": ["FLOAT", {"advanced": true, "default": 0.0, "min": -256.0, "max": 256.0, "step": 0.1}], "scale_t": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.1}], "shift_t": ["FLOAT", {"advanced": true, "default": 0.0, "min": -256.0, "max": 256.0, "step": 0.1}]}}, "input_order": {"required": ["model", "scale_x", "shift_x", "scale_y", "shift_y", "scale_t", "shift_t"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "ScaleROPE", "display_name": null, "description": "Scale and shift the ROPE of the model.", "python_module": "comfy_extras.nodes_rope", "category": "model/patch", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ComfySwitchNode": {"input": {"required": {"switch": ["BOOLEAN", {}], "on_false": ["COMFY_MATCHTYPE_V3", {"lazy": true, "template": {"template_id": "switch", "allowed_types": "*"}}], "on_true": ["COMFY_MATCHTYPE_V3", {"lazy": true, "template": {"template_id": "switch", "allowed_types": "*"}}]}}, "input_order": {"required": ["switch", "on_false", "on_true"]}, "is_input_list": false, "output": ["COMFY_MATCHTYPE_V3"], "output_is_list": [false], "output_name": ["output"], "output_tooltips": [null], "output_matchtypes": ["switch"], "name": "ComfySwitchNode", "display_name": "If/Else Switch", "description": "", "python_module": "comfy_extras.nodes_logic", "category": "utilities/logic", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["if", "then", "switch", "conditional", "branch"], "essentials_category": null, "has_intermediate_output": false}, "CustomCombo": {"input": {"required": {"choice": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["choice"]}, "is_input_list": false, "output": ["STRING", "INT"], "output_is_list": [false, false], "output_name": ["STRING", "INDEX"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "CustomCombo", "display_name": "Custom Combo", "description": "", "python_module": "comfy_extras.nodes_logic", "category": "utilities", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ComfyNotNode": {"input": {"required": {"value": ["*", {}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "output_tooltips": [null], "output_matchtypes": null, "name": "ComfyNotNode", "display_name": "Not", "description": "Logical NOT operation. Returns true if the value is falsy. Uses Python's rules for truthiness.", "python_module": "comfy_extras.nodes_logic", "category": "utilities/logic", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["invert", "toggle", "negate", "flip boolean"], "essentials_category": null, "has_intermediate_output": false}, "ComfyAndNode": {"input": {"required": {"values": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"value": ["*", {}]}}, "prefix": "value", "min": 1, "max": 10}}]}}, "input_order": {"required": ["values"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "output_tooltips": [null], "output_matchtypes": null, "name": "ComfyAndNode", "display_name": "And", "description": "Logical AND operation. Returns true if all of the values are truthy. Uses Python's rules for truthiness.", "python_module": "comfy_extras.nodes_logic", "category": "utilities/logic", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["all", "every"], "essentials_category": null, "has_intermediate_output": false}, "ComfyOrNode": {"input": {"required": {"values": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"value": ["*", {}]}}, "prefix": "value", "min": 1, "max": 10}}]}}, "input_order": {"required": ["values"]}, "is_input_list": false, "output": ["BOOLEAN"], "output_is_list": [false], "output_name": ["BOOLEAN"], "output_tooltips": [null], "output_matchtypes": null, "name": "ComfyOrNode", "display_name": "Or", "description": "Logical OR operation. Returns true if any of the values are truthy. Uses Python's rules for truthiness.", "python_module": "comfy_extras.nodes_logic", "category": "utilities/logic", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["any", "some"], "essentials_category": null, "has_intermediate_output": false}, "ResolutionSelector": {"input": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio for the output dimensions.", "default": "1:1 (Square)", "multiselect": false, "options": ["1:1 (Square)", "2:3 (Portrait Photo)", "3:2 (Photo)", "3:4 (Portrait Standard)", "4:3 (Standard)", "9:16 (Portrait Widescreen)", "16:9 (Widescreen)", "21:9 (Ultrawide)"]}], "megapixels": ["FLOAT", {"tooltip": "Target total megapixels. 1.0 MP \u2248 1024x1024 for square.", "default": 1.0, "min": 0.1, "max": 16.0, "step": 0.1}], "multiple": ["INT", {"tooltip": "Nearest multiple of the result to set the selected resolution to.", "advanced": true, "default": 8, "min": 8, "max": 128, "step": 4}]}}, "input_order": {"required": ["aspect_ratio", "megapixels", "multiple"]}, "is_input_list": false, "output": ["INT", "INT"], "output_is_list": [false, false], "output_name": ["width", "height"], "output_tooltips": ["Calculated width in pixels multiplied by the selected multiple.", "Calculated height in pixels multiplied by the selected multiple."], "output_matchtypes": null, "name": "ResolutionSelector", "display_name": "Resolution Selector", "description": "Calculate width and height from aspect ratio and megapixel target. Useful for setting up Empty Latent Image dimensions.", "python_module": "comfy_extras.nodes_resolution", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "wanBlockSwap": {"input": {"required": {"model": ["MODEL", {}]}}, "input_order": {"required": ["model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "wanBlockSwap", "display_name": null, "description": "Intercept wanBlockSwap custom node that causes major instability and make it no-op.", "python_module": "comfy_extras.nodes_nop", "category": "", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Kandinsky5ImageToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 768, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 512, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 121, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}]}, "optional": {"start_image": ["IMAGE", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size"], "optional": ["start_image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT", "LATENT"], "output_is_list": [false, false, false, false], "output_name": ["positive", "negative", "latent", "cond_latent"], "output_tooltips": [null, null, "Empty video latent", "Clean encoded start images, used to replace the noisy start of the model output latents"], "output_matchtypes": null, "name": "Kandinsky5ImageToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_kandinsky5", "category": "model/conditioning/kandinsky", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "NormalizeVideoLatentStart": {"input": {"required": {"latent": ["LATENT", {}], "start_frame_count": ["INT", {"tooltip": "Number of latent frames to normalize, counted from the start", "default": 4, "min": 1, "max": 16384, "step": 1}], "reference_frame_count": ["INT", {"tooltip": "Number of latent frames after the start frames to use as reference", "default": 5, "min": 1, "max": 16384, "step": 1}]}}, "input_order": {"required": ["latent", "start_frame_count", "reference_frame_count"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["latent"], "output_tooltips": [null], "output_matchtypes": null, "name": "NormalizeVideoLatentStart", "display_name": null, "description": "Normalizes the initial frames of a video latent to match the mean and standard deviation of subsequent reference frames. Helps reduce differences between the starting frames and the rest of the video.", "python_module": "comfy_extras.nodes_kandinsky5", "category": "model/conditioning", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CLIPTextEncodeKandinsky5": {"input": {"required": {"clip": ["CLIP", {}], "clip_l": ["STRING", {"multiline": true, "dynamicPrompts": true}], "qwen25_7b": ["STRING", {"multiline": true, "dynamicPrompts": true}]}}, "input_order": {"required": ["clip", "clip_l", "qwen25_7b"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "CLIPTextEncodeKandinsky5", "display_name": "CLIP Text Encode (Kandinsky 5)", "description": "", "python_module": "comfy_extras.nodes_kandinsky5", "category": "model/conditioning/kandinsky", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["kandinsky prompt"], "essentials_category": null, "has_intermediate_output": false}, "WanMoveTrackToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "strength": ["FLOAT", {"tooltip": "Strength of the track conditioning.", "default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}], "width": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "start_image": ["IMAGE", {}]}, "optional": {"tracks": ["TRACKS", {}], "clip_vision_output": ["CLIP_VISION_OUTPUT", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "strength", "width", "height", "length", "batch_size", "start_image"], "optional": ["tracks", "clip_vision_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "WanMoveTrackToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wanmove", "category": "model/conditioning/wan/move", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanMoveTracksFromCoords": {"input": {"required": {}, "optional": {"track_coords": ["STRING", {"default": "[]", "forceInput": true, "multiline": false}], "track_mask": ["MASK", {}]}}, "input_order": {"required": [], "optional": ["track_coords", "track_mask"]}, "is_input_list": false, "output": ["TRACKS", "INT"], "output_is_list": [false, false], "output_name": ["TRACKS", "track_length"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "WanMoveTracksFromCoords", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wanmove", "category": "model/conditioning/wan/move", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanMoveConcatTrack": {"input": {"required": {"tracks_1": ["TRACKS", {}]}, "optional": {"tracks_2": ["TRACKS", {}]}}, "input_order": {"required": ["tracks_1"], "optional": ["tracks_2"]}, "is_input_list": false, "output": ["TRACKS"], "output_is_list": [false], "output_name": ["TRACKS"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanMoveConcatTrack", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wanmove", "category": "model/conditioning/wan/move", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanMoveVisualizeTracks": {"input": {"required": {"images": ["IMAGE", {}], "line_resolution": ["INT", {"default": 24, "min": 1, "max": 1024}], "circle_size": ["INT", {"advanced": true, "default": 12, "min": 1, "max": 128}], "opacity": ["FLOAT", {"default": 0.75, "min": 0.0, "max": 1.0, "step": 0.01}], "line_width": ["INT", {"advanced": true, "default": 16, "min": 1, "max": 128}]}, "optional": {"tracks": ["TRACKS", {}]}}, "input_order": {"required": ["images", "line_resolution", "circle_size", "opacity", "line_width"], "optional": ["tracks"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanMoveVisualizeTracks", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wanmove", "category": "model/conditioning/wan/move", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GenerateTracks": {"input": {"required": {"width": ["INT", {"default": 832, "min": 16, "max": 4096, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 4096, "step": 16}], "start_x": ["FLOAT", {"tooltip": "Normalized X coordinate (0-1) for start position.", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}], "start_y": ["FLOAT", {"tooltip": "Normalized Y coordinate (0-1) for start position.", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}], "end_x": ["FLOAT", {"tooltip": "Normalized X coordinate (0-1) for end position.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "end_y": ["FLOAT", {"tooltip": "Normalized Y coordinate (0-1) for end position.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "num_frames": ["INT", {"default": 81, "min": 1, "max": 1024}], "num_tracks": ["INT", {"default": 5, "min": 1, "max": 100}], "track_spread": ["FLOAT", {"tooltip": "Normalized distance between tracks. Tracks are spread perpendicular to the motion direction.", "default": 0.025, "min": 0.0, "max": 1.0, "step": 0.001}], "bezier": ["BOOLEAN", {"tooltip": "Enable Bezier curve path using the mid point as control point.", "default": false}], "mid_x": ["FLOAT", {"tooltip": "Normalized X control point for Bezier curve. Only used when 'bezier' is enabled.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "mid_y": ["FLOAT", {"tooltip": "Normalized Y control point for Bezier curve. Only used when 'bezier' is enabled.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "interpolation": ["COMBO", {"tooltip": "Controls the timing/speed of movement along the path.", "multiselect": false, "options": ["linear", "ease_in", "ease_out", "ease_in_out", "constant"]}]}, "optional": {"track_mask": ["MASK", {"tooltip": "Optional mask to indicate visible frames."}]}}, "input_order": {"required": ["width", "height", "start_x", "start_y", "end_x", "end_y", "num_frames", "num_tracks", "track_spread", "bezier", "mid_x", "mid_y", "interpolation"], "optional": ["track_mask"]}, "is_input_list": false, "output": ["TRACKS", "INT"], "output_is_list": [false, false], "output_name": ["TRACKS", "track_length"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "GenerateTracks", "display_name": "Generate Video Tracks", "description": "", "python_module": "comfy_extras.nodes_wanmove", "category": "model/conditioning/wan/move", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["motion paths", "camera movement", "trajectory"], "essentials_category": null, "has_intermediate_output": false}, "EmptyARVideoLatent": {"input": {"required": {"width": ["INT", {"default": 832, "min": 16, "max": 8192, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 8192, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 1024, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyARVideoLatent", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_ar_video", "category": "model/latent/autoregressive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SamplerARVideo": {"input": {"required": {"num_frame_per_block": ["INT", {"tooltip": "Frames per autoregressive block. 1 = framewise, 3 = chunkwise. Must match the checkpoint's training mode.", "default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["num_frame_per_block"]}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "SamplerARVideo", "display_name": "Sampler AR Video", "description": "", "python_module": "comfy_extras.nodes_ar_video", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ARVideoI2V": {"input": {"required": {"model": ["MODEL", {}], "vae": ["VAE", {}], "start_image": ["IMAGE", {}], "width": ["INT", {"default": 832, "min": 16, "max": 8192, "step": 16}], "height": ["INT", {"default": 480, "min": 16, "max": 8192, "step": 16}], "length": ["INT", {"default": 81, "min": 1, "max": 1024, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["model", "vae", "start_image", "width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["MODEL", "LATENT"], "output_is_list": [false, false], "output_name": ["MODEL", "LATENT"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ARVideoI2V", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_ar_video", "category": "model/conditioning/autoregressive", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageCompare": {"input": {"required": {"compare_view": ["IMAGECOMPARE", {"socketless": true}]}, "optional": {"image_a": ["IMAGE", {}], "image_b": ["IMAGE", {}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["compare_view"], "optional": ["image_a", "image_b"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "ImageCompare", "display_name": "Compare Images", "description": "Compares two images side by side with a slider.", "python_module": "comfy_extras.nodes_image_compare", "category": "image", "output_node": true, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": "Image Tools", "has_intermediate_output": false}, "TextEncodeZImageOmni": {"input": {"required": {"clip": ["CLIP", {}], "prompt": ["STRING", {"multiline": true, "dynamicPrompts": true}], "auto_resize_images": ["BOOLEAN", {"advanced": true, "default": true}]}, "optional": {"image_encoder": ["CLIP_VISION", {}], "vae": ["VAE", {}], "image1": ["IMAGE", {}], "image2": ["IMAGE", {}], "image3": ["IMAGE", {}]}}, "input_order": {"required": ["clip", "prompt", "auto_resize_images"], "optional": ["image_encoder", "vae", "image1", "image2", "image3"]}, "is_input_list": false, "output": ["CONDITIONING"], "output_is_list": [false], "output_name": ["CONDITIONING"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextEncodeZImageOmni", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_zimage", "category": "model/conditioning/z-image", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GLSLShader": {"input": {"required": {"fragment_shader": ["STRING", {"tooltip": "GLSL fragment shader source code (GLSL ES 3.00 / WebGL 2.0 compatible)", "default": "#version 300 es\nprecision highp float;\n\nuniform sampler2D u_image0;\nuniform vec2 u_resolution;\n\nin vec2 v_texCoord;\nlayout(location = 0) out vec4 fragColor0;\n\nvoid main() {\n fragColor0 = texture(u_image0, v_texCoord);\n}\n", "multiline": true}], "size_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Output size: 'from_input' uses first input image dimensions, 'custom' allows manual size", "options": [{"key": "from_input", "inputs": {"required": {}}}, {"key": "custom", "inputs": {"required": {"width": ["INT", {"default": 512, "min": 1, "max": 16384}], "height": ["INT", {"default": 512, "min": 1, "max": 16384}]}}}]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Images are available as u_image0-4 (sampler2D) in the shader code", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image", "min": 1, "max": 5}}], "floats": ["COMFY_AUTOGROW_V3", {"tooltip": "Floats are available as u_float0-19 in the shader code", "template": {"input": {"required": {"float": ["FLOAT", {"default": 0.0, "forceInput": true}]}}, "prefix": "u_float", "min": 0, "max": 20}}], "ints": ["COMFY_AUTOGROW_V3", {"tooltip": "Ints are available as u_int0-19 in the shader code", "template": {"input": {"required": {"int": ["INT", {"default": 0, "forceInput": true}]}}, "prefix": "u_int", "min": 0, "max": 20}}], "bools": ["COMFY_AUTOGROW_V3", {"tooltip": "Booleans are available as u_bool0-9 (bool) in the shader code", "template": {"input": {"required": {"bool": ["BOOLEAN", {"default": false, "forceInput": true}]}}, "prefix": "u_bool", "min": 0, "max": 10}}], "curves": ["COMFY_AUTOGROW_V3", {"tooltip": "Curves are available as u_curve0-3 (sampler2D, 1D LUT) in the shader code. Sample with texture(u_curve0, vec2(x, 0.5)).r", "template": {"input": {"required": {"curve": ["CURVE", {"default": {"points": [[0.0, 0.0], [1.0, 1.0]], "interpolation": "monotone_cubic"}, "socketless": true, "forceInput": true}]}}, "prefix": "u_curve", "min": 0, "max": 4}}]}}, "input_order": {"required": ["fragment_shader", "size_mode", "images", "floats", "ints", "bools", "curves"]}, "is_input_list": false, "output": ["IMAGE", "IMAGE", "IMAGE", "IMAGE"], "output_is_list": [false, false, false, false], "output_name": ["IMAGE0", "IMAGE1", "IMAGE2", "IMAGE3"], "output_tooltips": ["Available via layout(location = 0) out vec4 fragColor0 in the shader code", "Available via layout(location = 1) out vec4 fragColor1 in the shader code", "Available via layout(location = 2) out vec4 fragColor2 in the shader code", "Available via layout(location = 3) out vec4 fragColor3 in the shader code"], "output_matchtypes": null, "name": "GLSLShader", "display_name": "GLSL Shader", "description": "Apply GLSL ES fragment shaders to images. u_resolution (vec2) is always available.", "python_module": "comfy_extras.nodes_glsl", "category": "image/shader", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": true}, "LoraLoaderBypass": {"input": {"required": {"model": ["MODEL", {"tooltip": "The diffusion model the LoRA will be applied to."}], "clip": ["CLIP", {"tooltip": "The CLIP model the LoRA will be applied to."}], "lora_name": [[], {"tooltip": "The name of the LoRA."}], "strength_model": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01, "tooltip": "How strongly to modify the diffusion model. This value can be negative."}], "strength_clip": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01, "tooltip": "How strongly to modify the CLIP model. This value can be negative."}]}}, "input_order": {"required": ["model", "clip", "lora_name", "strength_model", "strength_clip"]}, "is_input_list": false, "output": ["MODEL", "CLIP"], "output_is_list": [false, false], "output_name": ["MODEL", "CLIP"], "name": "LoraLoaderBypass", "display_name": "Load LoRA (Bypass) (For debugging)", "description": "Apply LoRA in bypass mode. Unlike regular LoRA, this doesn't modify model weights - instead it injects the LoRA computation during forward pass. Useful for training scenarios.", "python_module": "comfy_extras.nodes_lora_debug", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The modified diffusion model.", "The modified CLIP model."], "experimental": true, "search_aliases": []}, "LoraLoaderBypassModelOnly": {"input": {"required": {"model": ["MODEL"], "lora_name": [[]], "strength_model": ["FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["model", "lora_name", "strength_model"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "LoraLoaderBypassModelOnly", "display_name": "Load LoRA (Bypass, Model Only) (for debugging)", "description": "Apply LoRA in bypass mode. Unlike regular LoRA, this doesn't modify model weights - instead it injects the LoRA computation during forward pass. Useful for training scenarios.", "python_module": "comfy_extras.nodes_lora_debug", "category": "model/loaders", "output_node": false, "has_intermediate_output": false, "output_tooltips": ["The modified diffusion model.", "The modified CLIP model."], "experimental": true, "search_aliases": []}, "TextGenerate": {"input": {"required": {"clip": ["CLIP", {}], "prompt": ["STRING", {"default": "", "multiline": true, "dynamicPrompts": true}], "max_length": ["INT", {"default": 512, "min": 1, "max": 32768}], "sampling_mode": ["COMFY_DYNAMICCOMBO_V3", {"display_name": "Sampling Mode", "options": [{"key": "on", "inputs": {"required": {"temperature": ["FLOAT", {"default": 0.7, "min": 0.01, "max": 2.0, "step": 1e-06}], "top_k": ["INT", {"default": 64, "min": 0, "max": 1000}], "top_p": ["FLOAT", {"default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}], "min_p": ["FLOAT", {"default": 0.05, "min": 0.0, "max": 1.0, "step": 0.01}], "repetition_penalty": ["FLOAT", {"default": 1.05, "min": 0.0, "max": 5.0, "step": 0.01}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}]}, "optional": {"presence_penalty": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 5.0, "step": 0.01}]}}}, {"key": "off", "inputs": {"required": {}}}]}]}, "optional": {"image": ["IMAGE", {}], "video": ["IMAGE", {"tooltip": "Video frames as image batch. Assumed to be 24 FPS; subsampled to 1 FPS internally."}], "audio": ["AUDIO", {}], "thinking": ["BOOLEAN", {"tooltip": "Operate in thinking mode if the model supports it.", "default": false}], "use_default_template": ["BOOLEAN", {"tooltip": "Use the built in system prompt/template if the model has one.", "advanced": true, "default": true}]}}, "input_order": {"required": ["clip", "prompt", "max_length", "sampling_mode"], "optional": ["image", "video", "audio", "thinking", "use_default_template"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["generated_text"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextGenerate", "display_name": "Generate Text", "description": "", "python_module": "comfy_extras.nodes_textgen", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["LLM", "gemma"], "essentials_category": null, "has_intermediate_output": false}, "TextGenerateLTX2Prompt": {"input": {"required": {"clip": ["CLIP", {}], "prompt": ["STRING", {"default": "", "multiline": true, "dynamicPrompts": true}], "max_length": ["INT", {"default": 512, "min": 1, "max": 32768}], "sampling_mode": ["COMFY_DYNAMICCOMBO_V3", {"display_name": "Sampling Mode", "options": [{"key": "on", "inputs": {"required": {"temperature": ["FLOAT", {"default": 0.7, "min": 0.01, "max": 2.0, "step": 1e-06}], "top_k": ["INT", {"default": 64, "min": 0, "max": 1000}], "top_p": ["FLOAT", {"default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}], "min_p": ["FLOAT", {"default": 0.05, "min": 0.0, "max": 1.0, "step": 0.01}], "repetition_penalty": ["FLOAT", {"default": 1.05, "min": 0.0, "max": 5.0, "step": 0.01}], "seed": ["INT", {"default": 0, "min": 0, "max": 18446744073709551615}]}, "optional": {"presence_penalty": ["FLOAT", {"default": 0.0, "min": 0.0, "max": 5.0, "step": 0.01}]}}}, {"key": "off", "inputs": {"required": {}}}]}]}, "optional": {"image": ["IMAGE", {}], "video": ["IMAGE", {"tooltip": "Video frames as image batch. Assumed to be 24 FPS; subsampled to 1 FPS internally."}], "audio": ["AUDIO", {}], "thinking": ["BOOLEAN", {"tooltip": "Operate in thinking mode if the model supports it.", "default": false}], "use_default_template": ["BOOLEAN", {"tooltip": "Use the built in system prompt/template if the model has one.", "advanced": true, "default": true}]}}, "input_order": {"required": ["clip", "prompt", "max_length", "sampling_mode"], "optional": ["image", "video", "audio", "thinking", "use_default_template"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["generated_text"], "output_tooltips": [null], "output_matchtypes": null, "name": "TextGenerateLTX2Prompt", "display_name": "Generate LTX2 Prompt", "description": "", "python_module": "comfy_extras.nodes_textgen", "category": "text", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["prompt enhance", "LLM", "gemma"], "essentials_category": null, "has_intermediate_output": false}, "ColorToRGBInt": {"input": {"required": {"color": ["COLOR", {"default": "#ffffff", "socketless": true}]}}, "input_order": {"required": ["color"]}, "is_input_list": false, "output": ["INT", "COLOR"], "output_is_list": [false, false], "output_name": ["rgb_int", "hex"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ColorToRGBInt", "display_name": "Color Picker", "description": "Return a color RGB integer value and hexadecimal representation.", "python_module": "comfy_extras.nodes_color", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "CreateList": {"input": {"required": {"inputs": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"input": ["COMFY_MATCHTYPE_V3", {"template": {"template_id": "type", "allowed_types": "*"}}]}}, "prefix": "input", "min": 1, "max": 10}}]}}, "input_order": {"required": ["inputs"]}, "is_input_list": true, "output": ["COMFY_MATCHTYPE_V3"], "output_is_list": [true], "output_name": ["list"], "output_tooltips": [null], "output_matchtypes": ["type"], "name": "CreateList", "display_name": "Create List", "description": "", "python_module": "comfy_extras.nodes_toolkit", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["Image Iterator", "Text Iterator", "Iterator"], "essentials_category": null, "has_intermediate_output": false}, "NAGuidance": {"input": {"required": {"model": ["MODEL", {"tooltip": "The model to apply NAG to."}], "nag_scale": ["FLOAT", {"tooltip": "The guidance scale factor. Higher values push further from the negative prompt.", "default": 5.0, "min": 0.0, "max": 50.0, "step": 0.1}], "nag_alpha": ["FLOAT", {"tooltip": "Blending factor for the normalized attention. 1.0 is full replacement, 0.0 is no effect.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "nag_tau": ["FLOAT", {"default": 1.5, "min": 1.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["model", "nag_scale", "nag_alpha", "nag_tau"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": ["The patched model with NAG enabled."], "output_matchtypes": null, "name": "NAGuidance", "display_name": "Normalized Attention Guidance", "description": "Applies Normalized Attention Guidance to models, enabling negative prompts on distilled/schnell models.", "python_module": "comfy_extras.nodes_nag", "category": "advanced/guidance", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SDPoseKeypointExtractor": {"input": {"required": {"model": ["MODEL", {}], "vae": ["VAE", {}], "image": ["IMAGE", {}], "batch_size": ["INT", {"default": 16, "min": 1, "max": 10000, "step": 1}]}, "optional": {"bboxes": ["BOUNDING_BOX", {"tooltip": "Optional bounding boxes for more accurate detections. Required for multi-person detection.", "default": {"x": 0, "y": 0, "width": 512, "height": 512}, "socketless": true, "forceInput": true}]}}, "input_order": {"required": ["model", "vae", "image", "batch_size"], "optional": ["bboxes"]}, "is_input_list": false, "output": ["POSE_KEYPOINT"], "output_is_list": [false], "output_name": ["keypoints"], "output_tooltips": ["Keypoints in OpenPose frame format (canvas_width, canvas_height, people)"], "output_matchtypes": null, "name": "SDPoseKeypointExtractor", "display_name": "SDPose Keypoint Extractor", "description": "Extract pose keypoints from images using the SDPose model: https://huggingface.co/Comfy-Org/SDPose/tree/main/checkpoints", "python_module": "comfy_extras.nodes_sdpose", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["openpose", "pose detection", "preprocessor", "keypoints", "sdpose"], "essentials_category": null, "has_intermediate_output": false}, "SDPoseDrawKeypoints": {"input": {"required": {"keypoints": ["POSE_KEYPOINT", {}], "draw_body": ["BOOLEAN", {"default": true}], "draw_hands": ["BOOLEAN", {"default": true}], "draw_face": ["BOOLEAN", {"default": true}], "draw_feet": ["BOOLEAN", {"default": false}], "stick_width": ["INT", {"default": 4, "min": 1, "max": 10, "step": 1}], "face_point_size": ["INT", {"default": 3, "min": 1, "max": 10, "step": 1}], "score_threshold": ["FLOAT", {"default": 0.3, "min": 0.0, "max": 1.0, "step": 0.01}], "draw_head": ["BOOLEAN", {"default": true}]}}, "input_order": {"required": ["keypoints", "draw_body", "draw_hands", "draw_face", "draw_feet", "stick_width", "face_point_size", "score_threshold", "draw_head"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "SDPoseDrawKeypoints", "display_name": "SDPose Draw Keypoints", "description": "", "python_module": "comfy_extras.nodes_sdpose", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["openpose", "pose detection", "preprocessor", "keypoints", "pose"], "essentials_category": null, "has_intermediate_output": false}, "SDPoseFaceBBoxes": {"input": {"required": {"keypoints": ["POSE_KEYPOINT", {}], "scale": ["FLOAT", {"tooltip": "Multiplier for the bounding box area around each detected face.", "default": 1.5, "min": 1.0, "max": 10.0, "step": 0.1}], "force_square": ["BOOLEAN", {"tooltip": "Expand the shorter bbox axis so the crop region is always square.", "default": true}]}}, "input_order": {"required": ["keypoints", "scale", "force_square"]}, "is_input_list": false, "output": ["BOUNDING_BOX"], "output_is_list": [false], "output_name": ["bboxes"], "output_tooltips": ["Face bounding boxes per frame, compatible with SDPoseKeypointExtractor bboxes input."], "output_matchtypes": null, "name": "SDPoseFaceBBoxes", "display_name": "SDPose Face Bounding Boxes", "description": "", "python_module": "comfy_extras.nodes_sdpose", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["face bbox", "face bounding box", "pose", "keypoints"], "essentials_category": null, "has_intermediate_output": false}, "CropByBBoxes": {"input": {"required": {"image": ["IMAGE", {}], "bboxes": ["BOUNDING_BOX", {"default": {"x": 0, "y": 0, "width": 512, "height": 512}, "socketless": true, "forceInput": true}], "output_width": ["INT", {"tooltip": "Width each crop is resized to.", "default": 512, "min": 64, "max": 4096, "step": 8}], "output_height": ["INT", {"tooltip": "Height each crop is resized to.", "default": 512, "min": 64, "max": 4096, "step": 8}], "padding": ["INT", {"tooltip": "Extra padding in pixels added on each side of the bbox before cropping.", "default": 0, "min": 0, "max": 1024, "step": 1}], "keep_aspect": ["COMBO", {"tooltip": "Whether to stretch the crop to fit the output size, or pad with black pixels to preserve aspect ratio.", "default": "stretch", "multiselect": false, "options": ["stretch", "pad"]}]}}, "input_order": {"required": ["image", "bboxes", "output_width", "output_height", "padding", "keep_aspect"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": ["All crops stacked into a single image batch."], "output_matchtypes": null, "name": "CropByBBoxes", "display_name": "Crop By Bounding Boxes", "description": "Crop and resize regions from the input image batch based on provided bounding boxes.", "python_module": "comfy_extras.nodes_sdpose", "category": "image/transform", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["crop", "face crop", "bbox crop", "pose", "bounding box"], "essentials_category": null, "has_intermediate_output": false}, "ComfyMathExpression": {"input": {"required": {"expression": ["STRING", {"default": "a + b", "multiline": true}], "values": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"value": ["FLOAT,INT,BOOLEAN", {}]}}, "names": ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"], "min": 1}}]}}, "input_order": {"required": ["expression", "values"]}, "is_input_list": false, "output": ["FLOAT", "INT", "BOOLEAN"], "output_is_list": [false, false, false], "output_name": ["FLOAT", "INT", "BOOL"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "ComfyMathExpression", "display_name": "Math Expression", "description": "", "python_module": "comfy_extras.nodes_math", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["expression", "formula", "calculate", "calculator", "eval", "math"], "essentials_category": null, "has_intermediate_output": false}, "ComfyNumberConvert": {"input": {"required": {"value": ["INT,FLOAT,STRING,BOOLEAN", {"display_name": "value"}]}}, "input_order": {"required": ["value"]}, "is_input_list": false, "output": ["FLOAT", "INT"], "output_is_list": [false, false], "output_name": ["FLOAT", "INT"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ComfyNumberConvert", "display_name": "Convert Number", "description": "", "python_module": "comfy_extras.nodes_number_convert", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["int to float", "float to int", "number convert", "int2float", "float2int", "cast", "parse number", "string to number", "bool to int"], "essentials_category": null, "has_intermediate_output": false}, "Painter": {"input": {"required": {"mask": ["STRING", {"widgetType": "PAINTER", "image_upload": true, "default": "", "socketless": true, "multiline": false}], "width": ["INT", {"hidden": true, "default": 512, "socketless": true, "min": 64, "max": 4096, "step": 64}], "height": ["INT", {"hidden": true, "default": 512, "socketless": true, "min": 64, "max": 4096, "step": 64}], "bg_color": ["COLOR", {"default": "#000000", "socketless": true}]}, "optional": {"image": ["IMAGE", {"tooltip": "Optional base image to paint over"}]}}, "input_order": {"required": ["mask", "width", "height", "bg_color"], "optional": ["image"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Painter", "display_name": "Painter", "description": "", "python_module": "comfy_extras.nodes_painter", "category": "image", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": true}, "CurveEditor": {"input": {"required": {"curve": ["CURVE", {"default": {"points": [[0.0, 0.0], [1.0, 1.0]], "interpolation": "monotone_cubic"}, "socketless": true}]}, "optional": {"histogram": ["HISTOGRAM", {}]}}, "input_order": {"required": ["curve"], "optional": ["histogram"]}, "is_input_list": false, "output": ["CURVE"], "output_is_list": [false], "output_name": ["curve"], "output_tooltips": [null], "output_matchtypes": null, "name": "CurveEditor", "display_name": "Curve Editor", "description": "", "python_module": "comfy_extras.nodes_curve", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ImageHistogram": {"input": {"required": {"image": ["IMAGE", {}]}}, "input_order": {"required": ["image"]}, "is_input_list": false, "output": ["HISTOGRAM", "HISTOGRAM", "HISTOGRAM", "HISTOGRAM", "HISTOGRAM"], "output_is_list": [false, false, false, false, false], "output_name": ["rgb", "luminance", "red", "green", "blue"], "output_tooltips": [null, null, null, null, null], "output_matchtypes": null, "name": "ImageHistogram", "display_name": "Image Histogram", "description": "", "python_module": "comfy_extras.nodes_curve", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LoadBackgroundRemovalModel": {"input": {"required": {"bg_removal_name": ["COMBO", {"tooltip": "The model used to remove backgrounds from images", "multiselect": false, "options": []}]}}, "input_order": {"required": ["bg_removal_name"]}, "is_input_list": false, "output": ["BACKGROUND_REMOVAL"], "output_is_list": [false], "output_name": ["bg_model"], "output_tooltips": [null], "output_matchtypes": null, "name": "LoadBackgroundRemovalModel", "display_name": "Load Background Removal Model", "description": "", "python_module": "comfy_extras.nodes_bg_removal", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RemoveBackground": {"input": {"required": {"bg_removal_model": ["BACKGROUND_REMOVAL", {"tooltip": "Background removal model used to generate the mask"}], "image": ["IMAGE", {"tooltip": "Input image to remove the background from"}]}}, "input_order": {"required": ["bg_removal_model", "image"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["mask"], "output_tooltips": ["Generated foreground mask"], "output_matchtypes": null, "name": "RemoveBackground", "display_name": "Remove Background", "description": "Generates a foreground mask to remove the background from an image using a background removal model.", "python_module": "comfy_extras.nodes_bg_removal", "category": "image/background removal", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RTDETR_detect": {"input": {"required": {"model": ["MODEL", {"display_name": "model"}], "image": ["IMAGE", {"display_name": "image"}], "threshold": ["FLOAT", {"display_name": "threshold", "default": 0.5}], "class_name": ["COMBO", {"tooltip": "Filter detections by class. Set to 'all' to disable filtering.", "default": "all", "multiselect": false, "options": ["all", "person", "bicycle", "car", "motorcycle", "airplane", "bus", "train", "truck", "boat", "traffic light", "fire hydrant", "stop sign", "parking meter", "bench", "bird", "cat", "dog", "horse", "sheep", "cow", "elephant", "bear", "zebra", "giraffe", "backpack", "umbrella", "handbag", "tie", "suitcase", "frisbee", "skis", "snowboard", "sports ball", "kite", "baseball bat", "baseball glove", "skateboard", "surfboard", "tennis racket", "bottle", "wine glass", "cup", "fork", "knife", "spoon", "bowl", "banana", "apple", "sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza", "donut", "cake", "chair", "couch", "potted plant", "bed", "dining table", "toilet", "tv", "laptop", "mouse", "remote", "keyboard", "cell phone", "microwave", "oven", "toaster", "sink", "refrigerator", "book", "clock", "vase", "scissors", "teddy bear", "hair drier", "toothbrush"]}], "max_detections": ["INT", {"display_name": "max_detections", "tooltip": "Maximum number of detections to return per image. In order of descending confidence score.", "default": 100}]}}, "input_order": {"required": ["model", "image", "threshold", "class_name", "max_detections"]}, "is_input_list": false, "output": ["BOUNDING_BOX"], "output_is_list": [false], "output_name": ["bboxes"], "output_tooltips": [null], "output_matchtypes": null, "name": "RTDETR_detect", "display_name": "Run Real-Time Detection (RT-DETR)", "description": "", "python_module": "comfy_extras.nodes_rtdetr", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["bbox", "bounding box", "object detection", "coco"], "essentials_category": null, "has_intermediate_output": false}, "DrawBBoxes": {"input": {"required": {"bboxes": ["BOUNDING_BOX", {"default": {"x": 0, "y": 0, "width": 512, "height": 512}, "socketless": true, "forceInput": true}]}, "optional": {"image": ["IMAGE", {}]}}, "input_order": {"required": ["bboxes"], "optional": ["image"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["out_image"], "output_tooltips": [null], "output_matchtypes": null, "name": "DrawBBoxes", "display_name": "Draw BBoxes", "description": "", "python_module": "comfy_extras.nodes_rtdetr", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["bbox", "bounding box", "object detection", "rt_detr", "visualize detections", "coco"], "essentials_category": null, "has_intermediate_output": false}, "FrameInterpolationModelLoader": {"input": {"required": {"model_name": ["COMBO", {"tooltip": "Select a frame interpolation model to load. Models must be placed in the 'frame_interpolation' folder.", "multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["INTERP_MODEL"], "output_is_list": [false], "output_name": ["INTERP_MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "FrameInterpolationModelLoader", "display_name": "Load Frame Interpolation Model", "description": "", "python_module": "comfy_extras.nodes_frame_interpolation", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FrameInterpolate": {"input": {"required": {"interp_model": ["INTERP_MODEL", {}], "images": ["IMAGE", {}], "multiplier": ["INT", {"default": 2, "min": 2, "max": 16}]}}, "input_order": {"required": ["interp_model", "images", "multiplier"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FrameInterpolate", "display_name": "Run Frame Interpolation Model", "description": "", "python_module": "comfy_extras.nodes_frame_interpolation", "category": "video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["rife", "film", "frame interpolation", "slow motion", "interpolate frames", "vfi"], "essentials_category": null, "has_intermediate_output": false}, "SAM3_Detect": {"input": {"required": {"model": ["MODEL", {"display_name": "model"}], "image": ["IMAGE", {"display_name": "image"}], "threshold": ["FLOAT", {"display_name": "threshold", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "refine_iterations": ["INT", {"display_name": "refine_iterations", "tooltip": "SAM decoder refinement passes (0=use raw detector masks)", "default": 2, "min": 0, "max": 5}], "individual_masks": ["BOOLEAN", {"display_name": "individual_masks", "tooltip": "Output per-object masks instead of union", "default": false}]}, "optional": {"conditioning": ["CONDITIONING", {"display_name": "conditioning", "tooltip": "Text conditioning from CLIPTextEncode"}], "bboxes": ["BOUNDING_BOX", {"display_name": "bboxes", "tooltip": "Bounding boxes to segment within", "default": {"x": 0, "y": 0, "width": 512, "height": 512}, "socketless": true, "forceInput": true}], "positive_coords": ["STRING", {"display_name": "positive_coords", "tooltip": "Positive point prompts as JSON [{\"x\": int, \"y\": int}, ...] (pixel coords)", "forceInput": true, "multiline": false}], "negative_coords": ["STRING", {"display_name": "negative_coords", "tooltip": "Negative point prompts as JSON [{\"x\": int, \"y\": int}, ...] (pixel coords)", "forceInput": true, "multiline": false}]}}, "input_order": {"required": ["model", "image", "threshold", "refine_iterations", "individual_masks"], "optional": ["conditioning", "bboxes", "positive_coords", "negative_coords"]}, "is_input_list": false, "output": ["MASK", "BOUNDING_BOX"], "output_is_list": [false, false], "output_name": ["masks", "bboxes"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SAM3_Detect", "display_name": "SAM3 Detect", "description": "", "python_module": "comfy_extras.nodes_sam3", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["sam3", "segment anything", "open vocabulary", "text detection", "segment"], "essentials_category": null, "has_intermediate_output": false}, "SAM3_VideoTrack": {"input": {"required": {"images": ["IMAGE", {"display_name": "images", "tooltip": "Video frames as batched images"}], "model": ["MODEL", {"display_name": "model"}], "detection_threshold": ["FLOAT", {"display_name": "detection_threshold", "tooltip": "Score threshold for text-prompted detection.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "max_objects": ["INT", {"display_name": "max_objects", "tooltip": "Max tracked objects. Initial masks count toward this limit. 0 uses the internal cap of 64.", "default": 4, "min": 0, "max": 64}], "detect_interval": ["INT", {"display_name": "detect_interval", "tooltip": "Run detection every N frames (1=every frame). Higher values save compute.", "default": 1, "min": 1}]}, "optional": {"initial_mask": ["MASK", {"display_name": "initial_mask", "tooltip": "Mask(s) for the first frame to track (one per object)"}], "conditioning": ["CONDITIONING", {"display_name": "conditioning", "tooltip": "Text conditioning for detecting new objects during tracking"}]}}, "input_order": {"required": ["images", "model", "detection_threshold", "max_objects", "detect_interval"], "optional": ["initial_mask", "conditioning"]}, "is_input_list": false, "output": ["SAM3_TRACK_DATA"], "output_is_list": [false], "output_name": ["track_data"], "output_tooltips": [null], "output_matchtypes": null, "name": "SAM3_VideoTrack", "display_name": "Run SAM3 Video Track", "description": "", "python_module": "comfy_extras.nodes_sam3", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["sam3", "video", "track", "propagate"], "essentials_category": null, "has_intermediate_output": false}, "SAM3_TrackPreview": {"input": {"required": {"track_data": ["SAM3_TRACK_DATA", {"display_name": "track_data"}], "opacity": ["FLOAT", {"display_name": "opacity", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.05}], "fps": ["FLOAT", {"display_name": "fps", "default": 24.0, "min": 1.0, "max": 120.0, "step": 1.0}]}, "optional": {"images": ["IMAGE", {"display_name": "images"}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["track_data", "opacity", "fps"], "optional": ["images"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SAM3_TrackPreview", "display_name": "SAM3 Track Preview", "description": "", "python_module": "comfy_extras.nodes_sam3", "category": "image/detection", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SAM3_TrackToMask": {"input": {"required": {"track_data": ["SAM3_TRACK_DATA", {"display_name": "track_data"}], "object_indices": ["STRING", {"display_name": "object_indices", "tooltip": "Comma-separated object indices to include (e.g. '0,2,3'). Empty = all objects.", "default": "", "multiline": false}]}}, "input_order": {"required": ["track_data", "object_indices"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["masks"], "output_tooltips": [null], "output_matchtypes": null, "name": "SAM3_TrackToMask", "display_name": "SAM3 Track to Mask", "description": "", "python_module": "comfy_extras.nodes_sam3", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanSCAILToVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 512, "min": 32, "max": 16384, "step": 32}], "height": ["INT", {"default": 896, "min": 32, "max": 16384, "step": 32}], "length": ["INT", {"default": 81, "min": 1, "max": 16384, "step": 4}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 4096}], "pose_strength": ["FLOAT", {"tooltip": "Strength of the pose latent.", "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}], "pose_start": ["FLOAT", {"tooltip": "Start step of the pose conditioning.", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}], "pose_end": ["FLOAT", {"tooltip": "End step of the pose conditioning.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "video_frame_offset": ["INT", {"tooltip": "Cumulative output frame this chunk begins at. Wire from the previous chunk's video_frame_offset output.", "default": 0, "min": 0, "max": 16384, "step": 1}], "previous_frame_count": ["INT", {"tooltip": "Tail frames of previous_frames to anchor. SCAIL-2 trained at 5 (81-frame chunks, 76-frame step).", "default": 5, "min": 1, "max": 16384, "step": 4}]}, "optional": {"pose_video": ["IMAGE", {"tooltip": "Video used for pose conditioning. Will be downscaled to half the resolution of the main video."}], "pose_video_mask": ["IMAGE", {"tooltip": "SCAIL-2 only. Colored per-identity SAM3 mask video at the same resolution as pose_video."}], "replacement_mode": ["BOOLEAN", {"tooltip": "SCAIL-2 only. False = Animation Mode (pose_video_mask should have black background). True = Replacement Mode (pose_video_mask should have white background).", "default": false}], "reference_image": ["IMAGE", {"tooltip": "Reference image. The first image is the primary reference (composite all identities onto it). SCAIL-2: extra batch images are used as additional views (back view, close-up, occluded background), each needing a matching reference_image_mask in that identity's color."}], "reference_image_mask": ["IMAGE", {"tooltip": "SCAIL-2 only. Colored reference mask, batch matching reference_image (first = primary reference mask, rest = identity masks for the additional reference_image)."}], "clip_vision_output": ["CLIP_VISION_OUTPUT", {"tooltip": "CLIP vision features for conditioning. Model is trained with stretch resize to aspect ratio."}], "previous_frames": ["IMAGE", {"tooltip": "SCAIL-2 only. Full decoded output of the previous chunk. Only the last previous_frame_count are used as the extension anchor."}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length", "batch_size", "pose_strength", "pose_start", "pose_end", "video_frame_offset", "previous_frame_count"], "optional": ["pose_video", "pose_video_mask", "replacement_mode", "reference_image", "reference_image_mask", "clip_vision_output", "previous_frames"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT", "INT"], "output_is_list": [false, false, false, false], "output_name": ["positive", "negative", "latent", "video_frame_offset"], "output_tooltips": [null, null, "Empty latent of the generation size.", "Adjusted offset + length. Wire into the next chunk."], "output_matchtypes": null, "name": "WanSCAILToVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_scail", "category": "model/conditioning/wan/scail", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SCAIL2ColoredMask": {"input": {"required": {"driving_track_data": ["SAM3_TRACK_DATA", {"tooltip": "SAM3 track of the driving pose video. Will be rendered into the pose_video_mask output."}], "object_indices": ["STRING", {"tooltip": "Comma-separated list of person indices to include (e.g. '0,2,3'). Applied to both reference and pose video masks. Empty = all.", "default": "", "multiline": false}], "sort_by": ["COMBO", {"tooltip": "Order in which palette colors are assigned to the tracked objects (applied to both reference and pose video so each identity keeps the same color). Objects that appear in earlier frames always come first; within a frame, left_to_right = leftmost object (by centroid at first appearance) gets the first color, area = biggest object (by mask area at first appearance) gets the first color; none = keep SAM3's order.", "default": "left_to_right", "multiselect": false, "options": ["none", "left_to_right", "area"]}], "replacement_mode": ["BOOLEAN", {"tooltip": "False = Animation Mode (pose_video_mask has black background, reference_image_mask has white background). True = Replacement Mode (pose_video_mask has white background, reference_image_mask has black background).", "default": false}]}, "optional": {"ref_track_data": ["SAM3_TRACK_DATA,MASK", {"display_name": "reference_masks", "tooltip": "SAM3 track of the reference image(s) (one identity per object, colored in batch order), or a plain MASK of the reference subject (rendered as a single identity)."}]}}, "input_order": {"required": ["driving_track_data", "object_indices", "sort_by", "replacement_mode"], "optional": ["ref_track_data"]}, "is_input_list": false, "output": ["IMAGE", "IMAGE"], "output_is_list": [false, false], "output_name": ["pose_video_mask", "reference_image_mask"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "SCAIL2ColoredMask", "display_name": "Create SCAIL-2 Colored Mask", "description": "", "python_module": "comfy_extras.nodes_scail", "category": "model/conditioning/wan/scail", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpticalFlowLoader": {"input": {"required": {"model_name": ["COMBO", {"tooltip": "Optical flow model to load. Files must be placed in the 'optical_flow' folder. Today only torchvision's raft_large.pth is supported.", "multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["OPTICAL_FLOW"], "output_is_list": [false], "output_name": ["OPTICAL_FLOW"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpticalFlowLoader", "display_name": "Load Optical Flow Model", "description": "", "python_module": "comfy_extras.nodes_void", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VOIDQuadmaskPreprocess": {"input": {"required": {"mask": ["MASK", {}], "dilate_width": ["INT", {"tooltip": "Dilation radius for the primary mask region (0 = no dilation)", "default": 0, "min": 0, "max": 50, "step": 1}]}}, "input_order": {"required": ["mask", "dilate_width"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["quadmask"], "output_tooltips": [null], "output_matchtypes": null, "name": "VOIDQuadmaskPreprocess", "display_name": "VOID Quadmask Preprocessor", "description": "", "python_module": "comfy_extras.nodes_void", "category": "image/mask", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VOIDInpaintConditioning": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "video": ["IMAGE", {"tooltip": "Source video frames [T, H, W, 3]"}], "quadmask": ["MASK", {"tooltip": "Preprocessed quadmask from VOIDQuadmaskPreprocess [T, H, W]"}], "width": ["INT", {"default": 672, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 384, "min": 16, "max": 16384, "step": 8}], "length": ["INT", {"tooltip": "Number of pixel frames to process. For CogVideoX-Fun-V1.5 (patch_size_t=2), latent_t must be even \u2014 lengths that produce odd latent_t are rounded down (e.g. 49 \u2192 45).", "default": 45, "min": 1, "max": 16384, "step": 1}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["positive", "negative", "vae", "video", "quadmask", "width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "VOIDInpaintConditioning", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_void", "category": "model/conditioning/void", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VOIDWarpedNoise": {"input": {"required": {"optical_flow": ["OPTICAL_FLOW", {"tooltip": "Optical flow model from OpticalFlowLoader (RAFT-large)."}], "video": ["IMAGE", {"tooltip": "Pass 1 output video frames [T, H, W, 3]"}], "width": ["INT", {"default": 672, "min": 16, "max": 16384, "step": 8}], "height": ["INT", {"default": 384, "min": 16, "max": 16384, "step": 8}], "length": ["INT", {"tooltip": "Number of pixel frames. Rounded down to make latent_t even (patch_size_t=2 requirement), e.g. 49 \u2192 45.", "default": 45, "min": 1, "max": 16384, "step": 1}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["optical_flow", "video", "width", "height", "length", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["warped_noise"], "output_tooltips": [null], "output_matchtypes": null, "name": "VOIDWarpedNoise", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_void", "category": "model/latent/void", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VOIDWarpedNoiseSource": {"input": {"required": {"warped_noise": ["LATENT", {"tooltip": "Warped noise latent from VOIDWarpedNoise"}]}}, "input_order": {"required": ["warped_noise"]}, "is_input_list": false, "output": ["NOISE"], "output_is_list": [false], "output_name": ["NOISE"], "output_tooltips": [null], "output_matchtypes": null, "name": "VOIDWarpedNoiseSource", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_void", "category": "model/latent/void", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VOIDSampler": {"input": {"required": {}}, "input_order": {"required": []}, "is_input_list": false, "output": ["SAMPLER"], "output_is_list": [false], "output_name": ["SAMPLER"], "output_tooltips": [null], "output_matchtypes": null, "name": "VOIDSampler", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_void", "category": "model/sampling/samplers", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanDancerVideo": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "vae": ["VAE", {}], "width": ["INT", {"default": 480, "min": 16, "max": 16384, "step": 16}], "height": ["INT", {"default": 832, "min": 16, "max": 16384, "step": 16}], "length": ["INT", {"tooltip": "The number of frames in the generated video. Should stay 149 for WanDancer.", "default": 149, "min": 1, "max": 16384, "step": 4}]}, "optional": {"clip_vision_output": ["CLIP_VISION_OUTPUT", {"tooltip": "The CLIP vision embeds for the first frame."}], "clip_vision_output_ref": ["CLIP_VISION_OUTPUT", {"tooltip": "The CLIP vision embeds for the reference image."}], "start_image": ["IMAGE", {"tooltip": "The initial image(s) to be encoded, can be any number of frames."}], "mask": ["MASK", {"tooltip": "Image conditioning mask for the start image(s). White is kept, black is generated. Used for the local generations."}], "audio_encoder_output": ["AUDIO_ENCODER_OUTPUT", {}]}}, "input_order": {"required": ["positive", "negative", "vae", "width", "height", "length"], "optional": ["clip_vision_output", "clip_vision_output_ref", "start_image", "mask", "audio_encoder_output"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, "Empty latent."], "output_matchtypes": null, "name": "WanDancerVideo", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wandancer", "category": "model/conditioning/wan/dancer", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanDancerEncodeAudio": {"input": {"required": {"audio": ["AUDIO", {}], "video_frames": ["INT", {"default": 149, "min": 1, "max": 16384, "step": 4}], "audio_inject_scale": ["FLOAT", {"tooltip": "The scale for the audio features when injected into the video model.", "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}]}}, "input_order": {"required": ["audio", "video_frames", "audio_inject_scale"]}, "is_input_list": false, "output": ["AUDIO_ENCODER_OUTPUT", "STRING"], "output_is_list": [false, false], "output_name": ["audio_encoder_output", "fps_string"], "output_tooltips": [null, "The calculated fps based on the audio length and the number of video frames. Used in the prompt."], "output_matchtypes": null, "name": "WanDancerEncodeAudio", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wandancer", "category": "model/conditioning/wan/dancer", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanDancerPadKeyframes": {"input": {"required": {"images": ["IMAGE", {}], "segment_length": ["INT", {"tooltip": "Length of this segment (usually 149 frames)", "default": 149, "min": 1, "max": 10000}], "segment_index": ["INT", {"tooltip": "Which segment this is (0 for first, 1 for second, etc.)", "default": 0, "min": 0, "max": 100}], "audio": ["AUDIO", {"tooltip": "Audio to calculate total output frames from and extract segment audio."}]}}, "input_order": {"required": ["images", "segment_length", "segment_index", "audio"]}, "is_input_list": false, "output": ["IMAGE", "MASK", "AUDIO"], "output_is_list": [false, false, false], "output_name": ["keyframes_sequence", "keyframes_mask", "audio_segment"], "output_tooltips": ["Padded keyframe sequence", "Mask indicating valid frames", "Audio segment for this video segment"], "output_matchtypes": null, "name": "WanDancerPadKeyframes", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wandancer", "category": "image/video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanDancerPadKeyframesList": {"input": {"required": {"images": ["IMAGE", {}], "segment_length": ["INT", {"tooltip": "Length of each segment (usually 149 frames)", "default": 149, "min": 1, "max": 10000}], "num_segments": ["INT", {"tooltip": "How many padded segments to emit as lists.", "default": 1, "min": 1, "max": 100}], "audio": ["AUDIO", {"tooltip": "Audio to slice for each emitted segment."}]}}, "input_order": {"required": ["images", "segment_length", "num_segments", "audio"]}, "is_input_list": false, "output": ["IMAGE", "MASK", "AUDIO"], "output_is_list": [true, true, true], "output_name": ["keyframes_sequence", "keyframes_mask", "audio_segment"], "output_tooltips": ["Padded keyframe sequences", "Masks indicating valid frames", "Audio segment for each video segment"], "output_matchtypes": null, "name": "WanDancerPadKeyframesList", "display_name": null, "description": "", "python_module": "comfy_extras.nodes_wandancer", "category": "image/video", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "EmptyHiDreamO1LatentImage": {"input": {"required": {"width": ["INT", {"default": 2048, "min": 64, "max": 4096, "step": 32}], "height": ["INT", {"default": 2048, "min": 64, "max": 4096, "step": 32}], "batch_size": ["INT", {"default": 1, "min": 1, "max": 64}]}}, "input_order": {"required": ["width", "height", "batch_size"]}, "is_input_list": false, "output": ["LATENT"], "output_is_list": [false], "output_name": ["LATENT"], "output_tooltips": [null], "output_matchtypes": null, "name": "EmptyHiDreamO1LatentImage", "display_name": "Empty HiDream-O1 Latent Image", "description": "Empty pixel-space latent for HiDream-O1-Image. The model was trained at ~4 megapixels; lower resolutions go off-distribution and quality regresses noticeably. Trained resolutions: 2048x2048, 2304x1728, 1728x2304, 2560x1440, 1440x2560, 2496x1664, 1664x2496, 3104x1312, 1312x3104, 2304x1792, 1792x2304.", "python_module": "comfy_extras.nodes_hidream_o1", "category": "model/latent/hidream", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HiDreamO1ReferenceImages": {"input": {"required": {"positive": ["CONDITIONING", {}], "negative": ["CONDITIONING", {}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Reference images. 1 image = instruction edit; 2-10 images = multi reference.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 1}}]}}, "input_order": {"required": ["positive", "negative", "images"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING"], "output_is_list": [false, false], "output_name": ["positive", "negative"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "HiDreamO1ReferenceImages", "display_name": "HiDream-O1 Reference Images", "description": "Attach 1-10 reference images to conditioning, one for edit instructionor multiple for subject-driven personalization.", "python_module": "comfy_extras.nodes_hidream_o1", "category": "model/conditioning/hidream", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HiDreamO1PatchSeamSmoothing": {"input": {"required": {"model": ["MODEL", {}], "start_percent": ["FLOAT", {"tooltip": "Sampling progress (0=start, 1=end) at which the blend turns ON.", "default": 0.8, "min": 0.0, "max": 1.0, "step": 0.01}], "end_percent": ["FLOAT", {"tooltip": "Sampling progress at which the blend turns OFF.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "pattern": ["COMBO", {"tooltip": "Shift layout. single_shift: one pass at the natural patch grid + others offset. symmetric: all passes off-grid, shifts split around origin.", "default": "single_shift", "multiselect": false, "options": ["single_shift", "symmetric"]}], "passes": ["COMBO", {"tooltip": "Number of passes per gated step. 2/4 = fixed. ramp_*: pass count increases as sampling approaches end (more smoothing where seams are most visible).", "default": "2", "multiselect": false, "options": ["2", "4", "ramp_2_4", "ramp_2_4_8"]}], "blend": ["COMBO", {"tooltip": "average: equal-weight mean. window: Hann-windowed weighting favoring each pass away from its patch boundaries. median: per-pixel median, rejects wraparound-outlier passes.", "default": "average", "multiselect": false, "options": ["average", "window", "median"]}], "strength": ["FLOAT", {"tooltip": "Interpolation between the natural-grid pred (0) and the averaged result (1).", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}, "input_order": {"required": ["model", "start_percent", "end_percent", "pattern", "passes", "blend", "strength"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "HiDreamO1PatchSeamSmoothing", "display_name": "HiDream-O1 Patch Seam Smoothing", "description": "Average the model output across multiple shifted patch-grid positions during the late portion of sampling. Cancels seams.", "python_module": "comfy_extras.nodes_hidream_o1", "category": "model/patch/hidream", "output_node": false, "deprecated": false, "experimental": true, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveGLB": {"input": {"required": {"mesh": ["MESH,FILE_3D_GLB,FILE_3D_GLTF,FILE_3D_OBJ,FILE_3D_FBX,FILE_3D_STL,FILE_3D_USDZ,FILE_3D_PLY,FILE_3D_SPLAT,FILE_3D_SPZ,FILE_3D_KSPLAT,FILE_3D_SPLAT_ANY,FILE_3D_POINT_CLOUD_ANY,FILE_3D", {"tooltip": "Mesh or 3D file to save"}], "filename_prefix": ["STRING", {"default": "3d/ComfyUI", "multiline": false}]}, "hidden": {"prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["mesh", "filename_prefix"], "hidden": ["prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "SaveGLB", "display_name": "Save 3D Model", "description": "", "python_module": "comfy_extras.nodes_save_3d", "category": "3d", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["export 3d model", "save mesh"], "essentials_category": "Basics", "has_intermediate_output": false}, "LoadMoGeModel": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["MOGE_MODEL"], "output_is_list": [false], "output_name": ["MOGE_MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "LoadMoGeModel", "display_name": "Load MoGe Model", "description": "", "python_module": "comfy_extras.nodes_moge", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MoGeInference": {"input": {"required": {"moge_model": ["MOGE_MODEL", {}], "image": ["IMAGE", {}], "resolution_level": ["INT", {"tooltip": "0 = fastest, 9 = most detail.", "default": 9, "min": 0, "max": 9}], "fov_x_degrees": ["FLOAT", {"tooltip": "Horizontal field of view of the source camera. Sets the focal length used to unproject the depth map into 3D. 0 = auto-recover from the predicted points.", "advanced": true, "default": 0.0, "min": 0.0, "max": 170.0, "step": 0.1}], "batch_size": ["INT", {"tooltip": "Images per inference call. Lower if you OOM on a long video / image set.", "default": 4, "min": 1, "max": 64}], "force_projection": ["BOOLEAN", {"advanced": true, "default": true}], "apply_mask": ["BOOLEAN", {"tooltip": "Set masked-out (sky / invalid) pixels to inf in points and depth so meshing culls them. Disable to keep the raw predicted geometry everywhere; the mask is still returned separately.", "advanced": true, "default": true}]}}, "input_order": {"required": ["moge_model", "image", "resolution_level", "fov_x_degrees", "batch_size", "force_projection", "apply_mask"]}, "is_input_list": false, "output": ["MOGE_GEOMETRY"], "output_is_list": [false], "output_name": ["moge_geometry"], "output_tooltips": [null], "output_matchtypes": null, "name": "MoGeInference", "display_name": "Run MoGe Inference", "description": "Run MoGe on a single image to estimate depth and geometry.", "python_module": "comfy_extras.nodes_moge", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["moge", "depth", "geometry", "depth estimation", "geometry estimation"], "essentials_category": null, "has_intermediate_output": false}, "MoGePanoramaInference": {"input": {"required": {"moge_model": ["MOGE_MODEL", {}], "image": ["IMAGE", {"tooltip": "Equirectangular panorama (any aspect)."}], "resolution_level": ["INT", {"tooltip": "Per-view detail (0 = fastest, 9 = most detailed).", "default": 9, "min": 0, "max": 9}], "split_resolution": ["INT", {"tooltip": "Resolution of each perspective split.", "default": 512, "min": 256, "max": 1024}], "merge_resolution": ["INT", {"tooltip": "Long-side resolution of the merged equirect distance map.", "default": 1920, "min": 256, "max": 8192}], "batch_size": ["INT", {"tooltip": "Views per inference batch (12 splits total).", "default": 4, "min": 1, "max": 12}]}}, "input_order": {"required": ["moge_model", "image", "resolution_level", "split_resolution", "merge_resolution", "batch_size"]}, "is_input_list": false, "output": ["MOGE_GEOMETRY"], "output_is_list": [false], "output_name": ["moge_geometry"], "output_tooltips": [null], "output_matchtypes": null, "name": "MoGePanoramaInference", "display_name": "Run MoGe Panorama Inference", "description": "Run MoGe on an equirectangular panorama by splitting it into 12 perspective views, running inference on each, and merging the results into a single depth map.", "python_module": "comfy_extras.nodes_moge", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["moge", "panorama", "depth", "geometry", "depth estimation", "geometry estimation"], "essentials_category": null, "has_intermediate_output": false}, "MoGeRender": {"input": {"required": {"moge_geometry": ["MOGE_GEOMETRY", {}], "output": ["COMBO", {"tooltip": "DirectX vs OpenGL controls the normal-map green-channel convention. DirectX: green = -Y down (Unreal). OpenGL: green = +Y up (Blender, Substance, Unity, glTF).", "default": "depth", "multiselect": false, "options": ["depth", "depth_colored", "normal_opengl", "normal_directx", "mask"]}]}}, "input_order": {"required": ["moge_geometry", "output"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MoGeRender", "display_name": "Render MoGe Geometry", "description": "Render a depth map or normal map from geometry data", "python_module": "comfy_extras.nodes_moge", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["moge", "render", "geometry", "depth", "normal"], "essentials_category": null, "has_intermediate_output": false}, "MoGePointMapToMesh": {"input": {"required": {"moge_geometry": ["MOGE_GEOMETRY", {}], "batch_index": ["INT", {"tooltip": "Which image of a batched MoGe geometry to mesh. Per-image vertex counts differ, so batches can't be stacked into a single MESH.", "default": 0, "min": 0, "max": 4096}], "decimation": ["INT", {"tooltip": "Vertex stride; 1 = full resolution.", "default": 1, "min": 1, "max": 8}], "discontinuity_threshold": ["FLOAT", {"tooltip": "Drop pixels whose 3x3 depth span exceeds this fraction. 0 = off.", "default": 0.04, "min": 0.0, "max": 1.0, "step": 0.01}], "texture": ["BOOLEAN", {"tooltip": "Carry the source image through as the baseColor texture.", "default": true}]}}, "input_order": {"required": ["moge_geometry", "batch_index", "decimation", "discontinuity_threshold", "texture"]}, "is_input_list": false, "output": ["MESH"], "output_is_list": [false], "output_name": ["MESH"], "output_tooltips": [null], "output_matchtypes": null, "name": "MoGePointMapToMesh", "display_name": "Convert MoGe Point Map to Mesh", "description": "Convert a MoGe point map into a 3D mesh.", "python_module": "comfy_extras.nodes_moge", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["moge", "mesh", "geometry", "point map"], "essentials_category": null, "has_intermediate_output": false}, "LoadMediaPipeFaceLandmarker": {"input": {"required": {"model_name": ["COMBO", {"tooltip": "Face detection model from models/detection/.", "multiselect": false, "options": []}]}}, "input_order": {"required": ["model_name"]}, "is_input_list": false, "output": ["FACE_DETECTION_MODEL"], "output_is_list": [false], "output_name": ["FACE_DETECTION_MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "LoadMediaPipeFaceLandmarker", "display_name": "Load Face Detection Model (MediaPipe)", "description": "", "python_module": "comfy_extras.nodes_mediapipe", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["face", "facial", "mediapipe", "face landmark", "face mesh", "blazeface", "face detection"], "essentials_category": null, "has_intermediate_output": false}, "MediaPipeFaceLandmarker": {"input": {"required": {"face_detection_model": ["FACE_DETECTION_MODEL", {}], "image": ["IMAGE", {}], "detector_variant": ["COMBO", {"tooltip": "Face detector range. 'short' is tuned for close-up faces (within ~2 m of the camera); 'full' covers farther / smaller faces (up to ~5 m) but is slower. 'both' runs both detectors and keeps whichever found more faces per frame (~2\u00d7 detection cost).", "default": "short", "multiselect": false, "options": ["short", "full", "both"]}], "num_faces": ["INT", {"tooltip": "Maximum faces to return per frame. 0 = no cap (return all detected).", "default": 1, "min": 0, "max": 16, "step": 1}], "min_confidence": ["FLOAT", {"tooltip": "BlazeFace score threshold. Lower to catch small/occluded faces.", "advanced": true, "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "missing_frame_fallback": ["COMBO", {"tooltip": "Per-frame behaviour when detection fails in a batch. 'empty' leaves the frame faceless. 'previous' copies the most recent successful detection. 'interpolate' lerps landmarks/bbox/blendshapes between bracketing successful frames. Multi-face: pairs faces across frames by greedy bbox-centre NN.", "advanced": true, "default": "empty", "multiselect": false, "options": ["empty", "previous", "interpolate"]}]}}, "input_order": {"required": ["face_detection_model", "image", "detector_variant", "num_faces", "min_confidence", "missing_frame_fallback"]}, "is_input_list": false, "output": ["FACE_LANDMARKS", "BOUNDING_BOX"], "output_is_list": [false, false], "output_name": ["face_landmarks", "bboxes"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "MediaPipeFaceLandmarker", "display_name": "Detect Face Landmarks (MediaPipe)", "description": "Detects facial landmarks using MediaPipe model.", "python_module": "comfy_extras.nodes_mediapipe", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["face", "facial", "mediapipe", "face landmark", "face mesh", "blazeface", "face detection"], "essentials_category": null, "has_intermediate_output": false}, "MediaPipeFaceMeshVisualize": {"input": {"required": {"face_landmarks": ["FACE_LANDMARKS", {}], "connections": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "'all' = oval+eyes+brows+lips+irises+nose. 'fill' = solid face_oval polygon (silhouette mask). 'custom' = toggle each feature individually (including 'tesselation', the full 2547-edge wireframe).", "options": [{"key": "all", "inputs": {"required": {}}}, {"key": "fill", "inputs": {"required": {}}}, {"key": "custom", "inputs": {"required": {"face_oval": ["BOOLEAN", {"tooltip": "Draw the 'face_oval' connection set.", "default": true}], "lips": ["BOOLEAN", {"tooltip": "Draw the 'lips' connection set.", "default": true}], "left_eye": ["BOOLEAN", {"tooltip": "Draw the 'left_eye' connection set.", "default": true}], "right_eye": ["BOOLEAN", {"tooltip": "Draw the 'right_eye' connection set.", "default": true}], "left_eyebrow": ["BOOLEAN", {"tooltip": "Draw the 'left_eyebrow' connection set.", "default": true}], "right_eyebrow": ["BOOLEAN", {"tooltip": "Draw the 'right_eyebrow' connection set.", "default": true}], "irises": ["BOOLEAN", {"tooltip": "Draw the 'irises' connection set.", "default": true}], "nose": ["BOOLEAN", {"tooltip": "Draw the 'nose' connection set.", "default": true}], "tesselation": ["BOOLEAN", {"tooltip": "Draw the 'tesselation' connection set.", "default": false}]}}}]}], "color": ["COLOR", {"default": "#00ff00", "socketless": true}], "thickness": ["INT", {"tooltip": "Edge line thickness in pixels. 0 disables edge drawing.", "default": 1, "min": 0, "max": 8, "step": 1}], "point_size": ["INT", {"tooltip": "Landmark dot radius in pixels. 0 disables point drawing.", "default": 2, "min": 0, "max": 16, "step": 1}]}, "optional": {"image": ["IMAGE", {"tooltip": "If not connected, a black canvas will be used."}]}}, "input_order": {"required": ["face_landmarks", "connections", "color", "thickness", "point_size"], "optional": ["image"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MediaPipeFaceMeshVisualize", "display_name": "Visualize Face Landmarks (MediaPipe)", "description": "Draws face landmarks mesh on the input image.", "python_module": "comfy_extras.nodes_mediapipe", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["face", "facial", "mediapipe", "face landmark", "face mesh", "blazeface", "face detection", "visualize"], "essentials_category": null, "has_intermediate_output": false}, "MediaPipeFaceMask": {"input": {"required": {"face_landmarks": ["FACE_LANDMARKS", {}], "regions": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "'all' = union of face_oval+lips+eyes+irises (which collapses to face_oval since it encloses the rest). 'custom' = toggle each region individually for combos like lips+eyes.", "options": [{"key": "all", "inputs": {"required": {}}}, {"key": "custom", "inputs": {"required": {"face_oval": ["BOOLEAN", {"tooltip": "Include the 'face_oval' region in the mask.", "default": true}], "lips": ["BOOLEAN", {"tooltip": "Include the 'lips' region in the mask.", "default": false}], "left_eye": ["BOOLEAN", {"tooltip": "Include the 'left_eye' region in the mask.", "default": false}], "right_eye": ["BOOLEAN", {"tooltip": "Include the 'right_eye' region in the mask.", "default": false}], "irises": ["BOOLEAN", {"tooltip": "Include the 'irises' region in the mask.", "default": false}]}}}]}]}}, "input_order": {"required": ["face_landmarks", "regions"]}, "is_input_list": false, "output": ["MASK"], "output_is_list": [false], "output_name": ["MASK"], "output_tooltips": [null], "output_matchtypes": null, "name": "MediaPipeFaceMask", "display_name": "Draw Face Mask (MediaPipe)", "description": "Draws a mask from face landmarks.", "python_module": "comfy_extras.nodes_mediapipe", "category": "image/detection", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["face", "facial", "mediapipe", "face mask", "blazeface", "face detection", "visualize"], "essentials_category": null, "has_intermediate_output": false}, "SplatToFile3D": {"input": {"required": {"splat": ["SPLAT", {}], "format": ["COMBO", {"tooltip": "ply: standard 3D Gaussian Splat with full spherical harmonics. ksplat: mkkellogg SplatBuffer (level 0, uncompressed), base color only spz: Niantic gzip-compressed (~10x smaller), base color only ", "multiselect": false, "options": ["ply", "ksplat", "spz"]}]}}, "input_order": {"required": ["splat", "format"]}, "is_input_list": false, "output": ["FILE_3D_SPLAT_ANY"], "output_is_list": [false], "output_name": ["model_3d"], "output_tooltips": [null], "output_matchtypes": null, "name": "SplatToFile3D", "display_name": "Create 3D File (from Splat)", "description": "Serialize a gaussian splat to a File3D object for Save / Preview 3D nodes. Supports one item per batch only.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["gaussian to ply", "splat to file", "export gaussian"], "essentials_category": null, "has_intermediate_output": false}, "File3DToSplat": {"input": {"required": {"model_3d": ["FILE_3D,FILE_3D_SPLAT_ANY,FILE_3D_PLY,FILE_3D_SPLAT,FILE_3D_KSPLAT,FILE_3D_SPZ", {"tooltip": "A gaussian splat 3D file"}]}}, "input_order": {"required": ["model_3d"]}, "is_input_list": false, "output": ["SPLAT"], "output_is_list": [false], "output_name": ["splat"], "output_tooltips": [null], "output_matchtypes": null, "name": "File3DToSplat", "display_name": "Get Splat", "description": "Parse a splat File3D into a gaussian splat. Inverse of Create 3D File (from Splat). Supported format: PLY, SPLAT, KSPLAT, SPZ. PLY carries full spherical harmonics, the other formats are base color only. Format is auto-detected from the file contents.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["load splat", "ply to splat", "import splat", "file to splat"], "essentials_category": null, "has_intermediate_output": false}, "RenderSplat": {"input": {"required": {"splat": ["SPLAT", {}], "width": ["INT", {"default": 1024, "min": 64, "max": 2048, "step": 8}], "height": ["INT", {"default": 1024, "min": 64, "max": 2048, "step": 8}], "frames": ["INT", {"tooltip": "-1, 0, 1 = single still image; >1 = turntable, the camera orbits over a full 360 turn (works with any camera_info). Negative value orbits the other way.", "default": 1, "min": -240, "max": 240}], "splat_scale": ["FLOAT", {"tooltip": "Multiplier on each splat's projected footprint (lower = crisper points, higher = softer/fuller surface).", "advanced": true, "default": 1.0, "min": 0.1, "max": 5.0, "step": 0.05}], "sharpen": ["FLOAT", {"tooltip": "Sharpen overlapping splats: 1.0 = physically-correct blend; higher biases each pixel toward its dominant (nearest) splat for crisper texture, without shrinking splats or opening gaps. Non-physical above 1.", "default": 2.0, "min": 1.0, "max": 8.0, "step": 0.5}], "headlight_shading": ["FLOAT", {"tooltip": "Diffuse shading from a light at the camera (headlight), using the splat surfel normals: darkens surfaces that turn away from view to reveal form/curvature. 0 = flat albedo, 1 = strongest shading.", "advanced": true, "default": 0.0, "min": 0.0, "max": 3.0, "step": 0.05}], "opacity_threshold": ["FLOAT", {"tooltip": "Cull gaussians with opacity below this (removes faint floaters).", "advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}], "render_style": ["COMBO", {"tooltip": "What the image output shows: color, clay (neutral-albedo shaded), depth (near=bright), normal (OpenGL normal map).", "multiselect": false, "options": ["color", "clay", "depth", "normal"]}], "background": ["COLOR", {"default": "#000000", "socketless": true}]}, "optional": {"bg_image": ["IMAGE", {"tooltip": "Optional background plate composited behind the splat (overrides the solid background colour). Resized to the render size; a batch is used per frame, a single image for all. color/clay only."}], "camera_info": ["LOAD3D_CAMERA", {"tooltip": "Camera to render from - a Load3D / Preview3D camera or a Create Camera Info node. If empty, the splat is auto-framed from a default 3/4 view."}]}}, "input_order": {"required": ["splat", "width", "height", "frames", "splat_scale", "sharpen", "headlight_shading", "opacity_threshold", "render_style", "background"], "optional": ["bg_image", "camera_info"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["image", "mask"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "RenderSplat", "display_name": "Render Splat", "description": "Render a gaussian splat as an image with an anisotropic EWA rasterizer (oriented elliptical splats, antialiased, depth-sorted front-to-back). The camera comes from a camera_info input (Load / Preview 3D, or a Create Camera Info node); leave it empty to auto-frame the splat. Set frames greater than 1 for a turntable batch of images to feed a Video node.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["splat to image", "render splat", "gaussian turntable"], "essentials_category": null, "has_intermediate_output": false}, "CreateCameraInfo": {"input": {"required": {"mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "How to define the camera: orbit angles, an explicit position, or a position + quaternion.", "options": [{"key": "orbit", "inputs": {"required": {"yaw": ["FLOAT", {"default": 35.0, "min": -360.0, "max": 360.0, "step": 1.0}], "pitch": ["FLOAT", {"default": 30.0, "min": -89.0, "max": 89.0, "step": 1.0}], "distance": ["FLOAT", {"tooltip": "Camera distance from the target.", "default": 4.0, "min": 0.01, "max": 1000.0, "step": 0.01}]}}}, {"key": "look_at", "inputs": {"required": {"position_x": ["FLOAT", {"tooltip": "Camera position in world space (right-handed, Y-up).", "default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "position_y": ["FLOAT", {"default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "position_z": ["FLOAT", {"default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}]}}}, {"key": "quaternion", "inputs": {"required": {"position_x": ["FLOAT", {"tooltip": "Camera position in world space (right-handed, Y-up).", "default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "position_y": ["FLOAT", {"default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "position_z": ["FLOAT", {"default": 4.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "quat_x": ["FLOAT", {"default": 0.0, "min": -1.0, "max": 1.0, "step": 0.001}], "quat_y": ["FLOAT", {"default": 0.0, "min": -1.0, "max": 1.0, "step": 0.001}], "quat_z": ["FLOAT", {"default": 0.0, "min": -1.0, "max": 1.0, "step": 0.001}], "quat_w": ["FLOAT", {"tooltip": "Camera world-rotation quaternion (three.js: looks down local -Z). Normalized for you.", "default": 1.0, "min": -1.0, "max": 1.0, "step": 0.001}]}}}]}], "target_x": ["FLOAT", {"tooltip": "Look-at point (orbit pivot / aim). In orbit mode, move it to pan/translate the whole camera. Ignored in quaternion mode. Defaults to the origin.", "advanced": true, "default": 0.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "target_y": ["FLOAT", {"advanced": true, "default": 0.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "target_z": ["FLOAT", {"advanced": true, "default": 0.0, "min": -1000.0, "max": 1000.0, "step": 0.01}], "roll": ["FLOAT", {"tooltip": "Camera roll about the view axis, degrees.", "default": 0.0, "min": -180.0, "max": 180.0, "step": 1.0}], "fov": ["FLOAT", {"tooltip": "Vertical field of view in degrees.", "default": 35.0, "min": 1.0, "max": 120.0, "step": 1.0}], "zoom": ["FLOAT", {"tooltip": "Digital zoom (focal-length multiplier). >1 zooms in without moving the camera.", "default": 1.0, "min": 0.01, "max": 100.0, "step": 0.01}], "camera_type": ["COMBO", {"tooltip": "Projection used by Render Splat: perspective (foreshortening) or orthographic (parallel).", "multiselect": false, "options": ["perspective", "orthographic"]}]}}, "input_order": {"required": ["mode", "target_x", "target_y", "target_z", "roll", "fov", "zoom", "camera_type"]}, "is_input_list": false, "output": ["LOAD3D_CAMERA"], "output_is_list": [false], "output_name": ["camera_info"], "output_tooltips": [null], "output_matchtypes": null, "name": "CreateCameraInfo", "display_name": "Create Camera Info", "description": "Build a camera_infoMode 'orbit' aims with yaw/pitch/distance around the target; 'look_at' places the camera at world position. Coordinates are the viewer's world space (right-handed,Y-up).", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["camera position", "make camera info", "orbit camera", "look at camera"], "essentials_category": null, "has_intermediate_output": false}, "TransformSplat": {"input": {"required": {"splat": ["SPLAT", {}], "translate_x": ["FLOAT", {"default": 0.0, "min": -100.0, "max": 100.0, "step": 0.01}], "translate_y": ["FLOAT", {"default": 0.0, "min": -100.0, "max": 100.0, "step": 0.01}], "translate_z": ["FLOAT", {"default": 0.0, "min": -100.0, "max": 100.0, "step": 0.01}], "rotate_x": ["FLOAT", {"default": 0.0, "min": -360.0, "max": 360.0, "step": 1.0}], "rotate_y": ["FLOAT", {"default": 0.0, "min": -360.0, "max": 360.0, "step": 1.0}], "rotate_z": ["FLOAT", {"default": 0.0, "min": -360.0, "max": 360.0, "step": 1.0}], "scale_x": ["FLOAT", {"default": 1.0, "min": 0.01, "max": 100.0, "step": 0.01}], "scale_y": ["FLOAT", {"default": 1.0, "min": 0.01, "max": 100.0, "step": 0.01}], "scale_z": ["FLOAT", {"default": 1.0, "min": 0.01, "max": 100.0, "step": 0.01}]}}, "input_order": {"required": ["splat", "translate_x", "translate_y", "translate_z", "rotate_x", "rotate_y", "rotate_z", "scale_x", "scale_y", "scale_z"]}, "is_input_list": false, "output": ["SPLAT"], "output_is_list": [false], "output_name": ["splat"], "output_tooltips": [null], "output_matchtypes": null, "name": "TransformSplat", "display_name": "Transform Splat", "description": "Translate, rotate, and scale a gaussian splat. Non-uniform scale also reshapes every individual splat, slower process.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["move splat", "rotate splat", "scale splat", "gaussian transform"], "essentials_category": null, "has_intermediate_output": false}, "GetSplatCount": {"input": {"required": {"splat": ["SPLAT", {}]}, "hidden": {"unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["splat"], "hidden": ["unique_id"]}, "is_input_list": false, "output": ["SPLAT", "INT"], "output_is_list": [false, false], "output_name": ["splat", "count"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "GetSplatCount", "display_name": "Get Splat Count", "description": "Returns the number of splats summed across the batch.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["splat count", "gaussian count", "number of splats", "splat info"], "essentials_category": null, "has_intermediate_output": false}, "MergeSplat": {"input": {"required": {"splats": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"splat": ["SPLAT", {}]}}, "prefix": "splat", "min": 2, "max": 32}}]}}, "input_order": {"required": ["splats"]}, "is_input_list": false, "output": ["SPLAT"], "output_is_list": [false], "output_name": ["splat"], "output_tooltips": [null], "output_matchtypes": null, "name": "MergeSplat", "display_name": "Merge Splats", "description": "Concatenate any number of gaussian splats into one. Unioning several decodes of the same latent at different seeds densifies the surface, this can improve surface quality when meshing.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["union splat", "densify gaussian", "combine splat", "merge gaussian"], "essentials_category": null, "has_intermediate_output": false}, "SplatToMesh": {"input": {"required": {"splat": ["SPLAT", {}], "resolution": ["INT", {"tooltip": "Density-grid resolution along the longest axis. Higher = finer surface, more VRAM/time (grows with resolution^3).", "default": 384, "min": 64, "max": 768, "step": 16}], "kernel": ["INT", {"tooltip": "Max splat half-width in voxels. Each gaussian is rasterized over a window sized to its own 3-sigma, capped here - small surfels stay cheap, large ones aren't truncated. Raise if sparse splats leave gaps.", "default": 5, "min": 1, "max": 8}], "smooth": ["INT", {"tooltip": "Taubin mesh-smoothing iterations. Smooths the surface without shrinking it (volume-preserving), unlike blurring the density. 0 = raw surface.", "advanced": true, "default": 0, "min": 0, "max": 60}], "level": ["FLOAT", {"tooltip": "Iso-surface level. Auto-picked by Otsu; this biases it (1.0 = auto, lower = fatter/more-connected surface, higher = thinner/tighter).", "default": 0.4, "min": 0.0, "max": 2.0, "step": 0.01}], "min_component": ["INT", {"tooltip": "Drop connected components smaller than this many vertices (0 = keep all). Removes detached floater blobs and the inner shell of the double wall.", "advanced": true, "default": 500, "min": 0, "max": 100000, "step": 50}], "min_opacity": ["FLOAT", {"tooltip": "Ignore gaussians fainter than this before meshing.", "advanced": true, "default": 0.02, "min": 0.0, "max": 1.0, "step": 0.01}], "color_sharpen": ["FLOAT", {"tooltip": "Crisp up the vertex texture: 1.0 = physically-correct blend; higher biases each voxel's colour toward its dominant gaussian instead of averaging neighbours (de-smears the texture). Colour only - geometry is unchanged.", "default": 2.0, "min": 1.0, "max": 8.0, "step": 0.5}]}}, "input_order": {"required": ["splat", "resolution", "kernel", "smooth", "level", "min_component", "min_opacity", "color_sharpen"]}, "is_input_list": false, "output": ["MESH"], "output_is_list": [false], "output_name": ["mesh"], "output_tooltips": [null], "output_matchtypes": null, "name": "SplatToMesh", "display_name": "Extract Mesh from Splat", "description": "Extract a coloured mesh from a gaussian splat.", "python_module": "comfy_extras.nodes_gaussian_splat", "category": "3d/splat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["splat to mesh", "gaussian surface nets", "splat surface", "mesh splat"], "essentials_category": null, "has_intermediate_output": false}, "TripoSplatPreprocessImage": {"input": {"required": {"image": ["IMAGE", {}], "mask": ["MASK", {}], "erode_radius": ["INT", {"tooltip": "Erode the alpha matte by this pixel radius before cropping (avoids border bleed).", "default": 1, "min": 0, "max": 16}], "size": ["INT", {"tooltip": "Square image size. The model is trained at 1024; other sizes run but are off-distribution.", "default": 1024, "min": 256, "max": 4096, "step": 16}]}}, "input_order": {"required": ["image", "mask", "erode_radius", "size"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["image"], "output_tooltips": [null], "output_matchtypes": null, "name": "TripoSplatPreprocessImage", "display_name": "TripoSplat Preprocess Image", "description": "Crop center each image to a square canvas on a black background and add padding.", "python_module": "comfy_extras.nodes_triposplat", "category": "model/conditioning/triposplat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoSplatConditioning": {"input": {"required": {"clip_vision": ["CLIP_VISION", {"tooltip": "DINOv3 ViT-H/16+ image encoder"}], "vae": ["VAE", {"tooltip": "Flux2 VAE"}], "image": ["IMAGE", {}]}}, "input_order": {"required": ["clip_vision", "vae", "image"]}, "is_input_list": false, "output": ["CONDITIONING", "CONDITIONING", "LATENT"], "output_is_list": [false, false, false], "output_name": ["positive", "negative", "latent"], "output_tooltips": [null, null, "The fixed size noise target (latent +camera)."], "output_matchtypes": null, "name": "TripoSplatConditioning", "display_name": "TripoSplat Conditioning", "description": "Encode the image with DINOv3 and the Flux2 VAE into TripoSplat positive/negative conditioning, and create the fixed size noise target (latent + camera) for the KSampler", "python_module": "comfy_extras.nodes_triposplat", "category": "model/conditioning/triposplat", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VAEDecodeTripoSplat": {"input": {"required": {"samples": ["LATENT", {}], "vae": ["VAE", {"tooltip": "TripoSplat VAE decoder"}], "num_gaussians": ["INT", {"tooltip": "Number of gaussians to produce (rounded to a multiple of 32). 262144 matches the octree's point density; higher oversamples the same points (denser, but no new detail) and costs proportionally more VRAM/time.", "default": 262144, "min": 32768, "max": 1048576, "step": 32}], "seed": ["INT", {"tooltip": "Seeds the octree point sampler (global RNG) for deterministic decodes.", "default": 0, "min": 0, "max": 18446744073709551615}]}}, "input_order": {"required": ["samples", "vae", "num_gaussians", "seed"]}, "is_input_list": false, "output": ["SPLAT"], "output_is_list": [false], "output_name": ["splat"], "output_tooltips": [null], "output_matchtypes": null, "name": "VAEDecodeTripoSplat", "display_name": "TripoSplat Decode", "description": "Decode the sampled TripoSplat latent into a 3D gaussian splat. Modify the number of gaussians to vary the density.", "python_module": "comfy_extras.nodes_triposplat", "category": "3d/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoSplatSamplingPreview": {"input": {"required": {"model": ["MODEL", {}], "vae": ["VAE", {"tooltip": "TripoSplat VAE decoder"}], "octree_level": ["INT", {"tooltip": "Octree depth for the preview decode (lower = cheaper/coarser).", "advanced": true, "default": 5, "min": 2, "max": 8}], "num_gaussians": ["INT", {"tooltip": "Number of gaussians to produce for the preview (rounded to a multiple of 32).", "default": 16384, "min": 1024, "max": 262144, "step": 32}], "yaw": ["FLOAT", {"tooltip": "Preview camera yaw in degrees.", "advanced": true, "default": 90.0, "min": -360.0, "max": 360.0, "step": 1.0}], "pitch": ["FLOAT", {"tooltip": "Preview camera pitch in degrees.", "advanced": true, "default": 15.0, "min": -89.0, "max": 89.0, "step": 1.0}], "point_size": ["INT", {"tooltip": "Maximum splat radius in pixels. Each gaussian is sized from its scale and capped here; lower = finer/pointier, higher = chunkier.", "default": 3, "min": 1, "max": 16}]}}, "input_order": {"required": ["model", "vae", "octree_level", "num_gaussians", "yaw", "pitch", "point_size"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "TripoSplatSamplingPreview", "display_name": "TripoSplat Sampling Preview", "description": "Patch the TripoSplat model for the standard Ksampler node to show a live decoded gaussian splat preview at each step.", "python_module": "comfy_extras.nodes_triposplat", "category": "3d/latent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LoadDA3Model": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": []}], "weight_dtype": ["COMBO", {"default": "default", "multiselect": false, "options": ["default", "fp16", "bf16", "fp32"]}]}}, "input_order": {"required": ["model_name", "weight_dtype"]}, "is_input_list": false, "output": ["DA3_MODEL"], "output_is_list": [false], "output_name": ["DA3_MODEL"], "output_tooltips": [null], "output_matchtypes": null, "name": "LoadDA3Model", "display_name": "Load Depth Anything 3", "description": "", "python_module": "comfy_extras.nodes_depth_anything_3", "category": "model/loaders", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "DA3Inference": {"input": {"required": {"da3_model": ["DA3_MODEL", {}], "image": ["IMAGE", {}], "resolution": ["INT", {"tooltip": "Resolution the model runs at (longest side, multiple of 14).\nLower = faster / less VRAM.\nHigher = more detail.\nOutput is upsampled back to the original size.", "default": 504, "min": 140, "max": 2520, "step": 14}], "resize_method": ["COMBO", {"tooltip": "upper_bound_resize: scale so the longest side = resolution (caps memory, default).\nlower_bound_resize: scale so the shortest side = resolution (preserves more detail on tall/wide images, uses more memory).", "default": "upper_bound_resize", "multiselect": false, "options": ["upper_bound_resize", "lower_bound_resize"]}], "mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "mono: single view image (works with any model variant).\nmultiview: all images processed together for geometric consistency + camera pose (for Small/Base models only).", "options": [{"key": "mono", "inputs": {"required": {}}}, {"key": "multiview", "inputs": {"required": {"ref_view_strategy": ["COMBO", {"tooltip": "Which view acts as the geometric anchor.\n- saddle_balanced: the view most 'average' across all others (best general choice).\n- saddle_sim_range: the view most visually distinct from the others.\n- first / middle: fixed positional picks.", "default": "saddle_balanced", "multiselect": false, "options": ["saddle_balanced", "saddle_sim_range", "first", "middle"]}], "pose_method": ["COMBO", {"tooltip": "How the camera field-of-view is estimated (for Small/Base models only).\n- cam_dec: learned from image features.\n- ray_pose: derived geometrically from the model's 3D ray output.\nAffects perspective correctness of the 3D output. Try both if results look distorted.", "default": "cam_dec", "multiselect": false, "options": ["cam_dec", "ray_pose"]}]}}}]}]}}, "input_order": {"required": ["da3_model", "image", "resolution", "resize_method", "mode"]}, "is_input_list": false, "output": ["DA3_GEOMETRY"], "output_is_list": [false], "output_name": ["da3_geometry"], "output_tooltips": ["Dictionary of non-normalized tensors.\nAlways has the keys: depth, image, mode.\nOptional keys: sky (for Mono/Metric), confidence (for Small/Base), extrinsics + intrinsics (for multi-view)."], "output_matchtypes": null, "name": "DA3Inference", "display_name": "Run Depth Anything 3", "description": "Run Depth Anything 3 on an image. In multi-view mode each image is treated as a separate view of the same scene.", "python_module": "comfy_extras.nodes_depth_anything_3", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["depth", "geometry", "da3", "depth anything", "monocular", "pointmap", "sky", "3d", "metric depth", "disparity"], "essentials_category": null, "has_intermediate_output": false}, "DA3Render": {"input": {"required": {"da3_geometry": ["DA3_GEOMETRY", {}], "output": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "- depth: normalised greyscale depth image.\n- depth_colored: depth mapped through the Turbo colormap.\n- sky_mask: sky probability in [0, 1] (for Mono/Metric models only).\n- confidence: normalised depth confidence (for Small/Base models only).", "options": [{"key": "depth", "inputs": {"required": {"normalization": ["COMBO", {"tooltip": "- v2_style: mean/std normalisation for perceptually balanced results (default).\n- min_max: stretches the full depth range to [0, 1] for maximum contrast.\n- raw: no scaling,preserves metric units for Metric model.", "default": "v2_style", "multiselect": false, "options": ["v2_style", "min_max", "raw"]}], "apply_sky_clip": ["BOOLEAN", {"tooltip": "Clip sky-region depth to the 99th percentile of foreground depth before normalisation. Requires a sky key in the da3_geometry input (for Mono/Metric models only).", "default": false}]}}}, {"key": "depth_colored", "inputs": {"required": {"normalization": ["COMBO", {"tooltip": "- v2_style: mean/std normalisation for perceptually balanced results (default).\n- min_max: stretches the full depth range to [0, 1] for maximum contrast.\n- raw: no scaling,preserves metric units for Metric model.", "default": "v2_style", "multiselect": false, "options": ["v2_style", "min_max", "raw"]}], "apply_sky_clip": ["BOOLEAN", {"tooltip": "Clip sky-region depth to the 99th percentile of foreground depth before normalisation. Requires a sky key in the da3_geometry input (for Mono/Metric models only).", "default": false}]}}}, {"key": "sky_mask", "inputs": {"required": {"colored": ["BOOLEAN", {"tooltip": "Apply the Turbo colormap to the sky mask.", "default": false}]}}}, {"key": "confidence", "inputs": {"required": {"colored": ["BOOLEAN", {"tooltip": "Apply the Turbo colormap to the confidence map.", "default": false}]}}}]}]}}, "input_order": {"required": ["da3_geometry", "output"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "DA3Render", "display_name": "Render Depth Anything 3", "description": "Render a depth map, confidence map, or sky mask from Depth Anything 3 geometry data.", "python_module": "comfy_extras.nodes_depth_anything_3", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "DA3GeometryToMesh": {"input": {"required": {"da3_geometry": ["DA3_GEOMETRY", {}], "batch_index": ["INT", {"tooltip": "Which image of a batch to convert. Per-image vertex counts differ so batches cannot be stacked.", "default": 0, "min": 0, "max": 4096}], "decimation": ["INT", {"tooltip": "Vertex stride. 1 = full resolution, 2 = half, etc.", "default": 1, "min": 1, "max": 8}], "discontinuity_threshold": ["FLOAT", {"tooltip": "Drop triangles whose 3x3 depth span exceeds this fraction. 0 = off.", "default": 0.04, "min": 0.0, "max": 1.0, "step": 0.01}], "confidence_threshold": ["FLOAT", {"tooltip": "Exclude pixels whose per-image normalised confidence is below this value (0 = keep all, 1 = keep only the single most confident pixel). Used when the geometry has a confidence map (Small/Base models).", "default": 0.1, "min": 0.0, "max": 1.0, "step": 0.01}], "use_sky_mask": ["BOOLEAN", {"tooltip": "Exclude sky-probability pixels (sky >= 0.5) from the mesh. Used when the geometry has a sky map (Mono/Metric models).", "default": true}], "texture": ["BOOLEAN", {"tooltip": "Use the source image as a base color texture.", "default": true}]}}, "input_order": {"required": ["da3_geometry", "batch_index", "decimation", "discontinuity_threshold", "confidence_threshold", "use_sky_mask", "texture"]}, "is_input_list": false, "output": ["MESH"], "output_is_list": [false], "output_name": ["MESH"], "output_tooltips": [null], "output_matchtypes": null, "name": "DA3GeometryToMesh", "display_name": "Convert DA3 Geometry to Mesh", "description": "Convert a depth map into a triangulated 3D mesh.", "python_module": "comfy_extras.nodes_depth_anything_3", "category": "image/geometry estimation", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["da3", "depth anything", "mesh", "geometry", "3d", "triangulate"], "essentials_category": null, "has_intermediate_output": false}, "SeedNode": {"input": {"required": {"seed": ["INT", {"min": 0, "max": 9223372036854775807, "control_after_generate": "fixed"}]}}, "input_order": {"required": ["seed"]}, "is_input_list": false, "output": ["INT"], "output_is_list": [false], "output_name": ["seed"], "output_tooltips": [null], "output_matchtypes": null, "name": "SeedNode", "display_name": "Seed", "description": "", "python_module": "comfy_extras.nodes_seed", "category": "utilities", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": ["seed", "random"], "essentials_category": null, "has_intermediate_output": false}, "ClaudeNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text input to the model.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The Claude model used to generate the response.", "options": [{"key": "Opus 4.7", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate (includes reasoning tokens when enabled).", "advanced": true, "default": 32768, "min": 4096, "max": 64000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7 and any model when reasoning_effort is set.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "reasoning_effort": ["COMBO", {"tooltip": "Extended thinking effort. 'off' disables reasoning.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "Opus 4.6", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate (includes reasoning tokens when enabled).", "advanced": true, "default": 32768, "min": 4096, "max": 64000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7 and any model when reasoning_effort is set.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "reasoning_effort": ["COMBO", {"tooltip": "Extended thinking effort. 'off' disables reasoning.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "Sonnet 4.6", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate (includes reasoning tokens when enabled).", "advanced": true, "default": 32768, "min": 4096, "max": 64000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7 and any model when reasoning_effort is set.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "reasoning_effort": ["COMBO", {"tooltip": "Extended thinking effort. 'off' disables reasoning.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "Sonnet 4.5", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate (includes reasoning tokens when enabled).", "advanced": true, "default": 32768, "min": 4096, "max": 64000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7 and any model when reasoning_effort is set.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}], "reasoning_effort": ["COMBO", {"tooltip": "Extended thinking effort. 'off' disables reasoning.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "Haiku 4.5", "inputs": {"required": {"max_tokens": ["INT", {"tooltip": "Maximum number of tokens to generate (includes reasoning tokens when enabled).", "advanced": true, "default": 32768, "min": 4096, "max": 64000}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, 1.0 is most random. Ignored for Opus 4.7 and any model when reasoning_effort is set.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional image(s) to use as context for the model. Up to 20 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}, "optional": {"system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate the model's behavior.", "advanced": true, "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed", "images"], "optional": ["system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "ClaudeNode", "display_name": "Anthropic Claude", "description": "Generate text responses with Anthropic's Claude models. Provide a text prompt and optionally one or more images for multimodal context.", "python_module": "comfy_api_nodes.nodes_anthropic", "category": "partner/text/Anthropic", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $contains($m, \"opus\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.005, 0.025],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"sonnet\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.003, 0.015],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"haiku\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.001, 0.005],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : {\"type\":\"text\", \"text\":\"Token-based\"}\n )\n "}, "search_aliases": null, "essentials_category": "Text Generation", "has_intermediate_output": false}, "BeebleSwitchXVideoEdit": {"input": {"required": {"video": ["VIDEO", {}], "prompt": ["STRING", {"tooltip": "Text description of the desired output (max 2000 chars). At least one of 'prompt' or 'reference_image' is required.", "default": "", "multiline": true}], "alpha_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Controls how SwitchX decides what to keep vs. regenerate. 'auto' isolates the main subject automatically. 'fill' regenerates the entire frame while preserving geometry. 'select' propagates a first-frame keyframe across the clip. 'custom' uses a per-frame alpha matte you provide.", "options": [{"key": "auto", "inputs": {"required": {}}}, {"key": "fill", "inputs": {"required": {}}}, {"key": "select", "inputs": {"required": {"alpha_keyframe": ["MASK", {"tooltip": "First-frame keyframe mask. Beeble propagates this across the video."}]}}}, {"key": "custom", "inputs": {"required": {"alpha_mask": ["MASK", {"tooltip": "Per-frame grayscale mask covering the entire video. Must have the same frame count as the source. Connect a MASK output from SAM3_TrackToMask or similar."}]}}}]}], "max_resolution": ["COMBO", {"tooltip": "Maximum output resolution.", "default": "1080p", "multiselect": false, "options": ["1080p", "720p"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"reference_image": ["IMAGE", {"tooltip": "Reference image whose look (background, lighting, costume) the result should adopt. At least one of 'reference_image' or 'prompt' is required."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "prompt", "alpha_mode", "max_resolution", "seed"], "optional": ["reference_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "VIDEO"], "output_is_list": [false, false], "output_name": ["video", "alpha"], "output_tooltips": [null, "The alpha matte Beeble used. Empty for 'fill' mode, which has no separate matte."], "output_matchtypes": null, "name": "BeebleSwitchXVideoEdit", "display_name": "Beeble SwitchX Video Edit", "description": "Edit a video with Beeble SwitchX. Switches anything in the scene (background, lighting, costume) while preserving the original subject's pixels and motion. Provide a reference image and/or text prompt to describe the new look. Max 240 frames, max ~2.77MP per frame.", "python_module": "comfy_api_nodes.nodes_beeble", "category": "partner/video/Beeble", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "max_resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rate := widgets.max_resolution = \"1080p\" ? 0.429 : 0.143;\n {\"type\":\"usd\",\"usd\": $rate, \"format\":{\"suffix\":\"/30 frames\"}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BeebleSwitchXImageEdit": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Text description of the desired output (max 2000 chars). At least one of 'prompt' or 'reference_image' is required.", "default": "", "multiline": true}], "alpha_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Controls how SwitchX decides what to keep vs. regenerate. 'auto' isolates the main subject automatically. 'fill' regenerates the entire frame while preserving geometry. 'select' propagates a first-frame keyframe across the clip. 'custom' uses a per-frame alpha matte you provide.", "options": [{"key": "auto", "inputs": {"required": {}}}, {"key": "fill", "inputs": {"required": {}}}, {"key": "select", "inputs": {"required": {"alpha_keyframe": ["MASK", {"tooltip": "Grayscale keyframe mask."}]}}}, {"key": "custom", "inputs": {"required": {"alpha_mask": ["MASK", {"tooltip": "Grayscale mask to apply."}]}}}]}], "max_resolution": ["COMBO", {"tooltip": "Maximum output resolution.", "default": "1080p", "multiselect": false, "options": ["1080p", "720p"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"reference_image": ["IMAGE", {"tooltip": "Reference image whose look (background, lighting, costume) the result should adopt. At least one of 'reference_image' or 'prompt' is required."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "alpha_mode", "max_resolution", "seed"], "optional": ["reference_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["image", "alpha"], "output_tooltips": [null, "The alpha matte Beeble used. Empty for 'fill' mode, which has no separate matte."], "output_matchtypes": null, "name": "BeebleSwitchXImageEdit", "display_name": "Beeble SwitchX Image Edit", "description": "Edit a single image with Beeble SwitchX. Switches anything in the scene (background, lighting, costume) while preserving the original subject's pixels. Provide a reference image and/or text prompt to describe the new look. Max ~2.77MP.", "python_module": "comfy_api_nodes.nodes_beeble", "category": "partner/image/Beeble", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "max_resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rate := widgets.max_resolution = \"1080p\" ? 0.429 : 0.143;\n {\"type\":\"usd\",\"usd\": $rate}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxProUltraImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation, but results are nondeterministic (same seed will not produce exactly the same result).", "advanced": true, "default": false}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "aspect_ratio": ["STRING", {"tooltip": "Aspect ratio of image; must be between 1:4 and 4:1.", "default": "16:9", "multiline": false}], "raw": ["BOOLEAN", {"tooltip": "When True, generate less processed, more natural-looking images.", "default": false}]}, "optional": {"image_prompt": ["IMAGE", {}], "image_prompt_strength": ["FLOAT", {"tooltip": "Blend between the prompt and the image prompt.", "default": 0.1, "min": 0.0, "max": 1.0, "step": 0.01}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "prompt_upsampling", "seed", "aspect_ratio", "raw"], "optional": ["image_prompt", "image_prompt_strength"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxProUltraImageNode", "display_name": "Flux 1.1 [pro] Ultra Image", "description": "Generates images using Flux Pro 1.1 Ultra via api based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.06}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxKontextProImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation - specify what and how to edit.", "default": "", "multiline": true}], "aspect_ratio": ["STRING", {"tooltip": "Aspect ratio of image; must be between 1:4 and 4:1.", "default": "16:9", "multiline": false}], "guidance": ["FLOAT", {"tooltip": "Guidance strength for the image generation process", "default": 3.0, "min": 0.1, "max": 99.0, "step": 0.1}], "steps": ["INT", {"tooltip": "Number of steps for the image generation process", "default": 50, "min": 1, "max": 150}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 1234, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation, but results are nondeterministic (same seed will not produce exactly the same result).", "advanced": true, "default": false}]}, "optional": {"input_image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "aspect_ratio", "guidance", "steps", "seed", "prompt_upsampling"], "optional": ["input_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxKontextProImageNode", "display_name": "Flux.1 Kontext [pro] Image", "description": "Edits images using Flux.1 Kontext [pro] via api based on prompt and aspect ratio.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxKontextMaxImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation - specify what and how to edit.", "default": "", "multiline": true}], "aspect_ratio": ["STRING", {"tooltip": "Aspect ratio of image; must be between 1:4 and 4:1.", "default": "16:9", "multiline": false}], "guidance": ["FLOAT", {"tooltip": "Guidance strength for the image generation process", "default": 3.0, "min": 0.1, "max": 99.0, "step": 0.1}], "steps": ["INT", {"tooltip": "Number of steps for the image generation process", "default": 50, "min": 1, "max": 150}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 1234, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation, but results are nondeterministic (same seed will not produce exactly the same result).", "advanced": true, "default": false}]}, "optional": {"input_image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "aspect_ratio", "guidance", "steps", "seed", "prompt_upsampling"], "optional": ["input_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxKontextMaxImageNode", "display_name": "Flux.1 Kontext [max] Image", "description": "Edits images using Flux.1 Kontext [pro] via api based on prompt and aspect ratio.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxProExpandNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation, but results are nondeterministic (same seed will not produce exactly the same result).", "advanced": true, "default": false}], "top": ["INT", {"tooltip": "Number of pixels to expand at the top of the image", "default": 0, "min": 0, "max": 2048}], "bottom": ["INT", {"tooltip": "Number of pixels to expand at the bottom of the image", "default": 0, "min": 0, "max": 2048}], "left": ["INT", {"tooltip": "Number of pixels to expand at the left of the image", "default": 0, "min": 0, "max": 2048}], "right": ["INT", {"tooltip": "Number of pixels to expand at the right of the image", "default": 0, "min": 0, "max": 2048}], "guidance": ["FLOAT", {"tooltip": "Guidance strength for the image generation process", "default": 60, "min": 1.5, "max": 100}], "steps": ["INT", {"tooltip": "Number of steps for the image generation process", "default": 50, "min": 15, "max": 50}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "prompt_upsampling", "top", "bottom", "left", "right", "guidance", "steps", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxProExpandNode", "display_name": "Flux.1 Expand Image", "description": "Outpaints image based on prompt.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.05}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxProFillNode": {"input": {"required": {"image": ["IMAGE", {}], "mask": ["MASK", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation, but results are nondeterministic (same seed will not produce exactly the same result).", "advanced": true, "default": false}], "guidance": ["FLOAT", {"tooltip": "Guidance strength for the image generation process", "default": 60, "min": 1.5, "max": 100}], "steps": ["INT", {"tooltip": "Number of steps for the image generation process", "default": 50, "min": 15, "max": 50}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "mask", "prompt", "prompt_upsampling", "guidance", "steps", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxProFillNode", "display_name": "Flux.1 Fill Image", "description": "Inpaints image based on mask and prompt.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.05}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxEraseNode": {"input": {"required": {"image": ["IMAGE", {}], "mask": ["MASK", {"tooltip": "White areas are removed; black areas are preserved."}], "dilate_pixels": ["INT", {"tooltip": "Expands the mask boundaries to ensure clean coverage of the object's edges.", "default": 10, "min": 0, "max": 25}]}, "optional": {"seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "mask", "dilate_pixels"], "optional": ["seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxEraseNode", "display_name": "Flux Erase Image", "description": "Removes the masked object from an image and reconstructs the background. Paint the mask over what you want to erase.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"range_usd\",\"min_usd\":0.03,\"max_usd\":0.06,\"format\":{\"approximate\":true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "FluxVTONode": {"input": {"required": {"person": ["IMAGE", {"tooltip": "Image of the person to dress."}], "garment": ["IMAGE", {"tooltip": "Image of the garment to apply."}], "prompt": ["STRING", {"tooltip": "Optional natural-language styling instruction (e.g. how the garment should fit).", "default": "", "multiline": true}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["person", "garment", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "FluxVTONode", "display_name": "Flux Virtual Try-On", "description": "Virtual try-on: dresses the person in the provided garment.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"range_usd\",\"min_usd\":0.0375,\"max_usd\":0.075,\"format\":{\"approximate\":true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Flux2ProImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation or edit", "default": "", "multiline": true}], "width": ["INT", {"default": 1024, "min": 256, "max": 2048, "step": 32}], "height": ["INT", {"default": 768, "min": 256, "max": 2048, "step": 32}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation.", "advanced": true, "default": true}]}, "optional": {"images": ["IMAGE", {"tooltip": "Up to 9 images to be used as references."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "width", "height", "seed", "prompt_upsampling"], "optional": ["images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Flux2ProImageNode", "display_name": "Flux.2 [pro] Image", "description": "Generates images synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "width", "type": "INT"}, {"name": "height", "type": "INT"}], "inputs": ["images"], "input_groups": []}, "expr": "\n (\n $MP := 1024 * 1024;\n $outMP := $max([1, $floor(((widgets.width * widgets.height) + $MP - 1) / $MP)]);\n $outputCost := 0.03 + 0.015 * ($outMP - 1);\n inputs.images.connected\n ? {\n \"type\":\"range_usd\",\n \"min_usd\": $outputCost + 0.015,\n \"max_usd\": $outputCost + 0.12,\n \"format\": { \"approximate\": true }\n }\n : {\"type\":\"usd\",\"usd\": $outputCost}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Flux2MaxImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation or edit", "default": "", "multiline": true}], "width": ["INT", {"default": 1024, "min": 256, "max": 2048, "step": 32}], "height": ["INT", {"default": 768, "min": 256, "max": 2048, "step": 32}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "prompt_upsampling": ["BOOLEAN", {"tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation.", "advanced": true, "default": true}]}, "optional": {"images": ["IMAGE", {"tooltip": "Up to 9 images to be used as references."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "width", "height", "seed", "prompt_upsampling"], "optional": ["images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Flux2MaxImageNode", "display_name": "Flux.2 [max] Image", "description": "Generates images synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "width", "type": "INT"}, {"name": "height", "type": "INT"}], "inputs": ["images"], "input_groups": []}, "expr": "\n (\n $MP := 1024 * 1024;\n $outMP := $max([1, $floor(((widgets.width * widgets.height) + $MP - 1) / $MP)]);\n $outputCost := 0.07 + 0.03 * ($outMP - 1);\n\n inputs.images.connected\n ? {\n \"type\":\"range_usd\",\n \"min_usd\": $outputCost + 0.03,\n \"max_usd\": $outputCost + 0.24,\n \"format\": { \"approximate\": true }\n }\n : {\"type\":\"usd\",\"usd\": $outputCost}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Flux2ImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation or edit", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Flux.2 [pro]", "inputs": {"required": {"width": ["INT", {"default": 1024, "min": 256, "max": 2048, "step": 32}], "height": ["INT", {"default": 768, "min": 256, "max": 2048, "step": 32}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image-to-image generation. Up to 8 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}, {"key": "Flux.2 [max]", "inputs": {"required": {"width": ["INT", {"default": 1024, "min": 256, "max": 2048, "step": 32}], "height": ["INT", {"default": 768, "min": 256, "max": 2048, "step": 32}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image-to-image generation. Up to 8 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}]}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Flux2ImageNode", "display_name": "Flux.2 Image", "description": "Generate images via Flux.2 [pro] or Flux.2 [max] from a prompt and optional reference images.", "python_module": "comfy_api_nodes.nodes_bfl", "category": "partner/image/BFL", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.width", "type": "INT"}, {"name": "model.height", "type": "INT"}], "inputs": [], "input_groups": ["model.images"]}, "expr": "\n (\n $isMax := widgets.model = \"flux.2 [max]\";\n $MP := 1024 * 1024;\n $w := $lookup(widgets, \"model.width\");\n $h := $lookup(widgets, \"model.height\");\n $outMP := $max([1, $floor((($w * $h) + $MP - 1) / $MP)]);\n $outputCost := $isMax\n ? (0.07 + 0.03 * ($outMP - 1))\n : (0.03 + 0.015 * ($outMP - 1));\n $refMin := $isMax ? 0.03 : 0.015;\n $refMax := $isMax ? 0.24 : 0.12;\n $hasRefs := $lookup(inputGroups, \"model.images\") > 0;\n $hasRefs\n ? {\n \"type\": \"range_usd\",\n \"min_usd\": $outputCost + $refMin,\n \"max_usd\": $outputCost + $refMax,\n \"format\": { \"approximate\": true }\n }\n : {\"type\": \"usd\", \"usd\": $outputCost}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BriaImageEditNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["FIBO"]}], "image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Instruction to edit image", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"default": "", "multiline": true}], "structured_prompt": ["STRING", {"tooltip": "A string containing the structured edit prompt in JSON format. Use this instead of usual prompt for precise, programmatic control.", "default": "", "multiline": true}], "seed": ["INT", {"default": 1, "min": 1, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "guidance_scale": ["FLOAT", {"tooltip": "Higher value makes the image follow the prompt more closely.", "default": 3, "min": 3, "max": 5, "step": 0.01, "display": "number"}], "steps": ["INT", {"default": 50, "min": 20, "max": 50, "step": 1, "display": "number"}], "moderation": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Moderation settings", "options": [{"key": "false", "inputs": {"required": {}}}, {"key": "true", "inputs": {"required": {"prompt_content_moderation": ["BOOLEAN", {"default": false}], "visual_input_moderation": ["BOOLEAN", {"default": false}], "visual_output_moderation": ["BOOLEAN", {"default": true}]}}}]}]}, "optional": {"mask": ["MASK", {"tooltip": "If omitted, the edit applies to the entire image."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "prompt", "negative_prompt", "structured_prompt", "seed", "guidance_scale", "steps", "moderation"], "optional": ["mask"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "STRING"], "output_is_list": [false, false], "output_name": ["IMAGE", "structured_prompt"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "BriaImageEditNode", "display_name": "Bria FIBO Image Edit", "description": "Edit images using Bria latest model", "python_module": "comfy_api_nodes.nodes_bria", "category": "partner/image/Bria", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.04}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BriaRemoveImageBackground": {"input": {"required": {"image": ["IMAGE", {}], "moderation": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Moderation settings", "options": [{"key": "false", "inputs": {"required": {}}}, {"key": "true", "inputs": {"required": {"visual_input_moderation": ["BOOLEAN", {"default": false}], "visual_output_moderation": ["BOOLEAN", {"default": true}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "moderation", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "BriaRemoveImageBackground", "display_name": "Bria Remove Image Background", "description": "Remove the background from an image using Bria RMBG 2.0.", "python_module": "comfy_api_nodes.nodes_bria", "category": "partner/image/Bria", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.018}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BriaRemoveVideoBackground": {"input": {"required": {"video": ["VIDEO", {}], "background_color": ["COMBO", {"tooltip": "Background color for the output video.", "multiselect": false, "options": ["Black", "White", "Gray", "Red", "Green", "Blue", "Yellow", "Cyan", "Magenta", "Orange"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "background_color", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "BriaRemoveVideoBackground", "display_name": "Bria Remove Video Background", "description": "Remove the background from a video using Bria. ", "python_module": "comfy_api_nodes.nodes_bria", "category": "partner/video/Bria", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.0042,\"format\":{\"suffix\":\"/second\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BriaVideoGreenScreen": {"input": {"required": {"video": ["VIDEO", {}], "green_shade": ["COMBO", {"tooltip": "Solid chroma-key shade applied behind the foreground: broadcast_green (#00B140), chroma_green (#00FF00), or blue_screen (#0000FF).", "multiselect": false, "options": ["broadcast_green", "chroma_green", "blue_screen"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "green_shade", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "BriaVideoGreenScreen", "display_name": "Bria Video Green Screen", "description": "Replace a video's background with a solid chroma-key screen using Bria.", "python_module": "comfy_api_nodes.nodes_bria", "category": "partner/video/Bria", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.0042,\"format\":{\"suffix\":\"/second\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BriaVideoReplaceBackground": {"input": {"required": {"video": ["VIDEO", {"tooltip": "Foreground video whose background is replaced."}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "optional": {"background_image": ["IMAGE", {"tooltip": "Background image to composite behind the foreground. Provide either a background image or a background video, not both."}], "background_video": ["VIDEO", {"tooltip": "Background video to composite behind the foreground. Provide either a background image or a background video, not both."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "seed"], "optional": ["background_image", "background_video"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "BriaVideoReplaceBackground", "display_name": "Bria Video Replace Background", "description": "Replace a video's background with a supplied image or video using Bria. The output keeps the foreground's resolution and frame rate; a background with a different aspect ratio is stretched to fit, so match it for undistorted results.", "python_module": "comfy_api_nodes.nodes_bria", "category": "partner/video/Bria", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.0042,\"format\":{\"suffix\":\"/second\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "BriaTransparentVideoBackground": {"input": {"required": {"video": ["VIDEO", {}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["images", "mask"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "BriaTransparentVideoBackground", "display_name": "Bria Remove Video Background (Transparent)", "description": "Remove the background from a video using Bria and return the cut-out frames plus an alpha mask. Connect both to a compositing node, or feed them to Save WEBM to write a transparent video.", "python_module": "comfy_api_nodes.nodes_bria", "category": "partner/video/Bria", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.0042,\"format\":{\"suffix\":\"/second\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceImageNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["seedream-3-0-t2i-250415"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the image", "multiline": true}], "size_preset": ["COMBO", {"tooltip": "Pick a recommended size. Select Custom to use the width and height below", "multiselect": false, "options": ["1024x1024 (1:1)", "864x1152 (3:4)", "1152x864 (4:3)", "1280x720 (16:9)", "720x1280 (9:16)", "832x1248 (2:3)", "1248x832 (3:2)", "1512x648 (21:9)", "2048x2048 (1:1)", "Custom"]}], "width": ["INT", {"tooltip": "Custom width for image. Value is working only if `size_preset` is set to `Custom`", "default": 1024, "min": 512, "max": 2048, "step": 64}], "height": ["INT", {"tooltip": "Custom height for image. Value is working only if `size_preset` is set to `Custom`", "default": 1024, "min": 512, "max": 2048, "step": 64}]}, "optional": {"seed": ["INT", {"tooltip": "Seed to use for generation", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "guidance_scale": ["FLOAT", {"tooltip": "Higher value makes the image follow the prompt more closely", "default": 2.5, "min": 1.0, "max": 10.0, "step": 0.01, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the image", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "size_preset", "width", "height"], "optional": ["seed", "guidance_scale", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceImageNode", "display_name": "ByteDance Image", "description": "Generate images using ByteDance models via api based on prompt", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/image/ByteDance", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.03}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceSeedreamNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["seedream 5.0 lite", "seedream-4-5-251128", "seedream-4-0-250828"]}], "prompt": ["STRING", {"tooltip": "Text prompt for creating or editing an image.", "default": "", "multiline": true}], "size_preset": ["COMBO", {"tooltip": "Pick a recommended size. Select Custom to use the width and height below.", "multiselect": false, "options": ["2048x2048 (1:1)", "2304x1728 (4:3)", "1728x2304 (3:4)", "2560x1440 (16:9)", "1440x2560 (9:16)", "2496x1664 (3:2)", "1664x2496 (2:3)", "3024x1296 (21:9)", "3072x3072 (1:1)", "4096x4096 (1:1)", "Custom"]}]}, "optional": {"image": ["IMAGE", {"tooltip": "Input image(s) for image-to-image generation. Reference image(s) for single or multi-reference generation."}], "width": ["INT", {"tooltip": "Custom width for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 6240, "step": 2}], "height": ["INT", {"tooltip": "Custom height for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 4992, "step": 2}], "sequential_image_generation": ["COMBO", {"tooltip": "Group image generation mode. 'disabled' generates a single image. 'auto' lets the model decide whether to generate multiple related images (e.g., story scenes, character variations).", "multiselect": false, "options": ["disabled", "auto"]}], "max_images": ["INT", {"tooltip": "Maximum number of images to generate when sequential_image_generation='auto'. Total images (input + generated) cannot exceed 15.", "default": 1, "min": 1, "max": 15, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the image.", "advanced": true, "default": false}], "fail_on_partial": ["BOOLEAN", {"tooltip": "If enabled, abort execution if any requested images are missing or return an error.", "advanced": true, "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "size_preset"], "optional": ["image", "width", "height", "sequential_image_generation", "max_images", "seed", "watermark", "fail_on_partial"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceSeedreamNode", "display_name": "ByteDance Seedream 4.5 & 5.0", "description": "Unified text-to-image generation and precise single-sentence editing at up to 4K resolution.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/image/ByteDance", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $price := $contains(widgets.model, \"5.0 lite\") ? 0.035 :\n $contains(widgets.model, \"4-5\") ? 0.04 : 0.03;\n {\n \"type\":\"usd\",\n \"usd\": $price,\n \"format\": { \"suffix\":\" x images/Run\", \"approximate\": true }\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceSeedreamNodeV2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for creating or editing an image.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "seedream 5.0 lite", "inputs": {"required": {"size_preset": ["COMBO", {"tooltip": "Pick a recommended size. Select Custom to use the width and height below.", "multiselect": false, "options": ["(2K) 2048x2048 (1:1)", "(2K) 1728x2304 (3:4)", "(2K) 2304x1728 (4:3)", "(2K) 2848x1600 (16:9)", "(2K) 1600x2848 (9:16)", "(2K) 1664x2496 (2:3)", "(2K) 2496x1664 (3:2)", "(2K) 3136x1344 (21:9)", "(3K) 3072x3072 (1:1)", "(3K) 2592x3456 (3:4)", "(3K) 3456x2592 (4:3)", "(3K) 4096x2304 (16:9)", "(3K) 2304x4096 (9:16)", "(3K) 2496x3744 (2:3)", "(3K) 3744x2496 (3:2)", "(3K) 4704x2016 (21:9)", "(4K) 4096x4096 (1:1)", "(4K) 3520x4704 (3:4)", "(4K) 4704x3520 (4:3)", "(4K) 5504x3040 (16:9)", "(4K) 3040x5504 (9:16)", "(4K) 3328x4992 (2:3)", "(4K) 4992x3328 (3:2)", "(4K) 6240x2656 (21:9)", "Custom"]}], "width": ["INT", {"tooltip": "Custom width for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 6240, "step": 2}], "height": ["INT", {"tooltip": "Custom height for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 4992, "step": 2}], "max_images": ["INT", {"tooltip": "Maximum number of images to generate. With 1, exactly one image is produced. With >1, the model generates between 1 and max_images related images (e.g., story scenes, character variations). Total images (input + generated) cannot exceed 15.", "default": 1, "min": 1, "max": 14, "step": 1, "display": "number"}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image-to-image or multi-reference generation. Up to 14 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14"], "min": 0}}], "fail_on_partial": ["BOOLEAN", {"tooltip": "If enabled, abort execution if any requested images are missing or return an error.", "advanced": true, "default": false}]}}}, {"key": "seedream-4-5-251128", "inputs": {"required": {"size_preset": ["COMBO", {"tooltip": "Pick a recommended size. Select Custom to use the width and height below.", "multiselect": false, "options": ["(2K) 2048x2048 (1:1)", "(2K) 1728x2304 (3:4)", "(2K) 2304x1728 (4:3)", "(2K) 2848x1600 (16:9)", "(2K) 1600x2848 (9:16)", "(2K) 1664x2496 (2:3)", "(2K) 2496x1664 (3:2)", "(2K) 3136x1344 (21:9)", "(4K) 4096x4096 (1:1)", "(4K) 3520x4704 (3:4)", "(4K) 4704x3520 (4:3)", "(4K) 5504x3040 (16:9)", "(4K) 3040x5504 (9:16)", "(4K) 3328x4992 (2:3)", "(4K) 4992x3328 (3:2)", "(4K) 6240x2656 (21:9)", "Custom"]}], "width": ["INT", {"tooltip": "Custom width for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 6240, "step": 2}], "height": ["INT", {"tooltip": "Custom height for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 4992, "step": 2}], "max_images": ["INT", {"tooltip": "Maximum number of images to generate. With 1, exactly one image is produced. With >1, the model generates between 1 and max_images related images (e.g., story scenes, character variations). Total images (input + generated) cannot exceed 15.", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image-to-image or multi-reference generation. Up to 10 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 0}}], "fail_on_partial": ["BOOLEAN", {"tooltip": "If enabled, abort execution if any requested images are missing or return an error.", "advanced": true, "default": false}]}}}, {"key": "seedream-4-0-250828", "inputs": {"required": {"size_preset": ["COMBO", {"tooltip": "Pick a recommended size. Select Custom to use the width and height below.", "multiselect": false, "options": ["(1K) 1024x1024 (1:1)", "(1K) 864x1152 (3:4)", "(1K) 1152x864 (4:3)", "(1K) 1312x736 (16:9)", "(1K) 736x1312 (9:16)", "(1K) 832x1248 (2:3)", "(1K) 1248x832 (3:2)", "(1K) 1568x672 (21:9)", "(2K) 2048x2048 (1:1)", "(2K) 1728x2304 (3:4)", "(2K) 2304x1728 (4:3)", "(2K) 2848x1600 (16:9)", "(2K) 1600x2848 (9:16)", "(2K) 1664x2496 (2:3)", "(2K) 2496x1664 (3:2)", "(2K) 3136x1344 (21:9)", "(4K) 4096x4096 (1:1)", "(4K) 3520x4704 (3:4)", "(4K) 4704x3520 (4:3)", "(4K) 5504x3040 (16:9)", "(4K) 3040x5504 (9:16)", "(4K) 3328x4992 (2:3)", "(4K) 4992x3328 (3:2)", "(4K) 6240x2656 (21:9)", "Custom"]}], "width": ["INT", {"tooltip": "Custom width for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 6240, "step": 2}], "height": ["INT", {"tooltip": "Custom height for image. Value is working only if `size_preset` is set to `Custom`", "default": 2048, "min": 1024, "max": 4992, "step": 2}], "max_images": ["INT", {"tooltip": "Maximum number of images to generate. With 1, exactly one image is produced. With >1, the model generates between 1 and max_images related images (e.g., story scenes, character variations). Total images (input + generated) cannot exceed 15.", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image-to-image or multi-reference generation. Up to 10 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 0}}], "fail_on_partial": ["BOOLEAN", {"tooltip": "If enabled, abort execution if any requested images are missing or return an error.", "advanced": true, "default": false}]}}}]}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the image.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceSeedreamNodeV2", "display_name": "ByteDance Seedream 4.5 & 5.0", "description": "Unified text-to-image generation and precise single-sentence editing at up to 4K resolution.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/image/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $price := $contains(widgets.model, \"5.0 lite\") ? 0.035 :\n $contains(widgets.model, \"4-5\") ? 0.04 : 0.03;\n {\n \"type\":\"usd\",\n \"usd\": $price,\n \"format\": { \"suffix\":\" x images/Run\", \"approximate\": true }\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceTextToVideoNode": {"input": {"required": {"model": ["COMBO", {"default": "seedance-1-0-pro-fast-251015", "multiselect": false, "options": ["seedance-1-5-pro-251215", "seedance-1-0-pro-250528", "seedance-1-0-lite-t2v-250428", "seedance-1-0-pro-fast-251015"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the video.", "multiline": true}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 5, "min": 3, "max": 12, "step": 1, "display": "slider"}]}, "optional": {"seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "camera_fixed": ["BOOLEAN", {"tooltip": "Specifies whether to fix the camera. The platform appends an instruction to fix the camera to your prompt, but does not guarantee the actual effect.", "advanced": true, "default": false}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the video.", "advanced": true, "default": false}], "generate_audio": ["BOOLEAN", {"tooltip": "This parameter is ignored for any model except seedance-1-5-pro.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "resolution", "aspect_ratio", "duration"], "optional": ["seed", "camera_fixed", "watermark", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceTextToVideoNode", "display_name": "ByteDance Text to Video", "description": "Generate video using ByteDance models via api based on prompt", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $priceByModel := {\n \"seedance-1-5-pro\": {\n \"480p\":[0.12,0.12],\n \"720p\":[0.26,0.26],\n \"1080p\":[0.58,0.59]\n },\n \"seedance-1-0-pro\": {\n \"480p\":[0.23,0.24],\n \"720p\":[0.51,0.56],\n \"1080p\":[1.18,1.22]\n },\n \"seedance-1-0-pro-fast\": {\n \"480p\":[0.09,0.1],\n \"720p\":[0.21,0.23],\n \"1080p\":[0.47,0.49]\n },\n \"seedance-1-0-lite\": {\n \"480p\":[0.17,0.18],\n \"720p\":[0.37,0.41],\n \"1080p\":[0.85,0.88]\n }\n };\n $model := widgets.model;\n $modelKey :=\n $contains($model, \"seedance-1-5-pro\") ? \"seedance-1-5-pro\" :\n $contains($model, \"seedance-1-0-pro-fast\") ? \"seedance-1-0-pro-fast\" :\n $contains($model, \"seedance-1-0-pro\") ? \"seedance-1-0-pro\" :\n \"seedance-1-0-lite\";\n $resolution := widgets.resolution;\n $resKey :=\n $contains($resolution, \"1080\") ? \"1080p\" :\n $contains($resolution, \"720\") ? \"720p\" :\n \"480p\";\n $modelPrices := $lookup($priceByModel, $modelKey);\n $baseRange := $lookup($modelPrices, $resKey);\n $min10s := $baseRange[0];\n $max10s := $baseRange[1];\n $scale := widgets.duration / 10;\n $audioMultiplier := ($modelKey = \"seedance-1-5-pro\" and widgets.generate_audio) ? 2 : 1;\n $minCost := $min10s * $scale * $audioMultiplier;\n $maxCost := $max10s * $scale * $audioMultiplier;\n ($minCost = $maxCost)\n ? {\"type\":\"usd\",\"usd\": $minCost, \"format\": { \"approximate\": true }}\n : {\"type\":\"range_usd\",\"min_usd\": $minCost, \"max_usd\": $maxCost, \"format\": { \"approximate\": true }}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceImageToVideoNode": {"input": {"required": {"model": ["COMBO", {"default": "seedance-1-0-pro-fast-251015", "multiselect": false, "options": ["seedance-1-5-pro-251215", "seedance-1-0-pro-250528", "seedance-1-0-lite-i2v-250428", "seedance-1-0-pro-fast-251015"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the video.", "multiline": true}], "image": ["IMAGE", {"tooltip": "First frame to be used for the video."}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["adaptive", "16:9", "4:3", "1:1", "3:4", "9:16", "21:9"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 5, "min": 3, "max": 12, "step": 1, "display": "slider"}]}, "optional": {"seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "camera_fixed": ["BOOLEAN", {"tooltip": "Specifies whether to fix the camera. The platform appends an instruction to fix the camera to your prompt, but does not guarantee the actual effect.", "advanced": true, "default": false}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the video.", "advanced": true, "default": false}], "generate_audio": ["BOOLEAN", {"tooltip": "This parameter is ignored for any model except seedance-1-5-pro.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "image", "resolution", "aspect_ratio", "duration"], "optional": ["seed", "camera_fixed", "watermark", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceImageToVideoNode", "display_name": "ByteDance Image to Video", "description": "Generate video using ByteDance models via api based on image and prompt", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $priceByModel := {\n \"seedance-1-5-pro\": {\n \"480p\":[0.12,0.12],\n \"720p\":[0.26,0.26],\n \"1080p\":[0.58,0.59]\n },\n \"seedance-1-0-pro\": {\n \"480p\":[0.23,0.24],\n \"720p\":[0.51,0.56],\n \"1080p\":[1.18,1.22]\n },\n \"seedance-1-0-pro-fast\": {\n \"480p\":[0.09,0.1],\n \"720p\":[0.21,0.23],\n \"1080p\":[0.47,0.49]\n },\n \"seedance-1-0-lite\": {\n \"480p\":[0.17,0.18],\n \"720p\":[0.37,0.41],\n \"1080p\":[0.85,0.88]\n }\n };\n $model := widgets.model;\n $modelKey :=\n $contains($model, \"seedance-1-5-pro\") ? \"seedance-1-5-pro\" :\n $contains($model, \"seedance-1-0-pro-fast\") ? \"seedance-1-0-pro-fast\" :\n $contains($model, \"seedance-1-0-pro\") ? \"seedance-1-0-pro\" :\n \"seedance-1-0-lite\";\n $resolution := widgets.resolution;\n $resKey :=\n $contains($resolution, \"1080\") ? \"1080p\" :\n $contains($resolution, \"720\") ? \"720p\" :\n \"480p\";\n $modelPrices := $lookup($priceByModel, $modelKey);\n $baseRange := $lookup($modelPrices, $resKey);\n $min10s := $baseRange[0];\n $max10s := $baseRange[1];\n $scale := widgets.duration / 10;\n $audioMultiplier := ($modelKey = \"seedance-1-5-pro\" and widgets.generate_audio) ? 2 : 1;\n $minCost := $min10s * $scale * $audioMultiplier;\n $maxCost := $max10s * $scale * $audioMultiplier;\n ($minCost = $maxCost)\n ? {\"type\":\"usd\",\"usd\": $minCost, \"format\": { \"approximate\": true }}\n : {\"type\":\"range_usd\",\"min_usd\": $minCost, \"max_usd\": $maxCost, \"format\": { \"approximate\": true }}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceFirstLastFrameNode": {"input": {"required": {"model": ["COMBO", {"default": "seedance-1-0-lite-i2v-250428", "multiselect": false, "options": ["seedance-1-5-pro-251215", "seedance-1-0-pro-250528", "seedance-1-0-lite-i2v-250428"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the video.", "multiline": true}], "first_frame": ["IMAGE", {"tooltip": "First frame to be used for the video."}], "last_frame": ["IMAGE", {"tooltip": "Last frame to be used for the video."}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["adaptive", "16:9", "4:3", "1:1", "3:4", "9:16", "21:9"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 5, "min": 3, "max": 12, "step": 1, "display": "slider"}]}, "optional": {"seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "camera_fixed": ["BOOLEAN", {"tooltip": "Specifies whether to fix the camera. The platform appends an instruction to fix the camera to your prompt, but does not guarantee the actual effect.", "advanced": true, "default": false}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the video.", "advanced": true, "default": false}], "generate_audio": ["BOOLEAN", {"tooltip": "This parameter is ignored for any model except seedance-1-5-pro.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "first_frame", "last_frame", "resolution", "aspect_ratio", "duration"], "optional": ["seed", "camera_fixed", "watermark", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceFirstLastFrameNode", "display_name": "ByteDance First-Last-Frame to Video", "description": "Generate video using prompt and first and last frames.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $priceByModel := {\n \"seedance-1-5-pro\": {\n \"480p\":[0.12,0.12],\n \"720p\":[0.26,0.26],\n \"1080p\":[0.58,0.59]\n },\n \"seedance-1-0-pro\": {\n \"480p\":[0.23,0.24],\n \"720p\":[0.51,0.56],\n \"1080p\":[1.18,1.22]\n },\n \"seedance-1-0-pro-fast\": {\n \"480p\":[0.09,0.1],\n \"720p\":[0.21,0.23],\n \"1080p\":[0.47,0.49]\n },\n \"seedance-1-0-lite\": {\n \"480p\":[0.17,0.18],\n \"720p\":[0.37,0.41],\n \"1080p\":[0.85,0.88]\n }\n };\n $model := widgets.model;\n $modelKey :=\n $contains($model, \"seedance-1-5-pro\") ? \"seedance-1-5-pro\" :\n $contains($model, \"seedance-1-0-pro-fast\") ? \"seedance-1-0-pro-fast\" :\n $contains($model, \"seedance-1-0-pro\") ? \"seedance-1-0-pro\" :\n \"seedance-1-0-lite\";\n $resolution := widgets.resolution;\n $resKey :=\n $contains($resolution, \"1080\") ? \"1080p\" :\n $contains($resolution, \"720\") ? \"720p\" :\n \"480p\";\n $modelPrices := $lookup($priceByModel, $modelKey);\n $baseRange := $lookup($modelPrices, $resKey);\n $min10s := $baseRange[0];\n $max10s := $baseRange[1];\n $scale := widgets.duration / 10;\n $audioMultiplier := ($modelKey = \"seedance-1-5-pro\" and widgets.generate_audio) ? 2 : 1;\n $minCost := $min10s * $scale * $audioMultiplier;\n $maxCost := $max10s * $scale * $audioMultiplier;\n ($minCost = $maxCost)\n ? {\"type\":\"usd\",\"usd\": $minCost, \"format\": { \"approximate\": true }}\n : {\"type\":\"range_usd\",\"min_usd\": $minCost, \"max_usd\": $maxCost, \"format\": { \"approximate\": true }}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceImageReferenceNode": {"input": {"required": {"model": ["COMBO", {"default": "seedance-1-0-lite-i2v-250428", "multiselect": false, "options": ["seedance-1-0-pro-250528", "seedance-1-0-lite-i2v-250428"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the video.", "multiline": true}], "images": ["IMAGE", {"tooltip": "One to four images."}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video.", "multiselect": false, "options": ["480p", "720p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["adaptive", "16:9", "4:3", "1:1", "3:4", "9:16", "21:9"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 5, "min": 3, "max": 12, "step": 1, "display": "slider"}]}, "optional": {"seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an \"AI generated\" watermark to the video.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "images", "resolution", "aspect_ratio", "duration"], "optional": ["seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceImageReferenceNode", "display_name": "ByteDance Reference Images to Video", "description": "Generate video using prompt and reference images.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $priceByModel := {\n \"seedance-1-0-pro\": {\n \"480p\":[0.23,0.24],\n \"720p\":[0.51,0.56]\n },\n \"seedance-1-0-lite\": {\n \"480p\":[0.17,0.18],\n \"720p\":[0.37,0.41]\n }\n };\n $model := widgets.model;\n $modelKey :=\n $contains($model, \"seedance-1-0-pro\") ? \"seedance-1-0-pro\" :\n \"seedance-1-0-lite\";\n $resolution := widgets.resolution;\n $resKey :=\n $contains($resolution, \"720\") ? \"720p\" :\n \"480p\";\n $modelPrices := $lookup($priceByModel, $modelKey);\n $baseRange := $lookup($modelPrices, $resKey);\n $min10s := $baseRange[0];\n $max10s := $baseRange[1];\n $scale := widgets.duration / 10;\n $minCost := $min10s * $scale;\n $maxCost := $max10s * $scale;\n ($minCost = $maxCost)\n ? {\"type\":\"usd\",\"usd\": $minCost}\n : {\"type\":\"range_usd\",\"min_usd\": $minCost, \"max_usd\": $maxCost}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDance2TextToVideoNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Seedance 2.0 for maximum quality; Seedance 2.0 Fast for speed optimization.", "options": [{"key": "Seedance 2.0", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p", "4k"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "16:9", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}]}}}, {"key": "Seedance 2.0 Fast", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "16:9", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add a watermark to the video.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDance2TextToVideoNode", "display_name": "ByteDance Seedance 2.0 Text to Video", "description": "Generate video using Seedance 2.0 models based on a text prompt.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rate480 := 10044;\n $rate720 := 21600;\n $rate1080 := 48800;\n $rate4k := 195200;\n $m := widgets.model;\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $pricePer1K := $res = \"4k\" ? 0.00572 :\n $res = \"1080p\" ? 0.011011 :\n $contains($m, \"fast\") ? 0.008008 : 0.01001;\n $rate := $res = \"4k\" ? $rate4k :\n $res = \"1080p\" ? $rate1080 :\n $res = \"720p\" ? $rate720 :\n $rate480;\n $cost := $dur * $rate * $pricePer1K / 1000;\n {\"type\": \"usd\", \"usd\": $cost, \"format\": {\"approximate\": true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDance2FirstLastFrameNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Seedance 2.0 for maximum quality; Seedance 2.0 Fast for speed optimization.", "options": [{"key": "Seedance 2.0", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p", "4k"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "adaptive", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}]}}}, {"key": "Seedance 2.0 Fast", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "adaptive", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add a watermark to the video.", "advanced": true, "default": false}]}, "optional": {"first_frame": ["IMAGE", {"tooltip": "First frame image for the video."}], "last_frame": ["IMAGE", {"tooltip": "Last frame image for the video."}], "first_frame_asset_id": ["STRING", {"tooltip": "Seedance asset_id to use as the first frame. Mutually exclusive with the first_frame image input.", "default": "", "multiline": false}], "last_frame_asset_id": ["STRING", {"tooltip": "Seedance asset_id to use as the last frame. Mutually exclusive with the last_frame image input.", "default": "", "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "seed", "watermark"], "optional": ["first_frame", "last_frame", "first_frame_asset_id", "last_frame_asset_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDance2FirstLastFrameNode", "display_name": "ByteDance Seedance 2.0 First-Last-Frame to Video", "description": "Generate video using Seedance 2.0 from a first frame image and optional last frame image.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rate480 := 10044;\n $rate720 := 21600;\n $rate1080 := 48800;\n $rate4k := 195200;\n $m := widgets.model;\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $pricePer1K := $res = \"4k\" ? 0.00572 :\n $res = \"1080p\" ? 0.011011 :\n $contains($m, \"fast\") ? 0.008008 : 0.01001;\n $rate := $res = \"4k\" ? $rate4k :\n $res = \"1080p\" ? $rate1080 :\n $res = \"720p\" ? $rate720 :\n $rate480;\n $cost := $dur * $rate * $pricePer1K / 1000;\n {\"type\": \"usd\", \"usd\": $cost, \"format\": {\"approximate\": true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDance2ReferenceNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Seedance 2.0 for maximum quality; Seedance 2.0 Fast for speed optimization.", "options": [{"key": "Seedance 2.0", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p", "1080p", "4k"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "adaptive", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9"], "min": 0}}], "reference_videos": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3"], "min": 0}}], "reference_audios": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_audio": ["AUDIO", {}]}}, "names": ["audio_1", "audio_2", "audio_3"], "min": 0}}], "reference_assets": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_asset": ["STRING", {"forceInput": true, "multiline": false}]}}, "names": ["asset_1", "asset_2", "asset_3", "asset_4", "asset_5", "asset_6", "asset_7", "asset_8", "asset_9"], "min": 0}}]}, "optional": {"auto_downscale": ["BOOLEAN", {"tooltip": "Automatically downscale reference videos that exceed the model's pixel budget for the selected resolution. Aspect ratio is preserved; videos already within limits are untouched.", "default": true}], "auto_upscale": ["BOOLEAN", {"tooltip": "Automatically upscale reference videos that are below the model's minimum pixel count for the selected resolution. Aspect ratio is preserved; videos already meeting the minimum are untouched. Note: upscaling a low-resolution source does not add real detail and may produce lower-quality generations.", "advanced": true, "default": false}]}}}, {"key": "Seedance 2.0 Fast", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["480p", "720p"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video.", "default": "adaptive", "multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "adaptive"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds (4-15).", "default": 7, "min": 4, "max": 15, "step": 1, "display": "slider"}], "generate_audio": ["BOOLEAN", {"tooltip": "Enable audio generation for the output video.", "default": true}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9"], "min": 0}}], "reference_videos": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3"], "min": 0}}], "reference_audios": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_audio": ["AUDIO", {}]}}, "names": ["audio_1", "audio_2", "audio_3"], "min": 0}}], "reference_assets": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_asset": ["STRING", {"forceInput": true, "multiline": false}]}}, "names": ["asset_1", "asset_2", "asset_3", "asset_4", "asset_5", "asset_6", "asset_7", "asset_8", "asset_9"], "min": 0}}]}, "optional": {"auto_downscale": ["BOOLEAN", {"tooltip": "Automatically downscale reference videos that exceed the model's pixel budget for the selected resolution. Aspect ratio is preserved; videos already within limits are untouched.", "default": true}], "auto_upscale": ["BOOLEAN", {"tooltip": "Automatically upscale reference videos that are below the model's minimum pixel count for the selected resolution. Aspect ratio is preserved; videos already meeting the minimum are untouched. Note: upscaling a low-resolution source does not add real detail and may produce lower-quality generations.", "advanced": true, "default": false}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add a watermark to the video.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDance2ReferenceNode", "display_name": "ByteDance Seedance 2.0 Reference to Video", "description": "Generate, edit, or extend video using Seedance 2.0 with reference images, videos, and audio. Supports multimodal reference, video editing, and video extension.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": ["model.reference_videos"]}, "expr": "\n (\n $rate480 := 10044;\n $rate720 := 21600;\n $rate1080 := 48800;\n $rate4k := 195200;\n $m := widgets.model;\n $hasVideo := $lookup(inputGroups, \"model.reference_videos\") > 0;\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $noVideoPricePer1K := $res = \"4k\" ? 0.00572 :\n $res = \"1080p\" ? 0.011011 :\n $contains($m, \"fast\") ? 0.008008 : 0.01001;\n $videoPricePer1K := $res = \"4k\" ? 0.003432 :\n $res = \"1080p\" ? 0.006721 :\n $contains($m, \"fast\") ? 0.004719 : 0.006149;\n $rate := $res = \"4k\" ? $rate4k :\n $res = \"1080p\" ? $rate1080 :\n $res = \"720p\" ? $rate720 :\n $rate480;\n $noVideoCost := $dur * $rate * $noVideoPricePer1K / 1000;\n $minVideoFactor := $ceil($dur * 5 / 3);\n $minVideoCost := $minVideoFactor * $rate * $videoPricePer1K / 1000;\n $maxVideoCost := (15 + $dur) * $rate * $videoPricePer1K / 1000;\n $hasVideo\n ? {\n \"type\": \"range_usd\",\n \"min_usd\": $minVideoCost,\n \"max_usd\": $maxVideoCost,\n \"format\": {\"approximate\": true}\n }\n : {\n \"type\": \"usd\",\n \"usd\": $noVideoCost,\n \"format\": {\"approximate\": true}\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceCreateImageAsset": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Image to register as a personal asset."}], "group_id": ["STRING", {"tooltip": "Reuse an existing Seedance asset group ID to skip repeated human verification for the same person. Leave empty to run real-person authentication in the browser and create a new group.", "default": "", "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "group_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["STRING", "STRING"], "output_is_list": [false, false], "output_name": ["asset_id", "group_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ByteDanceCreateImageAsset", "display_name": "ByteDance Create Image Asset", "description": "Create a Seedance 2.0 personal image asset. Uploads the input image and registers it in the given asset group. If group_id is empty, runs a real-person H5 authentication flow to create a new group before adding the asset.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/image/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceCreateVideoAsset": {"input": {"required": {"video": ["VIDEO", {"tooltip": "Video to register as a personal asset."}], "group_id": ["STRING", {"tooltip": "Reuse an existing Seedance asset group ID to skip repeated human verification for the same person. Leave empty to run real-person authentication in the browser and create a new group.", "default": "", "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["video", "group_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["STRING", "STRING"], "output_is_list": [false, false], "output_name": ["asset_id", "group_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "ByteDanceCreateVideoAsset", "display_name": "ByteDance Create Video Asset", "description": "Create a Seedance 2.0 personal video asset. Uploads the input video and registers it in the given asset group. If group_id is empty, runs a real-person H5 authentication flow to create a new group before adding the asset.", "python_module": "comfy_api_nodes.nodes_bytedance", "category": "partner/video/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ByteDanceSeedNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text input to the model.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The Seed model used to generate the response.", "options": [{"key": "Seed 2.0 Pro", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional image(s) to use as context for the model. Up to 20 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional video(s) to use as context for the model. Up to 4 videos.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, higher values are more random.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.01}]}}}, {"key": "Seed 2.0 Lite", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional image(s) to use as context for the model. Up to 20 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional video(s) to use as context for the model. Up to 4 videos.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, higher values are more random.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.01}]}}}, {"key": "Seed 2.0 Mini", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional image(s) to use as context for the model. Up to 20 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional video(s) to use as context for the model. Up to 4 videos.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. 0.0 is deterministic, higher values are more random.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.01}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate the model's behavior.", "advanced": true, "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "optional": ["system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "ByteDanceSeedNode", "display_name": "ByteDance Seed", "description": "Generate text responses with ByteDance's Seed 2.0 models. Provide a text prompt and optionally one or more images or videos for multimodal context.", "python_module": "comfy_api_nodes.nodes_bytedance_llm", "category": "partner/text/ByteDance", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $contains($m, \"mini\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.00025, 0.0009],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"lite\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.0003, 0.002],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"pro\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.0005, 0.003],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : {\"type\":\"text\", \"text\":\"Token-based\"}\n )\n "}, "search_aliases": null, "essentials_category": "Text Generation", "has_intermediate_output": false}, "ElevenLabsSpeechToText": {"input": {"required": {"audio": ["AUDIO", {"tooltip": "Audio to transcribe."}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for transcription.", "options": [{"key": "scribe_v2", "inputs": {"required": {"tag_audio_events": ["BOOLEAN", {"tooltip": "Annotate sounds like (laughter), (music), etc. in transcript.", "default": false}], "diarize": ["BOOLEAN", {"tooltip": "Annotate which speaker is talking.", "default": false}], "diarization_threshold": ["FLOAT", {"tooltip": "Speaker separation sensitivity. Lower values are more sensitive to speaker changes.", "default": 0.22, "min": 0.1, "max": 0.4, "step": 0.01, "display": "slider"}], "temperature": ["FLOAT", {"tooltip": "Randomness control. 0.0 uses model default. Higher values increase randomness.", "default": 0.0, "min": 0.0, "max": 2.0, "step": 0.01, "display": "slider"}], "timestamps_granularity": ["COMBO", {"tooltip": "Timing precision for transcript words.", "default": "word", "multiselect": false, "options": ["word", "character", "none"]}]}}}]}], "language_code": ["STRING", {"tooltip": "ISO-639-1 or ISO-639-3 language code (e.g., 'en', 'es', 'fra'). Leave empty for automatic detection.", "default": "", "multiline": false}], "num_speakers": ["INT", {"tooltip": "Maximum number of speakers to predict. Set to 0 for automatic detection.", "default": 0, "min": 0, "max": 32, "display": "slider"}], "seed": ["INT", {"tooltip": "Seed for reproducibility (determinism not guaranteed).", "default": 1, "min": 0, "max": 2147483647}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["audio", "model", "language_code", "num_speakers", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["text", "language_code", "words_json"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "ElevenLabsSpeechToText", "display_name": "ElevenLabs Speech to Text", "description": "Transcribe audio to text. Supports automatic language detection, speaker diarization, and audio event tagging.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.0073,\"format\":{\"approximate\":true,\"suffix\":\"/minute\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsVoiceSelector": {"input": {"required": {"voice": ["COMBO", {"tooltip": "Choose a voice from the predefined ElevenLabs voices.", "multiselect": false, "options": ["Roger (male, american)", "Sarah (female, american)", "Laura (female, american)", "Charlie (male, australian)", "George (male, british)", "Callum (male, american)", "River (neutral, american)", "Harry (male, american)", "Liam (male, american)", "Alice (female, british)", "Matilda (female, american)", "Will (male, american)", "Jessica (female, american)", "Eric (male, american)", "Bella (female, american)", "Chris (male, american)", "Brian (male, american)", "Daniel (male, british)", "Lily (female, british)", "Adam (male, american)", "Bill (male, american)"]}]}}, "input_order": {"required": ["voice"]}, "is_input_list": false, "output": ["ELEVENLABS_VOICE"], "output_is_list": [false], "output_name": ["voice"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsVoiceSelector", "display_name": "ElevenLabs Voice Selector", "description": "Select a predefined ElevenLabs voice for text-to-speech generation.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsTextToSpeech": {"input": {"required": {"voice": ["ELEVENLABS_VOICE", {"tooltip": "Voice to use for speech synthesis. Connect from Voice Selector or Instant Voice Clone."}], "text": ["STRING", {"tooltip": "The text to convert to speech.", "default": "", "multiline": true}], "stability": ["FLOAT", {"tooltip": "Voice stability. Lower values give broader emotional range, higher values produce more consistent but potentially monotonous speech.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "apply_text_normalization": ["COMBO", {"tooltip": "Text normalization mode. 'auto' lets the system decide, 'on' always applies normalization, 'off' skips it.", "multiselect": false, "options": ["auto", "on", "off"]}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for text-to-speech.", "options": [{"key": "eleven_multilingual_v2", "inputs": {"required": {"speed": ["FLOAT", {"tooltip": "Speech speed. 1.0 is normal, <1.0 slower, >1.0 faster.", "default": 1.0, "min": 0.7, "max": 1.3, "step": 0.01, "display": "slider"}], "similarity_boost": ["FLOAT", {"tooltip": "Similarity boost. Higher values make the voice more similar to the original.", "default": 0.75, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "use_speaker_boost": ["BOOLEAN", {"tooltip": "Boost similarity to the original speaker voice.", "default": false}], "style": ["FLOAT", {"tooltip": "Style exaggeration. Higher values increase stylistic expression but may reduce stability.", "default": 0.0, "min": 0.0, "max": 0.2, "step": 0.01, "display": "slider"}]}}}, {"key": "eleven_v3", "inputs": {"required": {"speed": ["FLOAT", {"tooltip": "Speech speed. 1.0 is normal, <1.0 slower, >1.0 faster.", "default": 1.0, "min": 0.7, "max": 1.3, "step": 0.01, "display": "slider"}], "similarity_boost": ["FLOAT", {"tooltip": "Similarity boost. Higher values make the voice more similar to the original.", "default": 0.75, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}]}}}]}], "language_code": ["STRING", {"tooltip": "ISO-639-1 or ISO-639-3 language code (e.g., 'en', 'es', 'fra'). Leave empty for automatic detection.", "default": "", "multiline": false}], "seed": ["INT", {"tooltip": "Seed for reproducibility (determinism not guaranteed).", "default": 1, "min": 0, "max": 2147483647}], "output_format": ["COMBO", {"tooltip": "Audio output format.", "multiselect": false, "options": ["mp3_44100_192", "opus_48000_192"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["voice", "text", "stability", "apply_text_normalization", "model", "language_code", "seed", "output_format"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsTextToSpeech", "display_name": "ElevenLabs Text to Speech", "description": "Convert text to speech.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.24,\"format\":{\"approximate\":true,\"suffix\":\"/1K chars\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsAudioIsolation": {"input": {"required": {"audio": ["AUDIO", {"tooltip": "Audio to process for background noise removal."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsAudioIsolation", "display_name": "ElevenLabs Voice Isolation", "description": "Remove background noise from audio, isolating vocals or speech.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.24,\"format\":{\"approximate\":true,\"suffix\":\"/minute\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsTextToSoundEffects": {"input": {"required": {"text": ["STRING", {"tooltip": "Text description of the sound effect to generate.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for sound effect generation.", "options": [{"key": "eleven_sfx_v2", "inputs": {"required": {"duration": ["FLOAT", {"tooltip": "Duration of generated sound in seconds.", "default": 5.0, "min": 0.5, "max": 30.0, "step": 0.1, "display": "slider"}], "loop": ["BOOLEAN", {"tooltip": "Create a smoothly looping sound effect.", "default": false}], "prompt_influence": ["FLOAT", {"tooltip": "How closely generation follows the prompt. Higher values make the sound follow the text more closely.", "default": 0.3, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}]}}}]}], "output_format": ["COMBO", {"tooltip": "Audio output format.", "multiselect": false, "options": ["mp3_44100_192", "opus_48000_192"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["text", "model", "output_format"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsTextToSoundEffects", "display_name": "ElevenLabs Text to Sound Effects", "description": "Generate sound effects from text descriptions.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.14,\"format\":{\"approximate\":true,\"suffix\":\"/minute\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsInstantVoiceClone": {"input": {"required": {"files": ["COMFY_AUTOGROW_V3", {"tooltip": "Audio recordings for voice cloning.", "template": {"input": {"required": {"audio": ["AUDIO", {}]}}, "prefix": "audio", "min": 1, "max": 8}}], "remove_background_noise": ["BOOLEAN", {"tooltip": "Remove background noise from voice samples using audio isolation.", "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["files", "remove_background_noise"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["ELEVENLABS_VOICE"], "output_is_list": [false], "output_name": ["voice"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsInstantVoiceClone", "display_name": "ElevenLabs Instant Voice Clone", "description": "Create a cloned voice from audio samples. Provide 1-8 audio recordings of the voice to clone.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.15}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsSpeechToSpeech": {"input": {"required": {"voice": ["ELEVENLABS_VOICE", {"tooltip": "Target voice for the transformation. Connect from Voice Selector or Instant Voice Clone."}], "audio": ["AUDIO", {"tooltip": "Source audio to transform."}], "stability": ["FLOAT", {"tooltip": "Voice stability. Lower values give broader emotional range, higher values produce more consistent but potentially monotonous speech.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for speech-to-speech transformation.", "options": [{"key": "eleven_multilingual_sts_v2", "inputs": {"required": {"speed": ["FLOAT", {"tooltip": "Speech speed. 1.0 is normal, <1.0 slower, >1.0 faster.", "default": 1.0, "min": 0.7, "max": 1.3, "step": 0.01, "display": "slider"}], "similarity_boost": ["FLOAT", {"tooltip": "Similarity boost. Higher values make the voice more similar to the original.", "default": 0.75, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "use_speaker_boost": ["BOOLEAN", {"tooltip": "Boost similarity to the original speaker voice.", "default": false}], "style": ["FLOAT", {"tooltip": "Style exaggeration. Higher values increase stylistic expression but may reduce stability.", "default": 0.0, "min": 0.0, "max": 0.2, "step": 0.01, "display": "slider"}]}}}, {"key": "eleven_english_sts_v2", "inputs": {"required": {"speed": ["FLOAT", {"tooltip": "Speech speed. 1.0 is normal, <1.0 slower, >1.0 faster.", "default": 1.0, "min": 0.7, "max": 1.3, "step": 0.01, "display": "slider"}], "similarity_boost": ["FLOAT", {"tooltip": "Similarity boost. Higher values make the voice more similar to the original.", "default": 0.75, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "use_speaker_boost": ["BOOLEAN", {"tooltip": "Boost similarity to the original speaker voice.", "default": false}], "style": ["FLOAT", {"tooltip": "Style exaggeration. Higher values increase stylistic expression but may reduce stability.", "default": 0.0, "min": 0.0, "max": 0.2, "step": 0.01, "display": "slider"}]}}}]}], "output_format": ["COMBO", {"tooltip": "Audio output format.", "multiselect": false, "options": ["mp3_44100_192", "opus_48000_192"]}], "seed": ["INT", {"tooltip": "Seed for reproducibility.", "default": 0, "min": 0, "max": 4294967295}], "remove_background_noise": ["BOOLEAN", {"tooltip": "Remove background noise from input audio using audio isolation.", "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["voice", "audio", "stability", "model", "output_format", "seed", "remove_background_noise"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsSpeechToSpeech", "display_name": "ElevenLabs Speech to Speech", "description": "Transform speech from one voice to another while preserving the original content and emotion.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.24,\"format\":{\"approximate\":true,\"suffix\":\"/minute\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ElevenLabsTextToDialogue": {"input": {"required": {"stability": ["FLOAT", {"tooltip": "Voice stability. Lower values give broader emotional range, higher values produce more consistent but potentially monotonous speech.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.5, "display": "slider"}], "apply_text_normalization": ["COMBO", {"tooltip": "Text normalization mode. 'auto' lets the system decide, 'on' always applies normalization, 'off' skips it.", "multiselect": false, "options": ["auto", "on", "off"]}], "model": ["COMBO", {"tooltip": "Model to use for dialogue generation.", "multiselect": false, "options": ["eleven_v3"]}], "inputs": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Number of dialogue entries.", "options": [{"key": "1", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "2", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "3", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "4", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "5", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "6", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}], "text6": ["STRING", {"tooltip": "Text content for dialogue entry 6.", "default": "", "multiline": true}], "voice6": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 6. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "7", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}], "text6": ["STRING", {"tooltip": "Text content for dialogue entry 6.", "default": "", "multiline": true}], "voice6": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 6. Connect from Voice Selector or Instant Voice Clone."}], "text7": ["STRING", {"tooltip": "Text content for dialogue entry 7.", "default": "", "multiline": true}], "voice7": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 7. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "8", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}], "text6": ["STRING", {"tooltip": "Text content for dialogue entry 6.", "default": "", "multiline": true}], "voice6": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 6. Connect from Voice Selector or Instant Voice Clone."}], "text7": ["STRING", {"tooltip": "Text content for dialogue entry 7.", "default": "", "multiline": true}], "voice7": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 7. Connect from Voice Selector or Instant Voice Clone."}], "text8": ["STRING", {"tooltip": "Text content for dialogue entry 8.", "default": "", "multiline": true}], "voice8": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 8. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "9", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}], "text6": ["STRING", {"tooltip": "Text content for dialogue entry 6.", "default": "", "multiline": true}], "voice6": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 6. Connect from Voice Selector or Instant Voice Clone."}], "text7": ["STRING", {"tooltip": "Text content for dialogue entry 7.", "default": "", "multiline": true}], "voice7": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 7. Connect from Voice Selector or Instant Voice Clone."}], "text8": ["STRING", {"tooltip": "Text content for dialogue entry 8.", "default": "", "multiline": true}], "voice8": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 8. Connect from Voice Selector or Instant Voice Clone."}], "text9": ["STRING", {"tooltip": "Text content for dialogue entry 9.", "default": "", "multiline": true}], "voice9": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 9. Connect from Voice Selector or Instant Voice Clone."}]}}}, {"key": "10", "inputs": {"required": {"text1": ["STRING", {"tooltip": "Text content for dialogue entry 1.", "default": "", "multiline": true}], "voice1": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 1. Connect from Voice Selector or Instant Voice Clone."}], "text2": ["STRING", {"tooltip": "Text content for dialogue entry 2.", "default": "", "multiline": true}], "voice2": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 2. Connect from Voice Selector or Instant Voice Clone."}], "text3": ["STRING", {"tooltip": "Text content for dialogue entry 3.", "default": "", "multiline": true}], "voice3": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 3. Connect from Voice Selector or Instant Voice Clone."}], "text4": ["STRING", {"tooltip": "Text content for dialogue entry 4.", "default": "", "multiline": true}], "voice4": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 4. Connect from Voice Selector or Instant Voice Clone."}], "text5": ["STRING", {"tooltip": "Text content for dialogue entry 5.", "default": "", "multiline": true}], "voice5": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 5. Connect from Voice Selector or Instant Voice Clone."}], "text6": ["STRING", {"tooltip": "Text content for dialogue entry 6.", "default": "", "multiline": true}], "voice6": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 6. Connect from Voice Selector or Instant Voice Clone."}], "text7": ["STRING", {"tooltip": "Text content for dialogue entry 7.", "default": "", "multiline": true}], "voice7": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 7. Connect from Voice Selector or Instant Voice Clone."}], "text8": ["STRING", {"tooltip": "Text content for dialogue entry 8.", "default": "", "multiline": true}], "voice8": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 8. Connect from Voice Selector or Instant Voice Clone."}], "text9": ["STRING", {"tooltip": "Text content for dialogue entry 9.", "default": "", "multiline": true}], "voice9": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 9. Connect from Voice Selector or Instant Voice Clone."}], "text10": ["STRING", {"tooltip": "Text content for dialogue entry 10.", "default": "", "multiline": true}], "voice10": ["ELEVENLABS_VOICE", {"tooltip": "Voice for dialogue entry 10. Connect from Voice Selector or Instant Voice Clone."}]}}}]}], "language_code": ["STRING", {"tooltip": "ISO-639-1 or ISO-639-3 language code (e.g., 'en', 'es', 'fra'). Leave empty for automatic detection.", "default": "", "multiline": false}], "seed": ["INT", {"tooltip": "Seed for reproducibility.", "default": 1, "min": 0, "max": 4294967295}], "output_format": ["COMBO", {"tooltip": "Audio output format.", "multiselect": false, "options": ["mp3_44100_192", "opus_48000_192"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["stability", "apply_text_normalization", "model", "inputs", "language_code", "seed", "output_format"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ElevenLabsTextToDialogue", "display_name": "ElevenLabs Text to Dialogue", "description": "Generate multi-speaker dialogue from text. Each dialogue entry has its own text and voice.", "python_module": "comfy_api_nodes.nodes_elevenlabs", "category": "partner/audio/ElevenLabs", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.24,\"format\":{\"approximate\":true,\"suffix\":\"/1K chars\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text inputs to the model, used to generate a response. You can include detailed instructions, questions, or context for the model.", "default": "", "multiline": true}], "model": ["COMBO", {"tooltip": "The Gemini model to use for generating responses.", "default": "gemini-3-1-pro", "multiselect": false, "options": ["gemini-2.5-pro", "gemini-2.5-flash", "gemini-3-pro-preview", "gemini-3-1-pro", "gemini-3-1-flash-lite"]}], "seed": ["INT", {"tooltip": "When seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used.", "default": 42, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"images": ["IMAGE", {"tooltip": "Optional image(s) to use as context for the model. To include multiple images, you can use the Batch Images node."}], "audio": ["AUDIO", {"tooltip": "Optional audio to use as context for the model."}], "video": ["VIDEO", {"tooltip": "Optional video to use as context for the model."}], "files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."}], "system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate an AI's behavior.", "advanced": true, "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "optional": ["images", "audio", "video", "files", "system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "GeminiNode", "display_name": "Google Gemini", "description": "Generate text responses with Google's Gemini AI model. You can provide multiple types of inputs (text, images, audio, video) as context for generating more relevant and meaningful responses.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/text/Gemini", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $contains($m, \"gemini-2.5-flash\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.0003, 0.0025],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\"}\n }\n : $contains($m, \"gemini-2.5-pro\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.00125, 0.01],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : ($contains($m, \"gemini-3-pro-preview\") or $contains($m, \"gemini-3-1-pro\")) ? {\n \"type\": \"list_usd\",\n \"usd\": [0.002, 0.012],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gemini-3-1-flash-lite\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.00025, 0.0015],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : {\"type\":\"text\", \"text\":\"Token-based\"}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiNodeV2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text input to the model. Include detailed instructions, questions, or context.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The Gemini model used to generate the response.", "options": [{"key": "Gemini 3.1 Pro", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional image(s) to use as context for the model. Up to 16 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16"], "min": 0}}], "audio": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional audio clip to use as context for the model.", "template": {"input": {"required": {"audio": ["AUDIO", {}]}}, "names": ["audio_1"], "min": 0}}], "video": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional video clip to use as context for the model.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1"], "min": 0}}], "thinking_level": ["COMBO", {"tooltip": "How hard the model reasons internally before answering. HIGH improves quality on difficult tasks but costs more (thinking) tokens and is slower.", "default": "HIGH", "multiselect": false, "options": ["LOW", "HIGH"]}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. Lower is more focused/deterministic, higher is more creative.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.01}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling: sample from the smallest token set whose cumulative probability reaches top_p.", "advanced": true, "default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}], "max_output_tokens": ["INT", {"tooltip": "Maximum tokens to generate, including the model's internal thinking. With thinking_level HIGH, a low value can leave no room for the answer; raise this if responses come back empty or truncated. The model stops early when finished, so a higher cap costs nothing extra for short replies.", "advanced": true, "default": 32768, "min": 16, "max": 65536}]}, "optional": {"files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Input Files node."}]}}}, {"key": "Gemini 3.1 Flash-Lite", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional image(s) to use as context for the model. Up to 16 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16"], "min": 0}}], "audio": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional audio clip to use as context for the model.", "template": {"input": {"required": {"audio": ["AUDIO", {}]}}, "names": ["audio_1"], "min": 0}}], "video": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional video clip to use as context for the model.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1"], "min": 0}}], "thinking_level": ["COMBO", {"tooltip": "How hard the model reasons internally before answering. HIGH improves quality on difficult tasks but costs more (thinking) tokens and is slower.", "default": "LOW", "multiselect": false, "options": ["LOW", "HIGH"]}], "temperature": ["FLOAT", {"tooltip": "Controls randomness. Lower is more focused/deterministic, higher is more creative.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.01}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling: sample from the smallest token set whose cumulative probability reaches top_p.", "advanced": true, "default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}], "max_output_tokens": ["INT", {"tooltip": "Maximum tokens to generate, including the model's internal thinking. With thinking_level HIGH, a low value can leave no room for the answer; raise this if responses come back empty or truncated. The model stops early when finished, so a higher cap costs nothing extra for short replies.", "advanced": true, "default": 32768, "min": 16, "max": 65536}]}, "optional": {"files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Input Files node."}]}}}]}], "seed": ["INT", {"tooltip": "Seed for sampling. Set to 0 for a random seed. Deterministic output isn't guaranteed.", "default": 42, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate the model's behavior.", "advanced": true, "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "optional": ["system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "GeminiNodeV2", "display_name": "Google Gemini", "description": "Generate text responses with Google's Gemini models. Provide a text prompt and, optionally, one or more images, audio clips, videos, or files as multimodal context.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/text/Gemini", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $contains($m, \"lite\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.00025, 0.0015],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n } : {\n \"type\": \"list_usd\",\n \"usd\": [0.002, 0.012],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n )\n "}, "search_aliases": null, "essentials_category": "Text Generation", "has_intermediate_output": false}, "GeminiImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for generation", "default": "", "multiline": true}], "model": ["COMBO", {"tooltip": "The Gemini model to use for generating responses.", "multiselect": false, "options": ["gemini-2.5-flash-image"]}], "seed": ["INT", {"tooltip": "When seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used.", "default": 42, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"images": ["IMAGE", {"tooltip": "Optional image(s) to use as context for the model. To include multiple images, you can use the Batch Images node."}], "files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."}], "aspect_ratio": ["COMBO", {"tooltip": "Defaults to matching the output image size to that of your input image, or otherwise generates 1:1 squares.", "default": "auto", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9"]}], "response_modalities": ["COMBO", {"tooltip": "Choose 'IMAGE' for image-only output, or 'IMAGE+TEXT' to return both the generated image and a text response.", "advanced": true, "multiselect": false, "options": ["IMAGE+TEXT", "IMAGE"]}], "system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate an AI's behavior.", "advanced": true, "default": "You are an expert image-generation engine. You must ALWAYS produce an image.\nInterpret all user input\u2014regardless of format, intent, or abstraction\u2014as literal visual directives for image composition.\nIf a prompt is conversational or lacks specific visual details, you must creatively invent a concrete visual scenario that depicts the concept.\nPrioritize generating the visual representation above any text, formatting, or conversational requests.", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "optional": ["images", "files", "aspect_ratio", "response_modalities", "system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "STRING"], "output_is_list": [false, false], "output_name": ["IMAGE", "STRING"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "GeminiImageNode", "display_name": "Nano Banana (Google Gemini Image)", "description": "Edit images synchronously via Google API.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/image/Gemini", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.039,\"format\":{\"suffix\":\"/Image (1K)\",\"approximate\":true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiImage2Node": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt describing the image to generate or the edits to apply. Include any constraints, styles, or details the model should follow.", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["gemini-3-pro-image-preview", "Nano Banana 2 (Gemini 3.1 Flash Image)"]}], "seed": ["INT", {"tooltip": "When the seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used.", "default": 42, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "aspect_ratio": ["COMBO", {"tooltip": "If set to 'auto', matches your input image's aspect ratio; if no image is provided, a 16:9 square is usually generated.", "default": "auto", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9"]}], "resolution": ["COMBO", {"tooltip": "Target output resolution. For 2K/4K the native Gemini upscaler is used.", "multiselect": false, "options": ["1K", "2K", "4K"]}], "response_modalities": ["COMBO", {"tooltip": "Choose 'IMAGE' for image-only output, or 'IMAGE+TEXT' to return both the generated image and a text response.", "advanced": true, "multiselect": false, "options": ["IMAGE+TEXT", "IMAGE"]}]}, "optional": {"images": ["IMAGE", {"tooltip": "Optional reference image(s). To include multiple images, use the Batch Images node (up to 14)."}], "files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."}], "system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate an AI's behavior.", "advanced": true, "default": "You are an expert image-generation engine. You must ALWAYS produce an image.\nInterpret all user input\u2014regardless of format, intent, or abstraction\u2014as literal visual directives for image composition.\nIf a prompt is conversational or lacks specific visual details, you must creatively invent a concrete visual scenario that depicts the concept.\nPrioritize generating the visual representation above any text, formatting, or conversational requests.", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed", "aspect_ratio", "resolution", "response_modalities"], "optional": ["images", "files", "system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "STRING"], "output_is_list": [false, false], "output_name": ["IMAGE", "STRING"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "GeminiImage2Node", "display_name": "Nano Banana Pro (Google Gemini Image)", "description": "Generate or edit images synchronously via Google Vertex API.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/image/Gemini", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $r := widgets.resolution;\n $isFlash := $contains($m, \"nano banana 2\");\n $flashPrices := {\"1k\": 0.0696, \"2k\": 0.1014, \"4k\": 0.154};\n $proPrices := {\"1k\": 0.134, \"2k\": 0.134, \"4k\": 0.24};\n $prices := $isFlash ? $flashPrices : $proPrices;\n {\"type\":\"usd\",\"usd\": $lookup($prices, $r), \"format\":{\"suffix\":\"/Image\",\"approximate\":true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiNanoBanana2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt describing the image to generate or the edits to apply. Include any constraints, styles, or details the model should follow.", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["Nano Banana 2 (Gemini 3.1 Flash Image)"]}], "seed": ["INT", {"tooltip": "When the seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used.", "default": 42, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "aspect_ratio": ["COMBO", {"tooltip": "If set to 'auto', matches your input image's aspect ratio; if no image is provided, a 16:9 square is usually generated.", "default": "auto", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9"]}], "resolution": ["COMBO", {"tooltip": "Target output resolution. For 2K/4K the native Gemini upscaler is used.", "multiselect": false, "options": ["1K", "2K", "4K"]}], "response_modalities": ["COMBO", {"advanced": true, "multiselect": false, "options": ["IMAGE", "IMAGE+TEXT"]}], "thinking_level": ["COMBO", {"multiselect": false, "options": ["MINIMAL", "HIGH"]}]}, "optional": {"images": ["IMAGE", {"tooltip": "Optional reference image(s). To include multiple images, use the Batch Images node (up to 14)."}], "files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."}], "system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate an AI's behavior.", "advanced": true, "default": "You are an expert image-generation engine. You must ALWAYS produce an image.\nInterpret all user input\u2014regardless of format, intent, or abstraction\u2014as literal visual directives for image composition.\nIf a prompt is conversational or lacks specific visual details, you must creatively invent a concrete visual scenario that depicts the concept.\nPrioritize generating the visual representation above any text, formatting, or conversational requests.", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed", "aspect_ratio", "resolution", "response_modalities", "thinking_level"], "optional": ["images", "files", "system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "STRING", "IMAGE"], "output_is_list": [false, false, false], "output_name": ["IMAGE", "STRING", "thought_image"], "output_tooltips": [null, null, "First image from the model's thinking process. Only available with thinking_level HIGH and IMAGE+TEXT modality."], "output_matchtypes": null, "name": "GeminiNanoBanana2", "display_name": "Nano Banana 2", "description": "Generate or edit images synchronously via Google Vertex API.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/image/Gemini", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $r := widgets.resolution;\n $isFlash := $contains($m, \"nano banana 2\");\n $flashPrices := {\"1k\": 0.0696, \"2k\": 0.1014, \"4k\": 0.154};\n $proPrices := {\"1k\": 0.134, \"2k\": 0.134, \"4k\": 0.24};\n $prices := $isFlash ? $flashPrices : $proPrices;\n {\"type\":\"usd\",\"usd\": $lookup($prices, $r), \"format\":{\"suffix\":\"/Image\",\"approximate\":true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiNanoBanana2V2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt describing the image to generate or the edits to apply. Include any constraints, styles, or details the model should follow.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Nano Banana 2 (Gemini 3.1 Flash Image)", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "If set to 'auto', matches your input image's aspect ratio; if no image is provided, a 16:9 square is usually generated.", "default": "auto", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9", "1:4", "4:1", "8:1", "1:8"]}], "resolution": ["COMBO", {"tooltip": "Target output resolution. For 2K/4K the native Gemini upscaler is used.", "multiselect": false, "options": ["1K", "2K", "4K"]}], "thinking_level": ["COMBO", {"multiselect": false, "options": ["MINIMAL", "HIGH"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s). Up to 14 images total.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14"], "min": 0}}]}, "optional": {"files": ["GEMINI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node."}]}}}]}], "seed": ["INT", {"tooltip": "When the seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used.", "default": 42, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "response_modalities": ["COMBO", {"advanced": true, "multiselect": false, "options": ["IMAGE", "IMAGE+TEXT"]}]}, "optional": {"system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate an AI's behavior.", "advanced": true, "default": "You are an expert image-generation engine. You must ALWAYS produce an image.\nInterpret all user input\u2014regardless of format, intent, or abstraction\u2014as literal visual directives for image composition.\nIf a prompt is conversational or lacks specific visual details, you must creatively invent a concrete visual scenario that depicts the concept.\nPrioritize generating the visual representation above any text, formatting, or conversational requests.", "multiline": true}], "temperature": ["FLOAT", {"tooltip": "Controls randomness in generation. Lower is more focused/deterministic.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.01}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling threshold. Lower is more focused, higher more diverse.", "advanced": true, "default": 0.95, "min": 0.0, "max": 1.0, "step": 0.01}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed", "response_modalities"], "optional": ["system_prompt", "temperature", "top_p"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "STRING", "IMAGE"], "output_is_list": [false, false, false], "output_name": ["IMAGE", "STRING", "thought_image"], "output_tooltips": [null, null, "First image from the model's thinking process. Only available with thinking_level HIGH and IMAGE+TEXT modality."], "output_matchtypes": null, "name": "GeminiNanoBanana2V2", "display_name": "Nano Banana 2", "description": "Generate or edit images synchronously via Google Vertex API.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/image/Gemini", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $r := $lookup(widgets, \"model.resolution\");\n $prices := {\"1k\": 0.0696, \"2k\": 0.1014, \"4k\": 0.154};\n {\"type\":\"usd\",\"usd\": $lookup($prices, $r), \"format\":{\"suffix\":\"/Image\",\"approximate\":true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GeminiInputFiles": {"input": {"required": {"file": ["COMBO", {"tooltip": "Input files to include as context for the model. Only accepts text (.txt) and PDF (.pdf) files for now.", "multiselect": false, "options": []}]}, "optional": {"GEMINI_INPUT_FILES": ["GEMINI_INPUT_FILES", {"tooltip": "An optional additional file(s) to batch together with the file loaded from this node. Allows chaining of input files so that a single message can include multiple input files."}]}}, "input_order": {"required": ["file"], "optional": ["GEMINI_INPUT_FILES"]}, "is_input_list": false, "output": ["GEMINI_INPUT_FILES"], "output_is_list": [false], "output_name": ["GEMINI_INPUT_FILES"], "output_tooltips": [null], "output_matchtypes": null, "name": "GeminiInputFiles", "display_name": "Gemini Input Files", "description": "Loads and prepares input files to include as inputs for Gemini LLM nodes. The files will be read by the Gemini model when generating a response. The contents of the text file count toward the token limit. \ud83d\udec8 TIP: Can be chained together with other Gemini Input File nodes.", "python_module": "comfy_api_nodes.nodes_gemini", "category": "partner/text/Gemini", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokImageNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["grok-imagine-image-quality", "grok-imagine-image-pro", "grok-imagine-image"]}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the image", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9", "9:19.5", "19.5:9", "9:20", "20:9", "1:2", "2:1"]}], "number_of_images": ["INT", {"tooltip": "Number of images to generate", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "aspect_ratio", "number_of_images", "seed"], "optional": ["resolution"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokImageNode", "display_name": "Grok Image", "description": "Generate images using Grok based on a text prompt", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/image/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "number_of_images", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rate := widgets.model = \"grok-imagine-image-quality\"\n ? (widgets.resolution = \"1k\" ? 0.05 : 0.07)\n : ($contains(widgets.model, \"pro\") ? 0.07 : 0.02);\n {\"type\":\"usd\",\"usd\": $rate * widgets.number_of_images}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokImageEditNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["grok-imagine-image-quality", "grok-imagine-image-pro", "grok-imagine-image"]}], "image": ["IMAGE", {"display_name": "images"}], "prompt": ["STRING", {"tooltip": "The text prompt used to generate the image", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K"]}], "number_of_images": ["INT", {"tooltip": "Number of edited images to generate", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"aspect_ratio": ["COMBO", {"tooltip": "Only allowed when multiple images are connected to the image input.", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9", "9:19.5", "19.5:9", "9:20", "20:9", "1:2", "2:1"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "prompt", "resolution", "number_of_images", "seed"], "optional": ["aspect_ratio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokImageEditNode", "display_name": "Grok Image Edit", "description": "Modify an existing image based on a text prompt", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/image/Grok", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "number_of_images", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $isQualityModel := widgets.model = \"grok-imagine-image-quality\";\n $isPro := $contains(widgets.model, \"pro\");\n $rate := $isQualityModel\n ? (widgets.resolution = \"1k\" ? 0.05 : 0.07)\n : ($isPro ? 0.07 : 0.02);\n $base := $isQualityModel ? 0.01 : 0.002;\n $output := $rate * widgets.number_of_images;\n $isPro\n ? {\"type\":\"usd\",\"usd\": $base + $output}\n : {\"type\":\"range_usd\",\"min_usd\": $base + $output, \"max_usd\": 3 * $base + $output}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokImageEditNodeV2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "The text prompt used to generate the image", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "grok-imagine-image-quality", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Reference image(s) to edit. Up to 3 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3"], "min": 1}}], "resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K"]}], "number_of_images": ["INT", {"tooltip": "Number of edited images to generate", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "aspect_ratio": ["COMBO", {"tooltip": "Only allowed when multiple images are connected.", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9", "9:19.5", "19.5:9", "9:20", "20:9", "1:2", "2:1"]}]}}}, {"key": "grok-imagine-image-pro", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Reference image to edit.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1"], "min": 1}}], "resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K"]}], "number_of_images": ["INT", {"tooltip": "Number of edited images to generate", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}]}}}, {"key": "grok-imagine-image", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Reference image(s) to edit. Up to 3 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3"], "min": 1}}], "resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K"]}], "number_of_images": ["INT", {"tooltip": "Number of edited images to generate", "default": 1, "min": 1, "max": 10, "step": 1, "display": "number"}], "aspect_ratio": ["COMBO", {"tooltip": "Only allowed when multiple images are connected.", "multiselect": false, "options": ["auto", "1:1", "2:3", "3:2", "3:4", "4:3", "9:16", "16:9", "9:19.5", "19.5:9", "9:20", "20:9", "1:2", "2:1"]}]}}}]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokImageEditNodeV2", "display_name": "Grok Image Edit", "description": "Modify an existing image based on a text prompt", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/image/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.number_of_images", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $isQualityModel := widgets.model = \"grok-imagine-image-quality\";\n $isPro := $contains(widgets.model, \"pro\");\n $res := $lookup(widgets, \"model.resolution\");\n $n := $lookup(widgets, \"model.number_of_images\");\n $rate := $isQualityModel\n ? ($res = \"1k\" ? 0.05 : 0.07)\n : ($isPro ? 0.07 : 0.02);\n $base := $isQualityModel ? 0.01 : 0.002;\n $output := $rate * $n;\n $isPro\n ? {\"type\":\"usd\",\"usd\": $base + $output}\n : {\"type\":\"range_usd\",\"min_usd\": $base + $output, \"max_usd\": 3 * $base + $output}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokVideoNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "grok-imagine-video-1.5 currently always requires an input image.", "multiselect": false, "options": ["grok-imagine-video", "grok-imagine-video-1.5"]}], "prompt": ["STRING", {"tooltip": "Text description of the desired video.", "multiline": true}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video. 1080p is only available for grok-imagine-video-1.5.", "multiselect": false, "options": ["480p", "720p", "1080p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["auto", "16:9", "4:3", "3:2", "1:1", "2:3", "3:4", "9:16"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 6, "min": 1, "max": 15, "step": 1, "display": "slider"}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"image": ["IMAGE", {"tooltip": "Optional starting image for grok-imagine-video. Required for grok-imagine-video-1.5."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "resolution", "aspect_ratio", "duration", "seed"], "optional": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokVideoNode", "display_name": "Grok Video", "description": "Generate video from a prompt or an image", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/video/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": ["image"], "input_groups": []}, "expr": "\n (\n $is15 := $contains(widgets.model, \"1.5\");\n $rate := $is15\n ? (widgets.resolution = \"1080p\" ? 0.25 : (widgets.resolution = \"720p\" ? 0.14 : 0.08))\n : (widgets.resolution = \"720p\" ? 0.07 : 0.05);\n $imgCost := $is15 ? 0.01 : 0.002;\n $base := $rate * widgets.duration;\n $total := inputs.image.connected ? $base + $imgCost : $base;\n {\"type\":\"usd\",\"usd\": $is15 ? $total * 1.43 : $total}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokVideoReferenceNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the desired video.", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The model to use for video generation.", "options": [{"key": "grok-imagine-video", "inputs": {"required": {"reference_images": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 7 reference images to guide the video generation.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "reference_", "min": 1, "max": 7}}], "resolution": ["COMBO", {"tooltip": "The resolution of the output video.", "multiselect": false, "options": ["480p", "720p"]}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["16:9", "4:3", "3:2", "1:1", "2:3", "3:4", "9:16"]}], "duration": ["INT", {"tooltip": "The duration of the output video in seconds.", "default": 6, "min": 2, "max": 10, "step": 1, "display": "slider"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokVideoReferenceNode", "display_name": "Grok Reference-to-Video", "description": "Generate video guided by reference images as style and content references.", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/video/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model.duration", "type": "INT"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": ["model.reference_images"]}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $refs := $lookup(inputGroups, \"model.reference_images\");\n $rate := $res = \"720p\" ? 0.07 : 0.05;\n $price := ($rate * $dur + 0.002 * $refs) * 1.43;\n {\"type\":\"usd\",\"usd\": $price}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokVideoEditNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["grok-imagine-video"]}], "prompt": ["STRING", {"tooltip": "Text description of the desired video.", "multiline": true}], "video": ["VIDEO", {"tooltip": "Maximum supported duration is 8.7 seconds and 50MB file size."}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "video", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokVideoEditNode", "display_name": "Grok Video Edit", "description": "Edit an existing video based on a text prompt.", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/video/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.06, \"format\": {\"suffix\": \"/sec\", \"approximate\": true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "GrokVideoExtendNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of what should happen next in the video.", "multiline": true}], "video": ["VIDEO", {"tooltip": "Source video to extend. MP4 format, 2-15 seconds."}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The model to use for video extension.", "options": [{"key": "grok-imagine-video", "inputs": {"required": {"duration": ["INT", {"tooltip": "Length of the extension in seconds.", "default": 8, "min": 2, "max": 10, "step": 1, "display": "slider"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "video", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "GrokVideoExtendNode", "display_name": "Grok Video Extend", "description": "Extend an existing video with a seamless continuation based on a text prompt.", "python_module": "comfy_api_nodes.nodes_grok", "category": "partner/video/Grok", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $dur := $lookup(widgets, \"model.duration\");\n {\n \"type\": \"range_usd\",\n \"min_usd\": (0.02 + 0.05 * $dur) * 1.43,\n \"max_usd\": (0.15 + 0.05 * $dur) * 1.43\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HitPawGeneralImageEnhance": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["generative_portrait", "generative"]}], "image": ["IMAGE", {}], "upscale_factor": ["COMBO", {"multiselect": false, "options": [1, 2, 4]}], "auto_downscale": ["BOOLEAN", {"tooltip": "Automatically downscale input image if output would exceed the limit.", "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "upscale_factor", "auto_downscale"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "HitPawGeneralImageEnhance", "display_name": "HitPaw General Image Enhance", "description": "Upscale low-resolution images to super-resolution, eliminate artifacts and noise. Maximum output: 32 megapixels.", "python_module": "comfy_api_nodes.nodes_hitpaw", "category": "partner/image/HitPaw", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"generative_portrait\": {\"min\": 0.02, \"max\": 0.06},\n \"generative\": {\"min\": 0.05, \"max\": 0.15}\n };\n $price := $lookup($prices, widgets.model);\n {\n \"type\": \"range_usd\",\n \"min_usd\": $price.min,\n \"max_usd\": $price.max\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HitPawVideoEnhance": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Portrait Restore Model (1x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "Portrait Restore Model (2x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "General Restore Model (1x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "General Restore Model (2x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "General Restore Model (4x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "Ultra HD Model (2x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD", "8K"]}]}}}, {"key": "Generative Model (1x)", "inputs": {"required": {"resolution": ["COMBO", {"multiselect": false, "options": ["original", "720p", "1080p", "2K/QHD", "4K/UHD"]}]}}}]}], "video": ["VIDEO", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "video"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "HitPawVideoEnhance", "display_name": "HitPaw Video Enhance", "description": "Upscale low-resolution videos to high resolution, eliminate artifacts and noise. Prices shown are per second of video.", "python_module": "comfy_api_nodes.nodes_hitpaw", "category": "partner/video/HitPaw", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := $lookup(widgets, \"model\");\n $res := $lookup(widgets, \"model.resolution\");\n $standard_model_prices := {\n \"original\": {\"min\": 0.01, \"max\": 0.198},\n \"720p\": {\"min\": 0.01, \"max\": 0.06},\n \"1080p\": {\"min\": 0.015, \"max\": 0.09},\n \"2k/qhd\": {\"min\": 0.02, \"max\": 0.117},\n \"4k/uhd\": {\"min\": 0.025, \"max\": 0.152},\n \"8k\": {\"min\": 0.033, \"max\": 0.198}\n };\n $ultra_hd_model_prices := {\n \"original\": {\"min\": 0.015, \"max\": 0.264},\n \"720p\": {\"min\": 0.015, \"max\": 0.092},\n \"1080p\": {\"min\": 0.02, \"max\": 0.12},\n \"2k/qhd\": {\"min\": 0.026, \"max\": 0.156},\n \"4k/uhd\": {\"min\": 0.034, \"max\": 0.203},\n \"8k\": {\"min\": 0.044, \"max\": 0.264}\n };\n $generative_model_prices := {\n \"original\": {\"min\": 0.015, \"max\": 0.338},\n \"720p\": {\"min\": 0.008, \"max\": 0.090},\n \"1080p\": {\"min\": 0.05, \"max\": 0.15},\n \"2k/qhd\": {\"min\": 0.038, \"max\": 0.225},\n \"4k/uhd\": {\"min\": 0.056, \"max\": 0.338}\n };\n $prices := $contains($m, \"ultra hd\") ? $ultra_hd_model_prices :\n $contains($m, \"generative\") ? $generative_model_prices :\n $standard_model_prices;\n $price := $lookup($prices, $res);\n {\n \"type\": \"range_usd\",\n \"min_usd\": $price.min,\n \"max_usd\": $price.max,\n \"format\": {\"approximate\": true, \"suffix\": \"/second\"}\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TencentTextToModelNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "The LowPoly option is unavailable for the `3.1` model.", "multiselect": false, "options": ["3.0", "3.1"]}], "prompt": ["STRING", {"tooltip": "Supports up to 1024 characters.", "default": "", "multiline": true}], "face_count": ["INT", {"default": 500000, "min": 3000, "max": 1500000}], "generate_type": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Normal", "inputs": {"required": {"pbr": ["BOOLEAN", {"default": false}]}}}, {"key": "LowPoly", "inputs": {"required": {"polygon_type": ["COMBO", {"multiselect": false, "options": ["triangle", "quadrilateral"]}], "pbr": ["BOOLEAN", {"default": false}]}}}, {"key": "Geometry", "inputs": {"required": {}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "prompt", "face_count", "generate_type", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB", "FILE_3D_OBJ", "IMAGE"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "GLB", "OBJ", "texture_image"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "TencentTextToModelNode", "display_name": "Hunyuan3D: Text to Model", "description": "", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "generate_type", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "generate_type.pbr", "type": "BOOLEAN"}, {"name": "face_count", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $base := widgets.generate_type = \"normal\" ? 25 : widgets.generate_type = \"lowpoly\" ? 30 : 15;\n $pbr := $lookup(widgets, \"generate_type.pbr\") ? 10 : 0;\n $face := widgets.face_count != 500000 ? 10 : 0;\n {\"type\":\"usd\",\"usd\": ($base + $pbr + $face) * 0.02}\n )\n "}, "search_aliases": null, "essentials_category": "3D", "has_intermediate_output": false}, "TencentImageToModelNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "The LowPoly option is unavailable for the `3.1` model.", "multiselect": false, "options": ["3.0", "3.1"]}], "image": ["IMAGE", {}], "face_count": ["INT", {"default": 500000, "min": 3000, "max": 1500000}], "generate_type": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Normal", "inputs": {"required": {"pbr": ["BOOLEAN", {"default": false}]}}}, {"key": "LowPoly", "inputs": {"required": {"polygon_type": ["COMBO", {"multiselect": false, "options": ["triangle", "quadrilateral"]}], "pbr": ["BOOLEAN", {"default": false}]}}}, {"key": "Geometry", "inputs": {"required": {}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "optional": {"image_left": ["IMAGE", {}], "image_right": ["IMAGE", {}], "image_back": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "image", "face_count", "generate_type", "seed"], "optional": ["image_left", "image_right", "image_back"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB", "FILE_3D_OBJ", "IMAGE", "IMAGE", "IMAGE", "IMAGE"], "output_is_list": [false, false, false, false, false, false, false], "output_name": ["model_file", "GLB", "OBJ", "texture_image", "optional_metallic", "optional_normal", "optional_roughness"], "output_tooltips": [null, null, null, null, null, null, null], "output_matchtypes": null, "name": "TencentImageToModelNode", "display_name": "Hunyuan3D: Image(s) to Model", "description": "", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "generate_type", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "generate_type.pbr", "type": "BOOLEAN"}, {"name": "face_count", "type": "INT"}], "inputs": ["image_left", "image_right", "image_back"], "input_groups": []}, "expr": "\n (\n $base := widgets.generate_type = \"normal\" ? 25 : widgets.generate_type = \"lowpoly\" ? 30 : 15;\n $multiview := (\n inputs.image_left.connected or inputs.image_right.connected or inputs.image_back.connected\n ) ? 10 : 0;\n $pbr := $lookup(widgets, \"generate_type.pbr\") ? 10 : 0;\n $face := widgets.face_count != 500000 ? 10 : 0;\n {\"type\":\"usd\",\"usd\": ($base + $multiview + $pbr + $face) * 0.02}\n )\n "}, "search_aliases": null, "essentials_category": "3D", "has_intermediate_output": false}, "TencentModelTo3DUVNode": {"input": {"required": {"model_3d": ["FILE_3D_GLB,FILE_3D_OBJ,FILE_3D_FBX,FILE_3D", {"tooltip": "Input 3D model (GLB, OBJ, or FBX)"}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 1, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_3d", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["FILE_3D_OBJ", "FILE_3D_FBX", "IMAGE"], "output_is_list": [false, false, false], "output_name": ["OBJ", "FBX", "uv_image"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TencentModelTo3DUVNode", "display_name": "Hunyuan3D: Model to UV", "description": "Perform UV unfolding on a 3D model to generate UV texture. Input model must have less than 30000 faces.", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.2}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Tencent3DTextureEditNode": {"input": {"required": {"model_3d": ["FILE_3D_FBX,FILE_3D", {"tooltip": "3D model in FBX format. Model should have less than 100000 faces."}], "prompt": ["STRING", {"tooltip": "Describes texture editing. Supports up to 1024 UTF-8 characters.", "default": "", "multiline": true}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_3d", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["FILE_3D_GLB", "FILE_3D_OBJ", "IMAGE"], "output_is_list": [false, false, false], "output_name": ["GLB", "OBJ", "texture_image"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "Tencent3DTextureEditNode", "display_name": "Hunyuan3D: 3D Texture Edit", "description": "After inputting the 3D model, perform 3D model texture redrawing.", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.6}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Tencent3DPartNode": {"input": {"required": {"model_3d": ["FILE_3D_FBX,FILE_3D", {"tooltip": "3D model in FBX format. Model should have less than 30000 faces."}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_3d", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["FILE_3D_FBX"], "output_is_list": [false], "output_name": ["FBX"], "output_tooltips": [null], "output_matchtypes": null, "name": "Tencent3DPartNode", "display_name": "Hunyuan3D: 3D Part", "description": "Automatically perform component identification and generation based on the model structure.", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.6}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TencentSmartTopologyNode": {"input": {"required": {"model_3d": ["FILE_3D_GLB,FILE_3D_OBJ,FILE_3D", {"tooltip": "Input 3D model (GLB or OBJ)"}], "polygon_type": ["COMBO", {"tooltip": "Surface composition type.", "multiselect": false, "options": ["triangle", "quadrilateral"]}], "face_level": ["COMBO", {"tooltip": "Polygon reduction level.", "multiselect": false, "options": ["medium", "high", "low"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_3d", "polygon_type", "face_level", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["FILE_3D_OBJ"], "output_is_list": [false], "output_name": ["OBJ"], "output_tooltips": [null], "output_matchtypes": null, "name": "TencentSmartTopologyNode", "display_name": "Hunyuan3D: Smart Topology", "description": "Perform smart retopology on a 3D model. Supports GLB/OBJ formats; max 200MB; recommended for high-poly models.", "python_module": "comfy_api_nodes.nodes_hunyuan3d", "category": "partner/3d/Tencent", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":1.0}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "IdeogramV1": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "turbo": ["BOOLEAN", {"tooltip": "Whether to use turbo mode (faster generation, potentially lower quality)", "default": false}]}, "optional": {"aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio for image generation.", "default": "1:1", "multiselect": false, "options": ["1:1", "4:3", "3:4", "16:9", "9:16", "2:1", "1:2", "3:2", "2:3", "4:5", "5:4"]}], "magic_prompt_option": ["COMBO", {"tooltip": "Determine if MagicPrompt should be used in generation", "advanced": true, "default": "AUTO", "multiselect": false, "options": ["AUTO", "ON", "OFF"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "negative_prompt": ["STRING", {"tooltip": "Description of what to exclude from the image", "default": "", "multiline": true}], "num_images": ["INT", {"default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "turbo"], "optional": ["aspect_ratio", "magic_prompt_option", "seed", "negative_prompt", "num_images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "IdeogramV1", "display_name": "Ideogram V1", "description": "Generates images using the Ideogram V1 model.", "python_module": "comfy_api_nodes.nodes_ideogram", "category": "partner/image/Ideogram", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "num_images", "type": "INT"}, {"name": "turbo", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $n := widgets.num_images;\n $base := (widgets.turbo = true) ? 0.0286 : 0.0858;\n {\"type\":\"usd\",\"usd\": $round($base * $n, 2)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "IdeogramV2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "turbo": ["BOOLEAN", {"tooltip": "Whether to use turbo mode (faster generation, potentially lower quality)", "default": false}]}, "optional": {"aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio for image generation. Ignored if resolution is not set to AUTO.", "default": "1:1", "multiselect": false, "options": ["1:1", "4:3", "3:4", "16:9", "9:16", "2:1", "1:2", "3:2", "2:3", "4:5", "5:4"]}], "resolution": ["COMBO", {"tooltip": "The resolution for image generation. If not set to AUTO, this overrides the aspect_ratio setting.", "default": "Auto", "multiselect": false, "options": ["Auto", "512 x 1536", "576 x 1408", "576 x 1472", "576 x 1536", "640 x 1024", "640 x 1344", "640 x 1408", "640 x 1472", "640 x 1536", "704 x 1152", "704 x 1216", "704 x 1280", "704 x 1344", "704 x 1408", "704 x 1472", "720 x 1280", "736 x 1312", "768 x 1024", "768 x 1088", "768 x 1152", "768 x 1216", "768 x 1232", "768 x 1280", "768 x 1344", "832 x 960", "832 x 1024", "832 x 1088", "832 x 1152", "832 x 1216", "832 x 1248", "864 x 1152", "896 x 960", "896 x 1024", "896 x 1088", "896 x 1120", "896 x 1152", "960 x 832", "960 x 896", "960 x 1024", "960 x 1088", "1024 x 640", "1024 x 768", "1024 x 832", "1024 x 896", "1024 x 960", "1024 x 1024", "1088 x 768", "1088 x 832", "1088 x 896", "1088 x 960", "1120 x 896", "1152 x 704", "1152 x 768", "1152 x 832", "1152 x 864", "1152 x 896", "1216 x 704", "1216 x 768", "1216 x 832", "1232 x 768", "1248 x 832", "1280 x 704", "1280 x 720", "1280 x 768", "1280 x 800", "1312 x 736", "1344 x 640", "1344 x 704", "1344 x 768", "1408 x 576", "1408 x 640", "1408 x 704", "1472 x 576", "1472 x 640", "1472 x 704", "1536 x 512", "1536 x 576", "1536 x 640"]}], "magic_prompt_option": ["COMBO", {"tooltip": "Determine if MagicPrompt should be used in generation", "advanced": true, "default": "AUTO", "multiselect": false, "options": ["AUTO", "ON", "OFF"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "style_type": ["COMBO", {"tooltip": "Style type for generation (V2 only)", "advanced": true, "default": "NONE", "multiselect": false, "options": ["AUTO", "GENERAL", "REALISTIC", "DESIGN", "RENDER_3D", "ANIME"]}], "negative_prompt": ["STRING", {"tooltip": "Description of what to exclude from the image", "default": "", "multiline": true}], "num_images": ["INT", {"default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "turbo"], "optional": ["aspect_ratio", "resolution", "magic_prompt_option", "seed", "style_type", "negative_prompt", "num_images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "IdeogramV2", "display_name": "Ideogram V2", "description": "Generates images using the Ideogram V2 model.", "python_module": "comfy_api_nodes.nodes_ideogram", "category": "partner/image/Ideogram", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "num_images", "type": "INT"}, {"name": "turbo", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $n := widgets.num_images;\n $base := (widgets.turbo = true) ? 0.0715 : 0.1144;\n {\"type\":\"usd\",\"usd\": $round($base * $n, 2)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "IdeogramV3": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation or editing", "default": "", "multiline": true}]}, "optional": {"image": ["IMAGE", {"tooltip": "Optional reference image for image editing."}], "mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced)"}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio for image generation. Ignored if resolution is not set to Auto.", "default": "1:1", "multiselect": false, "options": ["1:3", "3:1", "1:2", "2:1", "9:16", "16:9", "10:16", "16:10", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "1:1"]}], "resolution": ["COMBO", {"tooltip": "The resolution for image generation. If not set to Auto, this overrides the aspect_ratio setting.", "default": "Auto", "multiselect": false, "options": ["Auto", "512x1536", "576x1408", "576x1472", "576x1536", "640x1344", "640x1408", "640x1472", "640x1536", "704x1152", "704x1216", "704x1280", "704x1344", "704x1408", "704x1472", "736x1312", "768x1088", "768x1216", "768x1280", "768x1344", "800x1280", "832x960", "832x1024", "832x1088", "832x1152", "832x1216", "832x1248", "864x1152", "896x960", "896x1024", "896x1088", "896x1120", "896x1152", "960x832", "960x896", "960x1024", "960x1088", "1024x832", "1024x896", "1024x960", "1024x1024", "1088x768", "1088x832", "1088x896", "1088x960", "1120x896", "1152x704", "1152x832", "1152x864", "1152x896", "1216x704", "1216x768", "1216x832", "1248x832", "1280x704", "1280x768", "1280x800", "1312x736", "1344x640", "1344x704", "1344x768", "1408x576", "1408x640", "1408x704", "1472x576", "1472x640", "1472x704", "1536x512", "1536x576", "1536x640"]}], "magic_prompt_option": ["COMBO", {"tooltip": "Determine if MagicPrompt should be used in generation", "advanced": true, "default": "AUTO", "multiselect": false, "options": ["AUTO", "ON", "OFF"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "num_images": ["INT", {"default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}], "rendering_speed": ["COMBO", {"tooltip": "Controls the trade-off between generation speed and quality", "advanced": true, "default": "DEFAULT", "multiselect": false, "options": ["DEFAULT", "TURBO", "QUALITY"]}], "character_image": ["IMAGE", {"tooltip": "Image to use as character reference."}], "character_mask": ["MASK", {"tooltip": "Optional mask for character reference image."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt"], "optional": ["image", "mask", "aspect_ratio", "resolution", "magic_prompt_option", "seed", "num_images", "rendering_speed", "character_image", "character_mask"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "IdeogramV3", "display_name": "Ideogram V3", "description": "Generates images using the Ideogram V3 model. Supports both regular image generation from text prompts and image editing with mask.", "python_module": "comfy_api_nodes.nodes_ideogram", "category": "partner/image/Ideogram", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "rendering_speed", "type": "COMBO"}, {"name": "num_images", "type": "INT"}], "inputs": ["character_image"], "input_groups": []}, "expr": "\n (\n $n := widgets.num_images;\n $speed := widgets.rendering_speed;\n $hasChar := inputs.character_image.connected;\n $base :=\n $contains($speed,\"quality\") ? ($hasChar ? 0.286 : 0.1287) :\n $contains($speed,\"default\") ? ($hasChar ? 0.2145 : 0.0858) :\n $contains($speed,\"turbo\") ? ($hasChar ? 0.143 : 0.0429) :\n 0.0858;\n {\"type\":\"usd\",\"usd\": $round($base * $n, 2)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "IdeogramV4": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the image generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"default": "Auto", "multiselect": false, "options": ["Auto", "2048x2048 (1:1)", "1440x2880 (1:2)", "2880x1440 (2:1)", "1664x2496 (2:3)", "2496x1664 (3:2)", "1792x2240 (4:5)", "2240x1792 (5:4)", "1440x2560 (9:16)", "2560x1440 (16:9)", "1600x2560 (5:8)", "2560x1600 (8:5)", "1728x2304 (3:4)", "2304x1728 (4:3)", "1296x3168 (9:22)", "3168x1296 (22:9)", "1152x2944 (9:23)", "2944x1152 (23:9)", "1248x3328 (3:8)", "3328x1248 (8:3)", "1280x3072 (5:12)", "3072x1280 (12:5)"]}], "rendering_speed": ["COMBO", {"tooltip": "Controls the trade-off between generation speed and quality.", "default": "DEFAULT", "multiselect": false, "options": ["DEFAULT", "TURBO", "QUALITY"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "resolution", "rendering_speed", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "IdeogramV4", "display_name": "Ideogram V4", "description": "Generates images using the Ideogram 4.0 model from a text prompt.", "python_module": "comfy_api_nodes.nodes_ideogram", "category": "partner/image/Ideogram", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "rendering_speed", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $speed := widgets.rendering_speed;\n $price :=\n $contains($speed,\"turbo\") ? 0.0429 :\n $contains($speed,\"quality\") ? 0.143 :\n 0.0858;\n {\"type\":\"usd\",\"usd\": $price}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingCameraControls": {"input": {"required": {"camera_control_type": ["COMBO", {"multiselect": false, "options": ["simple", "down_back", "forward_up", "right_turn_forward", "left_turn_forward"]}], "horizontal_movement": ["FLOAT", {"tooltip": "Controls camera's movement along horizontal axis (x-axis). Negative indicates left, positive indicates right", "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}], "vertical_movement": ["FLOAT", {"tooltip": "Controls camera's movement along vertical axis (y-axis). Negative indicates downward, positive indicates upward.", "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}], "pan": ["FLOAT", {"tooltip": "Controls camera's rotation in vertical plane (x-axis). Negative indicates downward rotation, positive indicates upward rotation.", "default": 0.5, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}], "tilt": ["FLOAT", {"tooltip": "Controls camera's rotation in horizontal plane (y-axis). Negative indicates left rotation, positive indicates right rotation.", "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}], "roll": ["FLOAT", {"tooltip": "Controls camera's rolling amount (z-axis). Negative indicates counterclockwise, positive indicates clockwise.", "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}], "zoom": ["FLOAT", {"tooltip": "Controls change in camera's focal length. Negative indicates narrower field of view, positive indicates wider field of view.", "default": 0.0, "min": -10.0, "max": 10.0, "step": 0.25, "display": "slider"}]}}, "input_order": {"required": ["camera_control_type", "horizontal_movement", "vertical_movement", "pan", "tilt", "roll", "zoom"]}, "is_input_list": false, "output": ["CAMERA_CONTROL"], "output_is_list": [false], "output_name": ["camera_control"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingCameraControls", "display_name": "Kling Camera Controls", "description": "Allows specifying configuration options for Kling Camera Controls and motion control effects.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingTextToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "cfg_scale": ["FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "mode": ["COMBO", {"tooltip": "The configuration to use for the video generation following the format: mode / duration / model_name.", "default": "pro mode / 5s duration / kling-v2-5-turbo", "multiselect": false, "options": ["standard mode / 5s duration / kling-v1-6", "standard mode / 10s duration / kling-v1-6", "pro mode / 5s duration / kling-v2-master", "pro mode / 10s duration / kling-v2-master", "standard mode / 5s duration / kling-v2-master", "standard mode / 10s duration / kling-v2-master", "pro mode / 5s duration / kling-v2-1-master", "pro mode / 10s duration / kling-v2-1-master", "pro mode / 5s duration / kling-v2-5-turbo", "pro mode / 10s duration / kling-v2-5-turbo"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "negative_prompt", "cfg_scale", "aspect_ratio", "mode"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingTextToVideoNode", "display_name": "Kling Text to Video", "description": "Kling Text to Video Node", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.mode;\n $contains($m,\"v2-5-turbo\")\n ? ($contains($m,\"10\") ? {\"type\":\"usd\",\"usd\":0.7} : {\"type\":\"usd\",\"usd\":0.35})\n : $contains($m,\"v2-1-master\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":2.8} : {\"type\":\"usd\",\"usd\":1.4})\n : $contains($m,\"v2-master\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":2.8} : {\"type\":\"usd\",\"usd\":1.4})\n : $contains($m,\"v1-6\")\n ? (\n $contains($m,\"pro\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.56} : {\"type\":\"usd\",\"usd\":0.28})\n )\n : $contains($m,\"v1\")\n ? (\n $contains($m,\"pro\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.28} : {\"type\":\"usd\",\"usd\":0.14})\n )\n : {\"type\":\"usd\",\"usd\":0.14}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingImage2VideoNode": {"input": {"required": {"start_frame": ["IMAGE", {"tooltip": "The reference image used to generate the video."}], "prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "model_name": ["COMBO", {"default": "kling-v2-master", "multiselect": false, "options": ["kling-v1", "kling-v1-5", "kling-v1-6", "kling-v2-master", "kling-v2-1", "kling-v2-1-master", "kling-v2-5-turbo"]}], "cfg_scale": ["FLOAT", {"default": 0.8, "min": 0.0, "max": 1.0}], "mode": ["COMBO", {"default": "std", "multiselect": false, "options": ["std", "pro"]}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "duration": ["COMBO", {"default": "5", "multiselect": false, "options": ["5", "10"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["start_frame", "prompt", "negative_prompt", "model_name", "cfg_scale", "mode", "aspect_ratio", "duration"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingImage2VideoNode", "display_name": "Kling Image(First Frame) to Video", "description": "", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $mode := widgets.mode;\n $model := widgets.model_name;\n $dur := widgets.duration;\n $contains($model,\"v2-5-turbo\")\n ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.7} : {\"type\":\"usd\",\"usd\":0.35})\n : ($contains($model,\"v2-1-master\") or $contains($model,\"v2-master\"))\n ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":2.8} : {\"type\":\"usd\",\"usd\":1.4})\n : ($contains($model,\"v2-1\") or $contains($model,\"v1-6\") or $contains($model,\"v1-5\"))\n ? (\n $contains($mode,\"pro\")\n ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.56} : {\"type\":\"usd\",\"usd\":0.28})\n )\n : $contains($model,\"v1\")\n ? (\n $contains($mode,\"pro\")\n ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.28} : {\"type\":\"usd\",\"usd\":0.14})\n )\n : {\"type\":\"usd\",\"usd\":0.14}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingCameraControlI2VNode": {"input": {"required": {"start_frame": ["IMAGE", {"tooltip": "Reference Image - URL or Base64 encoded string, cannot exceed 10MB, resolution not less than 300*300px, aspect ratio between 1:2.5 ~ 2.5:1. Base64 should not include data:image prefix."}], "prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "cfg_scale": ["FLOAT", {"default": 0.75, "min": 0.0, "max": 1.0}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "camera_control": ["CAMERA_CONTROL", {"tooltip": "Can be created using the Kling Camera Controls node. Controls the camera movement and motion during the video generation."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["start_frame", "prompt", "negative_prompt", "cfg_scale", "aspect_ratio", "camera_control"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingCameraControlI2VNode", "display_name": "Kling Image to Video (Camera Control)", "description": "Transform still images into cinematic videos with professional camera movements that simulate real-world cinematography. Control virtual camera actions including zoom, rotation, pan, tilt, and first-person view, while maintaining focus on your original image.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.49}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingCameraControlT2VNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "cfg_scale": ["FLOAT", {"default": 0.75, "min": 0.0, "max": 1.0}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "camera_control": ["CAMERA_CONTROL", {"tooltip": "Can be created using the Kling Camera Controls node. Controls the camera movement and motion during the video generation."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "negative_prompt", "cfg_scale", "aspect_ratio", "camera_control"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingCameraControlT2VNode", "display_name": "Kling Text to Video (Camera Control)", "description": "Transform text into cinematic videos with professional camera movements that simulate real-world cinematography. Control virtual camera actions including zoom, rotation, pan, tilt, and first-person view, while maintaining focus on your original text.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.14}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingStartEndFrameNode": {"input": {"required": {"start_frame": ["IMAGE", {"tooltip": "Reference Image - URL or Base64 encoded string, cannot exceed 10MB, resolution not less than 300*300px, aspect ratio between 1:2.5 ~ 2.5:1. Base64 should not include data:image prefix."}], "end_frame": ["IMAGE", {"tooltip": "Reference Image - End frame control. URL or Base64 encoded string, cannot exceed 10MB, resolution not less than 300*300px. Base64 should not include data:image prefix."}], "prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "cfg_scale": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "mode": ["COMBO", {"tooltip": "The configuration to use for the video generation following the format: mode / duration / model_name.", "default": "pro mode / 5s duration / kling-v2-5-turbo", "multiselect": false, "options": ["pro mode / 5s duration / kling-v1-5", "pro mode / 10s duration / kling-v1-5", "pro mode / 5s duration / kling-v1-6", "pro mode / 10s duration / kling-v1-6", "pro mode / 5s duration / kling-v2-1", "pro mode / 10s duration / kling-v2-1", "pro mode / 5s duration / kling-v2-5-turbo", "pro mode / 10s duration / kling-v2-5-turbo"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["start_frame", "end_frame", "prompt", "negative_prompt", "cfg_scale", "aspect_ratio", "mode"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingStartEndFrameNode", "display_name": "Kling Start-End Frame to Video", "description": "Generate a video sequence that transitions between your provided start and end images. The node creates all frames in between, producing a smooth transformation from the first frame to the last.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.mode;\n $contains($m,\"v2-5-turbo\")\n ? ($contains($m,\"10\") ? {\"type\":\"usd\",\"usd\":0.7} : {\"type\":\"usd\",\"usd\":0.35})\n : $contains($m,\"v2-1\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : $contains($m,\"v2-master\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":2.8} : {\"type\":\"usd\",\"usd\":1.4})\n : $contains($m,\"v1-6\")\n ? (\n $contains($m,\"pro\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.56} : {\"type\":\"usd\",\"usd\":0.28})\n )\n : $contains($m,\"v1\")\n ? (\n $contains($m,\"pro\")\n ? ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($m,\"10s\") ? {\"type\":\"usd\",\"usd\":0.28} : {\"type\":\"usd\",\"usd\":0.14})\n )\n : {\"type\":\"usd\",\"usd\":0.14}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingVideoExtendNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Positive text prompt for guiding the video extension", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt for elements to avoid in the extended video", "multiline": true}], "cfg_scale": ["FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0}], "video_id": ["STRING", {"tooltip": "The ID of the video to be extended. Supports videos generated by text-to-video, image-to-video, and previous video extension operations. Cannot exceed 3 minutes total duration after extension.", "forceInput": true, "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "negative_prompt", "cfg_scale", "video_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingVideoExtendNode", "display_name": "Kling Video Extend", "description": "Kling Video Extend Node. Extend videos made by other Kling nodes. The video_id is created by using other Kling Nodes.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.28}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingLipSyncAudioToVideoNode": {"input": {"required": {"video": ["VIDEO", {}], "audio": ["AUDIO", {}], "voice_language": ["COMBO", {"default": "en", "multiselect": false, "options": ["zh", "en"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "audio", "voice_language"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingLipSyncAudioToVideoNode", "display_name": "Kling Lip Sync Video with Audio", "description": "Kling Lip Sync Audio to Video Node. Syncs mouth movements in a video file to the audio content of an audio file. When using, ensure that the audio contains clearly distinguishable vocals and that the video contains a distinct face. The audio file should not be larger than 5MB. The video file should not be larger than 100MB, should have height/width between 720px and 1920px, and should be between 2s and 10s in length.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.1,\"format\":{\"approximate\":true}}"}, "search_aliases": null, "essentials_category": "Video Generation", "has_intermediate_output": false}, "KlingLipSyncTextToVideoNode": {"input": {"required": {"video": ["VIDEO", {}], "text": ["STRING", {"tooltip": "Text Content for Lip-Sync Video Generation. Required when mode is text2video. Maximum length is 120 characters.", "multiline": true}], "voice": ["COMBO", {"default": "Melody", "multiselect": false, "options": ["Melody", "Sunny", "Sage", "Ace", "Blossom", "Peppy", "Dove", "Shine", "Anchor", "Lyric", "Tender", "Siren", "Zippy", "Bud", "Sprite", "Candy", "Beacon", "Rock", "Titan", "Grace", "Helen", "Lore", "Crag", "Prattle", "Hearth", "The Reader", "Commercial Lady", "\u9633\u5149\u5c11\u5e74", "\u61c2\u4e8b\u5c0f\u5f1f", "\u8fd0\u52a8\u5c11\u5e74", "\u9752\u6625\u5c11\u5973", "\u6e29\u67d4\u5c0f\u59b9", "\u5143\u6c14\u5c11\u5973", "\u9633\u5149\u7537\u751f", "\u5e7d\u9ed8\u5c0f\u54e5", "\u6587\u827a\u5c0f\u54e5", "\u751c\u7f8e\u90bb\u5bb6", "\u6e29\u67d4\u59d0\u59d0", "\u804c\u573a\u5973\u9752", "\u6d3b\u6cfc\u7537\u7ae5", "\u4fcf\u76ae\u5973\u7ae5", "\u7a33\u91cd\u8001\u7238", "\u6e29\u67d4\u5988\u5988", "\u4e25\u8083\u4e0a\u53f8", "\u4f18\u96c5\u8d35\u5987", "\u6148\u7965\u7237\u7237", "\u5520\u53e8\u7237\u7237", "\u5520\u53e8\u5976\u5976", "\u548c\u853c\u5976\u5976", "\u4e1c\u5317\u8001\u94c1", "\u91cd\u5e86\u5c0f\u4f19", "\u56db\u5ddd\u59b9\u5b50", "\u6f6e\u6c55\u5927\u53d4", "\u53f0\u6e7e\u7537\u751f", "\u897f\u5b89\u638c\u67dc", "\u5929\u6d25\u59d0\u59d0", "\u65b0\u95fb\u64ad\u62a5\u7537", "\u8bd1\u5236\u7247\u7537", "\u6492\u5a07\u5973\u53cb", "\u5200\u7247\u70df\u55d3", "\u4e56\u5de7\u6b63\u592a"]}], "voice_speed": ["FLOAT", {"tooltip": "Speech Rate. Valid range: 0.8~2.0, accurate to one decimal place.", "advanced": true, "default": 1, "min": 0.8, "max": 2.0, "display": "slider"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "text", "voice", "voice_speed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingLipSyncTextToVideoNode", "display_name": "Kling Lip Sync Video with Text", "description": "Kling Lip Sync Text to Video Node. Syncs mouth movements in a video file to a text prompt. The video file should not be larger than 100MB, should have height/width between 720px and 1920px, and should be between 2s and 10s in length.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.1,\"format\":{\"approximate\":true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingVirtualTryOnNode": {"input": {"required": {"human_image": ["IMAGE", {}], "cloth_image": ["IMAGE", {}], "model_name": ["COMBO", {"default": "kolors-virtual-try-on-v1", "multiselect": false, "options": ["kolors-virtual-try-on-v1", "kolors-virtual-try-on-v1-5"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["human_image", "cloth_image", "model_name"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingVirtualTryOnNode", "display_name": "Kling Virtual Try On", "description": "Kling Virtual Try On Node. Input a human image and a cloth image to try on the cloth on the human. You can merge multiple clothing item pictures into one image with a white background.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/image/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.7}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingImageGenerationNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Positive text prompt", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt", "multiline": true}], "image_type": ["COMBO", {"advanced": true, "multiselect": false, "options": ["subject", "face"]}], "image_fidelity": ["FLOAT", {"tooltip": "Reference intensity for user-uploaded images", "advanced": true, "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "human_fidelity": ["FLOAT", {"tooltip": "Subject reference similarity", "advanced": true, "default": 0.45, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3", "kling-v2", "kling-v1-5"]}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4", "3:2", "2:3", "21:9"]}], "n": ["INT", {"tooltip": "Number of generated images", "default": 1, "min": 1, "max": 9}]}, "optional": {"image": ["IMAGE", {}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "negative_prompt", "image_type", "image_fidelity", "human_fidelity", "model_name", "aspect_ratio", "n"], "optional": ["image", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingImageGenerationNode", "display_name": "Kling 3.0 Image", "description": "Kling Image Generation Node. Generate an image from a text prompt with an optional reference image.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/image/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model_name", "type": "COMBO"}, {"name": "n", "type": "INT"}], "inputs": ["image"], "input_groups": []}, "expr": "\n (\n $m := widgets.model_name;\n $base :=\n $contains($m,\"kling-v1-5\")\n ? (inputs.image.connected ? 0.028 : 0.014)\n : $contains($m,\"kling-v3\") ? 0.028 : 0.014;\n {\"type\":\"usd\",\"usd\": $base * widgets.n}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingSingleImageVideoEffectNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": " Reference Image. URL or Base64 encoded string (without data:image prefix). File size cannot exceed 10MB, resolution not less than 300*300px, aspect ratio between 1:2.5 ~ 2.5:1"}], "effect_scene": ["COMBO", {"multiselect": false, "options": ["bloombloom", "dizzydizzy", "fuzzyfuzzy", "squish", "expansion"]}], "model_name": ["COMBO", {"multiselect": false, "options": ["kling-v1-6"]}], "duration": ["COMBO", {"multiselect": false, "options": ["5", "10"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "effect_scene", "model_name", "duration"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING", "STRING"], "output_is_list": [false, false, false], "output_name": ["VIDEO", "video_id", "duration"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "KlingSingleImageVideoEffectNode", "display_name": "Kling Video Effects", "description": "Achieve different special effects when generating a video based on the effect_scene.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "effect_scene", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n ($contains(widgets.effect_scene,\"dizzydizzy\") or $contains(widgets.effect_scene,\"bloombloom\"))\n ? {\"type\":\"usd\",\"usd\":0.49}\n : {\"type\":\"usd\",\"usd\":0.28}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingDualCharacterVideoEffectNode": {"input": {"required": {"image_left": ["IMAGE", {"tooltip": "Left side image"}], "image_right": ["IMAGE", {"tooltip": "Right side image"}], "effect_scene": ["COMBO", {"multiselect": false, "options": ["hug", "kiss", "heart_gesture"]}], "model_name": ["COMBO", {"default": "kling-v1", "multiselect": false, "options": ["kling-v1", "kling-v1-5", "kling-v1-6"]}], "mode": ["COMBO", {"default": "std", "multiselect": false, "options": ["std", "pro"]}], "duration": ["COMBO", {"multiselect": false, "options": ["5", "10"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image_left", "image_right", "effect_scene", "model_name", "mode", "duration"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING"], "output_is_list": [false, false], "output_name": ["VIDEO", "duration"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "KlingDualCharacterVideoEffectNode", "display_name": "Kling Dual Character Video Effects", "description": "Achieve different special effects when generating a video based on the effect_scene. First image will be positioned on left side, second on right side of the composite.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $mode := widgets.mode;\n $model := widgets.model_name;\n $dur := widgets.duration;\n ($contains($model,\"v1-6\") or $contains($model,\"v1-5\"))\n ? (\n $contains($mode,\"pro\")\n ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.56} : {\"type\":\"usd\",\"usd\":0.28})\n )\n : $contains($model,\"v1\")\n ? (\n $contains($mode,\"pro\")\n ? ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.98} : {\"type\":\"usd\",\"usd\":0.49})\n : ($contains($dur,\"10\") ? {\"type\":\"usd\",\"usd\":0.28} : {\"type\":\"usd\",\"usd\":0.14})\n )\n : {\"type\":\"usd\",\"usd\":0.14}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingOmniProTextToVideoNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-video-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions. Ignored when storyboards are enabled.", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "display": "slider"}]}, "optional": {"resolution": ["COMBO", {"default": "1080p", "multiselect": false, "options": ["4k", "1080p", "720p"]}], "storyboards": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generate a series of video segments with individual prompts and durations. Ignored for o1 model.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "1 storyboard", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "2 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "3 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "4 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "5 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "6 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_6_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 6. Max 512 characters.", "default": "", "multiline": true}], "storyboard_6_duration": ["INT", {"tooltip": "Duration for storyboard segment 6 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}]}], "generate_audio": ["BOOLEAN", {"default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "prompt", "aspect_ratio", "duration"], "optional": ["resolution", "storyboards", "generate_audio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProTextToVideoNode", "display_name": "Kling 3.0 Omni Text to Video", "description": "Use text prompts to generate videos with the latest Kling model.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := widgets.resolution;\n $mode := $res = \"4k\" ? \"4k\" : ($res = \"720p\" ? \"std\" : \"pro\");\n $isV3 := $contains(widgets.model_name, \"v3\");\n $audio := $isV3 and widgets.generate_audio;\n $rates := $audio\n ? {\"std\": 0.112, \"pro\": 0.14, \"4k\": 0.42}\n : {\"std\": 0.084, \"pro\": 0.112, \"4k\": 0.42};\n {\"type\":\"usd\",\"usd\": $lookup($rates, $mode) * widgets.duration}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingOmniProFirstLastFrameNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-video-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions. Ignored when storyboards are enabled.", "multiline": true}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "display": "slider"}], "first_frame": ["IMAGE", {}]}, "optional": {"end_frame": ["IMAGE", {"tooltip": "An optional end frame for the video. This cannot be used simultaneously with 'reference_images'. Does not work with storyboards."}], "reference_images": ["IMAGE", {"tooltip": "Up to 6 additional reference images."}], "resolution": ["COMBO", {"default": "1080p", "multiselect": false, "options": ["4k", "1080p", "720p"]}], "storyboards": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generate a series of video segments with individual prompts and durations. Only supported for kling-v3-omni.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "1 storyboard", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "2 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "3 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "4 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "5 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "6 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_6_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 6. Max 512 characters.", "default": "", "multiline": true}], "storyboard_6_duration": ["INT", {"tooltip": "Duration for storyboard segment 6 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}]}], "generate_audio": ["BOOLEAN", {"tooltip": "Generate audio for the video. Only supported for kling-v3-omni.", "default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "prompt", "duration", "first_frame"], "optional": ["end_frame", "reference_images", "resolution", "storyboards", "generate_audio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProFirstLastFrameNode", "display_name": "Kling 3.0 Omni First-Last-Frame to Video", "description": "Use a start frame, an optional end frame, or reference images with the latest Kling model.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := widgets.resolution;\n $mode := $res = \"4k\" ? \"4k\" : ($res = \"720p\" ? \"std\" : \"pro\");\n $isV3 := $contains(widgets.model_name, \"v3\");\n $audio := $isV3 and widgets.generate_audio;\n $rates := $audio\n ? {\"std\": 0.112, \"pro\": 0.14, \"4k\": 0.42}\n : {\"std\": 0.084, \"pro\": 0.112, \"4k\": 0.42};\n {\"type\":\"usd\",\"usd\": $lookup($rates, $mode) * widgets.duration}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingOmniProImageToVideoNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-video-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions. Ignored when storyboards are enabled.", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "display": "slider"}], "reference_images": ["IMAGE", {"tooltip": "Up to 7 reference images."}]}, "optional": {"resolution": ["COMBO", {"default": "1080p", "multiselect": false, "options": ["4k", "1080p", "720p"]}], "storyboards": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generate a series of video segments with individual prompts and durations. Only supported for kling-v3-omni.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "1 storyboard", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "2 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "3 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "4 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "5 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "6 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_6_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 6. Max 512 characters.", "default": "", "multiline": true}], "storyboard_6_duration": ["INT", {"tooltip": "Duration for storyboard segment 6 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}]}], "generate_audio": ["BOOLEAN", {"tooltip": "Generate audio for the video. Only supported for kling-v3-omni.", "default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "prompt", "aspect_ratio", "duration", "reference_images"], "optional": ["resolution", "storyboards", "generate_audio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProImageToVideoNode", "display_name": "Kling 3.0 Omni Image to Video", "description": "Use up to 7 reference images to generate a video with the latest Kling model.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := widgets.resolution;\n $mode := $res = \"4k\" ? \"4k\" : ($res = \"720p\" ? \"std\" : \"pro\");\n $isV3 := $contains(widgets.model_name, \"v3\");\n $audio := $isV3 and widgets.generate_audio;\n $rates := $audio\n ? {\"std\": 0.112, \"pro\": 0.14, \"4k\": 0.42}\n : {\"std\": 0.084, \"pro\": 0.112, \"4k\": 0.42};\n {\"type\":\"usd\",\"usd\": $lookup($rates, $mode) * widgets.duration}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingOmniProVideoToVideoNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-video-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions.", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "duration": ["INT", {"default": 3, "min": 3, "max": 10, "display": "slider"}], "reference_video": ["VIDEO", {"tooltip": "Video to use as a reference."}], "keep_original_sound": ["BOOLEAN", {"default": true}]}, "optional": {"reference_images": ["IMAGE", {"tooltip": "Up to 4 additional reference images."}], "resolution": ["COMBO", {"multiselect": false, "options": ["1080p", "720p"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "prompt", "aspect_ratio", "duration", "reference_video", "keep_original_sound"], "optional": ["reference_images", "resolution", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProVideoToVideoNode", "display_name": "Kling 3.0 Omni Video to Video", "description": "Use a video and up to 4 reference images to generate a video with the latest Kling model.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $mode := (widgets.resolution = \"720p\") ? \"std\" : \"pro\";\n $rates := {\"std\": 0.126, \"pro\": 0.168};\n {\"type\":\"usd\",\"usd\": $lookup($rates, $mode) * widgets.duration}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingOmniProEditVideoNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-video-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions.", "multiline": true}], "video": ["VIDEO", {"tooltip": "Video for editing. The output video length will be the same."}], "keep_original_sound": ["BOOLEAN", {"default": true}]}, "optional": {"reference_images": ["IMAGE", {"tooltip": "Up to 4 additional reference images."}], "resolution": ["COMBO", {"multiselect": false, "options": ["1080p", "720p"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "prompt", "video", "keep_original_sound"], "optional": ["reference_images", "resolution", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProEditVideoNode", "display_name": "Kling 3.0 Omni Edit Video", "description": "Edit an existing video with the latest model from Kling.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $mode := (widgets.resolution = \"720p\") ? \"std\" : \"pro\";\n $rates := {\"std\": 0.126, \"pro\": 0.168};\n {\"type\":\"usd\",\"usd\": $lookup($rates, $mode), \"format\":{\"suffix\":\"/second\"}}\n )\n "}, "search_aliases": null, "essentials_category": "Video Generation", "has_intermediate_output": false}, "KlingOmniProImageNode": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v3-omni", "kling-image-o1"]}], "prompt": ["STRING", {"tooltip": "A text prompt describing the image content. This can include both positive and negative descriptions.", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["1K", "2K", "4K"]}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4", "3:2", "2:3", "21:9"]}], "series_amount": ["COMBO", {"tooltip": "Generate a series of images. Not supported for kling-image-o1.", "multiselect": false, "options": ["disabled", "2", "3", "4", "5", "6", "7", "8", "9"]}]}, "optional": {"reference_images": ["IMAGE", {"tooltip": "Up to 10 additional reference images."}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "prompt", "resolution", "aspect_ratio", "series_amount"], "optional": ["reference_images", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingOmniProImageNode", "display_name": "Kling 3.0 Omni Image", "description": "Create or edit images with the latest model from Kling.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/image/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}, {"name": "series_amount", "type": "COMBO"}, {"name": "model_name", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\"1k\": 0.028, \"2k\": 0.028, \"4k\": 0.056};\n $base := $lookup($prices, widgets.resolution);\n $isO1 := widgets.model_name = \"kling-image-o1\";\n $mult := ($isO1 or widgets.series_amount = \"disabled\") ? 1 : $number(widgets.series_amount);\n {\"type\":\"usd\",\"usd\": $base * $mult}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingTextToVideoWithAudio": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v2-6"]}], "prompt": ["STRING", {"tooltip": "Positive text prompt.", "multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["pro"]}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "duration": ["COMBO", {"multiselect": false, "options": [5, 10]}], "generate_audio": ["BOOLEAN", {"advanced": true, "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "prompt", "mode", "aspect_ratio", "duration", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingTextToVideoWithAudio", "display_name": "Kling 2.6 Text to Video with Audio", "description": "", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.07 * widgets.duration * (widgets.generate_audio ? 2 : 1)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingImageToVideoWithAudio": {"input": {"required": {"model_name": ["COMBO", {"multiselect": false, "options": ["kling-v2-6"]}], "start_frame": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Positive text prompt.", "multiline": true}], "mode": ["COMBO", {"multiselect": false, "options": ["pro"]}], "duration": ["COMBO", {"multiselect": false, "options": [5, 10]}], "generate_audio": ["BOOLEAN", {"advanced": true, "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_name", "start_frame", "prompt", "mode", "duration", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingImageToVideoWithAudio", "display_name": "Kling 2.6 Image(First Frame) to Video with Audio", "description": "", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.07 * widgets.duration * (widgets.generate_audio ? 2 : 1)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingMotionControl": {"input": {"required": {"prompt": ["STRING", {"multiline": true}], "reference_image": ["IMAGE", {}], "reference_video": ["VIDEO", {"tooltip": "Motion reference video used to drive movement/expression.\nDuration limits depend on character_orientation:\n - image: 3\u201310s (max 10s)\n - video: 3\u201330s (max 30s)"}], "keep_original_sound": ["BOOLEAN", {"default": true}], "character_orientation": ["COMBO", {"tooltip": "Controls where the character's facing/orientation comes from.\nvideo: movements, expressions, camera moves, and orientation follow the motion reference video (other details via prompt).\nimage: movements and expressions still follow the motion reference video, but the character orientation matches the reference image (camera/other details via prompt).", "multiselect": false, "options": ["video", "image"]}], "mode": ["COMBO", {"multiselect": false, "options": ["pro", "std"]}]}, "optional": {"model": ["COMBO", {"multiselect": false, "options": ["kling-v3", "kling-v2-6"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "reference_image", "reference_video", "keep_original_sound", "character_orientation", "mode"], "optional": ["model"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingMotionControl", "display_name": "Kling Motion Control", "description": "", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}, {"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"kling-v3\": {\"std\": 0.126, \"pro\": 0.168},\n \"kling-v2-6\": {\"std\": 0.07, \"pro\": 0.112}\n };\n $modelPrices := $lookup($prices, widgets.model);\n {\"type\":\"usd\",\"usd\": $lookup($modelPrices, widgets.mode), \"format\":{\"suffix\":\"/second\"}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingVideoNode": {"input": {"required": {"multi_shot": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generate a series of video segments with individual prompts and durations.", "options": [{"key": "disabled", "inputs": {"required": {"prompt": ["STRING", {"default": "", "multiline": true}], "negative_prompt": ["STRING", {"default": "", "multiline": true}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "display": "slider"}]}}}, {"key": "1 storyboard", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "2 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "3 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "4 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "5 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}, {"key": "6 storyboards", "inputs": {"required": {"storyboard_1_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 1. Max 512 characters.", "default": "", "multiline": true}], "storyboard_1_duration": ["INT", {"tooltip": "Duration for storyboard segment 1 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_2_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 2. Max 512 characters.", "default": "", "multiline": true}], "storyboard_2_duration": ["INT", {"tooltip": "Duration for storyboard segment 2 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_3_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 3. Max 512 characters.", "default": "", "multiline": true}], "storyboard_3_duration": ["INT", {"tooltip": "Duration for storyboard segment 3 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_4_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 4. Max 512 characters.", "default": "", "multiline": true}], "storyboard_4_duration": ["INT", {"tooltip": "Duration for storyboard segment 4 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_5_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 5. Max 512 characters.", "default": "", "multiline": true}], "storyboard_5_duration": ["INT", {"tooltip": "Duration for storyboard segment 5 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}], "storyboard_6_prompt": ["STRING", {"tooltip": "Prompt for storyboard segment 6. Max 512 characters.", "default": "", "multiline": true}], "storyboard_6_duration": ["INT", {"tooltip": "Duration for storyboard segment 6 in seconds.", "default": 4, "min": 1, "max": 15, "display": "slider"}]}}}]}], "generate_audio": ["BOOLEAN", {"tooltip": "'kling-3.0-turbo' always generates native audio, so the audio toggle is ignored.", "default": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model and generation settings.", "options": [{"key": "kling-v3", "inputs": {"required": {"resolution": ["COMBO", {"default": "1080p", "multiselect": false, "options": ["4k", "1080p", "720p"]}], "aspect_ratio": ["COMBO", {"tooltip": "Ignored in image-to-video mode.", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}]}}}, {"key": "kling-3.0-turbo", "inputs": {"required": {"resolution": ["COMBO", {"default": "720p", "multiselect": false, "options": ["1080p", "720p"]}], "aspect_ratio": ["COMBO", {"tooltip": "Ignored in image-to-video mode.", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "optional": {"start_frame": ["IMAGE", {"tooltip": "Optional start frame image. When connected, switches to image-to-video mode."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["multi_shot", "generate_audio", "model", "seed"], "optional": ["start_frame"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingVideoNode", "display_name": "Kling 3.0 Video", "description": "Generate videos with Kling V3. Supports text-to-video and image-to-video with optional storyboard multi-prompt and audio generation.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}, {"name": "multi_shot", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "multi_shot.duration", "type": "INT"}, {"name": "multi_shot.storyboard_1_duration", "type": "INT"}, {"name": "multi_shot.storyboard_2_duration", "type": "INT"}, {"name": "multi_shot.storyboard_3_duration", "type": "INT"}, {"name": "multi_shot.storyboard_4_duration", "type": "INT"}, {"name": "multi_shot.storyboard_5_duration", "type": "INT"}, {"name": "multi_shot.storyboard_6_duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $ms := widgets.multi_shot;\n $isSb := $ms != \"disabled\";\n $n := $isSb ? $number($substring($ms, 0, 1)) : 0;\n $d1 := $lookup(widgets, \"multi_shot.storyboard_1_duration\");\n $d2 := $n >= 2 ? $lookup(widgets, \"multi_shot.storyboard_2_duration\") : 0;\n $d3 := $n >= 3 ? $lookup(widgets, \"multi_shot.storyboard_3_duration\") : 0;\n $d4 := $n >= 4 ? $lookup(widgets, \"multi_shot.storyboard_4_duration\") : 0;\n $d5 := $n >= 5 ? $lookup(widgets, \"multi_shot.storyboard_5_duration\") : 0;\n $d6 := $n >= 6 ? $lookup(widgets, \"multi_shot.storyboard_6_duration\") : 0;\n $dur := $isSb ? $d1 + $d2 + $d3 + $d4 + $d5 + $d6 : $lookup(widgets, \"multi_shot.duration\");\n widgets.model = \"kling-3.0-turbo\"\n ? {\"type\":\"usd\",\"usd\": ($res = \"1080p\" ? 0.14 : 0.112) * $dur}\n : (\n $rates := {\n \"4k\": {\"off\": 0.42, \"on\": 0.42},\n \"1080p\": {\"off\": 0.112, \"on\": 0.168},\n \"720p\": {\"off\": 0.084, \"on\": 0.126}\n };\n $audio := widgets.generate_audio ? \"on\" : \"off\";\n $rate := $lookup($lookup($rates, $res), $audio);\n {\"type\":\"usd\",\"usd\": $rate * $dur}\n )\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingFirstLastFrameNode": {"input": {"required": {"prompt": ["STRING", {"default": "", "multiline": true}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "display": "slider"}], "first_frame": ["IMAGE", {}], "end_frame": ["IMAGE", {}], "generate_audio": ["BOOLEAN", {"default": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model and generation settings.", "options": [{"key": "kling-v3", "inputs": {"required": {"resolution": ["COMBO", {"default": "1080p", "multiselect": false, "options": ["4k", "1080p", "720p"]}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "duration", "first_frame", "end_frame", "generate_audio", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingFirstLastFrameNode", "display_name": "Kling 3.0 First-Last-Frame to Video", "description": "Generate videos with Kling V3 using first and last frames.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model.resolution", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}, {"name": "duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rates := {\n \"4k\": {\"off\": 0.42, \"on\": 0.42},\n \"1080p\": {\"off\": 0.112, \"on\": 0.168},\n \"720p\": {\"off\": 0.084, \"on\": 0.126}\n };\n $res := $lookup(widgets, \"model.resolution\");\n $audio := widgets.generate_audio ? \"on\" : \"off\";\n $rate := $lookup($lookup($rates, $res), $audio);\n {\"type\":\"usd\",\"usd\": $rate * widgets.duration}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "KlingAvatarNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Avatar reference image. Width and height must be at least 300px. Aspect ratio must be between 1:2.5 and 2.5:1."}], "sound_file": ["AUDIO", {"tooltip": "Audio input. Must be between 2 and 300 seconds in duration."}], "mode": ["COMBO", {"multiselect": false, "options": ["std", "pro"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "optional": {"prompt": ["STRING", {"tooltip": "Optional prompt to define avatar actions, emotions, and camera movements.", "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "sound_file", "mode", "seed"], "optional": ["prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "KlingAvatarNode", "display_name": "Kling Avatar 2.0", "description": "Generate broadcast-style digital human videos from a single photo and an audio file.", "python_module": "comfy_api_nodes.nodes_kling", "category": "partner/video/Kling", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\"std\": 0.056, \"pro\": 0.112};\n {\"type\":\"usd\",\"usd\": $lookup($prices, widgets.mode), \"format\":{\"suffix\":\"/second\"}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Krea2ImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the image.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Krea 2 Medium is best for expressive illustrations; Krea 2 Large is best for expressive photorealism.", "options": [{"key": "Krea 2 Medium", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Output aspect ratio.", "multiselect": false, "options": ["1:1", "4:3", "3:2", "16:9", "2.35:1", "4:5", "2:3", "9:16"]}], "resolution": ["COMBO", {"tooltip": "Resolution scale.", "multiselect": false, "options": ["1K"]}], "creativity": ["COMBO", {"tooltip": "Prompt interpretation strength: raw stays closest to the prompt; high is most creative.", "default": "medium", "multiselect": false, "options": ["raw", "low", "medium", "high"]}]}, "optional": {"moodboard_id": ["STRING", {"tooltip": "Optional Krea moodboard UUID (e.g. from the Krea website). Leave empty to disable. Only one moodboard is supported per request.", "default": "", "multiline": false}], "moodboard_strength": ["FLOAT", {"tooltip": "Moodboard influence; ignored when moodboard_id is empty.", "default": 0.35, "min": -0.5, "max": 1.5, "step": 0.05}], "style_reference": ["KREA_STYLE_REF", {"tooltip": "Optional chain of style references (max 10) from Krea 2 Style Reference nodes."}]}}}, {"key": "Krea 2 Medium Turbo", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Output aspect ratio.", "multiselect": false, "options": ["1:1", "4:3", "3:2", "16:9", "2.35:1", "4:5", "2:3", "9:16"]}], "resolution": ["COMBO", {"tooltip": "Resolution scale.", "multiselect": false, "options": ["1K"]}], "creativity": ["COMBO", {"tooltip": "Prompt interpretation strength: raw stays closest to the prompt; high is most creative.", "default": "medium", "multiselect": false, "options": ["raw", "low", "medium", "high"]}]}, "optional": {"moodboard_id": ["STRING", {"tooltip": "Optional Krea moodboard UUID (e.g. from the Krea website). Leave empty to disable. Only one moodboard is supported per request.", "default": "", "multiline": false}], "moodboard_strength": ["FLOAT", {"tooltip": "Moodboard influence; ignored when moodboard_id is empty.", "default": 0.35, "min": -0.5, "max": 1.5, "step": 0.05}], "style_reference": ["KREA_STYLE_REF", {"tooltip": "Optional chain of style references (max 10) from Krea 2 Style Reference nodes."}]}}}, {"key": "Krea 2 Large", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Output aspect ratio.", "multiselect": false, "options": ["1:1", "4:3", "3:2", "16:9", "2.35:1", "4:5", "2:3", "9:16"]}], "resolution": ["COMBO", {"tooltip": "Resolution scale.", "multiselect": false, "options": ["1K"]}], "creativity": ["COMBO", {"tooltip": "Prompt interpretation strength: raw stays closest to the prompt; high is most creative.", "default": "medium", "multiselect": false, "options": ["raw", "low", "medium", "high"]}]}, "optional": {"moodboard_id": ["STRING", {"tooltip": "Optional Krea moodboard UUID (e.g. from the Krea website). Leave empty to disable. Only one moodboard is supported per request.", "default": "", "multiline": false}], "moodboard_strength": ["FLOAT", {"tooltip": "Moodboard influence; ignored when moodboard_id is empty.", "default": 0.35, "min": -0.5, "max": 1.5, "step": 0.05}], "style_reference": ["KREA_STYLE_REF", {"tooltip": "Optional chain of style references (max 10) from Krea 2 Style Reference nodes."}]}}}]}], "seed": ["INT", {"tooltip": "Random seed for reproducibility.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "Krea2ImageNode", "display_name": "Krea 2 Image", "description": "Generate images via Krea 2 \u2014 pick Medium (expressive illustrations) or Large (expressive photorealism). Supports an optional moodboard and up to 10 chained image style references.", "python_module": "comfy_api_nodes.nodes_krea", "category": "partner/image/Krea", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.moodboard_id", "type": "STRING"}], "inputs": ["model.style_reference"], "input_groups": []}, "expr": "\n (\n $rates := {\n \"krea 2 medium turbo\": {\"text\": 0.015, \"style\": 0.0175, \"moodboard\": 0.02},\n \"krea 2 medium\": {\"text\": 0.03, \"style\": 0.035, \"moodboard\": 0.04},\n \"krea 2 large\": {\"text\": 0.06, \"style\": 0.065, \"moodboard\": 0.07}\n };\n $r := $lookup($rates, widgets.model);\n $hasMoodboard := $length($lookup(widgets, \"model.moodboard_id\")) > 0;\n $hasStyle := $lookup(inputs, \"model.style_reference\").connected;\n $usd := $hasMoodboard ? $r.moodboard : ($hasStyle ? $r.style : $r.text);\n {\"type\":\"usd\",\"usd\": $usd}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Krea2StyleReferenceNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Reference image whose style influences the generation."}], "strength": ["FLOAT", {"tooltip": "Reference strength; negative values invert the style influence.", "default": 1.0, "min": -2.0, "max": 2.0, "step": 0.05}]}, "optional": {"style_reference": ["KREA_STYLE_REF", {"tooltip": "Optional incoming chain of style references; this node appends one more."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"]}}, "input_order": {"required": ["image", "strength"], "optional": ["style_reference"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id"]}, "is_input_list": false, "output": ["KREA_STYLE_REF"], "output_is_list": [false], "output_name": ["style_reference"], "output_tooltips": [null], "output_matchtypes": null, "name": "Krea2StyleReferenceNode", "display_name": "Krea 2 Style Reference", "description": "Add an image style reference to a Krea 2 generation. Chain multiple Krea 2 Style Reference nodes (max 10) and feed the final `style_reference` output into Krea 2 Image. Each image is uploaded to ComfyAPI storage and passed as URL.", "python_module": "comfy_api_nodes.nodes_krea", "category": "partner/image/Krea", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LtxvApiTextToVideo": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["LTX-2 (Pro)", "LTX-2 (Fast)"]}], "prompt": ["STRING", {"default": "", "multiline": true}], "duration": ["COMBO", {"default": 8, "multiselect": false, "options": [6, 8, 10, 12, 14, 16, 18, 20]}], "resolution": ["COMBO", {"multiselect": false, "options": ["1920x1080", "2560x1440", "3840x2160"]}], "fps": ["COMBO", {"default": 25, "multiselect": false, "options": [25, 50]}]}, "optional": {"generate_audio": ["BOOLEAN", {"tooltip": "When true, the generated video will include AI-generated audio matching the scene.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "duration", "resolution", "fps"], "optional": ["generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LtxvApiTextToVideo", "display_name": "LTXV Text To Video", "description": "Professional-quality videos with customizable duration and resolution.", "python_module": "comfy_api_nodes.nodes_ltxv", "category": "partner/video/LTXV", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"ltx-2 (pro)\": {\"1920x1080\":0.06,\"2560x1440\":0.12,\"3840x2160\":0.24},\n \"ltx-2 (fast)\": {\"1920x1080\":0.04,\"2560x1440\":0.08,\"3840x2160\":0.16}\n };\n $modelPrices := $lookup($prices, $lowercase(widgets.model));\n $pps := $lookup($modelPrices, widgets.resolution);\n {\"type\":\"usd\",\"usd\": $pps * widgets.duration}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LtxvApiImageToVideo": {"input": {"required": {"image": ["IMAGE", {"tooltip": "First frame to be used for the video."}], "model": ["COMBO", {"multiselect": false, "options": ["LTX-2 (Pro)", "LTX-2 (Fast)"]}], "prompt": ["STRING", {"default": "", "multiline": true}], "duration": ["COMBO", {"default": 8, "multiselect": false, "options": [6, 8, 10, 12, 14, 16, 18, 20]}], "resolution": ["COMBO", {"multiselect": false, "options": ["1920x1080", "2560x1440", "3840x2160"]}], "fps": ["COMBO", {"default": 25, "multiselect": false, "options": [25, 50]}]}, "optional": {"generate_audio": ["BOOLEAN", {"tooltip": "When true, the generated video will include AI-generated audio matching the scene.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "model", "prompt", "duration", "resolution", "fps"], "optional": ["generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LtxvApiImageToVideo", "display_name": "LTXV Image To Video", "description": "Professional-quality videos with customizable duration and resolution based on start image.", "python_module": "comfy_api_nodes.nodes_ltxv", "category": "partner/video/LTXV", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"ltx-2 (pro)\": {\"1920x1080\":0.06,\"2560x1440\":0.12,\"3840x2160\":0.24},\n \"ltx-2 (fast)\": {\"1920x1080\":0.04,\"2560x1440\":0.08,\"3840x2160\":0.16}\n };\n $modelPrices := $lookup($prices, $lowercase(widgets.model));\n $pps := $lookup($modelPrices, widgets.resolution);\n {\"type\":\"usd\",\"usd\": $pps * widgets.duration}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["photon-1", "photon-flash-1"]}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["1:1", "16:9", "9:16", "4:3", "3:4", "21:9", "9:21"]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "style_image_weight": ["FLOAT", {"tooltip": "Weight of style image. Ignored if no style_image provided.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}, "optional": {"image_luma_ref": ["LUMA_REF", {"tooltip": "Luma Reference node connection to influence generation with input images; up to 4 images can be considered."}], "style_image": ["IMAGE", {"tooltip": "Style reference image; only 1 image will be used."}], "character_image": ["IMAGE", {"tooltip": "Character reference images; can be a batch of multiple, up to 4 images can be considered."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "aspect_ratio", "seed", "style_image_weight"], "optional": ["image_luma_ref", "style_image", "character_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaImageNode", "display_name": "Luma Text to Image", "description": "Generates images synchronously based on prompt and aspect ratio.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/image/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $contains($m,\"photon-flash-1\")\n ? {\"type\":\"usd\",\"usd\":0.0027}\n : $contains($m,\"photon-1\")\n ? {\"type\":\"usd\",\"usd\":0.0104}\n : {\"type\":\"usd\",\"usd\":0.0246}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaImageModifyNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation", "default": "", "multiline": true}], "image_weight": ["FLOAT", {"tooltip": "Weight of the image; the closer to 1.0, the less the image will be modified.", "default": 0.1, "min": 0.0, "max": 0.98, "step": 0.01}], "model": ["COMBO", {"multiselect": false, "options": ["photon-1", "photon-flash-1"]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "image_weight", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaImageModifyNode", "display_name": "Luma Image to Image", "description": "Modifies images synchronously based on prompt and aspect ratio.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/image/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $contains($m,\"photon-flash-1\")\n ? {\"type\":\"usd\",\"usd\":0.0027}\n : $contains($m,\"photon-1\")\n ? {\"type\":\"usd\",\"usd\":0.0104}\n : {\"type\":\"usd\",\"usd\":0.0246}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the video generation", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["ray-2", "ray-flash-2", "ray-1-6"]}], "aspect_ratio": ["COMBO", {"default": "16:9", "multiselect": false, "options": ["1:1", "16:9", "9:16", "4:3", "3:4", "21:9", "9:21"]}], "resolution": ["COMBO", {"default": "540p", "multiselect": false, "options": ["540p", "720p", "1080p", "4k"]}], "duration": ["COMBO", {"multiselect": false, "options": ["5s", "9s"]}], "loop": ["BOOLEAN", {"default": false}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"luma_concepts": ["LUMA_CONCEPTS", {"tooltip": "Optional Camera Concepts to dictate camera motion via the Luma Concepts node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "aspect_ratio", "resolution", "duration", "loop", "seed"], "optional": ["luma_concepts"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaVideoNode", "display_name": "Luma Text to Video", "description": "Generates videos synchronously based on prompt and output_size.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\n \"ray-flash-2\": {\n \"5s\": {\"4k\":3.13,\"1080p\":0.79,\"720p\":0.34,\"540p\":0.2},\n \"9s\": {\"4k\":5.65,\"1080p\":1.42,\"720p\":0.61,\"540p\":0.36}\n },\n \"ray-2\": {\n \"5s\": {\"4k\":9.11,\"1080p\":2.27,\"720p\":1.02,\"540p\":0.57},\n \"9s\": {\"4k\":16.4,\"1080p\":4.1,\"720p\":1.83,\"540p\":1.03}\n }\n };\n\n $m := widgets.model;\n $d := widgets.duration;\n $r := widgets.resolution;\n\n $modelKey :=\n $contains($m,\"ray-flash-2\") ? \"ray-flash-2\" :\n $contains($m,\"ray-2\") ? \"ray-2\" :\n $contains($m,\"ray-1-6\") ? \"ray-1-6\" :\n \"other\";\n\n $durKey := $contains($d,\"5s\") ? \"5s\" : $contains($d,\"9s\") ? \"9s\" : \"\";\n $resKey :=\n $contains($r,\"4k\") ? \"4k\" :\n $contains($r,\"1080p\") ? \"1080p\" :\n $contains($r,\"720p\") ? \"720p\" :\n $contains($r,\"540p\") ? \"540p\" : \"\";\n\n $modelPrices := $lookup($p, $modelKey);\n $durPrices := $lookup($modelPrices, $durKey);\n $v := $lookup($durPrices, $resKey);\n\n $price :=\n ($modelKey = \"ray-1-6\") ? 0.5 :\n ($modelKey = \"other\") ? 0.79 :\n ($exists($v) ? $v : 0.79);\n\n {\"type\":\"usd\",\"usd\": $price}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaImageToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the video generation", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["ray-2", "ray-flash-2", "ray-1-6"]}], "resolution": ["COMBO", {"default": "540p", "multiselect": false, "options": ["540p", "720p", "1080p", "4k"]}], "duration": ["COMBO", {"multiselect": false, "options": ["5s", "9s"]}], "loop": ["BOOLEAN", {"default": false}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"first_image": ["IMAGE", {"tooltip": "First frame of generated video."}], "last_image": ["IMAGE", {"tooltip": "Last frame of generated video."}], "luma_concepts": ["LUMA_CONCEPTS", {"tooltip": "Optional Camera Concepts to dictate camera motion via the Luma Concepts node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "resolution", "duration", "loop", "seed"], "optional": ["first_image", "last_image", "luma_concepts"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaImageToVideoNode", "display_name": "Luma Image to Video", "description": "Generates videos synchronously based on prompt, input images, and output_size.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\n \"ray-flash-2\": {\n \"5s\": {\"4k\":3.13,\"1080p\":0.79,\"720p\":0.34,\"540p\":0.2},\n \"9s\": {\"4k\":5.65,\"1080p\":1.42,\"720p\":0.61,\"540p\":0.36}\n },\n \"ray-2\": {\n \"5s\": {\"4k\":9.11,\"1080p\":2.27,\"720p\":1.02,\"540p\":0.57},\n \"9s\": {\"4k\":16.4,\"1080p\":4.1,\"720p\":1.83,\"540p\":1.03}\n }\n };\n\n $m := widgets.model;\n $d := widgets.duration;\n $r := widgets.resolution;\n\n $modelKey :=\n $contains($m,\"ray-flash-2\") ? \"ray-flash-2\" :\n $contains($m,\"ray-2\") ? \"ray-2\" :\n $contains($m,\"ray-1-6\") ? \"ray-1-6\" :\n \"other\";\n\n $durKey := $contains($d,\"5s\") ? \"5s\" : $contains($d,\"9s\") ? \"9s\" : \"\";\n $resKey :=\n $contains($r,\"4k\") ? \"4k\" :\n $contains($r,\"1080p\") ? \"1080p\" :\n $contains($r,\"720p\") ? \"720p\" :\n $contains($r,\"540p\") ? \"540p\" : \"\";\n\n $modelPrices := $lookup($p, $modelKey);\n $durPrices := $lookup($modelPrices, $durKey);\n $v := $lookup($durPrices, $resKey);\n\n $price :=\n ($modelKey = \"ray-1-6\") ? 0.5 :\n ($modelKey = \"other\") ? 0.79 :\n ($exists($v) ? $v : 0.79);\n\n {\"type\":\"usd\",\"usd\": $price}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaReferenceNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Image to use as reference."}], "weight": ["FLOAT", {"tooltip": "Weight of image reference.", "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}]}, "optional": {"luma_ref": ["LUMA_REF", {}]}}, "input_order": {"required": ["image", "weight"], "optional": ["luma_ref"]}, "is_input_list": false, "output": ["LUMA_REF"], "output_is_list": [false], "output_name": ["luma_ref"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaReferenceNode", "display_name": "Luma Reference", "description": "Holds an image and weight for use with Luma Generate Image node.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/image/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaConceptsNode": {"input": {"required": {"concept1": ["COMBO", {"multiselect": false, "options": ["None", "truck_left", "pan_right", "pedestal_down", "low_angle", "pedestal_up", "selfie", "pan_left", "roll_right", "zoom_in", "over_the_shoulder", "orbit_right", "orbit_left", "static", "tiny_planet", "high_angle", "bolt_cam", "dolly_zoom", "overhead", "zoom_out", "handheld", "roll_left", "pov", "aerial_drone", "push_in", "crane_down", "truck_right", "tilt_down", "elevator_doors", "tilt_up", "ground_level", "pull_out", "aerial", "crane_up", "eye_level"]}], "concept2": ["COMBO", {"multiselect": false, "options": ["None", "truck_left", "pan_right", "pedestal_down", "low_angle", "pedestal_up", "selfie", "pan_left", "roll_right", "zoom_in", "over_the_shoulder", "orbit_right", "orbit_left", "static", "tiny_planet", "high_angle", "bolt_cam", "dolly_zoom", "overhead", "zoom_out", "handheld", "roll_left", "pov", "aerial_drone", "push_in", "crane_down", "truck_right", "tilt_down", "elevator_doors", "tilt_up", "ground_level", "pull_out", "aerial", "crane_up", "eye_level"]}], "concept3": ["COMBO", {"multiselect": false, "options": ["None", "truck_left", "pan_right", "pedestal_down", "low_angle", "pedestal_up", "selfie", "pan_left", "roll_right", "zoom_in", "over_the_shoulder", "orbit_right", "orbit_left", "static", "tiny_planet", "high_angle", "bolt_cam", "dolly_zoom", "overhead", "zoom_out", "handheld", "roll_left", "pov", "aerial_drone", "push_in", "crane_down", "truck_right", "tilt_down", "elevator_doors", "tilt_up", "ground_level", "pull_out", "aerial", "crane_up", "eye_level"]}], "concept4": ["COMBO", {"multiselect": false, "options": ["None", "truck_left", "pan_right", "pedestal_down", "low_angle", "pedestal_up", "selfie", "pan_left", "roll_right", "zoom_in", "over_the_shoulder", "orbit_right", "orbit_left", "static", "tiny_planet", "high_angle", "bolt_cam", "dolly_zoom", "overhead", "zoom_out", "handheld", "roll_left", "pov", "aerial_drone", "push_in", "crane_down", "truck_right", "tilt_down", "elevator_doors", "tilt_up", "ground_level", "pull_out", "aerial", "crane_up", "eye_level"]}]}, "optional": {"luma_concepts": ["LUMA_CONCEPTS", {"tooltip": "Optional Camera Concepts to add to the ones chosen here."}]}}, "input_order": {"required": ["concept1", "concept2", "concept3", "concept4"], "optional": ["luma_concepts"]}, "is_input_list": false, "output": ["LUMA_CONCEPTS"], "output_is_list": [false], "output_name": ["luma_concepts"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaConceptsNode", "display_name": "Luma Concepts", "description": "Camera Concepts for use with Luma Text to Video and Luma Image to Video nodes.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaImageNode2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the desired image. 1\u20136000 characters.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for generation.", "options": [{"key": "uni-1", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Output image aspect ratio. 'auto' lets the model pick based on the prompt.", "default": "auto", "multiselect": false, "options": ["auto", "3:1", "2:1", "16:9", "3:2", "1:1", "2:3", "9:16", "1:2", "1:3"]}], "style": ["COMBO", {"tooltip": "Style preset. 'auto' picks based on the prompt; 'manga' applies a manga/anime aesthetic and requires a portrait aspect ratio (2:3, 9:16, 1:2, 1:3).", "default": "auto", "multiselect": false, "options": ["auto", "manga"]}], "web_search": ["BOOLEAN", {"tooltip": "Search the web for visual references before generating.", "default": false}]}, "optional": {"image_ref": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 9 reference images for style/content guidance.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9"], "min": 0}}]}}}, {"key": "uni-1-max", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Output image aspect ratio. 'auto' lets the model pick based on the prompt.", "default": "auto", "multiselect": false, "options": ["auto", "3:1", "2:1", "16:9", "3:2", "1:1", "2:3", "9:16", "1:2", "1:3"]}], "style": ["COMBO", {"tooltip": "Style preset. 'auto' picks based on the prompt; 'manga' applies a manga/anime aesthetic and requires a portrait aspect ratio (2:3, 9:16, 1:2, 1:3).", "default": "auto", "multiselect": false, "options": ["auto", "manga"]}], "web_search": ["BOOLEAN", {"tooltip": "Search the web for visual references before generating.", "default": false}]}, "optional": {"image_ref": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 9 reference images for style/content guidance.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9"], "min": 0}}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaImageNode2", "display_name": "Luma UNI-1 Image", "description": "Generate images from text using the Luma UNI-1 model.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/image/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": ["model.image_ref"]}, "expr": "\n (\n $m := widgets.model;\n $refs := $lookup(inputGroups, \"model.image_ref\");\n $base := $m = \"uni-1-max\" ? 0.1 : 0.0404;\n {\"type\":\"usd\",\"usd\": $round($base + 0.003 * $refs, 4)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaImageEditNode2": {"input": {"required": {"source": ["IMAGE", {"tooltip": "Source image to edit."}], "prompt": ["STRING", {"tooltip": "Description of the desired edit. 1\u20136000 characters.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for editing.", "options": [{"key": "uni-1", "inputs": {"required": {"style": ["COMBO", {"tooltip": "Style preset. 'auto' picks based on the prompt; 'manga' applies a manga/anime aesthetic and requires a portrait aspect ratio (2:3, 9:16, 1:2, 1:3).", "default": "auto", "multiselect": false, "options": ["auto", "manga"]}], "web_search": ["BOOLEAN", {"tooltip": "Search the web for visual references before generating.", "default": false}]}, "optional": {"image_ref": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 8 reference images for style/content guidance.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}, {"key": "uni-1-max", "inputs": {"required": {"style": ["COMBO", {"tooltip": "Style preset. 'auto' picks based on the prompt; 'manga' applies a manga/anime aesthetic and requires a portrait aspect ratio (2:3, 9:16, 1:2, 1:3).", "default": "auto", "multiselect": false, "options": ["auto", "manga"]}], "web_search": ["BOOLEAN", {"tooltip": "Search the web for visual references before generating.", "default": false}]}, "optional": {"image_ref": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 8 reference images for style/content guidance.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["source", "prompt", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaImageEditNode2", "display_name": "Luma UNI-1 Image Edit", "description": "Edit an existing image with a text prompt using the Luma UNI-1 model.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/image/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": ["model.image_ref"]}, "expr": "\n (\n $m := widgets.model;\n $refs := $lookup(inputGroups, \"model.image_ref\");\n $base := $m = \"uni-1-max\" ? 0.103 : 0.0434;\n {\"type\":\"usd\",\"usd\": $round($base + 0.003 * $refs, 4)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaRay32TextToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the video generation.", "default": "", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4", "21:9"]}], "resolution": ["COMBO", {"default": "720p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "duration": ["COMBO", {"multiselect": false, "options": ["5s", "10s"]}], "loop": ["BOOLEAN", {"tooltip": "Make the video loop seamlessly. Only available with 5s duration.", "default": false}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "aspect_ratio", "resolution", "duration", "loop", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING"], "output_is_list": [false, false], "output_name": ["VIDEO", "generation_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LumaRay32TextToVideoNode", "display_name": "Luma Ray 3.2 Text to Video", "description": "Generate a video from a text prompt using Luma's Ray 3.2 model.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\n \"360p\": {\"5s\": 0.06, \"10s\": 0.18},\n \"540p\": {\"5s\": 0.15, \"10s\": 0.45},\n \"720p\": {\"5s\": 0.3, \"10s\": 0.9},\n \"1080p\": {\"5s\": 1.2, \"10s\": 3.6}\n };\n {\"type\": \"usd\", \"usd\": $lookup($lookup($p, widgets.resolution), widgets.duration)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaRay32ImageToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"default": "720p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "loop": ["BOOLEAN", {"tooltip": "Make the video loop seamlessly. Not available when an end_frame is set.", "default": false}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"start_frame": ["IMAGE", {"tooltip": "First frame of the generated video."}], "end_frame": ["IMAGE", {"tooltip": "Last frame of the generated video."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "resolution", "loop", "seed"], "optional": ["start_frame", "end_frame"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING"], "output_is_list": [false, false], "output_name": ["VIDEO", "generation_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LumaRay32ImageToVideoNode", "display_name": "Luma Ray 3.2 Image to Video", "description": "Generate a video from a start and/or end frame using Luma's Ray 3.2 model. Image-anchored generations are always 5 seconds.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\"360p\": 0.06, \"540p\": 0.15, \"720p\": 0.3, \"1080p\": 1.2};\n {\"type\": \"usd\", \"usd\": $lookup($p, widgets.resolution)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaRay32KeyframeNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Guide image to place at the chosen moment of the output video."}], "position": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "How to place this image on the output video's timeline.", "options": [{"key": "Fraction of duration (0.0-1.0)", "inputs": {"required": {"fraction": ["FLOAT", {"tooltip": "Where in the output video this image applies (0.0 = start, 1.0 = end).", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01, "display": "number"}]}}}, {"key": "Absolute time (seconds)", "inputs": {"required": {"seconds": ["FLOAT", {"tooltip": "Time in seconds from the start of the output video where this image applies.", "default": 0.0, "min": 0.0, "max": 10.0, "step": 0.1, "display": "number"}]}}}]}]}, "optional": {"keyframes": ["LUMA_RAY32_KEYFRAME", {"tooltip": "Optional earlier keyframes to chain with this one."}]}}, "input_order": {"required": ["image", "position"], "optional": ["keyframes"]}, "is_input_list": false, "output": ["LUMA_RAY32_KEYFRAME"], "output_is_list": [false], "output_name": ["keyframes"], "output_tooltips": [null], "output_matchtypes": null, "name": "LumaRay32KeyframeNode", "display_name": "Luma Ray 3.2 Keyframe", "description": "Anchor a guide image to a position on the Ray 3.2 output video timeline. Connect this to the 'keyframes' input of the Luma Ray 3.2 Keyframes to Video node; chain several together via the optional 'keyframes' input below.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaRay32KeyframesToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the video generation.", "default": "", "multiline": true}], "resolution": ["COMBO", {"default": "720p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "duration": ["COMBO", {"multiselect": false, "options": ["5s", "10s"]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}], "keyframes": ["LUMA_RAY32_KEYFRAME", {"tooltip": "Keyframe sequence from Luma Ray 3.2 Keyframe nodes (at least 2)."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "resolution", "duration", "seed", "keyframes"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING"], "output_is_list": [false, false], "output_name": ["VIDEO", "generation_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LumaRay32KeyframesToVideoNode", "display_name": "Luma Ray 3.2 Keyframes to Video", "description": "Generate a video that interpolates through a sequence of guide images, each anchored to a position on the timeline, using Luma Ray 3.2. Build the sequence with Luma Ray 3.2 Keyframe nodes (at least 2).", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\n \"360p\": {\"5s\": 0.06, \"10s\": 0.18},\n \"540p\": {\"5s\": 0.15, \"10s\": 0.45},\n \"720p\": {\"5s\": 0.3, \"10s\": 0.9},\n \"1080p\": {\"5s\": 1.2, \"10s\": 3.6}\n };\n {\"type\": \"usd\", \"usd\": $lookup($lookup($p, widgets.resolution), widgets.duration)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaRay32VideoEditNode": {"input": {"required": {"video": ["VIDEO", {"tooltip": "Source video to edit. Up to 18 seconds."}], "prompt": ["STRING", {"tooltip": "Describes the desired edit.", "default": "", "multiline": true}], "resolution": ["COMBO", {"default": "720p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "strength": ["COMBO", {"tooltip": "How strongly to preserve vs. reimagine the source. 'auto' lets Ray 3.2 choose; adhere_* preserves the most, flex_* is balanced, reimagine_* changes the most.", "default": "auto", "multiselect": false, "options": ["auto", "adhere_1", "adhere_2", "adhere_3", "flex_1", "flex_2", "flex_3", "reimagine_1", "reimagine_2", "reimagine_3"]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "prompt", "resolution", "strength", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING"], "output_is_list": [false, false], "output_name": ["VIDEO", "generation_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LumaRay32VideoEditNode", "display_name": "Luma Ray 3.2 Video Edit", "description": "Re-render an existing video under a new prompt using Luma Ray 3.2 (restyle, relight, add or remove elements) while keeping the original motion. Source video up to 18 seconds; the edited video keeps the source's length.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\n \"360p\": {\"min\": 0.54, \"max\": 1.08},\n \"540p\": {\"min\": 0.72, \"max\": 1.44},\n \"720p\": {\"min\": 1.08, \"max\": 2.16},\n \"1080p\": {\"min\": 2.16, \"max\": 4.32}\n };\n $r := $lookup($p, widgets.resolution);\n {\"type\": \"range_usd\", \"min_usd\": $r.min, \"max_usd\": $r.max, \"format\": {\"note\": \"(by source length)\"}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaRay32VideoReframeNode": {"input": {"required": {"video": ["VIDEO", {"tooltip": "Source video to reframe. Up to 30 seconds."}], "prompt": ["STRING", {"tooltip": "Describes how the newly exposed canvas areas should be filled.", "default": "", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4", "21:9"]}], "resolution": ["COMBO", {"default": "720p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "prompt", "aspect_ratio", "resolution", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING"], "output_is_list": [false, false], "output_name": ["VIDEO", "generation_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LumaRay32VideoReframeNode", "display_name": "Luma Ray 3.2 Video Reframe", "description": "Change the aspect ratio of an existing video, using Luma Ray 3.2 to fill the newly exposed canvas areas. Source video up to 30 seconds. Billed per second of output.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\"360p\": 0.03, \"540p\": 0.06, \"720p\": 0.12, \"1080p\": 0.36};\n {\"type\": \"usd\", \"usd\": $lookup($p, widgets.resolution), \"format\": {\"suffix\": \"/second\"}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "LumaRay32ExtendVideoNode": {"input": {"required": {"source_generation_id": ["STRING", {"tooltip": "generation_id of the prior Ray 3.2 video to extend. Connect the generation_id output of another Luma Ray 3.2 node.", "default": "", "multiline": false}], "direction": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Forward continues after the prior clip; backward is prepended before it.", "options": [{"key": "Forward (continue after)", "inputs": {"required": {"loop": ["BOOLEAN", {"tooltip": "Loop the extended video seamlessly (forward extend only).", "default": false}]}}}, {"key": "Backward (lead-in before)", "inputs": {"required": {}}}]}], "prompt": ["STRING", {"tooltip": "Text prompt for the new content.", "default": "", "multiline": true}], "resolution": ["COMBO", {"default": "720p", "multiselect": false, "options": ["540p", "720p", "1080p"]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["source_generation_id", "direction", "prompt", "resolution", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO", "STRING"], "output_is_list": [false, false], "output_name": ["VIDEO", "generation_id"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "LumaRay32ExtendVideoNode", "display_name": "Luma Ray 3.2 Extend Video", "description": "Extend a previous Ray 3.2 generation forward (continue after it) or backward (lead-in before it). Connect the generation_id output of a prior Luma Ray 3.2 node. Extensions are always 5 seconds.", "python_module": "comfy_api_nodes.nodes_luma", "category": "partner/video/Luma", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $p := {\"360p\": 0.06, \"540p\": 0.15, \"720p\": 0.3, \"1080p\": 1.2};\n {\"type\": \"usd\", \"usd\": $lookup($p, widgets.resolution)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MagnificImageUpscalerCreativeNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"default": "", "multiline": true}], "scale_factor": ["COMBO", {"multiselect": false, "options": ["2x", "4x", "8x", "16x"]}], "optimized_for": ["COMBO", {"multiselect": false, "options": ["standard", "soft_portraits", "hard_portraits", "art_n_illustration", "videogame_assets", "nature_n_landscapes", "films_n_photography", "3d_renders", "science_fiction_n_horror"]}], "creativity": ["INT", {"default": 0, "min": -10, "max": 10, "display": "slider"}], "hdr": ["INT", {"tooltip": "The level of definition and detail.", "default": 0, "min": -10, "max": 10, "display": "slider"}], "resemblance": ["INT", {"tooltip": "The level of resemblance to the original image.", "default": 0, "min": -10, "max": 10, "display": "slider"}], "fractality": ["INT", {"tooltip": "The strength of the prompt and intricacy per square pixel.", "default": 0, "min": -10, "max": 10, "display": "slider"}], "engine": ["COMBO", {"advanced": true, "multiselect": false, "options": ["automatic", "magnific_illusio", "magnific_sharpy", "magnific_sparkle"]}], "auto_downscale": ["BOOLEAN", {"tooltip": "Automatically downscale input image if output would exceed maximum pixel limit.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "scale_factor", "optimized_for", "creativity", "hdr", "resemblance", "fractality", "engine", "auto_downscale"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MagnificImageUpscalerCreativeNode", "display_name": "Magnific Image Upscale (Creative)", "description": "Prompt\u2011guided enhancement, stylization, and 2x/4x/8x/16x upscaling. Maximum output: 25.3 megapixels.", "python_module": "comfy_api_nodes.nodes_magnific", "category": "partner/image/Magnific", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "scale_factor", "type": "COMBO"}, {"name": "auto_downscale", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $ad := widgets.auto_downscale;\n $mins := $ad\n ? {\"2x\": 0.172, \"4x\": 0.343, \"8x\": 0.515, \"16x\": 0.515}\n : {\"2x\": 0.172, \"4x\": 0.343, \"8x\": 0.515, \"16x\": 0.844};\n $maxs := {\"2x\": 0.515, \"4x\": 0.844, \"8x\": 1.015, \"16x\": 1.187};\n {\n \"type\": \"range_usd\",\n \"min_usd\": $lookup($mins, widgets.scale_factor),\n \"max_usd\": $lookup($maxs, widgets.scale_factor),\n \"format\": { \"approximate\": true }\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MagnificImageUpscalerPreciseV2Node": {"input": {"required": {"image": ["IMAGE", {}], "scale_factor": ["COMBO", {"multiselect": false, "options": ["2x", "4x", "8x", "16x"]}], "flavor": ["COMBO", {"tooltip": "Processing style: sublime for general use, photo for photographs, photo_denoiser for noisy photos.", "multiselect": false, "options": ["sublime", "photo", "photo_denoiser"]}], "sharpen": ["INT", {"tooltip": "Image sharpness intensity. Higher values increase edge definition and clarity.", "default": 7, "min": 0, "max": 100, "display": "slider"}], "smart_grain": ["INT", {"tooltip": "Intelligent grain/texture enhancement to prevent the image from looking too smooth or artificial.", "default": 7, "min": 0, "max": 100, "display": "slider"}], "ultra_detail": ["INT", {"tooltip": "Controls fine detail, textures, and micro-details added during upscaling.", "default": 30, "min": 0, "max": 100, "display": "slider"}], "auto_downscale": ["BOOLEAN", {"tooltip": "Automatically downscale input image if output would exceed maximum resolution.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "scale_factor", "flavor", "sharpen", "smart_grain", "ultra_detail", "auto_downscale"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MagnificImageUpscalerPreciseV2Node", "display_name": "Magnific Image Upscale (Precise V2)", "description": "High-fidelity upscaling with fine control over sharpness, grain, and detail. Maximum output: 10060\u00d710060 pixels.", "python_module": "comfy_api_nodes.nodes_magnific", "category": "partner/image/Magnific", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "scale_factor", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $mins := {\"2x\": 0.172, \"4x\": 0.343, \"8x\": 0.515, \"16x\": 0.844};\n $maxs := {\"2x\": 2.045, \"4x\": 2.545, \"8x\": 2.889, \"16x\": 3.06};\n {\n \"type\": \"range_usd\",\n \"min_usd\": $lookup($mins, widgets.scale_factor),\n \"max_usd\": $lookup($maxs, widgets.scale_factor),\n \"format\": { \"approximate\": true }\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MagnificImageStyleTransferNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "The image to apply style transfer to."}], "reference_image": ["IMAGE", {"tooltip": "The reference image to extract style from."}], "prompt": ["STRING", {"default": "", "multiline": true}], "style_strength": ["INT", {"tooltip": "Percentage of style strength.", "default": 100, "min": 0, "max": 100, "display": "slider"}], "structure_strength": ["INT", {"tooltip": "Maintains the structure of the original image.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "flavor": ["COMBO", {"tooltip": "Style transfer flavor.", "multiselect": false, "options": ["faithful", "gen_z", "psychedelia", "detaily", "clear", "donotstyle", "donotstyle_sharp"]}], "engine": ["COMBO", {"tooltip": "Processing engine selection.", "advanced": true, "multiselect": false, "options": ["balanced", "definio", "illusio", "3d_cartoon", "colorful_anime", "caricature", "real", "super_real", "softy"]}], "portrait_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Enable portrait mode for facial enhancements.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "enabled", "inputs": {"required": {"portrait_style": ["COMBO", {"tooltip": "Visual style applied to portrait images.", "multiselect": false, "options": ["standard", "pop", "super_pop"]}], "portrait_beautifier": ["COMBO", {"tooltip": "Facial beautification intensity on portraits.", "multiselect": false, "options": ["none", "beautify_face", "beautify_face_max"]}]}}}]}], "fixed_generation": ["BOOLEAN", {"tooltip": "When disabled, expect each generation to introduce a degree of randomness, leading to more diverse outcomes.", "advanced": true, "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "reference_image", "prompt", "style_strength", "structure_strength", "flavor", "engine", "portrait_mode", "fixed_generation"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MagnificImageStyleTransferNode", "display_name": "Magnific Image Style Transfer", "description": "Transfer the style from a reference image to your input image.", "python_module": "comfy_api_nodes.nodes_magnific", "category": "partner/image/Magnific", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.11}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MagnificImageRelightNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "The image to relight."}], "prompt": ["STRING", {"tooltip": "Descriptive guidance for lighting. Supports emphasis notation (1-1.4).", "default": "", "multiline": true}], "light_transfer_strength": ["INT", {"tooltip": "Intensity of light transfer application.", "default": 100, "min": 0, "max": 100, "display": "slider"}], "style": ["COMBO", {"tooltip": "Stylistic output preference.", "multiselect": false, "options": ["standard", "darker_but_realistic", "clean", "smooth", "brighter", "contrasted_n_hdr", "just_composition"]}], "interpolate_from_original": ["BOOLEAN", {"tooltip": "Restricts generation freedom to match original more closely.", "advanced": true, "default": false}], "change_background": ["BOOLEAN", {"tooltip": "Modifies background based on prompt/reference.", "advanced": true, "default": true}], "preserve_details": ["BOOLEAN", {"tooltip": "Maintains texture and fine details from original.", "advanced": true, "default": true}], "advanced_settings": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Fine-tuning options for advanced lighting control.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "enabled", "inputs": {"required": {"whites": ["INT", {"tooltip": "Adjusts the brightest tones in the image.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "blacks": ["INT", {"tooltip": "Adjusts the darkest tones in the image.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "brightness": ["INT", {"tooltip": "Overall brightness adjustment.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "contrast": ["INT", {"tooltip": "Contrast adjustment.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "saturation": ["INT", {"tooltip": "Color saturation adjustment.", "default": 50, "min": 0, "max": 100, "display": "slider"}], "engine": ["COMBO", {"tooltip": "Processing engine selection.", "multiselect": false, "options": ["automatic", "balanced", "cool", "real", "illusio", "fairy", "colorful_anime", "hard_transform", "softy"]}], "transfer_light_a": ["COMBO", {"tooltip": "The intensity of light transfer.", "multiselect": false, "options": ["automatic", "low", "medium", "normal", "high", "high_on_faces"]}], "transfer_light_b": ["COMBO", {"tooltip": "Also modifies light transfer intensity. Can be combined with the previous control for varied effects.", "multiselect": false, "options": ["automatic", "composition", "straight", "smooth_in", "smooth_out", "smooth_both", "reverse_both", "soft_in", "soft_out", "soft_mid", "style_shift", "strong_shift"]}], "fixed_generation": ["BOOLEAN", {"tooltip": "Ensures consistent output with the same settings.", "default": true}]}}}]}]}, "optional": {"reference_image": ["IMAGE", {"tooltip": "Optional reference image to transfer lighting from."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "light_transfer_strength", "style", "interpolate_from_original", "change_background", "preserve_details", "advanced_settings"], "optional": ["reference_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MagnificImageRelightNode", "display_name": "Magnific Image Relight", "description": "Relight an image with lighting adjustments and optional reference-based light transfer.", "python_module": "comfy_api_nodes.nodes_magnific", "category": "partner/image/Magnific", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.11}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MagnificImageSkinEnhancerNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "The portrait image to enhance."}], "sharpen": ["INT", {"tooltip": "Sharpening intensity level.", "default": 0, "min": 0, "max": 100, "display": "slider"}], "smart_grain": ["INT", {"tooltip": "Smart grain intensity level.", "default": 2, "min": 0, "max": 100, "display": "slider"}], "mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Processing mode: creative for artistic enhancement, faithful for preserving original appearance, flexible for targeted optimization.", "options": [{"key": "creative", "inputs": {"required": {}}}, {"key": "faithful", "inputs": {"required": {"skin_detail": ["INT", {"tooltip": "Skin detail enhancement level.", "default": 80, "min": 0, "max": 100, "display": "slider"}]}}}, {"key": "flexible", "inputs": {"required": {"optimized_for": ["COMBO", {"tooltip": "Enhancement optimization target.", "multiselect": false, "options": ["enhance_skin", "improve_lighting", "enhance_everything", "transform_to_real", "no_make_up"]}]}}}]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "sharpen", "smart_grain", "mode"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "MagnificImageSkinEnhancerNode", "display_name": "Magnific Image Skin Enhancer", "description": "Skin enhancement for portraits with multiple processing modes.", "python_module": "comfy_api_nodes.nodes_magnific", "category": "partner/image/Magnific", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rates := {\"creative\": 0.29, \"faithful\": 0.37, \"flexible\": 0.45};\n {\"type\":\"usd\",\"usd\": $lookup($rates, widgets.mode)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyTextToModelNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["latest"]}], "prompt": ["STRING", {"default": "", "multiline": true}], "style": ["COMBO", {"multiselect": false, "options": ["realistic", "sculpture"]}], "should_remesh": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "When set to false, returns an unprocessed triangular mesh.", "options": [{"key": "true", "inputs": {"required": {"topology": ["COMBO", {"multiselect": false, "options": ["triangle", "quad"]}], "target_polycount": ["INT", {"default": 300000, "min": 100, "max": 300000, "display": "number"}]}}}, {"key": "false", "inputs": {"required": {}}}]}], "symmetry_mode": ["COMBO", {"advanced": true, "multiselect": false, "options": ["auto", "on", "off"]}], "pose_mode": ["COMBO", {"tooltip": "Specify the pose mode for the generated model.", "advanced": true, "multiselect": false, "options": ["", "A-pose", "T-pose"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "prompt", "style", "should_remesh", "symmetry_mode", "pose_mode", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MESHY_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "meshy_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyTextToModelNode", "display_name": "Meshy: Text to Model", "description": "", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.8}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyRefineNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["latest"]}], "meshy_task_id": ["MESHY_TASK_ID", {}], "enable_pbr": ["BOOLEAN", {"tooltip": "Generate PBR Maps (metallic, roughness, normal) in addition to the base color. Note: this should be set to false when using Sculpture style, as Sculpture style generates its own set of PBR maps.", "advanced": true, "default": false}], "texture_prompt": ["STRING", {"tooltip": "Provide a text prompt to guide the texturing process. Maximum 600 characters. Cannot be used at the same time as 'texture_image'.", "default": "", "multiline": true}]}, "optional": {"texture_image": ["IMAGE", {"tooltip": "Only one of 'texture_image' or 'texture_prompt' may be used at the same time."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "meshy_task_id", "enable_pbr", "texture_prompt"], "optional": ["texture_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MESHY_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "meshy_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyRefineNode", "display_name": "Meshy: Refine Draft Model", "description": "Refine a previously created draft model.", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyImageToModelNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["latest"]}], "image": ["IMAGE", {}], "should_remesh": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "When set to false, returns an unprocessed triangular mesh.", "options": [{"key": "true", "inputs": {"required": {"topology": ["COMBO", {"multiselect": false, "options": ["triangle", "quad"]}], "target_polycount": ["INT", {"default": 300000, "min": 100, "max": 300000, "display": "number"}]}}}, {"key": "false", "inputs": {"required": {}}}]}], "symmetry_mode": ["COMBO", {"multiselect": false, "options": ["auto", "on", "off"]}], "should_texture": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Determines whether textures are generated. Setting it to false skips the texture phase and returns a mesh without textures.", "options": [{"key": "true", "inputs": {"required": {"enable_pbr": ["BOOLEAN", {"tooltip": "Generate PBR Maps (metallic, roughness, normal) in addition to the base color.", "default": false}], "texture_prompt": ["STRING", {"tooltip": "Provide a text prompt to guide the texturing process. Maximum 600 characters. Cannot be used at the same time as 'texture_image'.", "default": "", "multiline": true}]}, "optional": {"texture_image": ["IMAGE", {"tooltip": "Only one of 'texture_image' or 'texture_prompt' may be used at the same time."}]}}}, {"key": "false", "inputs": {"required": {}}}]}], "pose_mode": ["COMBO", {"tooltip": "Specify the pose mode for the generated model.", "advanced": true, "multiselect": false, "options": ["", "A-pose", "T-pose"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "image", "should_remesh", "symmetry_mode", "should_texture", "pose_mode", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MESHY_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "meshy_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyImageToModelNode", "display_name": "Meshy: Image to Model", "description": "", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "should_texture", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\"true\": 1.2, \"false\": 0.8};\n {\"type\":\"usd\",\"usd\": $lookup($prices, widgets.should_texture)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyMultiImageToModelNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["latest"]}], "images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image", "min": 2, "max": 4}}], "should_remesh": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "When set to false, returns an unprocessed triangular mesh.", "options": [{"key": "true", "inputs": {"required": {"topology": ["COMBO", {"multiselect": false, "options": ["triangle", "quad"]}], "target_polycount": ["INT", {"default": 300000, "min": 100, "max": 300000, "display": "number"}]}}}, {"key": "false", "inputs": {"required": {}}}]}], "symmetry_mode": ["COMBO", {"advanced": true, "multiselect": false, "options": ["auto", "on", "off"]}], "should_texture": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Determines whether textures are generated. Setting it to false skips the texture phase and returns a mesh without textures.", "options": [{"key": "true", "inputs": {"required": {"enable_pbr": ["BOOLEAN", {"tooltip": "Generate PBR Maps (metallic, roughness, normal) in addition to the base color.", "default": false}], "texture_prompt": ["STRING", {"tooltip": "Provide a text prompt to guide the texturing process. Maximum 600 characters. Cannot be used at the same time as 'texture_image'.", "default": "", "multiline": true}]}, "optional": {"texture_image": ["IMAGE", {"tooltip": "Only one of 'texture_image' or 'texture_prompt' may be used at the same time."}]}}}, {"key": "false", "inputs": {"required": {}}}]}], "pose_mode": ["COMBO", {"tooltip": "Specify the pose mode for the generated model.", "advanced": true, "multiselect": false, "options": ["", "A-pose", "T-pose"]}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "images", "should_remesh", "symmetry_mode", "should_texture", "pose_mode", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MESHY_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "meshy_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyMultiImageToModelNode", "display_name": "Meshy: Multi-Image to Model", "description": "", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "should_texture", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\"true\": 0.6, \"false\": 0.2};\n {\"type\":\"usd\",\"usd\": $lookup($prices, widgets.should_texture)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyRigModelNode": {"input": {"required": {"meshy_task_id": ["MESHY_TASK_ID", {}], "height_meters": ["FLOAT", {"tooltip": "The approximate height of the character model in meters. This aids in scaling and rigging accuracy.", "default": 1.7, "min": 0.1, "max": 15.0}]}, "optional": {"texture_image": ["IMAGE", {"tooltip": "The model's UV-unwrapped base color texture image."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["meshy_task_id", "height_meters"], "optional": ["texture_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MESHY_RIGGED_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "rig_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyRigModelNode", "display_name": "Meshy: Rig Model", "description": "Provides a rigged character in standard formats. Auto-rigging is currently not suitable for untextured meshes, non-humanoid assets, or humanoid assets with unclear limb and body structure.", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.2}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyAnimateModelNode": {"input": {"required": {"rig_task_id": ["MESHY_RIGGED_TASK_ID", {}], "action_id": ["INT", {"tooltip": "Visit https://docs.meshy.ai/en/api/animation-library for a list of available values.", "default": 0, "min": 0, "max": 696}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["rig_task_id", "action_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false], "output_name": ["model_file", "GLB", "FBX"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "MeshyAnimateModelNode", "display_name": "Meshy: Animate Model", "description": "Apply a specific animation action to a previously rigged character.", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.12}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MeshyTextureNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["latest"]}], "meshy_task_id": ["MESHY_TASK_ID", {}], "enable_original_uv": ["BOOLEAN", {"tooltip": "Use the original UV of the model instead of generating new UVs. When enabled, Meshy preserves existing textures from the uploaded model. If the model has no original UV, the quality of the output might not be as good.", "advanced": true, "default": true}], "pbr": ["BOOLEAN", {"advanced": true, "default": false}], "text_style_prompt": ["STRING", {"tooltip": "Describe your desired texture style of the object using text. Maximum 600 characters.Maximum 600 characters. Cannot be used at the same time as 'image_style'.", "default": "", "multiline": true}]}, "optional": {"image_style": ["IMAGE", {"tooltip": "A 2d image to guide the texturing process. Can not be used at the same time with 'text_style_prompt'."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model", "meshy_task_id", "enable_original_uv", "pbr", "text_style_prompt"], "optional": ["image_style"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB", "FILE_3D_FBX"], "output_is_list": [false, false, false, false], "output_name": ["model_file", "meshy_task_id", "GLB", "FBX"], "output_tooltips": [null, null, null, null], "output_matchtypes": null, "name": "MeshyTextureNode", "display_name": "Meshy: Texture Model", "description": "", "python_module": "comfy_api_nodes.nodes_meshy", "category": "partner/3d/Meshy", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MinimaxTextToVideoNode": {"input": {"required": {"prompt_text": ["STRING", {"tooltip": "Text prompt to guide the video generation", "default": "", "multiline": true}], "model": ["COMBO", {"tooltip": "Model to use for video generation", "default": "T2V-01", "multiselect": false, "options": ["T2V-01", "T2V-01-Director"]}]}, "optional": {"seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "step": 1, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt_text", "model"], "optional": ["seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "MinimaxTextToVideoNode", "display_name": "MiniMax Text to Video", "description": "Generates videos synchronously based on a prompt, and optional parameters.", "python_module": "comfy_api_nodes.nodes_minimax", "category": "partner/video/MiniMax", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.43}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MinimaxImageToVideoNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Image to use as first frame of video generation"}], "prompt_text": ["STRING", {"tooltip": "Text prompt to guide the video generation", "default": "", "multiline": true}], "model": ["COMBO", {"tooltip": "Model to use for video generation", "default": "I2V-01", "multiselect": false, "options": ["I2V-01-Director", "I2V-01", "I2V-01-live"]}]}, "optional": {"seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "step": 1, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt_text", "model"], "optional": ["seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "MinimaxImageToVideoNode", "display_name": "MiniMax Image to Video", "description": "Generates videos synchronously based on an image and prompt, and optional parameters.", "python_module": "comfy_api_nodes.nodes_minimax", "category": "partner/video/MiniMax", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.43}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "MinimaxHailuoVideoNode": {"input": {"required": {"prompt_text": ["STRING", {"tooltip": "Text prompt to guide the video generation.", "default": "", "multiline": true}]}, "optional": {"seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 18446744073709551615, "step": 1, "control_after_generate": true}], "first_frame_image": ["IMAGE", {"tooltip": "Optional image to use as the first frame to generate a video."}], "prompt_optimizer": ["BOOLEAN", {"tooltip": "Optimize prompt to improve generation quality when needed.", "default": true}], "duration": ["COMBO", {"tooltip": "The length of the output video in seconds.", "default": 6, "multiselect": false, "options": [6, 10]}], "resolution": ["COMBO", {"tooltip": "The dimensions of the video display. 1080p is 1920x1080, 768p is 1366x768.", "default": "768P", "multiselect": false, "options": ["768P", "1080P"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt_text"], "optional": ["seed", "first_frame_image", "prompt_optimizer", "duration", "resolution"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "MinimaxHailuoVideoNode", "display_name": "MiniMax Hailuo Video", "description": "Generates videos from prompt, with optional start frame using the new MiniMax Hailuo-02 model.", "python_module": "comfy_api_nodes.nodes_minimax", "category": "partner/video/MiniMax", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "resolution", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"768p\": {\"6\": 0.28, \"10\": 0.56},\n \"1080p\": {\"6\": 0.49}\n };\n $resPrices := $lookup($prices, $lowercase(widgets.resolution));\n $price := $lookup($resPrices, $string(widgets.duration));\n {\"type\":\"usd\",\"usd\": $price ? $price : 0.43}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIDalle2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for DALL\u00b7E", "default": "", "multiline": true}]}, "optional": {"seed": ["INT", {"tooltip": "not implemented yet in backend", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "size": ["COMBO", {"tooltip": "Image size", "default": "1024x1024", "multiselect": false, "options": ["256x256", "512x512", "1024x1024"]}], "n": ["INT", {"tooltip": "How many images to generate", "default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}], "image": ["IMAGE", {"tooltip": "Optional reference image for image editing."}], "mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced)"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt"], "optional": ["seed", "size", "n", "image", "mask"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIDalle2", "display_name": "OpenAI DALL\u00b7E 2", "description": "Generates images synchronously via OpenAI's DALL\u00b7E 2 endpoint.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/image/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "size", "type": "COMBO"}, {"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $size := widgets.size;\n $nRaw := widgets.n;\n $n := ($nRaw != null and $nRaw != 0) ? $nRaw : 1;\n\n $base :=\n $contains($size, \"256x256\") ? 0.016 :\n $contains($size, \"512x512\") ? 0.018 :\n 0.02;\n\n {\"type\":\"usd\",\"usd\": $round($base * $n, 3)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIDalle3": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for DALL\u00b7E", "default": "", "multiline": true}]}, "optional": {"seed": ["INT", {"tooltip": "not implemented yet in backend", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "quality": ["COMBO", {"tooltip": "Image quality", "default": "standard", "multiselect": false, "options": ["standard", "hd"]}], "style": ["COMBO", {"tooltip": "Vivid causes the model to lean towards generating hyper-real and dramatic images. Natural causes the model to produce more natural, less hyper-real looking images.", "default": "natural", "multiselect": false, "options": ["natural", "vivid"]}], "size": ["COMBO", {"tooltip": "Image size", "default": "1024x1024", "multiselect": false, "options": ["1024x1024", "1024x1792", "1792x1024"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt"], "optional": ["seed", "quality", "style", "size"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIDalle3", "display_name": "OpenAI DALL\u00b7E 3", "description": "Generates images synchronously via OpenAI's DALL\u00b7E 3 endpoint.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/image/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "size", "type": "COMBO"}, {"name": "quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $size := widgets.size;\n $q := widgets.quality;\n $hd := $contains($q, \"hd\");\n\n $price :=\n $contains($size, \"1024x1024\")\n ? ($hd ? 0.08 : 0.04)\n : (($contains($size, \"1792x1024\") or $contains($size, \"1024x1792\"))\n ? ($hd ? 0.12 : 0.08)\n : 0.04);\n\n {\"type\":\"usd\",\"usd\": $price}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIGPTImage1": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for GPT Image", "default": "", "multiline": true}]}, "optional": {"seed": ["INT", {"tooltip": "not implemented yet in backend", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "quality": ["COMBO", {"tooltip": "Image quality, affects cost and generation time.", "default": "low", "multiselect": false, "options": ["low", "medium", "high"]}], "background": ["COMBO", {"tooltip": "Return image with or without background", "default": "auto", "multiselect": false, "options": ["auto", "opaque", "transparent"]}], "size": ["COMBO", {"tooltip": "Image size. Select 'Custom' to use the custom width and height (GPT Image 2 only).", "default": "auto", "multiselect": false, "options": ["auto", "1024x1024", "1024x1536", "1536x1024", "2048x2048", "2048x1152", "1152x2048", "3840x2160", "2160x3840", "Custom"]}], "n": ["INT", {"tooltip": "How many images to generate", "default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}], "image": ["IMAGE", {"tooltip": "Optional reference image for image editing."}], "mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced)"}], "model": ["COMBO", {"default": "gpt-image-2", "multiselect": false, "options": ["gpt-image-1", "gpt-image-1.5", "gpt-image-2"]}], "custom_width": ["INT", {"tooltip": "Used only when `size` is 'Custom'. Must be a multiple of 16 (GPT Image 2 only).", "default": 1024, "min": 1024, "max": 3840, "step": 16}], "custom_height": ["INT", {"tooltip": "Used only when `size` is 'Custom'. Must be a multiple of 16 (GPT Image 2 only).", "default": 1024, "min": 1024, "max": 3840, "step": 16}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt"], "optional": ["seed", "quality", "background", "size", "n", "image", "mask", "model", "custom_width", "custom_height"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIGPTImage1", "display_name": "OpenAI GPT Image 2", "description": "Generates images synchronously via OpenAI's GPT Image endpoint.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/image/OpenAI", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "quality", "type": "COMBO"}, {"name": "n", "type": "INT"}, {"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $ranges := {\n \"gpt-image-1\": {\n \"low\": [0.011, 0.02],\n \"medium\": [0.042, 0.07],\n \"high\": [0.167, 0.25]\n },\n \"gpt-image-1.5\": {\n \"low\": [0.009, 0.02],\n \"medium\": [0.034, 0.062],\n \"high\": [0.133, 0.22]\n },\n \"gpt-image-2\": {\n \"low\": [0.0048, 0.019],\n \"medium\": [0.041, 0.168],\n \"high\": [0.165, 0.67]\n }\n };\n $range := $lookup($lookup($ranges, widgets.model), widgets.quality);\n $nRaw := widgets.n;\n $n := ($nRaw != null and $nRaw != 0) ? $nRaw : 1;\n ($n = 1)\n ? {\"type\":\"range_usd\",\"min_usd\": $range[0], \"max_usd\": $range[1], \"format\": {\"approximate\": true}}\n : {\n \"type\":\"range_usd\",\n \"min_usd\": $range[0] * $n,\n \"max_usd\": $range[1] * $n,\n \"format\": { \"suffix\": \"/Run\", \"approximate\": true }\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIGPTImageNodeV2": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for GPT Image", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "gpt-image-2", "inputs": {"required": {"size": ["COMBO", {"tooltip": "Image size. Select 'Custom' to use the custom width and height.", "default": "auto", "multiselect": false, "options": ["auto", "1024x1024", "1024x1536", "1536x1024", "2048x2048", "2048x1152", "1152x2048", "3840x2160", "2160x3840", "Custom"]}], "custom_width": ["INT", {"tooltip": "Used only when `size` is 'Custom'. Must be a multiple of 16.", "default": 1024, "min": 1024, "max": 3840, "step": 16}], "custom_height": ["INT", {"tooltip": "Used only when `size` is 'Custom'. Must be a multiple of 16.", "default": 1024, "min": 1024, "max": 3840, "step": 16}], "background": ["COMBO", {"tooltip": "Return image with or without background.", "default": "auto", "multiselect": false, "options": ["auto", "opaque"]}], "quality": ["COMBO", {"tooltip": "Image quality, affects cost and generation time.", "default": "low", "multiselect": false, "options": ["low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image editing. Up to 16 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16"], "min": 0}}]}, "optional": {"mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced). Requires exactly one reference image."}]}}}, {"key": "gpt-image-1.5", "inputs": {"required": {"size": ["COMBO", {"tooltip": "Image size.", "default": "auto", "multiselect": false, "options": ["auto", "1024x1024", "1024x1536", "1536x1024"]}], "background": ["COMBO", {"tooltip": "Return image with or without background.", "default": "auto", "multiselect": false, "options": ["auto", "opaque", "transparent"]}], "quality": ["COMBO", {"tooltip": "Image quality, affects cost and generation time.", "default": "low", "multiselect": false, "options": ["low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image editing. Up to 16 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16"], "min": 0}}]}, "optional": {"mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced). Requires exactly one reference image."}]}}}, {"key": "gpt-image-1", "inputs": {"required": {"size": ["COMBO", {"tooltip": "Image size.", "default": "auto", "multiselect": false, "options": ["auto", "1024x1024", "1024x1536", "1536x1024"]}], "background": ["COMBO", {"tooltip": "Return image with or without background.", "default": "auto", "multiselect": false, "options": ["auto", "opaque", "transparent"]}], "quality": ["COMBO", {"tooltip": "Image quality, affects cost and generation time.", "default": "low", "multiselect": false, "options": ["low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) for image editing. Up to 16 images.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16"], "min": 0}}]}, "optional": {"mask": ["MASK", {"tooltip": "Optional mask for inpainting (white areas will be replaced). Requires exactly one reference image."}]}}}]}], "n": ["INT", {"tooltip": "How many images to generate", "default": 1, "min": 1, "max": 8, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "not implemented yet in backend", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "n", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIGPTImageNodeV2", "display_name": "OpenAI GPT Image 2", "description": "Generates images via OpenAI's GPT Image endpoint.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/image/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.quality", "type": "COMBO"}, {"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $ranges := {\n \"gpt-image-1\": {\n \"low\": [0.011, 0.02],\n \"medium\": [0.042, 0.07],\n \"high\": [0.167, 0.25]\n },\n \"gpt-image-1.5\": {\n \"low\": [0.009, 0.02],\n \"medium\": [0.034, 0.062],\n \"high\": [0.133, 0.22]\n },\n \"gpt-image-2\": {\n \"low\": [0.0048, 0.019],\n \"medium\": [0.041, 0.168],\n \"high\": [0.165, 0.67]\n }\n };\n $range := $lookup($lookup($ranges, widgets.model), $lookup(widgets, \"model.quality\"));\n $nRaw := widgets.n;\n $n := ($nRaw != null and $nRaw != 0) ? $nRaw : 1;\n ($n = 1)\n ? {\"type\":\"range_usd\",\"min_usd\": $range[0], \"max_usd\": $range[1], \"format\": {\"approximate\": true}}\n : {\n \"type\":\"range_usd\",\n \"min_usd\": $range[0] * $n,\n \"max_usd\": $range[1] * $n,\n \"format\": { \"suffix\": \"/Run\", \"approximate\": true }\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIChatNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text inputs to the model, used to generate a response.", "default": "", "multiline": true}], "persist_context": ["BOOLEAN", {"tooltip": "This parameter is deprecated and has no effect.", "advanced": true, "default": false}], "model": ["COMBO", {"tooltip": "The model used to generate the response", "multiselect": false, "options": ["gpt-5.5-pro", "gpt-5.5", "gpt-5", "gpt-5-mini", "gpt-5-nano", "gpt-4.1", "gpt-4.1-mini", "gpt-4.1-nano", "o4-mini", "o3", "o1-pro", "o1"]}]}, "optional": {"images": ["IMAGE", {"tooltip": "Optional image(s) to use as context for the model. To include multiple images, you can use the Batch Images node."}], "files": ["OPENAI_INPUT_FILES", {"tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the OpenAI Chat Input Files node."}], "advanced_options": ["OPENAI_CHAT_CONFIG", {"tooltip": "Optional configuration for the model. Accepts inputs from the OpenAI Chat Advanced Options node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "persist_context", "model"], "optional": ["images", "files", "advanced_options"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIChatNode", "display_name": "OpenAI ChatGPT", "description": "Generate text responses from an OpenAI model.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/text/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $contains($m, \"o4-mini\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.0011, 0.0044],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"o1-pro\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.15, 0.6],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"o1\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.015, 0.06],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"o3-mini\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.0011, 0.0044],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"o3\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.01, 0.04],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-4.1-nano\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.0001, 0.0004],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-4.1-mini\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.0004, 0.0016],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-4.1\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.002, 0.008],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-5.5-pro\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.03, 0.18],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-5.5\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.005, 0.03],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-5-nano\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.00005, 0.0004],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-5-mini\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.00025, 0.002],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : $contains($m, \"gpt-5\") ? {\n \"type\": \"list_usd\",\n \"usd\": [0.00125, 0.01],\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n }\n : {\"type\": \"text\", \"text\": \"Token-based\"}\n )\n "}, "search_aliases": null, "essentials_category": "Text Generation", "has_intermediate_output": false}, "OpenAIInputFiles": {"input": {"required": {"file": ["COMBO", {"tooltip": "Input files to include as context for the model. Only accepts text (.txt) and PDF (.pdf) files for now.", "multiselect": false, "options": []}]}, "optional": {"OPENAI_INPUT_FILES": ["OPENAI_INPUT_FILES", {"tooltip": "An optional additional file(s) to batch together with the file loaded from this node. Allows chaining of input files so that a single message can include multiple input files."}]}}, "input_order": {"required": ["file"], "optional": ["OPENAI_INPUT_FILES"]}, "is_input_list": false, "output": ["OPENAI_INPUT_FILES"], "output_is_list": [false], "output_name": ["OPENAI_INPUT_FILES"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIInputFiles", "display_name": "OpenAI ChatGPT Input Files", "description": "Loads and prepares input files (text, pdf, etc.) to include as inputs for the OpenAI Chat Node. The files will be read by the OpenAI model when generating a response. \ud83d\udec8 TIP: Can be chained together with other OpenAI Input File nodes.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/text/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIChatConfig": {"input": {"required": {"truncation": ["COMBO", {"tooltip": "The truncation strategy to use for the model response. auto: If the context of this response and previous ones exceeds the model's context window size, the model will truncate the response to fit the context window by dropping input items in the middle of the conversation.disabled: If a model response will exceed the context window size for a model, the request will fail with a 400 error", "advanced": true, "default": "auto", "multiselect": false, "options": ["auto", "disabled"]}]}, "optional": {"max_output_tokens": ["INT", {"tooltip": "An upper bound for the number of tokens that can be generated for a response, including visible output tokens", "advanced": true, "default": 4096, "min": 16, "max": 16384}], "instructions": ["STRING", {"tooltip": "Instructions for the model on how to generate the response", "multiline": true}]}}, "input_order": {"required": ["truncation"], "optional": ["max_output_tokens", "instructions"]}, "is_input_list": false, "output": ["OPENAI_CHAT_CONFIG"], "output_is_list": [false], "output_name": ["OPENAI_CHAT_CONFIG"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIChatConfig", "display_name": "OpenAI ChatGPT Advanced Options", "description": "Allows specifying advanced configuration options for the OpenAI Chat Nodes.", "python_module": "comfy_api_nodes.nodes_openai", "category": "partner/text/OpenAI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenRouterLLMNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text input to the model.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The OpenRouter model used to generate the response.", "options": [{"key": "anthropic/claude-opus-4.7", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}}}, {"key": "openai/gpt-5.5-pro", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}}}, {"key": "openai/gpt-5.5", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}}}, {"key": "google/gemini-3.5-flash", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference video(s) \u2014 up to 4. Sent as URLs.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}]}}}, {"key": "x-ai/grok-4.20", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}}}, {"key": "x-ai/grok-4.3", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 20. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10", "image_11", "image_12", "image_13", "image_14", "image_15", "image_16", "image_17", "image_18", "image_19", "image_20"], "min": 0}}]}}}, {"key": "deepseek/deepseek-v4-pro", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "deepseek/deepseek-v4-flash", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "deepseek/deepseek-v3.2", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "qwen/qwen3.6-max-preview", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "qwen/qwen3.6-plus", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 10. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference video(s) \u2014 up to 4. Sent as URLs.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}]}}}, {"key": "qwen/qwen3.6-flash", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 10. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 0}}], "videos": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference video(s) \u2014 up to 4. Sent as URLs.", "template": {"input": {"required": {"video": ["VIDEO", {}]}}, "names": ["video_1", "video_2", "video_3", "video_4"], "min": 0}}]}}}, {"key": "mistralai/mistral-large-2512", "inputs": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 8. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}, {"key": "mistralai/mistral-medium-3-5", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 8. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8"], "min": 0}}]}}}, {"key": "z-ai/glm-4.6", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "z-ai/glm-5", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "moonshotai/kimi-k2.6", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}], "images": ["COMFY_AUTOGROW_V3", {"tooltip": "Optional reference image(s) \u2014 up to 10. Sent as URLs.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "names": ["image_1", "image_2", "image_3", "image_4", "image_5", "image_6", "image_7", "image_8", "image_9", "image_10"], "min": 0}}]}}}, {"key": "moonshotai/kimi-k2-thinking", "inputs": {"required": {"reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "perplexity/sonar-pro", "inputs": {"required": {"search_context_size": ["COMBO", {"tooltip": "How much web search context to retrieve. Larger = more grounded but slower/pricier.", "advanced": true, "default": "medium", "multiselect": false, "options": ["low", "medium", "high"]}]}}}, {"key": "perplexity/sonar-reasoning-pro", "inputs": {"required": {"search_context_size": ["COMBO", {"tooltip": "How much web search context to retrieve. Larger = more grounded but slower/pricier.", "advanced": true, "default": "medium", "multiselect": false, "options": ["low", "medium", "high"]}], "reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}, {"key": "perplexity/sonar-deep-research", "inputs": {"required": {"search_context_size": ["COMBO", {"tooltip": "How much web search context to retrieve. Larger = more grounded but slower/pricier.", "advanced": true, "default": "medium", "multiselect": false, "options": ["low", "medium", "high"]}], "reasoning_effort": ["COMBO", {"tooltip": "Reasoning effort. 'off' disables reasoning entirely.", "advanced": true, "default": "off", "multiselect": false, "options": ["off", "low", "medium", "high"]}]}}}]}], "seed": ["INT", {"tooltip": "Seed for sampling. Set to 0 to omit. Most models treat this as a hint only.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"system_prompt": ["STRING", {"tooltip": "Foundational instructions that dictate the model's behavior.", "advanced": true, "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "optional": ["system_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["STRING"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenRouterLLMNode", "display_name": "OpenRouter LLM", "description": "Generate text responses through OpenRouter. Routes to a curated set of popular models from xAI, DeepSeek, Qwen, Mistral, Z.AI (GLM), Moonshot (Kimi), and Perplexity Sonar.", "python_module": "comfy_api_nodes.nodes_openrouter", "category": "partner/text/OpenRouter", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "(\n $rates := {\n \"anthropic/claude-opus-4.7\": [0.005, 0.025],\n \"openai/gpt-5.5-pro\": [0.03, 0.18],\n \"openai/gpt-5.5\": [0.005, 0.03],\n \"google/gemini-3.5-flash\": [0.0015, 0.009],\n \"x-ai/grok-4.20\": [0.00125, 0.0025],\n \"x-ai/grok-4.3\": [0.00125, 0.0025],\n \"deepseek/deepseek-v4-pro\": [0.000435, 0.00087],\n \"deepseek/deepseek-v4-flash\": [0.000112, 0.000224],\n \"deepseek/deepseek-v3.2\": [0.000252, 0.000378],\n \"qwen/qwen3.6-max-preview\": [0.00104, 0.00624],\n \"qwen/qwen3.6-plus\": [0.000325, 0.00195],\n \"qwen/qwen3.6-flash\": [0.0001875, 0.001125],\n \"mistralai/mistral-large-2512\": [0.0005, 0.0015],\n \"mistralai/mistral-medium-3-5\": [0.0015, 0.0075],\n \"z-ai/glm-4.6\": [0.00043, 0.00174],\n \"z-ai/glm-5\": [0.0006, 0.00192],\n \"moonshotai/kimi-k2.6\": [0.00073, 0.00349],\n \"moonshotai/kimi-k2-thinking\": [0.0006, 0.0025],\n \"perplexity/sonar-pro\": [0.003, 0.015],\n \"perplexity/sonar-reasoning-pro\": [0.002, 0.008],\n \"perplexity/sonar-deep-research\": [0.002, 0.008]\n };\n $r := $lookup($rates, widgets.model);\n $r ? {\n \"type\": \"list_usd\",\n \"usd\": $r,\n \"format\": { \"approximate\": true, \"separator\": \"-\", \"suffix\": \" per 1K tokens\" }\n } : {\"type\": \"text\", \"text\": \"Token-based\"}\n)"}, "search_aliases": null, "essentials_category": "Text Generation", "has_intermediate_output": false}, "PixverseTextToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the video generation", "default": "", "multiline": true}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "4:3", "1:1", "3:4", "9:16"]}], "quality": ["COMBO", {"default": "540p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "duration_seconds": ["COMBO", {"multiselect": false, "options": [5, 8]}], "motion_mode": ["COMBO", {"multiselect": false, "options": ["normal", "fast"]}], "seed": ["INT", {"tooltip": "Seed for video generation.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "multiline": true}], "pixverse_template": ["PIXVERSE_TEMPLATE", {"tooltip": "An optional template to influence style of generation, created by the PixVerse Template node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "aspect_ratio", "quality", "duration_seconds", "motion_mode", "seed"], "optional": ["negative_prompt", "pixverse_template"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "PixverseTextToVideoNode", "display_name": "PixVerse Text to Video", "description": "Generates videos based on prompt and output_size.", "python_module": "comfy_api_nodes.nodes_pixverse", "category": "partner/video/PixVerse", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration_seconds", "type": "COMBO"}, {"name": "quality", "type": "COMBO"}, {"name": "motion_mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"5\": {\n \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"720p\": {\"normal\": 0.6, \"fast\": 1.2},\n \"540p\": {\"normal\": 0.45, \"fast\": 0.9},\n \"360p\": {\"normal\": 0.45, \"fast\": 0.9}\n },\n \"8\": {\n \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"720p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"540p\": {\"normal\": 0.9, \"fast\": 1.2},\n \"360p\": {\"normal\": 0.9, \"fast\": 1.2}\n }\n };\n $durPrices := $lookup($prices, $string(widgets.duration_seconds));\n $qualityPrices := $lookup($durPrices, widgets.quality);\n $price := $lookup($qualityPrices, widgets.motion_mode);\n {\"type\":\"usd\",\"usd\": $price ? $price : 0.9}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PixverseImageToVideoNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the video generation", "default": "", "multiline": true}], "quality": ["COMBO", {"default": "540p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "duration_seconds": ["COMBO", {"multiselect": false, "options": [5, 8]}], "motion_mode": ["COMBO", {"multiselect": false, "options": ["normal", "fast"]}], "seed": ["INT", {"tooltip": "Seed for video generation.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "multiline": true}], "pixverse_template": ["PIXVERSE_TEMPLATE", {"tooltip": "An optional template to influence style of generation, created by the PixVerse Template node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "quality", "duration_seconds", "motion_mode", "seed"], "optional": ["negative_prompt", "pixverse_template"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "PixverseImageToVideoNode", "display_name": "PixVerse Image to Video", "description": "Generates videos based on prompt and output_size.", "python_module": "comfy_api_nodes.nodes_pixverse", "category": "partner/video/PixVerse", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration_seconds", "type": "COMBO"}, {"name": "quality", "type": "COMBO"}, {"name": "motion_mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"5\": {\n \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"720p\": {\"normal\": 0.6, \"fast\": 1.2},\n \"540p\": {\"normal\": 0.45, \"fast\": 0.9},\n \"360p\": {\"normal\": 0.45, \"fast\": 0.9}\n },\n \"8\": {\n \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"720p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"540p\": {\"normal\": 0.9, \"fast\": 1.2},\n \"360p\": {\"normal\": 0.9, \"fast\": 1.2}\n }\n };\n $durPrices := $lookup($prices, $string(widgets.duration_seconds));\n $qualityPrices := $lookup($durPrices, widgets.quality);\n $price := $lookup($qualityPrices, widgets.motion_mode);\n {\"type\":\"usd\",\"usd\": $price ? $price : 0.9}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PixverseTransitionVideoNode": {"input": {"required": {"first_frame": ["IMAGE", {}], "last_frame": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the video generation", "default": "", "multiline": true}], "quality": ["COMBO", {"default": "540p", "multiselect": false, "options": ["360p", "540p", "720p", "1080p"]}], "duration_seconds": ["COMBO", {"multiselect": false, "options": [5, 8]}], "motion_mode": ["COMBO", {"multiselect": false, "options": ["normal", "fast"]}], "seed": ["INT", {"tooltip": "Seed for video generation.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["first_frame", "last_frame", "prompt", "quality", "duration_seconds", "motion_mode", "seed"], "optional": ["negative_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "PixverseTransitionVideoNode", "display_name": "PixVerse Transition Video", "description": "Generates videos based on prompt and output_size.", "python_module": "comfy_api_nodes.nodes_pixverse", "category": "partner/video/PixVerse", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration_seconds", "type": "COMBO"}, {"name": "quality", "type": "COMBO"}, {"name": "motion_mode", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\n \"5\": {\n \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"720p\": {\"normal\": 0.6, \"fast\": 1.2},\n \"540p\": {\"normal\": 0.45, \"fast\": 0.9},\n \"360p\": {\"normal\": 0.45, \"fast\": 0.9}\n },\n \"8\": {\n \"1080p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"720p\": {\"normal\": 1.2, \"fast\": 1.2},\n \"540p\": {\"normal\": 0.9, \"fast\": 1.2},\n \"360p\": {\"normal\": 0.9, \"fast\": 1.2}\n }\n };\n $durPrices := $lookup($prices, $string(widgets.duration_seconds));\n $qualityPrices := $lookup($durPrices, widgets.quality);\n $price := $lookup($qualityPrices, widgets.motion_mode);\n {\"type\":\"usd\",\"usd\": $price ? $price : 0.9}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "PixverseTemplateNode": {"input": {"required": {"template": ["COMBO", {"multiselect": false, "options": ["Microwave", "Suit Swagger", "Anything, Robot", "Subject 3 Fever", "kiss kiss"]}]}}, "input_order": {"required": ["template"]}, "is_input_list": false, "output": ["PIXVERSE_TEMPLATE"], "output_is_list": [false], "output_name": ["pixverse_template"], "output_tooltips": [null], "output_matchtypes": null, "name": "PixverseTemplateNode", "display_name": "PixVerse Template", "description": "", "python_module": "comfy_api_nodes.nodes_pixverse", "category": "partner/video/PixVerse", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "QuiverTextToSVGNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the desired SVG output.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for SVG generation.", "options": [{"key": "arrow-1.1", "inputs": {"required": {"temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}, {"key": "arrow-1.1-max", "inputs": {"required": {"temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}, {"key": "arrow-preview", "inputs": {"required": {"temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "optional": {"instructions": ["STRING", {"tooltip": "Additional style or formatting guidance.", "advanced": true, "default": "", "multiline": true}], "reference_images": ["COMFY_AUTOGROW_V3", {"tooltip": "Up to 4 reference images to guide the generation.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "ref_", "min": 0, "max": 4}}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "seed"], "optional": ["instructions", "reference_images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["SVG"], "output_is_list": [false], "output_name": ["SVG"], "output_tooltips": [null], "output_matchtypes": null, "name": "QuiverTextToSVGNode", "display_name": "Quiver Text to SVG", "description": "Generate an SVG from a text prompt using Quiver AI.", "python_module": "comfy_api_nodes.nodes_quiver", "category": "partner/image/Quiver", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $contains(widgets.model, \"max\")\n ? {\"type\":\"usd\",\"usd\":0.3575}\n : $contains(widgets.model, \"preview\")\n ? {\"type\":\"usd\",\"usd\":0.429}\n : {\"type\":\"usd\",\"usd\":0.286}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "QuiverImageToSVGNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Input image to vectorize."}], "auto_crop": ["BOOLEAN", {"tooltip": "Automatically crop to the dominant subject.", "advanced": true, "default": false}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for SVG vectorization.", "options": [{"key": "arrow-1.1", "inputs": {"required": {"target_size": ["INT", {"tooltip": "Square resize target in pixels.", "advanced": true, "default": 1024, "min": 128, "max": 4096}], "temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}, {"key": "arrow-1.1-max", "inputs": {"required": {"target_size": ["INT", {"tooltip": "Square resize target in pixels.", "advanced": true, "default": 1024, "min": 128, "max": 4096}], "temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}, {"key": "arrow-preview", "inputs": {"required": {"target_size": ["INT", {"tooltip": "Square resize target in pixels.", "advanced": true, "default": 1024, "min": 128, "max": 4096}], "temperature": ["FLOAT", {"tooltip": "Randomness control. Higher values increase randomness.", "advanced": true, "default": 1.0, "min": 0.0, "max": 2.0, "step": 0.1, "display": "slider"}], "top_p": ["FLOAT", {"tooltip": "Nucleus sampling parameter.", "advanced": true, "default": 1.0, "min": 0.05, "max": 1.0, "step": 0.05, "display": "slider"}], "presence_penalty": ["FLOAT", {"tooltip": "Token presence penalty.", "advanced": true, "default": 0.0, "min": -2.0, "max": 2.0, "step": 0.1, "display": "slider"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "auto_crop", "model", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["SVG"], "output_is_list": [false], "output_name": ["SVG"], "output_tooltips": [null], "output_matchtypes": null, "name": "QuiverImageToSVGNode", "display_name": "Quiver Image to SVG", "description": "Vectorize a raster image into SVG using Quiver AI.", "python_module": "comfy_api_nodes.nodes_quiver", "category": "partner/image/Quiver", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $contains(widgets.model, \"max\")\n ? {\"type\":\"usd\",\"usd\":0.3575}\n : $contains(widgets.model, \"preview\")\n ? {\"type\":\"usd\",\"usd\":0.429}\n : {\"type\":\"usd\",\"usd\":0.286}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftTextToImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation.", "default": "", "multiline": true}], "size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "1024x1024", "multiselect": false, "options": ["1024x1024", "1365x1024", "1024x1365", "1536x1024", "1024x1536", "1820x1024", "1024x1820", "1024x2048", "2048x1024", "1434x1024", "1024x1434", "1024x1280", "1280x1024", "1024x1707", "1707x1024"]}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_style": ["RECRAFT_V3_STYLE", {}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "forceInput": true, "multiline": false}], "recraft_controls": ["RECRAFT_CONTROLS", {"tooltip": "Optional additional controls over the generation via the Recraft Controls node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "size", "n", "seed"], "optional": ["recraft_style", "negative_prompt", "recraft_controls"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftTextToImageNode", "display_name": "Recraft Text to Image", "description": "Generates images synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": $round(0.04 * widgets.n, 2)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftImageToImageNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation.", "default": "", "multiline": true}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "strength": ["FLOAT", {"tooltip": "Defines the difference with the original image, should lie in [0, 1], where 0 means almost identical, and 1 means miserable similarity.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_style": ["RECRAFT_V3_STYLE", {}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "forceInput": true, "multiline": false}], "recraft_controls": ["RECRAFT_CONTROLS", {"tooltip": "Optional additional controls over the generation via the Recraft Controls node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "n", "strength", "seed"], "optional": ["recraft_style", "negative_prompt", "recraft_controls"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftImageToImageNode", "display_name": "Recraft Image to Image", "description": "Modify image based on prompt and strength.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": $round(0.04 * widgets.n, 2)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftImageInpaintingNode": {"input": {"required": {"image": ["IMAGE", {}], "mask": ["MASK", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation.", "default": "", "multiline": true}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_style": ["RECRAFT_V3_STYLE", {}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "forceInput": true, "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "mask", "prompt", "n", "seed"], "optional": ["recraft_style", "negative_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftImageInpaintingNode", "display_name": "Recraft Image Inpainting", "description": "Modify image based on prompt and mask.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": $round(0.04 * widgets.n, 2)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftTextToVectorNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation.", "default": "", "multiline": true}], "substyle": ["COMBO", {"multiselect": false, "options": ["None", "bold_stroke", "chemistry", "colored_stencil", "contour_pop_art", "cosmics", "cutout", "depressive", "editorial", "emotional_flat", "engraving", "infographical", "line_art", "line_circuit", "linocut", "marker_outline", "mosaic", "naivector", "roundish_flat", "seamless", "segmented_colors", "sharp_contrast", "thin", "vector_photo", "vivid_shapes"]}], "size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "1024x1024", "multiselect": false, "options": ["1024x1024", "1365x1024", "1024x1365", "1536x1024", "1024x1536", "1820x1024", "1024x1820", "1024x2048", "2048x1024", "1434x1024", "1024x1434", "1024x1280", "1280x1024", "1024x1707", "1707x1024"]}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "forceInput": true, "multiline": false}], "recraft_controls": ["RECRAFT_CONTROLS", {"tooltip": "Optional additional controls over the generation via the Recraft Controls node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "substyle", "size", "n", "seed"], "optional": ["negative_prompt", "recraft_controls"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["SVG"], "output_is_list": [false], "output_name": ["SVG"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftTextToVectorNode", "display_name": "Recraft Text to Vector", "description": "Generates SVG synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": $round(0.08 * widgets.n, 2)}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftVectorizeImageNode": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["SVG"], "output_is_list": [false], "output_name": ["SVG"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftVectorizeImageNode", "display_name": "Recraft Vectorize Image", "description": "Generates SVG synchronously from an input image.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.01}"}, "search_aliases": null, "essentials_category": "Image Tools", "has_intermediate_output": false}, "RecraftRemoveBackgroundNode": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE", "MASK"], "output_is_list": [false, false], "output_name": ["IMAGE", "MASK"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "RecraftRemoveBackgroundNode", "display_name": "Recraft Remove Background", "description": "Remove background from image, and return processed image and mask.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.01}"}, "search_aliases": null, "essentials_category": "Image Tools", "has_intermediate_output": false}, "RecraftReplaceBackgroundNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt for the image generation.", "default": "", "multiline": true}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_style": ["RECRAFT_V3_STYLE", {}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "default": "", "forceInput": true, "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "n", "seed"], "optional": ["recraft_style", "negative_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftReplaceBackgroundNode", "display_name": "Recraft Replace Background", "description": "Replace background on image, based on provided prompt.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.04}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftCrispUpscaleNode": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftCrispUpscaleNode", "display_name": "Recraft Crisp Upscale Image", "description": "Upscale image synchronously.\nEnhances a given raster image using \u2018crisp upscale\u2019 tool, increasing image resolution, making the image sharper and cleaner.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.004}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftCreativeUpscaleNode": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftCreativeUpscaleNode", "display_name": "Recraft Creative Upscale Image", "description": "Upscale image synchronously.\nEnhances a given raster image using \u2018creative upscale\u2019 tool, boosting resolution with a focus on refining small details and faces.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.25}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftStyleV3RealisticImage": {"input": {"required": {"substyle": ["COMBO", {"multiselect": false, "options": ["None", "b_and_w", "enterprise", "evening_light", "faded_nostalgia", "forest_life", "hard_flash", "hdr", "motion_blur", "mystic_naturalism", "natural_light", "natural_tones", "organic_calm", "real_life_glow", "retro_realism", "retro_snapshot", "studio_portrait", "urban_drama", "village_realism", "warm_folk"]}]}}, "input_order": {"required": ["substyle"]}, "is_input_list": false, "output": ["RECRAFT_V3_STYLE"], "output_is_list": [false], "output_name": ["recraft_style"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftStyleV3RealisticImage", "display_name": "Recraft Style - Realistic Image", "description": "Select realistic_image style and optional substyle.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftStyleV3DigitalIllustration": {"input": {"required": {"substyle": ["COMBO", {"multiselect": false, "options": ["None", "2d_art_poster", "2d_art_poster_2", "antiquarian", "bold_fantasy", "child_book", "child_books", "cover", "crosshatch", "digital_engraving", "engraving_color", "expressionism", "freehand_details", "grain", "grain_20", "graphic_intensity", "hand_drawn", "hand_drawn_outline", "handmade_3d", "hard_comics", "infantile_sketch", "long_shadow", "modern_folk", "multicolor", "neon_calm", "noir", "nostalgic_pastel", "outline_details", "pastel_gradient", "pastel_sketch", "pixel_art", "plastic", "pop_art", "pop_renaissance", "seamless", "street_art", "tablet_sketch", "urban_glow", "urban_sketching", "vanilla_dreams", "young_adult_book", "young_adult_book_2"]}]}}, "input_order": {"required": ["substyle"]}, "is_input_list": false, "output": ["RECRAFT_V3_STYLE"], "output_is_list": [false], "output_name": ["recraft_style"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftStyleV3DigitalIllustration", "display_name": "Recraft Style - Digital Illustration", "description": "Select realistic_image style and optional substyle.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftStyleV3LogoRaster": {"input": {"required": {"substyle": ["COMBO", {"multiselect": false, "options": ["emblem_graffiti", "emblem_pop_art", "emblem_punk", "emblem_stamp", "emblem_vintage"]}]}}, "input_order": {"required": ["substyle"]}, "is_input_list": false, "output": ["RECRAFT_V3_STYLE"], "output_is_list": [false], "output_name": ["recraft_style"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftStyleV3LogoRaster", "display_name": "Recraft Style - Logo Raster", "description": "Select realistic_image style and optional substyle.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftStyleV3InfiniteStyleLibrary": {"input": {"required": {"style_id": ["STRING", {"tooltip": "UUID of style from Infinite Style Library.", "default": "", "multiline": false}]}}, "input_order": {"required": ["style_id"]}, "is_input_list": false, "output": ["RECRAFT_V3_STYLE"], "output_is_list": [false], "output_name": ["recraft_style"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftStyleV3InfiniteStyleLibrary", "display_name": "Recraft Style - Infinite Style Library", "description": "Choose style based on preexisting UUID from Recraft's Infinite Style Library.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftCreateStyleNode": {"input": {"required": {"style": ["COMBO", {"tooltip": "The base style of the generated images.", "multiselect": false, "options": ["realistic_image", "digital_illustration"]}], "images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image", "min": 1, "max": 5}}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["style", "images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING"], "output_is_list": [false], "output_name": ["style_id"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftCreateStyleNode", "display_name": "Recraft Create Style", "description": "Create a custom style from reference images. Upload 1-5 images to use as style references. Total size of all images is limited to 5 MB.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.04}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftColorRGB": {"input": {"required": {"r": ["INT", {"tooltip": "Red value of color.", "default": 0, "min": 0, "max": 255}], "g": ["INT", {"tooltip": "Green value of color.", "default": 0, "min": 0, "max": 255}], "b": ["INT", {"tooltip": "Blue value of color.", "default": 0, "min": 0, "max": 255}]}, "optional": {"recraft_color": ["RECRAFT_COLOR", {}]}}, "input_order": {"required": ["r", "g", "b"], "optional": ["recraft_color"]}, "is_input_list": false, "output": ["RECRAFT_COLOR"], "output_is_list": [false], "output_name": ["recraft_color"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftColorRGB", "display_name": "Recraft Color RGB", "description": "Create Recraft Color by choosing specific RGB values.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftControls": {"input": {"required": {}, "optional": {"colors": ["RECRAFT_COLOR", {}], "background_color": ["RECRAFT_COLOR", {}]}}, "input_order": {"required": [], "optional": ["colors", "background_color"]}, "is_input_list": false, "output": ["RECRAFT_CONTROLS"], "output_is_list": [false], "output_name": ["recraft_controls"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftControls", "display_name": "Recraft Controls", "description": "Create Recraft Controls for customizing Recraft generation.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftV4TextToImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation. Maximum 10,000 characters.", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The model to use for generation.", "options": [{"key": "recraftv4", "inputs": {"required": {"size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "1024x1024", "multiselect": false, "options": ["1024x1024", "1536x768", "768x1536", "1280x832", "832x1280", "1216x896", "896x1216", "1152x896", "896x1152", "832x1344", "1280x896", "896x1280", "1344x768", "768x1344"]}]}}}, {"key": "recraftv4_pro", "inputs": {"required": {"size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "2048x2048", "multiselect": false, "options": ["2048x2048", "3072x1536", "1536x3072", "2560x1664", "1664x2560", "2432x1792", "1792x2432", "2304x1792", "1792x2304", "1664x2688", "1434x1024", "1024x1434", "2560x1792", "1792x2560"]}]}}}]}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_controls": ["RECRAFT_CONTROLS", {"tooltip": "Optional additional controls over the generation via the Recraft Controls node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "negative_prompt", "model", "n", "seed"], "optional": ["recraft_controls"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftV4TextToImageNode", "display_name": "Recraft V4 Text to Image", "description": "Generates images using Recraft V4 or V4 Pro models.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\"recraftv4\": 0.04, \"recraftv4_pro\": 0.25};\n {\"type\":\"usd\",\"usd\": $lookup($prices, widgets.model) * widgets.n}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RecraftV4TextToVectorNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Prompt for the image generation. Maximum 10,000 characters.", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "An optional text description of undesired elements on an image.", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "The model to use for generation.", "options": [{"key": "recraftv4", "inputs": {"required": {"size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "1024x1024", "multiselect": false, "options": ["1024x1024", "1536x768", "768x1536", "1280x832", "832x1280", "1216x896", "896x1216", "1152x896", "896x1152", "832x1344", "1280x896", "896x1280", "1344x768", "768x1344"]}]}}}, {"key": "recraftv4_pro", "inputs": {"required": {"size": ["COMBO", {"tooltip": "The size of the generated image.", "default": "2048x2048", "multiselect": false, "options": ["2048x2048", "3072x1536", "1536x3072", "2560x1664", "1664x2560", "2432x1792", "1792x2432", "2304x1792", "1792x2304", "1664x2688", "1434x1024", "1024x1434", "2560x1792", "1792x2560"]}]}}}]}], "n": ["INT", {"tooltip": "The number of images to generate.", "default": 1, "min": 1, "max": 6}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "optional": {"recraft_controls": ["RECRAFT_CONTROLS", {"tooltip": "Optional additional controls over the generation via the Recraft Controls node."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "negative_prompt", "model", "n", "seed"], "optional": ["recraft_controls"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["SVG"], "output_is_list": [false], "output_name": ["SVG"], "output_tooltips": [null], "output_matchtypes": null, "name": "RecraftV4TextToVectorNode", "display_name": "Recraft V4 Text to Vector", "description": "Generates SVG using Recraft V4 or V4 Pro models.", "python_module": "comfy_api_nodes.nodes_recraft", "category": "partner/image/Recraft", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "n", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\"recraftv4\": 0.08, \"recraftv4_pro\": 0.30};\n {\"type\":\"usd\",\"usd\": $lookup($prices, widgets.model) * widgets.n}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReveImageCreateNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the desired image. Maximum 2560 characters.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model version to use for generation.", "options": [{"key": "reve-create@20250915", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output image.", "multiselect": false, "options": ["3:2", "16:9", "9:16", "2:3", "4:3", "3:4", "1:1"]}], "test_time_scaling": ["INT", {"tooltip": "Higher values produce better images but cost more credits.", "advanced": true, "default": 1, "min": 1, "max": 5, "step": 1}]}}}]}], "upscale": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Upscale the generated image. May add additional cost.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "enabled", "inputs": {"required": {"upscale_factor": ["INT", {"tooltip": "Upscale factor (2x, 3x, or 4x).", "default": 2, "min": 2, "max": 4, "step": 1}]}}}]}], "remove_background": ["BOOLEAN", {"tooltip": "Remove the background from the generated image. May add additional cost.", "default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "upscale", "remove_background", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReveImageCreateNode", "display_name": "Reve Image Create", "description": "Generate images from text descriptions using Reve.", "python_module": "comfy_api_nodes.nodes_reve", "category": "partner/image/Reve", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "upscale", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscale.upscale_factor", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $factor := $lookup(widgets, \"upscale.upscale_factor\");\n $fmt := {\"approximate\": true, \"note\": \"(base)\"};\n widgets.upscale = \"enabled\" ? (\n $factor = 4 ? {\"type\": \"usd\", \"usd\": 0.0762, \"format\": $fmt}\n : $factor = 3 ? {\"type\": \"usd\", \"usd\": 0.0591, \"format\": $fmt}\n : {\"type\": \"usd\", \"usd\": 0.0457, \"format\": $fmt}\n ) : {\"type\": \"usd\", \"usd\": 0.03432, \"format\": $fmt}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReveImageEditNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "The image to edit."}], "edit_instruction": ["STRING", {"tooltip": "Text description of how to edit the image. Maximum 2560 characters.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model version to use for editing.", "options": [{"key": "reve-edit@20250915", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output image.", "multiselect": false, "options": ["auto", "16:9", "9:16", "3:2", "2:3", "4:3", "3:4", "1:1"]}], "test_time_scaling": ["INT", {"tooltip": "Higher values produce better images but cost more credits.", "advanced": true, "default": 1, "min": 1, "max": 5, "step": 1}]}}}, {"key": "reve-edit-fast@20251030", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output image.", "multiselect": false, "options": ["auto", "16:9", "9:16", "3:2", "2:3", "4:3", "3:4", "1:1"]}], "test_time_scaling": ["INT", {"tooltip": "Higher values produce better images but cost more credits.", "advanced": true, "default": 1, "min": 1, "max": 5, "step": 1}]}}}]}], "upscale": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Upscale the generated image. May add additional cost.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "enabled", "inputs": {"required": {"upscale_factor": ["INT", {"tooltip": "Upscale factor (2x, 3x, or 4x).", "default": 2, "min": 2, "max": 4, "step": 1}]}}}]}], "remove_background": ["BOOLEAN", {"tooltip": "Remove the background from the generated image. May add additional cost.", "default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "edit_instruction", "model", "upscale", "remove_background", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReveImageEditNode", "display_name": "Reve Image Edit", "description": "Edit images using natural language instructions with Reve.", "python_module": "comfy_api_nodes.nodes_reve", "category": "partner/image/Reve", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscale", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscale.upscale_factor", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $fmt := {\"approximate\": true, \"note\": \"(base)\"};\n $isFast := $contains(widgets.model, \"fast\");\n $enabled := widgets.upscale = \"enabled\";\n $factor := $lookup(widgets, \"upscale.upscale_factor\");\n $isFast\n ? {\"type\": \"usd\", \"usd\": 0.01001, \"format\": $fmt}\n : $enabled ? (\n $factor = 4 ? {\"type\": \"usd\", \"usd\": 0.0991, \"format\": $fmt}\n : $factor = 3 ? {\"type\": \"usd\", \"usd\": 0.0819, \"format\": $fmt}\n : {\"type\": \"usd\", \"usd\": 0.0686, \"format\": $fmt}\n ) : {\"type\": \"usd\", \"usd\": 0.0572, \"format\": $fmt}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ReveImageRemixNode": {"input": {"required": {"reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image_", "min": 1, "max": 6}}], "prompt": ["STRING", {"tooltip": "Text description of the desired image. May include XML img tags to reference specific images by index, e.g.
0,
1, etc.", "default": "", "multiline": true}], "model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model version to use for remixing.", "options": [{"key": "reve-remix@20250915", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output image.", "multiselect": false, "options": ["auto", "16:9", "9:16", "3:2", "2:3", "4:3", "3:4", "1:1"]}], "test_time_scaling": ["INT", {"tooltip": "Higher values produce better images but cost more credits.", "advanced": true, "default": 1, "min": 1, "max": 5, "step": 1}]}}}, {"key": "reve-remix-fast@20251030", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output image.", "multiselect": false, "options": ["auto", "16:9", "9:16", "3:2", "2:3", "4:3", "3:4", "1:1"]}], "test_time_scaling": ["INT", {"tooltip": "Higher values produce better images but cost more credits.", "advanced": true, "default": 1, "min": 1, "max": 5, "step": 1}]}}}]}], "upscale": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Upscale the generated image. May add additional cost.", "options": [{"key": "disabled", "inputs": {"required": {}}}, {"key": "enabled", "inputs": {"required": {"upscale_factor": ["INT", {"tooltip": "Upscale factor (2x, 3x, or 4x).", "default": 2, "min": 2, "max": 4, "step": 1}]}}}]}], "remove_background": ["BOOLEAN", {"tooltip": "Remove the background from the generated image. May add additional cost.", "default": false}], "seed": ["INT", {"tooltip": "Seed controls whether the node should re-run; results are non-deterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["reference_images", "prompt", "model", "upscale", "remove_background", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "ReveImageRemixNode", "display_name": "Reve Image Remix", "description": "Combine reference images with text prompts to create new images using Reve.", "python_module": "comfy_api_nodes.nodes_reve", "category": "partner/image/Reve", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscale", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscale.upscale_factor", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $fmt := {\"approximate\": true, \"note\": \"(base)\"};\n $isFast := $contains(widgets.model, \"fast\");\n $enabled := widgets.upscale = \"enabled\";\n $factor := $lookup(widgets, \"upscale.upscale_factor\");\n $isFast\n ? {\"type\": \"usd\", \"usd\": 0.01001, \"format\": $fmt}\n : $enabled ? (\n $factor = 4 ? {\"type\": \"usd\", \"usd\": 0.0991, \"format\": $fmt}\n : $factor = 3 ? {\"type\": \"usd\", \"usd\": 0.0819, \"format\": $fmt}\n : {\"type\": \"usd\", \"usd\": 0.0686, \"format\": $fmt}\n ) : {\"type\": \"usd\", \"usd\": 0.0572, \"format\": $fmt}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Regular": {"input": {"required": {"Images": ["IMAGE", {}]}, "optional": {"Seed": ["INT", {"default": 0, "min": 0, "max": 65535, "display": "number"}], "Material_Type": ["COMBO", {"default": "PBR", "multiselect": false, "options": ["PBR", "Shaded"]}], "Polygon_count": ["COMBO", {"default": "18K-Quad", "multiselect": false, "options": ["4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "200K-Triangle"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["Images"], "optional": ["Seed", "Material_Type", "Polygon_count"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB"], "output_is_list": [false, false], "output_name": ["3D Model Path", "GLB"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Rodin3D_Regular", "display_name": "Rodin 3D Generate - Regular Generate", "description": "Generate 3D Assets using Rodin API", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Detail": {"input": {"required": {"Images": ["IMAGE", {}]}, "optional": {"Seed": ["INT", {"default": 0, "min": 0, "max": 65535, "display": "number"}], "Material_Type": ["COMBO", {"default": "PBR", "multiselect": false, "options": ["PBR", "Shaded"]}], "Polygon_count": ["COMBO", {"default": "18K-Quad", "multiselect": false, "options": ["4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "200K-Triangle"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["Images"], "optional": ["Seed", "Material_Type", "Polygon_count"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB"], "output_is_list": [false, false], "output_name": ["3D Model Path", "GLB"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Rodin3D_Detail", "display_name": "Rodin 3D Generate - Detail Generate", "description": "Generate 3D Assets using Rodin API", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Smooth": {"input": {"required": {"Images": ["IMAGE", {}]}, "optional": {"Seed": ["INT", {"default": 0, "min": 0, "max": 65535, "display": "number"}], "Material_Type": ["COMBO", {"default": "PBR", "multiselect": false, "options": ["PBR", "Shaded"]}], "Polygon_count": ["COMBO", {"default": "18K-Quad", "multiselect": false, "options": ["4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "200K-Triangle"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["Images"], "optional": ["Seed", "Material_Type", "Polygon_count"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB"], "output_is_list": [false, false], "output_name": ["3D Model Path", "GLB"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Rodin3D_Smooth", "display_name": "Rodin 3D Generate - Smooth Generate", "description": "Generate 3D Assets using Rodin API", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Sketch": {"input": {"required": {"Images": ["IMAGE", {}]}, "optional": {"Seed": ["INT", {"default": 0, "min": 0, "max": 65535, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["Images"], "optional": ["Seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB"], "output_is_list": [false, false], "output_name": ["3D Model Path", "GLB"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Rodin3D_Sketch", "display_name": "Rodin 3D Generate - Sketch Generate", "description": "Generate 3D Assets using Rodin API", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Gen2": {"input": {"required": {"Images": ["IMAGE", {}], "TAPose": ["BOOLEAN", {"advanced": true, "default": false}]}, "optional": {"Seed": ["INT", {"default": 0, "min": 0, "max": 65535, "display": "number"}], "Material_Type": ["COMBO", {"default": "PBR", "multiselect": false, "options": ["PBR", "Shaded"]}], "Polygon_count": ["COMBO", {"default": "500K-Triangle", "multiselect": false, "options": ["4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "2K-Triangle", "20K-Triangle", "150K-Triangle", "500K-Triangle"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["Images", "TAPose"], "optional": ["Seed", "Material_Type", "Polygon_count"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "FILE_3D_GLB"], "output_is_list": [false, false], "output_name": ["3D Model Path", "GLB"], "output_tooltips": [null, null], "output_matchtypes": null, "name": "Rodin3D_Gen2", "display_name": "Rodin 3D Generate - Gen-2 Generate", "description": "Generate 3D Assets using Rodin API", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Gen25_Image": {"input": {"required": {"images": ["COMFY_AUTOGROW_V3", {"tooltip": "1-5 images. The first image is used for materials when multi-view.", "template": {"input": {"required": {"image": ["IMAGE", {}]}}, "prefix": "image", "min": 1, "max": 5}}], "mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generation mode. Regular = balanced. Fast = 1K-20K faces for rapid prototyping. Extreme-High = 20K-2M faces with optional micro details.", "options": [{"key": "Regular", "inputs": {"required": {"tier": ["COMBO", {"tooltip": "Quality tier. Higher tiers produce higher-fidelity geometry.", "default": "Gen-2.5-High", "multiselect": false, "options": ["Gen-2.5-Low", "Gen-2.5-Medium", "Gen-2.5-High"]}], "polygon_count": ["COMBO", {"tooltip": "Preset face count. 'Default' uses the server's default for the selected tier.", "default": "Default", "multiselect": false, "options": ["Default", "4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "2K-Triangle", "20K-Triangle", "150K-Triangle", "500K-Triangle", "1M-Triangle"]}], "creative": ["BOOLEAN", {"tooltip": "Creative mode (Medium/High only). Enhances generative robustness.", "default": false}]}}}, {"key": "Fast", "inputs": {"required": {"tier": ["COMBO", {"default": "Gen-2.5-Low", "multiselect": false, "options": ["Gen-2.5-Extreme-Low", "Gen-2.5-Low", "Gen-2.5-Medium", "Gen-2.5-High"]}], "mesh_faces": ["INT", {"tooltip": "Mesh face count (1K-20K in Fast mode).", "default": 20000, "min": 1000, "max": 20000, "display": "number"}]}}}, {"key": "Extreme-High", "inputs": {"required": {"mesh_mode": ["COMBO", {"default": "Raw", "multiselect": false, "options": ["Raw", "Quad"]}], "mesh_faces": ["INT", {"tooltip": "Mesh face count. Raw mode: 20K-2M. Quad mode: keep under 200K (upstream may reject higher values).", "default": 1000000, "min": 20000, "max": 2000000, "display": "number"}], "is_micro": ["BOOLEAN", {"tooltip": "Enable micro detail (Extreme-High only).", "default": false}], "creative": ["BOOLEAN", {"tooltip": "Creative mode. Enhances generative robustness.", "default": false}]}}}]}], "material": ["COMBO", {"default": "Shaded", "multiselect": false, "options": ["PBR", "Shaded", "All", "None"]}], "geometry_file_format": ["COMBO", {"default": "glb", "multiselect": false, "options": ["glb", "fbx", "obj", "stl"]}]}, "optional": {"texture_mode": ["COMBO", {"tooltip": "Texture quality preset. 'Default' uses the server's default for the selected tier.", "default": "Default", "multiselect": false, "options": ["Default", "legacy", "extreme-low", "low", "medium", "high"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 65535, "control_after_generate": true, "display": "number"}], "TAPose": ["BOOLEAN", {"tooltip": "T/A pose for human-like models.", "advanced": true, "default": false}], "hd_texture": ["BOOLEAN", {"tooltip": "High-quality texture enhancement.", "advanced": true, "default": false}], "texture_delight": ["BOOLEAN", {"tooltip": "Remove baked lighting from textures.", "advanced": true, "default": false}], "use_original_alpha": ["BOOLEAN", {"tooltip": "Preserve image transparency.", "advanced": true, "default": false}], "addon_highpack": ["BOOLEAN", {"tooltip": "HighPack addon: 4K textures and ~16x faces in Quad mode.", "advanced": true, "default": false}], "bbox_width": ["INT", {"tooltip": "Bounding-box width (Y axis). Set to 0 with the others to skip bbox.", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "bbox_height": ["INT", {"tooltip": "Bounding-box height (Z axis).", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "bbox_length": ["INT", {"tooltip": "Bounding-box length (X axis).", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "height_cm": ["INT", {"tooltip": "Approximate model height in centimeters (0 to skip).", "advanced": true, "default": 0, "min": 0, "max": 10000, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["images", "mode", "material", "geometry_file_format"], "optional": ["texture_mode", "seed", "TAPose", "hd_texture", "texture_delight", "use_original_alpha", "addon_highpack", "bbox_width", "bbox_height", "bbox_length", "height_cm"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["FILE_3D"], "output_is_list": [false], "output_name": ["model_file"], "output_tooltips": [null], "output_matchtypes": null, "name": "Rodin3D_Gen25_Image", "display_name": "Rodin 3D Gen-2.5 - Image to 3D", "description": "Generate a 3D model from 1-5 reference images via Rodin Gen-2.5. Pick a mode (Fast / Regular / Extreme-High) to tune quality vs. cost.", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "addon_highpack", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n(\n $baseCredits := widgets.mode = \"extreme-high\" ? 1.0 : 0.5;\n $addonCredits := widgets.addon_highpack ? 1.0 : 0.0;\n $total := ($baseCredits * 1.5) + ($addonCredits * 0.8);\n {\"type\":\"usd\",\"usd\": $total}\n)\n"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Rodin3D_Gen25_Text": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the 3D model.", "default": "", "multiline": true}], "mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Generation mode. Regular = balanced. Fast = 1K-20K faces for rapid prototyping. Extreme-High = 20K-2M faces with optional micro details.", "options": [{"key": "Regular", "inputs": {"required": {"tier": ["COMBO", {"tooltip": "Quality tier. Higher tiers produce higher-fidelity geometry.", "default": "Gen-2.5-High", "multiselect": false, "options": ["Gen-2.5-Low", "Gen-2.5-Medium", "Gen-2.5-High"]}], "polygon_count": ["COMBO", {"tooltip": "Preset face count. 'Default' uses the server's default for the selected tier.", "default": "Default", "multiselect": false, "options": ["Default", "4K-Quad", "8K-Quad", "18K-Quad", "50K-Quad", "2K-Triangle", "20K-Triangle", "150K-Triangle", "500K-Triangle", "1M-Triangle"]}], "creative": ["BOOLEAN", {"tooltip": "Creative mode (Medium/High only). Enhances generative robustness.", "default": false}]}}}, {"key": "Fast", "inputs": {"required": {"tier": ["COMBO", {"default": "Gen-2.5-Low", "multiselect": false, "options": ["Gen-2.5-Extreme-Low", "Gen-2.5-Low", "Gen-2.5-Medium", "Gen-2.5-High"]}], "mesh_faces": ["INT", {"tooltip": "Mesh face count (1K-20K in Fast mode).", "default": 20000, "min": 1000, "max": 20000, "display": "number"}]}}}, {"key": "Extreme-High", "inputs": {"required": {"mesh_mode": ["COMBO", {"default": "Raw", "multiselect": false, "options": ["Raw", "Quad"]}], "mesh_faces": ["INT", {"tooltip": "Mesh face count. Raw mode: 20K-2M. Quad mode: keep under 200K (upstream may reject higher values).", "default": 1000000, "min": 20000, "max": 2000000, "display": "number"}], "is_micro": ["BOOLEAN", {"tooltip": "Enable micro detail (Extreme-High only).", "default": false}], "creative": ["BOOLEAN", {"tooltip": "Creative mode. Enhances generative robustness.", "default": false}]}}}]}], "material": ["COMBO", {"default": "Shaded", "multiselect": false, "options": ["PBR", "Shaded", "All", "None"]}], "geometry_file_format": ["COMBO", {"default": "glb", "multiselect": false, "options": ["glb", "fbx", "obj", "stl"]}]}, "optional": {"texture_mode": ["COMBO", {"tooltip": "Texture quality preset. 'Default' uses the server's default for the selected tier.", "default": "Default", "multiselect": false, "options": ["Default", "legacy", "extreme-low", "low", "medium", "high"]}], "seed": ["INT", {"default": 0, "min": 0, "max": 65535, "control_after_generate": true, "display": "number"}], "TAPose": ["BOOLEAN", {"tooltip": "T/A pose for human-like models.", "advanced": true, "default": false}], "hd_texture": ["BOOLEAN", {"tooltip": "High-quality texture enhancement.", "advanced": true, "default": false}], "texture_delight": ["BOOLEAN", {"tooltip": "Remove baked lighting from textures.", "advanced": true, "default": false}], "addon_highpack": ["BOOLEAN", {"tooltip": "HighPack addon: 4K textures and ~16x faces in Quad mode.", "advanced": true, "default": false}], "bbox_width": ["INT", {"tooltip": "Bounding-box width (Y axis). Set to 0 with the others to skip bbox.", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "bbox_height": ["INT", {"tooltip": "Bounding-box height (Z axis).", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "bbox_length": ["INT", {"tooltip": "Bounding-box length (X axis).", "advanced": true, "default": 0, "min": 0, "max": 300, "display": "number"}], "height_cm": ["INT", {"tooltip": "Approximate model height in centimeters (0 to skip).", "advanced": true, "default": 0, "min": 0, "max": 10000, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "mode", "material", "geometry_file_format"], "optional": ["texture_mode", "seed", "TAPose", "hd_texture", "texture_delight", "addon_highpack", "bbox_width", "bbox_height", "bbox_length", "height_cm"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["FILE_3D"], "output_is_list": [false], "output_name": ["model_file"], "output_tooltips": [null], "output_matchtypes": null, "name": "Rodin3D_Gen25_Text", "display_name": "Rodin 3D Gen-2.5 - Text to 3D", "description": "Generate a 3D model from a text prompt via Rodin Gen-2.5. Pick a mode (Fast / Regular / Extreme-High) to tune quality vs. cost.", "python_module": "comfy_api_nodes.nodes_rodin", "category": "partner/3d/Rodin", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "mode", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "addon_highpack", "type": "BOOLEAN"}], "inputs": [], "input_groups": []}, "expr": "\n(\n $baseCredits := widgets.mode = \"extreme-high\" ? 1.0 : 0.5;\n $addonCredits := widgets.addon_highpack ? 1.0 : 0.0;\n $total := ($baseCredits * 1.5) + ($addonCredits * 0.8);\n {\"type\":\"usd\",\"usd\": $total}\n)\n"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayFirstLastFrameNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the generation", "default": "", "multiline": true}], "start_frame": ["IMAGE", {"tooltip": "Start frame to be used for the video"}], "end_frame": ["IMAGE", {"tooltip": "End frame to be used for the video. Supported for gen3a_turbo only."}], "duration": ["COMBO", {"multiselect": false, "options": [5, 10]}], "ratio": ["COMBO", {"multiselect": false, "options": ["768:1280", "1280:768"]}], "seed": ["INT", {"tooltip": "Random seed for generation", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "start_frame", "end_frame", "duration", "ratio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayFirstLastFrameNode", "display_name": "Runway First-Last-Frame to Video", "description": "Upload first and last keyframes, draft a prompt, and generate a video. More complex transitions, such as cases where the Last frame is completely different from the First frame, may benefit from the longer 10s duration. This would give the generation more time to smoothly transition between the two inputs. Before diving in, review these best practices to ensure that your input selections will set your generation up for success: https://help.runwayml.com/hc/en-us/articles/34170748696595-Creating-with-Keyframes-on-Gen-3.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/video/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.0715 * widgets.duration}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayImageToVideoNodeGen3a": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the generation", "default": "", "multiline": true}], "start_frame": ["IMAGE", {"tooltip": "Start frame to be used for the video"}], "duration": ["COMBO", {"multiselect": false, "options": [5, 10]}], "ratio": ["COMBO", {"multiselect": false, "options": ["768:1280", "1280:768"]}], "seed": ["INT", {"tooltip": "Random seed for generation", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "start_frame", "duration", "ratio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayImageToVideoNodeGen3a", "display_name": "Runway Image to Video (Gen3a Turbo)", "description": "Generate a video from a single starting frame using Gen3a Turbo model. Before diving in, review these best practices to ensure that your input selections will set your generation up for success: https://help.runwayml.com/hc/en-us/articles/33927968552339-Creating-with-Act-One-on-Gen-3-Alpha-and-Turbo.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/video/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.0715 * widgets.duration}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayImageToVideoNodeGen4": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the generation", "default": "", "multiline": true}], "start_frame": ["IMAGE", {"tooltip": "Start frame to be used for the video"}], "duration": ["COMBO", {"multiselect": false, "options": [5, 10]}], "ratio": ["COMBO", {"multiselect": false, "options": ["1280:720", "720:1280", "1104:832", "832:1104", "960:960", "1584:672"]}], "seed": ["INT", {"tooltip": "Random seed for generation", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "start_frame", "duration", "ratio", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayImageToVideoNodeGen4", "display_name": "Runway Image to Video (Gen4 Turbo)", "description": "Generate a video from a single starting frame using Gen4 Turbo model. Before diving in, review these best practices to ensure that your input selections will set your generation up for success: https://help.runwayml.com/hc/en-us/articles/37327109429011-Creating-with-Gen-4-Video.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/video/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.0715 * widgets.duration}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayTextToImageNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt for the generation", "default": "", "multiline": true}], "ratio": ["COMBO", {"multiselect": false, "options": ["1920:1080", "1080:1920", "1024:1024", "1360:768", "1080:1080", "1168:880", "1440:1080", "1080:1440", "1808:768", "2112:912"]}]}, "optional": {"reference_image": ["IMAGE", {"tooltip": "Optional reference image to guide the generation"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "ratio"], "optional": ["reference_image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayTextToImageNode", "display_name": "Runway Text to Image", "description": "Generate an image from a text prompt using Runway's Gen 4 model. You can also include reference image to guide the generation.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/image/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.11}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayAleph2VideoToVideoNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Describes what should appear in the output (1-1000 characters).", "default": "", "multiline": true}], "video": ["VIDEO", {"tooltip": "Input video to edit. Must be 2-30 seconds at 30 fps or lower."}], "seed": ["INT", {"tooltip": "Random seed for generation", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}], "public_figure_threshold": ["COMBO", {"tooltip": "Content moderation for recognizable public figures.", "default": "low", "multiselect": false, "options": ["auto", "low"]}]}, "optional": {"keyframes": ["RUNWAY_ALEPH2_KEYFRAME", {"tooltip": "Guidance images anchored to the input video, from Aleph2 Keyframe nodes (up to 5). Use keyframes or prompt images, not both."}], "prompt_images": ["RUNWAY_ALEPH2_PROMPT_IMAGE", {"tooltip": "Guidance images anchored to the output video, from Aleph2 Prompt Image nodes (up to 5). Use keyframes or prompt images, not both."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "video", "seed", "public_figure_threshold"], "optional": ["keyframes", "prompt_images"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayAleph2VideoToVideoNode", "display_name": "Runway Aleph2 Video to Video", "description": "Edit a video with a text prompt using Runway's Aleph2 model. Aleph2 transforms your footage (restyle, relight, add or remove elements, change the viewpoint) while keeping the original motion and timing; the output resolution matches the input video, which must be 2-30 seconds at 30 fps or lower. Optionally steer the edit with either keyframes (anchored to the input video) or prompt images (anchored to the output video) - use one or the other, not both.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/video/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.4004, \"format\":{\"suffix\":\"/second\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayAleph2KeyframeNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "The guidance image to apply at the chosen moment of the input video."}], "timing": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "How to place this image on the input video's timeline.", "options": [{"key": "Absolute time (seconds)", "inputs": {"required": {"seconds": ["FLOAT", {"tooltip": "Time in seconds from start of the input video where this image applies.", "default": 0.0, "min": 0.0, "max": 30.0, "step": 0.1, "display": "number"}]}}}, {"key": "Fraction of duration (0.0-1.0)", "inputs": {"required": {"fraction": ["FLOAT", {"tooltip": "Where in the input video this image applies, as a fraction of its duration (0.0 = start, 1.0 = end).", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01, "display": "number"}]}}}]}]}, "optional": {"keyframes": ["RUNWAY_ALEPH2_KEYFRAME", {"tooltip": "Optional earlier keyframes to chain with this one."}]}}, "input_order": {"required": ["image", "timing"], "optional": ["keyframes"]}, "is_input_list": false, "output": ["RUNWAY_ALEPH2_KEYFRAME"], "output_is_list": [false], "output_name": ["keyframes"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayAleph2KeyframeNode", "display_name": "Runway Aleph2 Keyframe", "description": "Anchor a guidance image to a moment of the input (source) video, so Aleph2 steers the edit at that point of your footage. Connect this to the 'keyframes' input of the Runway Aleph2 Video to Video node; chain several together (up to 5) via the optional 'keyframes' input below.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/video/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "RunwayAleph2PromptImageNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "The guidance image to place at the chosen moment of the output video."}], "position": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "How to place this image on the output video's timeline.", "options": [{"key": "Absolute time (seconds)", "inputs": {"required": {"seconds": ["FLOAT", {"tooltip": "Time in seconds from start of the output video where this image applies.", "default": 0.0, "min": 0.0, "max": 30.0, "step": 0.1, "display": "number"}]}}}, {"key": "Fraction of duration (0.0-1.0)", "inputs": {"required": {"fraction": ["FLOAT", {"tooltip": "Where in the output video this image applies, as a fraction of its duration (0.0 = start, 1.0 = end).", "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01, "display": "number"}]}}}]}]}, "optional": {"prompt_images": ["RUNWAY_ALEPH2_PROMPT_IMAGE", {"tooltip": "Optional earlier prompt images to chain with this one."}]}}, "input_order": {"required": ["image", "position"], "optional": ["prompt_images"]}, "is_input_list": false, "output": ["RUNWAY_ALEPH2_PROMPT_IMAGE"], "output_is_list": [false], "output_name": ["prompt_images"], "output_tooltips": [null], "output_matchtypes": null, "name": "RunwayAleph2PromptImageNode", "display_name": "Runway Aleph2 Prompt Image", "description": "Anchor a guidance image to a moment of the output (result) video, to guide what the edited video looks like at that point. Connect this to the 'prompt_images' input of the Runway Aleph2 Video to Video node; chain several together (up to 5) via the optional 'prompt_images' input below.", "python_module": "comfy_api_nodes.nodes_runway", "category": "partner/video/Runway", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": false, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SoniloVideoToMusic": {"input": {"required": {"video": ["VIDEO", {"tooltip": "Input video to generate music from. Maximum duration: 6 minutes."}], "prompt": ["STRING", {"tooltip": "Optional text prompt to guide music generation. Leave empty for best quality - the model will fully analyze the video content.", "default": "", "multiline": true}], "seed": ["INT", {"tooltip": "Seed for reproducibility. Currently ignored by the Sonilo service but kept for graph consistency.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "SoniloVideoToMusic", "display_name": "Sonilo Video to Music", "description": "Generate music from video content using Sonilo's AI model. Analyzes the video and creates matching music.", "python_module": "comfy_api_nodes.nodes_sonilo", "category": "partner/audio/Sonilo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.009,\"format\":{\"suffix\":\"/second\"}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SoniloTextToMusic": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text prompt describing the music to generate.", "default": "", "multiline": true}], "duration": ["INT", {"tooltip": "Target duration in seconds. Maximum: 6 minutes.", "default": 30, "min": 1, "max": 360}], "seed": ["INT", {"tooltip": "Seed for reproducibility. Currently ignored by the Sonilo service but kept for graph consistency.", "default": 0, "min": 0, "max": 18446744073709551615, "control_after_generate": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "duration", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "SoniloTextToMusic", "display_name": "Sonilo Text to Music", "description": "Generate music from a text prompt using Sonilo's AI model.", "python_module": "comfy_api_nodes.nodes_sonilo", "category": "partner/audio/Sonilo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.0025 * widgets.duration}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "OpenAIVideoSora2": {"input": {"required": {"model": ["COMBO", {"default": "sora-2", "multiselect": false, "options": ["sora-2", "sora-2-pro"]}], "prompt": ["STRING", {"tooltip": "Guiding text; may be empty if an input image is present.", "default": "", "multiline": true}], "size": ["COMBO", {"default": "1280x720", "multiselect": false, "options": ["720x1280", "1280x720", "1024x1792", "1792x1024"]}], "duration": ["COMBO", {"default": 8, "multiselect": false, "options": [4, 8, 12]}]}, "optional": {"image": ["IMAGE", {}], "seed": ["INT", {"tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "size", "duration"], "optional": ["image", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "OpenAIVideoSora2", "display_name": "OpenAI Sora - Video (DEPRECATED)", "description": "OpenAI video and audio generation.\n\nDEPRECATION NOTICE: OpenAI will stop serving the Sora v2 API in September 2026. This node will be removed from ComfyUI at that time.", "python_module": "comfy_api_nodes.nodes_sora", "category": "partner/video/Sora", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "size", "type": "COMBO"}, {"name": "duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $size := widgets.size;\n $dur := widgets.duration;\n $isPro := $contains($m, \"sora-2-pro\");\n $isSora2 := $contains($m, \"sora-2\");\n $isProSize := ($size = \"1024x1792\" or $size = \"1792x1024\");\n $perSec :=\n $isPro ? ($isProSize ? 0.5 : 0.3) :\n $isSora2 ? 0.1 :\n ($isProSize ? 0.5 : 0.1);\n {\"type\":\"usd\",\"usd\": $round($perSec * $dur, 2)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityStableImageUltraNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "What you wish to see in the output image. A strong, descriptive prompt that clearly defineselements, colors, and subjects will lead to better results. To control the weight of a given word use the format `(word:weight)`,where `word` is the word you'd like to control the weight of and `weight`is a value between 0 and 1. For example: `The sky was a crisp (blue:0.3) and (green:0.8)`would convey a sky that was blue and green, but more green than blue.", "default": "", "multiline": true}], "aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of generated image.", "default": "1:1", "multiselect": false, "options": ["1:1", "16:9", "9:16", "3:2", "2:3", "5:4", "4:5", "21:9", "9:21"]}], "style_preset": ["COMBO", {"tooltip": "Optional desired style of generated image.", "advanced": true, "multiselect": false, "options": ["None", "3d-model", "analog-film", "anime", "cinematic", "comic-book", "digital-art", "enhance", "fantasy-art", "isometric", "line-art", "low-poly", "modeling-compound", "neon-punk", "origami", "photographic", "pixel-art", "tile-texture"]}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"image": ["IMAGE", {}], "negative_prompt": ["STRING", {"tooltip": "A blurb of text describing what you do not wish to see in the output image. This is an advanced feature.", "advanced": true, "default": "", "forceInput": true, "multiline": false}], "image_denoise": ["FLOAT", {"tooltip": "Denoise of input image; 0.0 yields image identical to input, 1.0 is as if no image was provided at all.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "aspect_ratio", "style_preset", "seed"], "optional": ["image", "negative_prompt", "image_denoise"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityStableImageUltraNode", "display_name": "Stability AI Stable Image Ultra", "description": "Generates images synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/image/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.08}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityStableImageSD_3_5Node": {"input": {"required": {"prompt": ["STRING", {"tooltip": "What you wish to see in the output image. A strong, descriptive prompt that clearly defines elements, colors, and subjects will lead to better results.", "default": "", "multiline": true}], "model": ["COMBO", {"multiselect": false, "options": ["sd3.5-large", "sd3.5-medium"]}], "aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of generated image.", "default": "1:1", "multiselect": false, "options": ["1:1", "16:9", "9:16", "3:2", "2:3", "5:4", "4:5", "21:9", "9:21"]}], "style_preset": ["COMBO", {"tooltip": "Optional desired style of generated image.", "advanced": true, "multiselect": false, "options": ["None", "3d-model", "analog-film", "anime", "cinematic", "comic-book", "digital-art", "enhance", "fantasy-art", "isometric", "line-art", "low-poly", "modeling-compound", "neon-punk", "origami", "photographic", "pixel-art", "tile-texture"]}], "cfg_scale": ["FLOAT", {"tooltip": "How strictly the diffusion process adheres to the prompt text (higher values keep your image closer to your prompt)", "default": 4.0, "min": 1.0, "max": 10.0, "step": 0.1}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"image": ["IMAGE", {}], "negative_prompt": ["STRING", {"tooltip": "Keywords of what you do not wish to see in the output image. This is an advanced feature.", "advanced": true, "default": "", "forceInput": true, "multiline": false}], "image_denoise": ["FLOAT", {"tooltip": "Denoise of input image; 0.0 yields image identical to input, 1.0 is as if no image was provided at all.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "model", "aspect_ratio", "style_preset", "cfg_scale", "seed"], "optional": ["image", "negative_prompt", "image_denoise"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityStableImageSD_3_5Node", "display_name": "Stability AI Stable Diffusion 3.5 Image", "description": "Generates images synchronously based on prompt and resolution.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/image/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $contains(widgets.model,\"large\")\n ? {\"type\":\"usd\",\"usd\":0.065}\n : {\"type\":\"usd\",\"usd\":0.035}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityUpscaleConservativeNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "What you wish to see in the output image. A strong, descriptive prompt that clearly defines elements, colors, and subjects will lead to better results.", "default": "", "multiline": true}], "creativity": ["FLOAT", {"tooltip": "Controls the likelihood of creating additional details not heavily conditioned by the init image.", "default": 0.35, "min": 0.2, "max": 0.5, "step": 0.01}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Keywords of what you do not wish to see in the output image. This is an advanced feature.", "advanced": true, "default": "", "forceInput": true, "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "creativity", "seed"], "optional": ["negative_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityUpscaleConservativeNode", "display_name": "Stability AI Upscale Conservative", "description": "Upscale image with minimal alterations to 4K resolution.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/image/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityUpscaleCreativeNode": {"input": {"required": {"image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "What you wish to see in the output image. A strong, descriptive prompt that clearly defines elements, colors, and subjects will lead to better results.", "default": "", "multiline": true}], "creativity": ["FLOAT", {"tooltip": "Controls the likelihood of creating additional details not heavily conditioned by the init image.", "default": 0.3, "min": 0.1, "max": 0.5, "step": 0.01}], "style_preset": ["COMBO", {"tooltip": "Optional desired style of generated image.", "advanced": true, "multiselect": false, "options": ["None", "3d-model", "analog-film", "anime", "cinematic", "comic-book", "digital-art", "enhance", "fantasy-art", "isometric", "line-art", "low-poly", "modeling-compound", "neon-punk", "origami", "photographic", "pixel-art", "tile-texture"]}], "seed": ["INT", {"tooltip": "The random seed used for creating the noise.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Keywords of what you do not wish to see in the output image. This is an advanced feature.", "advanced": true, "default": "", "forceInput": true, "multiline": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "prompt", "creativity", "style_preset", "seed"], "optional": ["negative_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityUpscaleCreativeNode", "display_name": "Stability AI Upscale Creative", "description": "Upscale image with minimal alterations to 4K resolution.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/image/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.6}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityUpscaleFastNode": {"input": {"required": {"image": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityUpscaleFastNode", "display_name": "Stability AI Upscale Fast", "description": "Quickly upscales an image via Stability API call to 4x its original size; intended for upscaling low-quality/compressed images.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/image/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.02}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityTextToAudio": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["stable-audio-2.5"]}], "prompt": ["STRING", {"default": "", "multiline": true}]}, "optional": {"duration": ["INT", {"tooltip": "Controls the duration in seconds of the generated audio.", "default": 190, "min": 1, "max": 190, "step": 1}], "seed": ["INT", {"tooltip": "The random seed used for generation.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}], "steps": ["INT", {"tooltip": "Controls the number of sampling steps.", "advanced": true, "default": 8, "min": 4, "max": 8, "step": 1}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt"], "optional": ["duration", "seed", "steps"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityTextToAudio", "display_name": "Stability AI Text To Audio", "description": "Generates high-quality music and sound effects from text descriptions.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/audio/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.2}"}, "search_aliases": null, "essentials_category": "Audio", "has_intermediate_output": false}, "StabilityAudioToAudio": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["stable-audio-2.5"]}], "prompt": ["STRING", {"default": "", "multiline": true}], "audio": ["AUDIO", {"tooltip": "Audio must be between 6 and 190 seconds long."}]}, "optional": {"duration": ["INT", {"tooltip": "Controls the duration in seconds of the generated audio.", "default": 190, "min": 1, "max": 190, "step": 1}], "seed": ["INT", {"tooltip": "The random seed used for generation.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}], "steps": ["INT", {"tooltip": "Controls the number of sampling steps.", "advanced": true, "default": 8, "min": 4, "max": 8, "step": 1}], "strength": ["FLOAT", {"tooltip": "Parameter controls how much influence the audio parameter has on the generated audio.", "default": 1, "min": 0.01, "max": 1.0, "step": 0.01, "display": "slider"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "audio"], "optional": ["duration", "seed", "steps", "strength"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityAudioToAudio", "display_name": "Stability AI Audio To Audio", "description": "Transforms existing audio samples into new high-quality compositions using text instructions.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/audio/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.2}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "StabilityAudioInpaint": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["stable-audio-2.5"]}], "prompt": ["STRING", {"default": "", "multiline": true}], "audio": ["AUDIO", {"tooltip": "Audio must be between 6 and 190 seconds long."}]}, "optional": {"duration": ["INT", {"tooltip": "Controls the duration in seconds of the generated audio.", "default": 190, "min": 1, "max": 190, "step": 1}], "seed": ["INT", {"tooltip": "The random seed used for generation.", "default": 0, "min": 0, "max": 4294967294, "step": 1, "control_after_generate": true, "display": "number"}], "steps": ["INT", {"tooltip": "Controls the number of sampling steps.", "advanced": true, "default": 8, "min": 4, "max": 8, "step": 1}], "mask_start": ["INT", {"advanced": true, "default": 30, "min": 0, "max": 190, "step": 1}], "mask_end": ["INT", {"advanced": true, "default": 190, "min": 0, "max": 190, "step": 1}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "audio"], "optional": ["duration", "seed", "steps", "mask_start", "mask_end"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["AUDIO"], "output_is_list": [false], "output_name": ["AUDIO"], "output_tooltips": [null], "output_matchtypes": null, "name": "StabilityAudioInpaint", "display_name": "Stability AI Audio Inpaint", "description": "Transforms part of existing audio sample using text instructions.", "python_module": "comfy_api_nodes.nodes_stability", "category": "partner/audio/Stability AI", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.2}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TopazImageEnhance": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["Reimagine"]}], "image": ["IMAGE", {}]}, "optional": {"prompt": ["STRING", {"tooltip": "Optional text prompt for creative upscaling guidance.", "default": "", "multiline": true}], "subject_detection": ["COMBO", {"advanced": true, "multiselect": false, "options": ["All", "Foreground", "Background"]}], "face_enhancement": ["BOOLEAN", {"tooltip": "Enhance faces (if present) during processing.", "advanced": true, "default": true}], "face_enhancement_creativity": ["FLOAT", {"tooltip": "Set the creativity level for face enhancement.", "advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01, "display": "number"}], "face_enhancement_strength": ["FLOAT", {"tooltip": "Controls how sharp enhanced faces are relative to the background.", "advanced": true, "default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "display": "number"}], "crop_to_fill": ["BOOLEAN", {"tooltip": "By default, the image is letterboxed when the output aspect ratio differs. Enable to crop the image to fill the output dimensions.", "advanced": true, "default": false}], "output_width": ["INT", {"tooltip": "Zero value means to calculate automatically (usually it will be original size or output_height if specified).", "advanced": true, "default": 0, "min": 0, "max": 32000, "step": 1, "display": "number"}], "output_height": ["INT", {"tooltip": "Zero value means to output in the same height as original or output width.", "advanced": true, "default": 0, "min": 0, "max": 32000, "step": 1, "display": "number"}], "creativity": ["INT", {"default": 3, "min": 1, "max": 9, "step": 1, "display": "slider"}], "face_preservation": ["BOOLEAN", {"tooltip": "Preserve subjects' facial identity.", "advanced": true, "default": true}], "color_preservation": ["BOOLEAN", {"tooltip": "Preserve the original colors.", "advanced": true, "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image"], "optional": ["prompt", "subject_detection", "face_enhancement", "face_enhancement_creativity", "face_enhancement_strength", "crop_to_fill", "output_width", "output_height", "creativity", "face_preservation", "color_preservation"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "TopazImageEnhance", "display_name": "Topaz Image Enhance", "description": "Industry-standard upscaling and image enhancement.", "python_module": "comfy_api_nodes.nodes_topaz", "category": "partner/image/Topaz", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TopazVideoEnhance": {"input": {"required": {"video": ["VIDEO", {}], "upscaler_enabled": ["BOOLEAN", {"default": true}], "upscaler_model": ["COMBO", {"multiselect": false, "options": ["Starlight (Astra) Fast", "Starlight (Astra) Creative", "Starlight Precise 2.5"]}], "upscaler_resolution": ["COMBO", {"multiselect": false, "options": ["FullHD (1080p)", "4K (2160p)"]}]}, "optional": {"upscaler_creativity": ["COMBO", {"tooltip": "Creativity level (applies only to Starlight (Astra) Creative).", "advanced": true, "default": "low", "multiselect": false, "options": ["low", "middle", "high"]}], "interpolation_enabled": ["BOOLEAN", {"default": false}], "interpolation_model": ["COMBO", {"advanced": true, "default": "apo-8", "multiselect": false, "options": ["apo-8"]}], "interpolation_slowmo": ["INT", {"tooltip": "Slow-motion factor applied to the input video. For example, 2 makes the output twice as slow and doubles the duration.", "advanced": true, "default": 1, "min": 1, "max": 16, "display": "number"}], "interpolation_frame_rate": ["INT", {"tooltip": "Output frame rate.", "default": 60, "min": 15, "max": 240, "display": "number"}], "interpolation_duplicate": ["BOOLEAN", {"tooltip": "Analyze the input for duplicate frames and remove them.", "advanced": true, "default": false}], "interpolation_duplicate_threshold": ["FLOAT", {"tooltip": "Detection sensitivity for duplicate frames.", "advanced": true, "default": 0.01, "min": 0.001, "max": 0.1, "step": 0.001, "display": "number"}], "dynamic_compression_level": ["COMBO", {"tooltip": "CQP level.", "advanced": true, "default": "Low", "multiselect": false, "options": ["Low", "Mid", "High"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "upscaler_enabled", "upscaler_model", "upscaler_resolution"], "optional": ["upscaler_creativity", "interpolation_enabled", "interpolation_model", "interpolation_slowmo", "interpolation_frame_rate", "interpolation_duplicate", "interpolation_duplicate_threshold", "dynamic_compression_level"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "TopazVideoEnhance", "display_name": "Topaz Video Enhance (Legacy)", "description": "Breathe new life into video with powerful upscaling and recovery technology.", "python_module": "comfy_api_nodes.nodes_topaz", "category": "partner/video/Topaz", "output_node": false, "deprecated": true, "experimental": false, "dev_only": false, "api_node": true, "price_badge": null, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TopazVideoEnhanceV2": {"input": {"required": {"video": ["VIDEO", {}], "upscaler_model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Astra 2", "inputs": {"required": {"upscaler_resolution": ["COMBO", {"multiselect": false, "options": ["FullHD (1080p)", "4K (2160p)"]}], "creativity": ["FLOAT", {"tooltip": "Creative strength of the upscale.", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.1, "display": "slider"}], "prompt": ["STRING", {"tooltip": "Optional descriptive (not instructive) scene prompt.Capping input at 450 frames (~15s @ 30fps) when set.", "default": "", "multiline": true}], "sharp": ["FLOAT", {"tooltip": "Pre-enhance sharpness: 0.0=Gaussian blur, 0.5=passthrough (default), 1.0=USM sharpening.", "advanced": true, "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}], "realism": ["FLOAT", {"tooltip": "Pulls output toward photographic realism.Leave at 0 for the model default.", "advanced": true, "default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01, "display": "slider"}]}}}, {"key": "Starlight (Astra) Fast", "inputs": {"required": {"upscaler_resolution": ["COMBO", {"multiselect": false, "options": ["FullHD (1080p)", "4K (2160p)"]}]}}}, {"key": "Starlight (Astra) Creative", "inputs": {"required": {"upscaler_resolution": ["COMBO", {"multiselect": false, "options": ["FullHD (1080p)", "4K (2160p)"]}], "creativity": ["COMBO", {"tooltip": "Creative strength of the upscale.", "default": "low", "multiselect": false, "options": ["low", "middle", "high"]}]}}}, {"key": "Starlight Precise 2.5", "inputs": {"required": {"upscaler_resolution": ["COMBO", {"multiselect": false, "options": ["FullHD (1080p)", "4K (2160p)"]}]}}}, {"key": "Disabled", "inputs": {"required": {}}}]}], "interpolation_model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "Disabled", "inputs": {"required": {}}}, {"key": "apo-8", "inputs": {"required": {"interpolation_frame_rate": ["INT", {"tooltip": "Output frame rate.", "default": 60, "min": 15, "max": 240, "display": "number"}], "interpolation_slowmo": ["INT", {"tooltip": "Slow-motion factor applied to the input video. For example, 2 makes the output twice as slow and doubles the duration.", "advanced": true, "default": 1, "min": 1, "max": 16, "display": "number"}], "interpolation_duplicate": ["BOOLEAN", {"tooltip": "Analyze the input for duplicate frames and remove them.", "advanced": true, "default": false}], "interpolation_duplicate_threshold": ["FLOAT", {"tooltip": "Detection sensitivity for duplicate frames.", "advanced": true, "default": 0.01, "min": 0.001, "max": 0.1, "step": 0.001, "display": "number"}]}}}]}]}, "optional": {"dynamic_compression_level": ["COMBO", {"tooltip": "CQP level.", "default": "Low", "multiselect": false, "options": ["Low", "Mid", "High"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "upscaler_model", "interpolation_model"], "optional": ["dynamic_compression_level"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "TopazVideoEnhanceV2", "display_name": "Topaz Video Enhance", "description": "Breathe new life into video with powerful upscaling and recovery technology.", "python_module": "comfy_api_nodes.nodes_topaz", "category": "partner/video/Topaz", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "upscaler_model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "upscaler_model.upscaler_resolution", "type": "COMBO"}, {"name": "interpolation_model", "type": "COMFY_DYNAMICCOMBO_V3"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $model := $lookup(widgets, \"upscaler_model\");\n $res := $lookup(widgets, \"upscaler_model.upscaler_resolution\");\n $interp := $lookup(widgets, \"interpolation_model\");\n $is4k := $contains($res, \"4k\");\n $hasInterp := $interp != \"disabled\";\n $rates := {\n \"starlight (astra) fast\": {\"hd\": 0.43, \"uhd\": 0.85},\n \"starlight precise 2.5\": {\"hd\": 0.70, \"uhd\": 1.54},\n \"astra 2\": {\"hd\": 1.72, \"uhd\": 2.85},\n \"starlight (astra) creative\": {\"hd\": 2.25, \"uhd\": 3.99}\n };\n $surcharge := $is4k ? 0.28 : 0.14;\n $entry := $lookup($rates, $model);\n $base := $is4k ? $entry.uhd : $entry.hd;\n $hi := $base + ($hasInterp ? $surcharge : 0);\n $model = \"disabled\"\n ? {\"type\":\"text\",\"text\":\"Interpolation only\"}\n : ($hasInterp\n ? {\"type\":\"text\",\"text\":\"~\" & $string($base) & \"\u2013\" & $string($hi) & \" credits/src frame\"}\n : {\"type\":\"text\",\"text\":\"~\" & $string($base) & \" credits/src frame\"})\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoTextToModelNode": {"input": {"required": {"prompt": ["STRING", {"multiline": true}]}, "optional": {"negative_prompt": ["STRING", {"multiline": true}], "model_version": ["COMBO", {"default": "v2.5-20250123", "multiselect": false, "options": ["v3.1-20260211", "v3.0-20250812", "v2.5-20250123", "v2.0-20240919", "v1.4-20240625"]}], "style": ["COMBO", {"default": "None", "multiselect": false, "options": ["person:person2cartoon", "animal:venom", "object:clay", "object:steampunk", "object:christmas", "object:barbie", "gold", "ancient_bronze", "None"]}], "texture": ["BOOLEAN", {"default": true}], "pbr": ["BOOLEAN", {"default": true}], "image_seed": ["INT", {"advanced": true, "default": 42}], "model_seed": ["INT", {"advanced": true, "default": 42}], "texture_seed": ["INT", {"advanced": true, "default": 42}], "texture_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "face_limit": ["INT", {"advanced": true, "default": -1, "min": -1, "max": 2000000}], "quad": ["BOOLEAN", {"advanced": true, "default": false}], "geometry_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["prompt"], "optional": ["negative_prompt", "model_version", "style", "texture", "pbr", "image_seed", "model_seed", "texture_seed", "texture_quality", "face_limit", "quad", "geometry_quality"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoTextToModelNode", "display_name": "Tripo: Text to Model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model_version", "type": "COMBO"}, {"name": "texture", "type": "BOOLEAN"}, {"name": "pbr", "type": "BOOLEAN"}, {"name": "quad", "type": "BOOLEAN"}, {"name": "texture_quality", "type": "COMBO"}, {"name": "geometry_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $isV14 := $contains(widgets.model_version,\"v1.4\");\n $isV3OrLater := $contains(widgets.model_version,\"v3.\");\n $withTexture := widgets.texture or widgets.pbr;\n $isHdTexture := (widgets.texture_quality = \"detailed\");\n $isDetailedGeometry := (widgets.geometry_quality = \"detailed\");\n $credits := $isV14 ? 20 : (\n ($withTexture ? 20 : 10)\n + (widgets.quad ? 5 : 0)\n + ($isHdTexture ? 10 : 0)\n + (($isDetailedGeometry and $isV3OrLater) ? 20 : 0)\n );\n {\"type\":\"usd\",\"usd\": $round($credits * 0.01, 2), \"format\": {\"approximate\": true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoImageToModelNode": {"input": {"required": {"image": ["IMAGE", {}]}, "optional": {"model_version": ["COMBO", {"tooltip": "The model version to use for generation", "multiselect": false, "options": ["v3.1-20260211", "v3.0-20250812", "v2.5-20250123", "v2.0-20240919", "v1.4-20240625"]}], "style": ["COMBO", {"default": "None", "multiselect": false, "options": ["person:person2cartoon", "animal:venom", "object:clay", "object:steampunk", "object:christmas", "object:barbie", "gold", "ancient_bronze", "None"]}], "texture": ["BOOLEAN", {"default": true}], "pbr": ["BOOLEAN", {"default": true}], "model_seed": ["INT", {"advanced": true, "default": 42}], "orientation": ["COMBO", {"advanced": true, "default": "default", "multiselect": false, "options": ["align_image", "default"]}], "texture_seed": ["INT", {"advanced": true, "default": 42}], "texture_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_alignment": ["COMBO", {"advanced": true, "default": "original_image", "multiselect": false, "options": ["original_image", "geometry"]}], "face_limit": ["INT", {"advanced": true, "default": -1, "min": -1, "max": 500000}], "quad": ["BOOLEAN", {"advanced": true, "default": false}], "geometry_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["image"], "optional": ["model_version", "style", "texture", "pbr", "model_seed", "orientation", "texture_seed", "texture_quality", "texture_alignment", "face_limit", "quad", "geometry_quality"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoImageToModelNode", "display_name": "Tripo: Image to Model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model_version", "type": "COMBO"}, {"name": "texture", "type": "BOOLEAN"}, {"name": "pbr", "type": "BOOLEAN"}, {"name": "quad", "type": "BOOLEAN"}, {"name": "texture_quality", "type": "COMBO"}, {"name": "geometry_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $isV14 := $contains(widgets.model_version,\"v1.4\");\n $isV3OrLater := $contains(widgets.model_version,\"v3.\");\n $withTexture := widgets.texture or widgets.pbr;\n $isHdTexture := (widgets.texture_quality = \"detailed\");\n $isDetailedGeometry := (widgets.geometry_quality = \"detailed\");\n $credits := $isV14 ? 30 : (\n ($withTexture ? 30 : 20)\n + (widgets.quad ? 5 : 0)\n + ($isHdTexture ? 10 : 0)\n + (($isDetailedGeometry and $isV3OrLater) ? 20 : 0)\n );\n {\"type\":\"usd\",\"usd\": $round($credits * 0.01, 2), \"format\": {\"approximate\": true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoMultiviewToModelNode": {"input": {"required": {"image": ["IMAGE", {}]}, "optional": {"image_left": ["IMAGE", {}], "image_back": ["IMAGE", {}], "image_right": ["IMAGE", {}], "model_version": ["COMBO", {"tooltip": "The model version to use for generation", "multiselect": false, "options": ["v3.1-20260211", "v3.0-20250812", "v2.5-20250123", "v2.0-20240919", "v1.4-20240625"]}], "orientation": ["COMBO", {"advanced": true, "default": "default", "multiselect": false, "options": ["align_image", "default"]}], "texture": ["BOOLEAN", {"default": true}], "pbr": ["BOOLEAN", {"default": true}], "model_seed": ["INT", {"advanced": true, "default": 42}], "texture_seed": ["INT", {"advanced": true, "default": 42}], "texture_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_alignment": ["COMBO", {"advanced": true, "default": "original_image", "multiselect": false, "options": ["original_image", "geometry"]}], "face_limit": ["INT", {"advanced": true, "default": -1, "min": -1, "max": 500000}], "quad": ["BOOLEAN", {"tooltip": "This parameter is deprecated and does nothing.", "advanced": true, "default": false}], "geometry_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["image"], "optional": ["image_left", "image_back", "image_right", "model_version", "orientation", "texture", "pbr", "model_seed", "texture_seed", "texture_quality", "texture_alignment", "face_limit", "quad", "geometry_quality"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoMultiviewToModelNode", "display_name": "Tripo: Multiview to Model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model_version", "type": "COMBO"}, {"name": "texture", "type": "BOOLEAN"}, {"name": "pbr", "type": "BOOLEAN"}, {"name": "texture_quality", "type": "COMBO"}, {"name": "geometry_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $isV14 := $contains(widgets.model_version,\"v1.4\");\n $isV3OrLater := $contains(widgets.model_version,\"v3.\");\n $withTexture := widgets.texture or widgets.pbr;\n $isHdTexture := (widgets.texture_quality = \"detailed\");\n $isDetailedGeometry := (widgets.geometry_quality = \"detailed\");\n $credits := $isV14 ? 30 : (\n ($withTexture ? 30 : 20)\n + ($isHdTexture ? 10 : 0)\n + (($isDetailedGeometry and $isV3OrLater) ? 20 : 0)\n );\n {\"type\":\"usd\",\"usd\": $round($credits * 0.01, 2), \"format\": {\"approximate\": true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoP1TextToModelNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Up to 1024 characters.", "multiline": true}], "output_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "\"Geometry only\" returns an untextured mesh. \"Textured\" adds color/PBR maps.", "options": [{"key": "Geometry only", "inputs": {"required": {}}}, {"key": "Textured", "inputs": {"required": {"pbr": ["BOOLEAN", {"tooltip": "Include PBR maps. When on, base texture is forced on too.", "default": true}], "texture_quality": ["COMBO", {"default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_seed": ["INT", {"advanced": true, "default": 42}]}}}]}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Up to 255 characters.", "multiline": true}], "image_seed": ["INT", {"advanced": true, "default": 42}], "face_limit": ["INT", {"tooltip": "Target face count, 48-20000. -1 lets Tripo pick adaptively.", "advanced": true, "default": -1, "min": -1, "max": 20000}], "model_seed": ["INT", {"advanced": true, "default": 42}], "auto_size": ["BOOLEAN", {"tooltip": "Scale the output to approximate real-world meters.", "advanced": true, "default": false}], "export_uv": ["BOOLEAN", {"tooltip": "UV unwrap during generation. Turn off for faster geometry-only runs.", "advanced": true, "default": true}], "compress_geometry": ["BOOLEAN", {"tooltip": "Apply geometry-based compression. Decompress before editing.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "output_mode"], "optional": ["negative_prompt", "image_seed", "face_limit", "model_seed", "auto_size", "export_uv", "compress_geometry"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoP1TextToModelNode", "display_name": "Tripo P1: Text to Model", "description": "Tripo P1 text-to-3D. Optimized for low-poly, game-ready meshes with stable topology.", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "output_mode", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "output_mode.texture_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "( $mode := widgets.output_mode; $detailed := $lookup(widgets, \"output_mode.texture_quality\") = \"detailed\"; $credits := $mode = \"geometry only\" ? 30 : ($detailed ? 50 : 40); {\"type\":\"usd\",\"usd\": $credits * 0.01, \"format\": {\"approximate\": true}})"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoP1ImageToModelNode": {"input": {"required": {"image": ["IMAGE", {}], "output_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "\"Geometry only\" returns an untextured mesh. \"Textured\" adds color/PBR maps.", "options": [{"key": "Geometry only", "inputs": {"required": {}}}, {"key": "Textured", "inputs": {"required": {"pbr": ["BOOLEAN", {"tooltip": "Include PBR maps. When on, base texture is forced on too.", "default": true}], "texture_quality": ["COMBO", {"default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_alignment": ["COMBO", {"tooltip": "Prioritize visual fidelity to the source image, or alignment to the mesh geometry.", "default": "original_image", "multiselect": false, "options": ["original_image", "geometry"]}], "orientation": ["COMBO", {"tooltip": "Rotate the output to match the source image. Only applies when textured.", "default": "default", "multiselect": false, "options": ["default", "align_image"]}], "texture_seed": ["INT", {"advanced": true, "default": 42}]}}}]}]}, "optional": {"enable_image_autofix": ["BOOLEAN", {"tooltip": "Pre-process the input image for better generation quality.", "advanced": true, "default": false}], "face_limit": ["INT", {"tooltip": "Target face count, 48-20000. -1 lets Tripo pick adaptively.", "advanced": true, "default": -1, "min": -1, "max": 20000}], "model_seed": ["INT", {"advanced": true, "default": 42}], "auto_size": ["BOOLEAN", {"tooltip": "Scale the output to approximate real-world meters.", "advanced": true, "default": false}], "export_uv": ["BOOLEAN", {"tooltip": "UV unwrap during generation. Turn off for faster geometry-only runs.", "advanced": true, "default": true}], "compress_geometry": ["BOOLEAN", {"tooltip": "Apply geometry-based compression. Decompress before editing.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "output_mode"], "optional": ["enable_image_autofix", "face_limit", "model_seed", "auto_size", "export_uv", "compress_geometry"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoP1ImageToModelNode", "display_name": "Tripo P1: Image to Model", "description": "Tripo P1 image-to-3D. Optimized for low-poly, game-ready meshes.", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "output_mode", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "output_mode.texture_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "( $mode := widgets.output_mode; $detailed := $lookup(widgets, \"output_mode.texture_quality\") = \"detailed\"; $credits := $mode = \"geometry only\" ? 40 : ($detailed ? 60 : 50); {\"type\":\"usd\",\"usd\": $credits * 0.01, \"format\": {\"approximate\": true}})"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoP1MultiviewToModelNode": {"input": {"required": {"image": ["IMAGE", {"tooltip": "Front view (0\u00b0). Required."}], "output_mode": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "\"Geometry only\" returns an untextured mesh. \"Textured\" adds color/PBR maps.", "options": [{"key": "Geometry only", "inputs": {"required": {}}}, {"key": "Textured", "inputs": {"required": {"pbr": ["BOOLEAN", {"tooltip": "Include PBR maps. When on, base texture is forced on too.", "default": true}], "texture_quality": ["COMBO", {"default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_alignment": ["COMBO", {"tooltip": "Prioritize visual fidelity to the source image, or alignment to the mesh geometry.", "default": "original_image", "multiselect": false, "options": ["original_image", "geometry"]}], "orientation": ["COMBO", {"tooltip": "Rotate the output to match the source image. Only applies when textured.", "default": "default", "multiselect": false, "options": ["default", "align_image"]}], "texture_seed": ["INT", {"advanced": true, "default": 42}]}}}]}]}, "optional": {"image_left": ["IMAGE", {"tooltip": "Left view (90\u00b0), i.e. the subject's left side."}], "image_back": ["IMAGE", {"tooltip": "Back view (180\u00b0)."}], "image_right": ["IMAGE", {"tooltip": "Right view (270\u00b0), i.e. the subject's right side."}], "face_limit": ["INT", {"tooltip": "Target face count, 48-20000. -1 lets Tripo pick adaptively.", "advanced": true, "default": -1, "min": -1, "max": 20000}], "model_seed": ["INT", {"advanced": true, "default": 42}], "auto_size": ["BOOLEAN", {"tooltip": "Scale the output to approximate real-world meters.", "advanced": true, "default": false}], "export_uv": ["BOOLEAN", {"tooltip": "UV unwrap during generation. Turn off for faster geometry-only runs.", "advanced": true, "default": true}], "compress_geometry": ["BOOLEAN", {"tooltip": "Apply geometry-based compression. Decompress before editing.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["image", "output_mode"], "optional": ["image_left", "image_back", "image_right", "face_limit", "model_seed", "auto_size", "export_uv", "compress_geometry"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoP1MultiviewToModelNode", "display_name": "Tripo P1: Multiview to Model", "description": "Tripo P1 multiview-to-3D from 2-4 reference images in [front, left, back, right] order. Front is required; any combination of the other three may be omitted.", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "output_mode", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "output_mode.texture_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "( $mode := widgets.output_mode; $detailed := $lookup(widgets, \"output_mode.texture_quality\") = \"detailed\"; $credits := $mode = \"geometry only\" ? 40 : ($detailed ? 60 : 50); {\"type\":\"usd\",\"usd\": $credits * 0.01, \"format\": {\"approximate\": true}})"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoImportModelNode": {"input": {"required": {"model_3d": ["FILE_3D_GLB,FILE_3D_FBX,FILE_3D_OBJ,FILE_3D_STL,FILE_3D", {"tooltip": "3D model to import (GLB / FBX / OBJ / STL, up to 150 MB). OBJ and STL files carry no embedded textures."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model_3d"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["MODEL_TASK_ID"], "output_is_list": [false], "output_name": ["model task_id"], "output_tooltips": [null], "output_matchtypes": null, "name": "TripoImportModelNode", "display_name": "Tripo: Import Model", "description": "Import an external 3D model (e.g. from Rodin, Hunyuan3D or a local file) into Tripo to use it with Tripo's post-processing nodes: Texture, Rig, Convert. GLB is recommended: textures survive import only when embedded in the file. Note that texturing an imported model requires a texture prompt.", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"text\",\"text\":\"Free\"}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoTextureNode": {"input": {"required": {"model_task_id": ["MODEL_TASK_ID", {}]}, "optional": {"texture": ["BOOLEAN", {"default": true}], "pbr": ["BOOLEAN", {"default": true}], "texture_seed": ["INT", {"advanced": true, "default": 42}], "texture_quality": ["COMBO", {"advanced": true, "default": "standard", "multiselect": false, "options": ["standard", "detailed"]}], "texture_alignment": ["COMBO", {"advanced": true, "default": "original_image", "multiselect": false, "options": ["original_image", "geometry"]}], "texture_prompt": ["STRING", {"tooltip": "Optional text guidance for texturing. Required in practice for imported models (Tripo: Import Model), which carry no source image to infer colors from.", "default": "", "multiline": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model_task_id"], "optional": ["texture", "pbr", "texture_seed", "texture_quality", "texture_alignment", "texture_prompt"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoTextureNode", "display_name": "Tripo: Texture model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "texture_quality", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $tq := widgets.texture_quality;\n {\"type\":\"usd\",\"usd\": ($contains($tq,\"detailed\") ? 0.2 : 0.1), \"format\": {\"approximate\": true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoRefineNode": {"input": {"required": {"model_task_id": ["MODEL_TASK_ID", {"tooltip": "Must be a v1.4 Tripo model"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["model_task_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "MODEL_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "model task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoRefineNode", "display_name": "Tripo: Refine Draft model", "description": "Refine a draft model created by v1.4 Tripo models only.", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.3, \"format\": {\"approximate\": true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoRigNode": {"input": {"required": {"original_model_task_id": ["MODEL_TASK_ID", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["original_model_task_id"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "RIG_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "rig task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoRigNode", "display_name": "Tripo: Rig model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.25, \"format\": {\"approximate\": true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoRetargetNode": {"input": {"required": {"original_model_task_id": ["RIG_TASK_ID", {}], "animation": ["COMBO", {"multiselect": false, "options": ["preset:idle", "preset:walk", "preset:run", "preset:dive", "preset:climb", "preset:jump", "preset:slash", "preset:shoot", "preset:hurt", "preset:fall", "preset:turn", "preset:quadruped:walk", "preset:hexapod:walk", "preset:octopod:walk", "preset:serpentine:march", "preset:aquatic:march"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["original_model_task_id", "animation"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": ["STRING", "RETARGET_TASK_ID", "FILE_3D_GLB"], "output_is_list": [false, false, false], "output_name": ["model_file", "retarget task_id", "GLB"], "output_tooltips": [null, null, null], "output_matchtypes": null, "name": "TripoRetargetNode", "display_name": "Tripo: Retarget rigged model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.1, \"format\": {\"approximate\": true}}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "TripoConversionNode": {"input": {"required": {"original_model_task_id": ["MODEL_TASK_ID,RIG_TASK_ID,RETARGET_TASK_ID", {}], "format": ["COMBO", {"multiselect": false, "options": ["GLTF", "USDZ", "FBX", "OBJ", "STL", "3MF"]}]}, "optional": {"quad": ["BOOLEAN", {"advanced": true, "default": false}], "face_limit": ["INT", {"advanced": true, "default": -1, "min": -1, "max": 2000000}], "texture_size": ["INT", {"advanced": true, "default": 4096, "min": 128, "max": 4096}], "texture_format": ["COMBO", {"advanced": true, "default": "JPEG", "multiselect": false, "options": ["BMP", "DPX", "HDR", "JPEG", "OPEN_EXR", "PNG", "TARGA", "TIFF", "WEBP"]}], "force_symmetry": ["BOOLEAN", {"advanced": true, "default": false}], "flatten_bottom": ["BOOLEAN", {"advanced": true, "default": false}], "flatten_bottom_threshold": ["FLOAT", {"advanced": true, "default": 0.0, "min": 0.0, "max": 1.0}], "pivot_to_center_bottom": ["BOOLEAN", {"advanced": true, "default": false}], "scale_factor": ["FLOAT", {"advanced": true, "default": 1.0, "min": 0.0}], "with_animation": ["BOOLEAN", {"advanced": true, "default": false}], "pack_uv": ["BOOLEAN", {"advanced": true, "default": false}], "bake": ["BOOLEAN", {"advanced": true, "default": false}], "part_names": ["STRING", {"advanced": true, "default": "", "multiline": false}], "fbx_preset": ["COMBO", {"advanced": true, "default": "blender", "multiselect": false, "options": ["blender", "mixamo", "3dsmax"]}], "export_vertex_colors": ["BOOLEAN", {"advanced": true, "default": false}], "export_orientation": ["COMBO", {"advanced": true, "default": "default", "multiselect": false, "options": ["align_image", "default"]}], "animate_in_place": ["BOOLEAN", {"advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"], "prompt": ["PROMPT"], "extra_pnginfo": ["EXTRA_PNGINFO"]}}, "input_order": {"required": ["original_model_task_id", "format"], "optional": ["quad", "face_limit", "texture_size", "texture_format", "force_symmetry", "flatten_bottom", "flatten_bottom_threshold", "pivot_to_center_bottom", "scale_factor", "with_animation", "pack_uv", "bake", "part_names", "fbx_preset", "export_vertex_colors", "export_orientation", "animate_in_place"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source", "prompt", "extra_pnginfo"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "output_tooltips": [], "output_matchtypes": null, "name": "TripoConversionNode", "display_name": "Tripo: Convert model", "description": "", "python_module": "comfy_api_nodes.nodes_tripo", "category": "partner/3d/Tripo", "output_node": true, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "quad", "type": "BOOLEAN"}, {"name": "face_limit", "type": "INT"}, {"name": "texture_size", "type": "INT"}, {"name": "texture_format", "type": "COMBO"}, {"name": "flatten_bottom", "type": "BOOLEAN"}, {"name": "flatten_bottom_threshold", "type": "FLOAT"}, {"name": "pivot_to_center_bottom", "type": "BOOLEAN"}, {"name": "scale_factor", "type": "FLOAT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $face := (widgets.face_limit != null) ? widgets.face_limit : -1;\n $texSize := (widgets.texture_size != null) ? widgets.texture_size : 4096;\n $flatThresh := (widgets.flatten_bottom_threshold != null) ? widgets.flatten_bottom_threshold : 0;\n $scale := (widgets.scale_factor != null) ? widgets.scale_factor : 1;\n $texFmt := (widgets.texture_format != \"\" ? widgets.texture_format : \"jpeg\");\n $advanced :=\n widgets.quad or\n widgets.flatten_bottom or\n widgets.pivot_to_center_bottom or\n ($face != -1) or\n ($texSize != 4096) or\n ($flatThresh != 0) or\n ($scale != 1) or\n ($texFmt != \"jpeg\");\n {\"type\":\"usd\",\"usd\": ($advanced ? 0.1 : 0.05), \"format\": {\"approximate\": true}}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "VeoVideoGenerationNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the video", "default": "", "multiline": true}], "aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video", "default": "16:9", "multiselect": false, "options": ["16:9", "9:16"]}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Negative text prompt to guide what to avoid in the video", "default": "", "multiline": true}], "duration_seconds": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 5, "min": 5, "max": 8, "step": 1, "display": "number"}], "enhance_prompt": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance", "advanced": true, "default": true}], "person_generation": ["COMBO", {"tooltip": "Whether to allow generating people in the video", "advanced": true, "default": "ALLOW", "multiselect": false, "options": ["ALLOW", "BLOCK"]}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}], "image": ["IMAGE", {"tooltip": "Optional reference image to guide video generation"}], "model": ["COMBO", {"tooltip": "Veo 2 model to use for video generation", "default": "veo-2.0-generate-001", "multiselect": false, "options": ["veo-2.0-generate-001"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "aspect_ratio"], "optional": ["negative_prompt", "duration_seconds", "enhance_prompt", "person_generation", "seed", "image", "model"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "VeoVideoGenerationNode", "display_name": "Google Veo 2 Video Generation", "description": "Generates videos from text prompts using Google's Veo 2 API", "python_module": "comfy_api_nodes.nodes_veo2", "category": "partner/video/Veo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration_seconds", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\": 0.5 * widgets.duration_seconds}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Veo3VideoGenerationNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the video", "default": "", "multiline": true}], "aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video", "default": "16:9", "multiselect": false, "options": ["16:9", "9:16"]}]}, "optional": {"resolution": ["COMBO", {"tooltip": "Output video resolution. 4K is not available for veo-3.1-lite and veo-3.0 models.", "default": "720p", "multiselect": false, "options": ["720p", "1080p", "4k"]}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt to guide what to avoid in the video", "default": "", "multiline": true}], "duration_seconds": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 8, "min": 4, "max": 8, "step": 2, "display": "number"}], "enhance_prompt": ["BOOLEAN", {"tooltip": "This parameter is deprecated and ignored.", "advanced": true, "default": true}], "person_generation": ["COMBO", {"tooltip": "Whether to allow generating people in the video", "advanced": true, "default": "ALLOW", "multiselect": false, "options": ["ALLOW", "BLOCK"]}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}], "image": ["IMAGE", {"tooltip": "Optional reference image to guide video generation"}], "model": ["COMBO", {"tooltip": "Veo 3 model to use for video generation", "multiselect": false, "options": ["veo-3.1-generate", "veo-3.1-fast-generate", "veo-3.1-lite", "veo-3.0-generate-001", "veo-3.0-fast-generate-001"]}], "generate_audio": ["BOOLEAN", {"tooltip": "Generate audio for the video. Supported by all Veo 3 models.", "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "aspect_ratio"], "optional": ["resolution", "negative_prompt", "duration_seconds", "enhance_prompt", "person_generation", "seed", "image", "model", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Veo3VideoGenerationNode", "display_name": "Google Veo 3 Video Generation", "description": "Generates videos from text prompts using Google's Veo 3 API", "python_module": "comfy_api_nodes.nodes_veo2", "category": "partner/video/Veo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}, {"name": "resolution", "type": "COMBO"}, {"name": "duration_seconds", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $r := widgets.resolution;\n $a := widgets.generate_audio;\n $seconds := widgets.duration_seconds;\n $pps :=\n $contains($m, \"lite\")\n ? ($r = \"1080p\" ? ($a ? 0.08 : 0.05) : ($a ? 0.05 : 0.03))\n : $contains($m, \"3.1-fast\")\n ? ($r = \"4k\" ? ($a ? 0.30 : 0.25) : $r = \"1080p\" ? ($a ? 0.12 : 0.10) : ($a ? 0.10 : 0.08))\n : $contains($m, \"3.1-generate\")\n ? ($r = \"4k\" ? ($a ? 0.60 : 0.40) : ($a ? 0.40 : 0.20))\n : $contains($m, \"3.0-fast\")\n ? ($a ? 0.15 : 0.10)\n : ($a ? 0.40 : 0.20);\n {\"type\":\"usd\",\"usd\": $pps * $seconds}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Veo3FirstLastFrameNode": {"input": {"required": {"prompt": ["STRING", {"tooltip": "Text description of the video", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative text prompt to guide what to avoid in the video", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720p", "1080p", "4k"]}], "aspect_ratio": ["COMBO", {"tooltip": "Aspect ratio of the output video", "default": "16:9", "multiselect": false, "options": ["16:9", "9:16"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 8, "min": 4, "max": 8, "step": 2, "display": "slider"}], "seed": ["INT", {"tooltip": "Seed for video generation", "default": 0, "min": 0, "max": 4294967295, "step": 1, "control_after_generate": true, "display": "number"}], "first_frame": ["IMAGE", {"tooltip": "Start frame"}], "last_frame": ["IMAGE", {"tooltip": "End frame"}], "model": ["COMBO", {"multiselect": false, "options": ["veo-3.1-generate", "veo-3.1-fast-generate", "veo-3.1-lite"]}], "generate_audio": ["BOOLEAN", {"tooltip": "Generate audio for the video.", "default": true}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["prompt", "negative_prompt", "resolution", "aspect_ratio", "duration", "seed", "first_frame", "last_frame", "model", "generate_audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Veo3FirstLastFrameNode", "display_name": "Google Veo 3 First-Last-Frame to Video", "description": "Generate video using prompt and first and last frames.", "python_module": "comfy_api_nodes.nodes_veo2", "category": "partner/video/Veo", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "generate_audio", "type": "BOOLEAN"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $r := widgets.resolution;\n $ga := widgets.generate_audio;\n $seconds := widgets.duration;\n $pps :=\n $contains($m, \"lite\")\n ? ($r = \"1080p\" ? ($ga ? 0.08 : 0.05) : ($ga ? 0.05 : 0.03))\n : $contains($m, \"fast\")\n ? ($r = \"4k\" ? ($ga ? 0.30 : 0.25) : $r = \"1080p\" ? ($ga ? 0.12 : 0.10) : ($ga ? 0.10 : 0.08))\n : ($r = \"4k\" ? ($ga ? 0.60 : 0.40) : ($ga ? 0.40 : 0.20));\n {\"type\":\"usd\",\"usd\": $pps * $seconds}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduTextToVideoNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model name", "multiselect": false, "options": ["viduq1"]}], "prompt": ["STRING", {"tooltip": "A textual description for video generation", "multiline": true}]}, "optional": {"duration": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 5, "min": 5, "max": 5, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "resolution": ["COMBO", {"tooltip": "Supported values may vary by model & duration", "advanced": true, "multiselect": false, "options": ["1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt"], "optional": ["duration", "seed", "aspect_ratio", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduTextToVideoNode", "display_name": "Vidu Text To Video Generation", "description": "Generate video from a text prompt", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduImageToVideoNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model name", "multiselect": false, "options": ["viduq1"]}], "image": ["IMAGE", {"tooltip": "An image to be used as the start frame of the generated video"}]}, "optional": {"prompt": ["STRING", {"tooltip": "A textual description for video generation", "default": "", "multiline": true}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 5, "min": 5, "max": 5, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "resolution": ["COMBO", {"tooltip": "Supported values may vary by model & duration", "advanced": true, "multiselect": false, "options": ["1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image"], "optional": ["prompt", "duration", "seed", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduImageToVideoNode", "display_name": "Vidu Image To Video Generation", "description": "Generate video from image and optional prompt", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduReferenceVideoNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model name", "multiselect": false, "options": ["viduq1"]}], "images": ["IMAGE", {"tooltip": "Images to use as references to generate a video with consistent subjects (max 7 images)."}], "prompt": ["STRING", {"tooltip": "A textual description for video generation", "multiline": true}]}, "optional": {"duration": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 5, "min": 5, "max": 5, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video", "multiselect": false, "options": ["16:9", "9:16", "1:1"]}], "resolution": ["COMBO", {"tooltip": "Supported values may vary by model & duration", "advanced": true, "multiselect": false, "options": ["1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "images", "prompt"], "optional": ["duration", "seed", "aspect_ratio", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduReferenceVideoNode", "display_name": "Vidu Reference To Video Generation", "description": "Generate video from multiple images and a prompt", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduStartEndToVideoNode": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model name", "multiselect": false, "options": ["viduq1"]}], "first_frame": ["IMAGE", {"tooltip": "Start frame"}], "end_frame": ["IMAGE", {"tooltip": "End frame"}]}, "optional": {"prompt": ["STRING", {"tooltip": "A textual description for video generation", "multiline": true}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds", "default": 5, "min": 5, "max": 5, "step": 1, "display": "number"}], "seed": ["INT", {"tooltip": "Seed for video generation (0 for random)", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "resolution": ["COMBO", {"tooltip": "Supported values may vary by model & duration", "advanced": true, "multiselect": false, "options": ["1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "first_frame", "end_frame"], "optional": ["prompt", "duration", "seed", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduStartEndToVideoNode", "display_name": "Vidu Start End To Video Generation", "description": "Generate a video from start and end frames and a prompt", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.4}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu2TextToVideoNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["viduq2"]}], "prompt": ["STRING", {"tooltip": "A textual description for video generation, with a maximum length of 2000 characters.", "multiline": true}], "duration": ["INT", {"default": 5, "min": 1, "max": 10, "step": 1, "display": "slider"}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "3:4", "4:3", "1:1"]}], "resolution": ["COMBO", {"advanced": true, "multiselect": false, "options": ["720p", "1080p"]}], "background_music": ["BOOLEAN", {"tooltip": "Whether to add background music to the generated video.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "duration", "seed", "aspect_ratio", "resolution", "background_music"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu2TextToVideoNode", "display_name": "Vidu2 Text-to-Video Generation", "description": "Generate video from a text prompt", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $is1080 := widgets.resolution = \"1080p\";\n $base := $is1080 ? 0.1 : 0.075;\n $perSec := $is1080 ? 0.05 : 0.025;\n {\"type\":\"usd\",\"usd\": $base + $perSec * (widgets.duration - 1)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu2ImageToVideoNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["viduq2-pro-fast", "viduq2-pro", "viduq2-turbo"]}], "image": ["IMAGE", {"tooltip": "An image to be used as the start frame of the generated video."}], "prompt": ["STRING", {"tooltip": "An optional text prompt for video generation (max 2000 characters).", "default": "", "multiline": true}], "duration": ["INT", {"default": 5, "min": 1, "max": 10, "step": 1, "display": "slider"}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "resolution": ["COMBO", {"advanced": true, "multiselect": false, "options": ["720p", "1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame.", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "prompt", "duration", "seed", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu2ImageToVideoNode", "display_name": "Vidu2 Image-to-Video Generation", "description": "Generate a video from an image and an optional prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $d := widgets.duration;\n $is1080 := widgets.resolution = \"1080p\";\n $contains($m, \"pro-fast\")\n ? (\n $base := $is1080 ? 0.08 : 0.04;\n $perSec := $is1080 ? 0.02 : 0.01;\n {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n )\n : $contains($m, \"pro\")\n ? (\n $base := $is1080 ? 0.275 : 0.075;\n $perSec := $is1080 ? 0.075 : 0.05;\n {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n )\n : $contains($m, \"turbo\")\n ? (\n $is1080\n ? {\"type\":\"usd\",\"usd\": 0.175 + 0.05 * ($d - 1)}\n : (\n $d <= 1 ? {\"type\":\"usd\",\"usd\": 0.04}\n : $d <= 2 ? {\"type\":\"usd\",\"usd\": 0.05}\n : {\"type\":\"usd\",\"usd\": 0.05 + 0.05 * ($d - 2)}\n )\n )\n : {\"type\":\"usd\",\"usd\": 0.04}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu2ReferenceVideoNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["viduq2"]}], "subjects": ["COMFY_AUTOGROW_V3", {"tooltip": "For each subject, provide up to 3 reference images (7 images total across all subjects). Reference them in prompts via @subject{subject_id}.", "template": {"input": {"required": {"reference_images": ["IMAGE", {}]}}, "names": ["subject1", "subject2", "subject3", "subject4", "subject5", "subject6", "subject7"], "min": 1}}], "prompt": ["STRING", {"tooltip": "When enabled, the video will include generated speech and background music based on the prompt.", "multiline": true}], "audio": ["BOOLEAN", {"tooltip": "When enabled video will contain generated speech and background music based on the prompt.", "advanced": true, "default": false}], "duration": ["INT", {"default": 5, "min": 1, "max": 10, "step": 1, "display": "slider"}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "aspect_ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "4:3", "3:4", "1:1"]}], "resolution": ["COMBO", {"advanced": true, "multiselect": false, "options": ["720p", "1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame.", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "subjects", "prompt", "audio", "duration", "seed", "aspect_ratio", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu2ReferenceVideoNode", "display_name": "Vidu2 Reference-to-Video Generation", "description": "Generate a video from multiple reference images and a prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "audio", "type": "BOOLEAN"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $is1080 := widgets.resolution = \"1080p\";\n $base := $is1080 ? 0.375 : 0.125;\n $perSec := $is1080 ? 0.05 : 0.025;\n $audioCost := widgets.audio = true ? 0.075 : 0;\n {\"type\":\"usd\",\"usd\": $base + $perSec * (widgets.duration - 1) + $audioCost}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu2StartEndToVideoNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["viduq2-pro-fast", "viduq2-pro", "viduq2-turbo"]}], "first_frame": ["IMAGE", {}], "end_frame": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt description (max 2000 characters).", "multiline": true}], "duration": ["INT", {"default": 5, "min": 2, "max": 8, "step": 1, "display": "slider"}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "resolution": ["COMBO", {"advanced": true, "multiselect": false, "options": ["720p", "1080p"]}], "movement_amplitude": ["COMBO", {"tooltip": "The movement amplitude of objects in the frame.", "advanced": true, "multiselect": false, "options": ["auto", "small", "medium", "large"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "first_frame", "end_frame", "prompt", "duration", "seed", "resolution", "movement_amplitude"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu2StartEndToVideoNode", "display_name": "Vidu2 Start/End Frame-to-Video Generation", "description": "Generate a video from a start frame, an end frame, and a prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $d := widgets.duration;\n $is1080 := widgets.resolution = \"1080p\";\n $contains($m, \"pro-fast\")\n ? (\n $base := $is1080 ? 0.08 : 0.04;\n $perSec := $is1080 ? 0.02 : 0.01;\n {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n )\n : $contains($m, \"pro\")\n ? (\n $base := $is1080 ? 0.275 : 0.075;\n $perSec := $is1080 ? 0.075 : 0.05;\n {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n )\n : $contains($m, \"turbo\")\n ? (\n $is1080\n ? {\"type\":\"usd\",\"usd\": 0.175 + 0.05 * ($d - 1)}\n : (\n $d <= 2 ? {\"type\":\"usd\",\"usd\": 0.05}\n : {\"type\":\"usd\",\"usd\": 0.05 + 0.05 * ($d - 2)}\n )\n )\n : {\"type\":\"usd\",\"usd\": 0.04}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduExtendVideoNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for video extension.", "options": [{"key": "viduq2-pro", "inputs": {"required": {"duration": ["INT", {"tooltip": "Duration of the extended video in seconds.", "default": 4, "min": 1, "max": 7, "step": 1, "display": "slider"}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}]}}}, {"key": "viduq2-turbo", "inputs": {"required": {"duration": ["INT", {"tooltip": "Duration of the extended video in seconds.", "default": 4, "min": 1, "max": 7, "step": 1, "display": "slider"}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}]}}}]}], "video": ["VIDEO", {"tooltip": "The source video to extend."}], "prompt": ["STRING", {"tooltip": "An optional text prompt for the extended video (max 2000 characters).", "default": "", "multiline": true}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "optional": {"end_frame": ["IMAGE", {}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "video", "prompt", "seed"], "optional": ["end_frame"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduExtendVideoNode", "display_name": "Vidu Video Extension", "description": "Extend an existing video by generating additional frames.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.duration", "type": "INT"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $d := $lookup(widgets, \"model.duration\");\n $res := $lookup(widgets, \"model.resolution\");\n $contains($m, \"pro\")\n ? (\n $base := $lookup({\"720p\": 0.15, \"1080p\": 0.3}, $res);\n $perSec := $lookup({\"720p\": 0.05, \"1080p\": 0.075}, $res);\n {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n )\n : (\n $base := $lookup({\"720p\": 0.075, \"1080p\": 0.2}, $res);\n $perSec := $lookup({\"720p\": 0.025, \"1080p\": 0.05}, $res);\n {\"type\":\"usd\",\"usd\": $base + $perSec * ($d - 1)}\n )\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "ViduMultiFrameVideoNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["viduq2-pro", "viduq2-turbo"]}], "start_image": ["IMAGE", {"tooltip": "The starting frame image. Aspect ratio must be between 1:4 and 4:1."}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "resolution": ["COMBO", {"multiselect": false, "options": ["720p", "1080p"]}], "frames": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Number of keyframe transitions (2-9).", "options": [{"key": "2", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "3", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "4", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "5", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt5": ["STRING", {"tooltip": "Text prompt for frame 5 transition.", "default": "", "multiline": true}], "end_image5": ["IMAGE", {"tooltip": "End frame image for segment 5. Aspect ratio must be between 1:4 and 4:1."}], "duration5": ["INT", {"tooltip": "Duration for segment 5 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "6", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt5": ["STRING", {"tooltip": "Text prompt for frame 5 transition.", "default": "", "multiline": true}], "end_image5": ["IMAGE", {"tooltip": "End frame image for segment 5. Aspect ratio must be between 1:4 and 4:1."}], "duration5": ["INT", {"tooltip": "Duration for segment 5 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt6": ["STRING", {"tooltip": "Text prompt for frame 6 transition.", "default": "", "multiline": true}], "end_image6": ["IMAGE", {"tooltip": "End frame image for segment 6. Aspect ratio must be between 1:4 and 4:1."}], "duration6": ["INT", {"tooltip": "Duration for segment 6 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "7", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt5": ["STRING", {"tooltip": "Text prompt for frame 5 transition.", "default": "", "multiline": true}], "end_image5": ["IMAGE", {"tooltip": "End frame image for segment 5. Aspect ratio must be between 1:4 and 4:1."}], "duration5": ["INT", {"tooltip": "Duration for segment 5 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt6": ["STRING", {"tooltip": "Text prompt for frame 6 transition.", "default": "", "multiline": true}], "end_image6": ["IMAGE", {"tooltip": "End frame image for segment 6. Aspect ratio must be between 1:4 and 4:1."}], "duration6": ["INT", {"tooltip": "Duration for segment 6 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt7": ["STRING", {"tooltip": "Text prompt for frame 7 transition.", "default": "", "multiline": true}], "end_image7": ["IMAGE", {"tooltip": "End frame image for segment 7. Aspect ratio must be between 1:4 and 4:1."}], "duration7": ["INT", {"tooltip": "Duration for segment 7 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "8", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt5": ["STRING", {"tooltip": "Text prompt for frame 5 transition.", "default": "", "multiline": true}], "end_image5": ["IMAGE", {"tooltip": "End frame image for segment 5. Aspect ratio must be between 1:4 and 4:1."}], "duration5": ["INT", {"tooltip": "Duration for segment 5 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt6": ["STRING", {"tooltip": "Text prompt for frame 6 transition.", "default": "", "multiline": true}], "end_image6": ["IMAGE", {"tooltip": "End frame image for segment 6. Aspect ratio must be between 1:4 and 4:1."}], "duration6": ["INT", {"tooltip": "Duration for segment 6 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt7": ["STRING", {"tooltip": "Text prompt for frame 7 transition.", "default": "", "multiline": true}], "end_image7": ["IMAGE", {"tooltip": "End frame image for segment 7. Aspect ratio must be between 1:4 and 4:1."}], "duration7": ["INT", {"tooltip": "Duration for segment 7 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt8": ["STRING", {"tooltip": "Text prompt for frame 8 transition.", "default": "", "multiline": true}], "end_image8": ["IMAGE", {"tooltip": "End frame image for segment 8. Aspect ratio must be between 1:4 and 4:1."}], "duration8": ["INT", {"tooltip": "Duration for segment 8 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}, {"key": "9", "inputs": {"required": {"prompt1": ["STRING", {"tooltip": "Text prompt for frame 1 transition.", "default": "", "multiline": true}], "end_image1": ["IMAGE", {"tooltip": "End frame image for segment 1. Aspect ratio must be between 1:4 and 4:1."}], "duration1": ["INT", {"tooltip": "Duration for segment 1 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt2": ["STRING", {"tooltip": "Text prompt for frame 2 transition.", "default": "", "multiline": true}], "end_image2": ["IMAGE", {"tooltip": "End frame image for segment 2. Aspect ratio must be between 1:4 and 4:1."}], "duration2": ["INT", {"tooltip": "Duration for segment 2 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt3": ["STRING", {"tooltip": "Text prompt for frame 3 transition.", "default": "", "multiline": true}], "end_image3": ["IMAGE", {"tooltip": "End frame image for segment 3. Aspect ratio must be between 1:4 and 4:1."}], "duration3": ["INT", {"tooltip": "Duration for segment 3 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt4": ["STRING", {"tooltip": "Text prompt for frame 4 transition.", "default": "", "multiline": true}], "end_image4": ["IMAGE", {"tooltip": "End frame image for segment 4. Aspect ratio must be between 1:4 and 4:1."}], "duration4": ["INT", {"tooltip": "Duration for segment 4 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt5": ["STRING", {"tooltip": "Text prompt for frame 5 transition.", "default": "", "multiline": true}], "end_image5": ["IMAGE", {"tooltip": "End frame image for segment 5. Aspect ratio must be between 1:4 and 4:1."}], "duration5": ["INT", {"tooltip": "Duration for segment 5 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt6": ["STRING", {"tooltip": "Text prompt for frame 6 transition.", "default": "", "multiline": true}], "end_image6": ["IMAGE", {"tooltip": "End frame image for segment 6. Aspect ratio must be between 1:4 and 4:1."}], "duration6": ["INT", {"tooltip": "Duration for segment 6 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt7": ["STRING", {"tooltip": "Text prompt for frame 7 transition.", "default": "", "multiline": true}], "end_image7": ["IMAGE", {"tooltip": "End frame image for segment 7. Aspect ratio must be between 1:4 and 4:1."}], "duration7": ["INT", {"tooltip": "Duration for segment 7 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt8": ["STRING", {"tooltip": "Text prompt for frame 8 transition.", "default": "", "multiline": true}], "end_image8": ["IMAGE", {"tooltip": "End frame image for segment 8. Aspect ratio must be between 1:4 and 4:1."}], "duration8": ["INT", {"tooltip": "Duration for segment 8 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}], "prompt9": ["STRING", {"tooltip": "Text prompt for frame 9 transition.", "default": "", "multiline": true}], "end_image9": ["IMAGE", {"tooltip": "End frame image for segment 9. Aspect ratio must be between 1:4 and 4:1."}], "duration9": ["INT", {"tooltip": "Duration for segment 9 in seconds.", "default": 4, "min": 2, "max": 7, "step": 1, "display": "slider"}]}}}]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "start_image", "seed", "resolution", "frames"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "ViduMultiFrameVideoNode", "display_name": "Vidu Multi-Frame Video Generation", "description": "Generate a video with multiple keyframe transitions.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}, {"name": "resolution", "type": "COMBO"}, {"name": "frames", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "frames.duration1", "type": "INT"}, {"name": "frames.duration2", "type": "INT"}, {"name": "frames.duration3", "type": "INT"}, {"name": "frames.duration4", "type": "INT"}, {"name": "frames.duration5", "type": "INT"}, {"name": "frames.duration6", "type": "INT"}, {"name": "frames.duration7", "type": "INT"}, {"name": "frames.duration8", "type": "INT"}, {"name": "frames.duration9", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $m := widgets.model;\n $n := $number(widgets.frames);\n $is1080 := widgets.resolution = \"1080p\";\n $d1 := $lookup(widgets, \"frames.duration1\");\n $d2 := $lookup(widgets, \"frames.duration2\");\n $d3 := $n >= 3 ? $lookup(widgets, \"frames.duration3\") : 0;\n $d4 := $n >= 4 ? $lookup(widgets, \"frames.duration4\") : 0;\n $d5 := $n >= 5 ? $lookup(widgets, \"frames.duration5\") : 0;\n $d6 := $n >= 6 ? $lookup(widgets, \"frames.duration6\") : 0;\n $d7 := $n >= 7 ? $lookup(widgets, \"frames.duration7\") : 0;\n $d8 := $n >= 8 ? $lookup(widgets, \"frames.duration8\") : 0;\n $d9 := $n >= 9 ? $lookup(widgets, \"frames.duration9\") : 0;\n $totalDuration := $d1 + $d2 + $d3 + $d4 + $d5 + $d6 + $d7 + $d8 + $d9;\n $contains($m, \"pro\")\n ? (\n $base := $is1080 ? 0.3 : 0.15;\n $perSec := $is1080 ? 0.075 : 0.05;\n {\"type\":\"usd\",\"usd\": $n * $base + $perSec * $totalDuration}\n )\n : (\n $base := $is1080 ? 0.2 : 0.075;\n $perSec := $is1080 ? 0.05 : 0.025;\n {\"type\":\"usd\",\"usd\": $n * $base + $perSec * $totalDuration}\n )\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu3TextToVideoNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for video generation.", "options": [{"key": "viduq3-pro", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["16:9", "9:16", "3:4", "4:3", "1:1"]}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}, {"key": "viduq3-turbo", "inputs": {"required": {"aspect_ratio": ["COMBO", {"tooltip": "The aspect ratio of the output video.", "multiselect": false, "options": ["16:9", "9:16", "3:4", "4:3", "1:1"]}], "resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}]}], "prompt": ["STRING", {"tooltip": "A textual description for video generation, with a maximum length of 2000 characters.", "multiline": true}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu3TextToVideoNode", "display_name": "Vidu Q3 Text-to-Video Generation", "description": "Generate video from a text prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.duration", "type": "INT"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $d := $lookup(widgets, \"model.duration\");\n $contains(widgets.model, \"turbo\")\n ? (\n $rate := $lookup({\"720p\": 0.06, \"1080p\": 0.08}, $res);\n {\"type\":\"usd\",\"usd\": $rate * $d}\n )\n : (\n $rate := $lookup({\"720p\": 0.15, \"1080p\": 0.16}, $res);\n {\"type\":\"usd\",\"usd\": $rate * $d}\n )\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu3ImageToVideoNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for video generation.", "options": [{"key": "viduq3-pro", "inputs": {"required": {"resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p", "2K"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}, {"key": "viduq3-turbo", "inputs": {"required": {"resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}]}], "image": ["IMAGE", {"tooltip": "An image to be used as the start frame of the generated video."}], "prompt": ["STRING", {"tooltip": "An optional text prompt for video generation (max 2000 characters).", "default": "", "multiline": true}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu3ImageToVideoNode", "display_name": "Vidu Q3 Image-to-Video Generation", "description": "Generate a video from an image and an optional prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.duration", "type": "INT"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $d := $lookup(widgets, \"model.duration\");\n $contains(widgets.model, \"turbo\")\n ? (\n $rate := $lookup({\"720p\": 0.06, \"1080p\": 0.08}, $res);\n {\"type\":\"usd\",\"usd\": $rate * $d}\n )\n : (\n $rate := $lookup({\"720p\": 0.15, \"1080p\": 0.16, \"2k\": 0.2}, $res);\n {\"type\":\"usd\",\"usd\": $rate * $d}\n )\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Vidu3StartEndToVideoNode": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"tooltip": "Model to use for video generation.", "options": [{"key": "viduq3-pro", "inputs": {"required": {"resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}, {"key": "viduq3-turbo", "inputs": {"required": {"resolution": ["COMBO", {"tooltip": "Resolution of the output video.", "multiselect": false, "options": ["720p", "1080p"]}], "duration": ["INT", {"tooltip": "Duration of the output video in seconds.", "default": 5, "min": 1, "max": 16, "step": 1, "display": "slider"}], "audio": ["BOOLEAN", {"tooltip": "When enabled, outputs video with sound (including dialogue and sound effects).", "default": false}]}}}]}], "first_frame": ["IMAGE", {}], "end_frame": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt description (max 2000 characters).", "multiline": true}], "seed": ["INT", {"default": 1, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "first_frame", "end_frame", "prompt", "seed"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Vidu3StartEndToVideoNode", "display_name": "Vidu Q3 Start/End Frame-to-Video Generation", "description": "Generate a video from a start frame, an end frame, and a prompt.", "python_module": "comfy_api_nodes.nodes_vidu", "category": "partner/video/Vidu", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.duration", "type": "INT"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $d := $lookup(widgets, \"model.duration\");\n $contains(widgets.model, \"turbo\")\n ? (\n $rate := $lookup({\"720p\": 0.06, \"1080p\": 0.08}, $res);\n {\"type\":\"usd\",\"usd\": $rate * $d}\n )\n : (\n $rate := $lookup({\"720p\": 0.15, \"1080p\": 0.16}, $res);\n {\"type\":\"usd\",\"usd\": $rate * $d}\n )\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanTextToImageApi": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model to use.", "multiselect": false, "options": ["wan2.5-t2i-preview"]}], "prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "width": ["INT", {"default": 1024, "min": 768, "max": 1440, "step": 32}], "height": ["INT", {"default": 1024, "min": 768, "max": 1440, "step": 32}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt"], "optional": ["negative_prompt", "width", "height", "seed", "prompt_extend", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanTextToImageApi", "display_name": "Wan Text to Image", "description": "Generates an image based on a text prompt.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/image/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.03}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanImageToImageApi": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model to use.", "default": "wan2.5-i2i-preview", "multiselect": false, "options": ["wan2.5-i2i-preview"]}], "image": ["IMAGE", {"tooltip": "Single-image editing or multi-image fusion. Maximum 2 images."}], "prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "prompt"], "optional": ["negative_prompt", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanImageToImageApi", "display_name": "Wan Image to Image", "description": "Generates an image from one or two input images and a text prompt. The output image is currently fixed at 1.6 MP, and its aspect ratio matches the input image(s).", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/image/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [], "inputs": [], "input_groups": []}, "expr": "{\"type\":\"usd\",\"usd\":0.03}"}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanTextToVideoApi": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model to use.", "default": "wan2.6-t2v", "multiselect": false, "options": ["wan2.5-t2v-preview", "wan2.6-t2v"]}], "prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "size": ["COMBO", {"default": "720p: 1:1 (960x960)", "multiselect": false, "options": ["480p: 1:1 (624x624)", "480p: 16:9 (832x480)", "480p: 9:16 (480x832)", "720p: 1:1 (960x960)", "720p: 16:9 (1280x720)", "720p: 9:16 (720x1280)", "720p: 4:3 (1088x832)", "720p: 3:4 (832x1088)", "1080p: 1:1 (1440x1440)", "1080p: 16:9 (1920x1080)", "1080p: 9:16 (1080x1920)", "1080p: 4:3 (1632x1248)", "1080p: 3:4 (1248x1632)"]}], "duration": ["INT", {"tooltip": "A 15-second duration is available only for the Wan 2.6 model.", "default": 5, "min": 5, "max": 15, "step": 5, "display": "number"}], "audio": ["AUDIO", {"tooltip": "Audio must contain a clear, loud voice, without extraneous noise or background music."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "generate_audio": ["BOOLEAN", {"tooltip": "If no audio input is provided, generate audio automatically.", "advanced": true, "default": false}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}], "shot_type": ["COMBO", {"tooltip": "Specifies the shot type for the generated video, that is, whether the video is a single continuous shot or multiple shots with cuts. This parameter takes effect only when prompt_extend is True.", "advanced": true, "multiselect": false, "options": ["single", "multi"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt"], "optional": ["negative_prompt", "size", "duration", "audio", "seed", "generate_audio", "prompt_extend", "watermark", "shot_type"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanTextToVideoApi", "display_name": "Wan Text to Video", "description": "Generates a video based on a text prompt.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "size", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $ppsTable := { \"480p\": 0.05, \"720p\": 0.1, \"1080p\": 0.15 };\n $resKey := $substringBefore(widgets.size, \":\");\n $pps := $lookup($ppsTable, $resKey);\n { \"type\": \"usd\", \"usd\": $round($pps * widgets.duration, 2) }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanImageToVideoApi": {"input": {"required": {"model": ["COMBO", {"tooltip": "Model to use.", "default": "wan2.6-i2v", "multiselect": false, "options": ["wan2.5-i2v-preview", "wan2.6-i2v"]}], "image": ["IMAGE", {}], "prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}]}, "optional": {"negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "resolution": ["COMBO", {"default": "720P", "multiselect": false, "options": ["480P", "720P", "1080P"]}], "duration": ["INT", {"tooltip": "Duration 15 available only for WAN2.6 model.", "default": 5, "min": 5, "max": 15, "step": 5, "display": "number"}], "audio": ["AUDIO", {"tooltip": "Audio must contain a clear, loud voice, without extraneous noise or background music."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "generate_audio": ["BOOLEAN", {"tooltip": "If no audio input is provided, generate audio automatically.", "advanced": true, "default": false}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}], "shot_type": ["COMBO", {"tooltip": "Specifies the shot type for the generated video, that is, whether the video is a single continuous shot or multiple shots with cuts. This parameter takes effect only when prompt_extend is True.", "advanced": true, "multiselect": false, "options": ["single", "multi"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "prompt"], "optional": ["negative_prompt", "resolution", "duration", "audio", "seed", "generate_audio", "prompt_extend", "watermark", "shot_type"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanImageToVideoApi", "display_name": "Wan Image to Video", "description": "Generates a video from the first frame and a text prompt.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "duration", "type": "INT"}, {"name": "resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $ppsTable := { \"480p\": 0.05, \"720p\": 0.1, \"1080p\": 0.15 };\n $pps := $lookup($ppsTable, widgets.resolution);\n { \"type\": \"usd\", \"usd\": $round($pps * widgets.duration, 2) }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WanReferenceVideoApi": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["wan2.6-r2v"]}], "prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese. Use identifiers such as `character1` and `character2` to refer to the reference characters.", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "reference_videos": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_video": ["VIDEO", {}]}}, "names": ["character1", "character2", "character3"], "min": 1}}], "size": ["COMBO", {"multiselect": false, "options": ["720p: 1:1 (960x960)", "720p: 16:9 (1280x720)", "720p: 9:16 (720x1280)", "720p: 4:3 (1088x832)", "720p: 3:4 (832x1088)", "1080p: 1:1 (1440x1440)", "1080p: 16:9 (1920x1080)", "1080p: 9:16 (1080x1920)", "1080p: 4:3 (1632x1248)", "1080p: 3:4 (1248x1632)"]}], "duration": ["INT", {"default": 5, "min": 5, "max": 10, "step": 5, "display": "slider"}], "seed": ["INT", {"default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "shot_type": ["COMBO", {"tooltip": "Specifies the shot type for the generated video, that is, whether the video is a single continuous shot or multiple shots with cuts.", "advanced": true, "multiselect": false, "options": ["single", "multi"]}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "prompt", "negative_prompt", "reference_videos", "size", "duration", "seed", "shot_type", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "WanReferenceVideoApi", "display_name": "Wan Reference to Video", "description": "Use the character and voice from input videos, combined with a prompt, to generate a new video that maintains character consistency.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "size", "type": "COMBO"}, {"name": "duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $rate := $contains(widgets.size, \"1080p\") ? 0.15 : 0.10;\n $inputMin := 2 * $rate;\n $inputMax := 5 * $rate;\n $outputPrice := widgets.duration * $rate;\n {\n \"type\": \"range_usd\",\n \"min_usd\": $inputMin + $outputPrice,\n \"max_usd\": $inputMax + $outputPrice\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan2TextToVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "wan2.7-t2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "duration": ["INT", {"default": 5, "min": 2, "max": 15, "step": 1, "display": "number"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "optional": {"audio": ["AUDIO", {"tooltip": "Audio for driving video generation (e.g., lip sync, beat-matched motion). Duration: 3s-30s. If not provided, the model automatically generates matching background music or sound effects."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "seed", "prompt_extend", "watermark"], "optional": ["audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan2TextToVideoApi", "display_name": "Wan 2.7 Text to Video", "description": "Generates a video based on a text prompt using the Wan 2.7 model.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := { \"720p\": 0.1, \"1080p\": 0.15 };\n $pps := $lookup($ppsTable, $res);\n { \"type\": \"usd\", \"usd\": $pps * $dur }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan2ImageToVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "wan2.7-i2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "duration": ["INT", {"default": 5, "min": 2, "max": 15, "step": 1, "display": "number"}]}}}]}], "first_frame": ["IMAGE", {"tooltip": "First frame image. The output aspect ratio is derived from this image."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "optional": {"last_frame": ["IMAGE", {"tooltip": "Last frame image. The model generates a video transitioning from first to last frame."}], "audio": ["AUDIO", {"tooltip": "Audio for driving video generation (e.g., lip sync, beat-matched motion). Duration: 2s-30s. If not provided, the model automatically generates matching background music or sound effects."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "first_frame", "seed", "prompt_extend", "watermark"], "optional": ["last_frame", "audio"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan2ImageToVideoApi", "display_name": "Wan 2.7 Image to Video", "description": "Generate a video from a first-frame image, with optional last-frame image and audio.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := { \"720p\": 0.1, \"1080p\": 0.15 };\n $pps := $lookup($ppsTable, $res);\n { \"type\": \"usd\", \"usd\": $pps * $dur }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan2VideoContinuationApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "wan2.7-i2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "duration": ["INT", {"tooltip": "Total output duration in seconds. The model generates continuation to fill the remaining time after the input clip.", "default": 5, "min": 2, "max": 15, "step": 1, "display": "number"}]}}}]}], "first_clip": ["VIDEO", {"tooltip": "Input video to continue from. Duration: 2s-10s. The output aspect ratio is derived from this video."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "prompt_extend": ["BOOLEAN", {"tooltip": "Whether to enhance the prompt with AI assistance.", "advanced": true, "default": true}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "optional": {"last_frame": ["IMAGE", {"tooltip": "Last frame image. The continuation will transition towards this frame."}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "first_clip", "seed", "prompt_extend", "watermark"], "optional": ["last_frame"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan2VideoContinuationApi", "display_name": "Wan 2.7 Video Continuation", "description": "Continue a video from where it left off, with optional last-frame control.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := { \"720p\": 0.1, \"1080p\": 0.15 };\n $pps := $lookup($ppsTable, $res);\n $outputPrice := $pps * $dur;\n {\n \"type\": \"range_usd\",\n \"min_usd\": 2 * $pps + $outputPrice,\n \"max_usd\": 5 * $pps + $outputPrice\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan2VideoEditApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "wan2.7-videoedit", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Editing instructions or style transfer requirements.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio. If not changed, approximates the input video ratio.", "multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "duration": ["COMBO", {"tooltip": "Output duration in seconds. 'auto' matches the input video duration. A specific value truncates from the start of the video.", "default": "auto", "multiselect": false, "options": ["auto", "2", "3", "4", "5", "6", "7", "8", "9", "10"]}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image1", "image2", "image3", "image4"], "min": 0}}]}}}]}], "video": ["VIDEO", {"tooltip": "The video to edit."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "audio_setting": ["COMBO", {"tooltip": "'auto': model decides whether to regenerate audio based on the prompt. 'origin': preserve the original audio from the input video.", "advanced": true, "default": "auto", "multiselect": false, "options": ["auto", "origin"]}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "video", "seed", "audio_setting", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan2VideoEditApi", "display_name": "Wan 2.7 Video Edit", "description": "Edit a video using text instructions, reference images, or style transfer.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := { \"720p\": 0.1, \"1080p\": 0.15 };\n $pps := $lookup($ppsTable, $res);\n { \"type\": \"usd\", \"usd\": $pps, \"format\": { \"suffix\": \"/second\", \"note\": \"(input + output)\" } }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "Wan2ReferenceVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "wan2.7-r2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the video. Use identifiers such as 'character1' and 'character2' to refer to the reference characters.", "default": "", "multiline": true}], "negative_prompt": ["STRING", {"tooltip": "Negative prompt describing what to avoid.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "duration": ["INT", {"default": 5, "min": 2, "max": 10, "step": 1, "display": "number"}], "reference_videos": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_video": ["VIDEO", {}]}}, "names": ["video1", "video2", "video3"], "min": 0}}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image1", "image2", "image3", "image4", "image5"], "min": 0}}]}}}]}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "Wan2ReferenceVideoApi", "display_name": "Wan 2.7 Reference to Video", "description": "Generate a video featuring a person or object from reference materials. Supports single-character performances and multi-character interactions.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := { \"720p\": 0.1, \"1080p\": 0.15 };\n $pps := $lookup($ppsTable, $res);\n $outputPrice := $pps * $dur;\n {\n \"type\": \"range_usd\",\n \"min_usd\": $outputPrice,\n \"max_usd\": 5 * $pps + $outputPrice\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HappyHorseTextToVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "happyhorse-1.1-t2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4", "21:9", "9:21", "5:4", "4:5"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "step": 1, "display": "number"}]}}}, {"key": "happyhorse-1.0-t2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "step": 1, "display": "number"}]}}}]}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "HappyHorseTextToVideoApi", "display_name": "HappyHorse Text to Video", "description": "Generates a video based on a text prompt using the HappyHorse model.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := $contains(widgets.model, \"1.1\")\n ? { \"720p\": 0.2002, \"1080p\": 0.2574 }\n : { \"720p\": 0.14, \"1080p\": 0.24 };\n $pps := $lookup($ppsTable, $res);\n { \"type\": \"usd\", \"usd\": $pps * $dur }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HappyHorseImageToVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "happyhorse-1.1-i2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "step": 1, "display": "number"}]}}}, {"key": "happyhorse-1.0-i2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the elements and visual features. Supports English and Chinese.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "step": 1, "display": "number"}]}}}]}], "first_frame": ["IMAGE", {"tooltip": "First frame image. The output aspect ratio is derived from this image."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "first_frame", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "HappyHorseImageToVideoApi", "display_name": "HappyHorse Image to Video", "description": "Generate a video from a first-frame image using the HappyHorse model.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := $contains(widgets.model, \"1.1\")\n ? { \"720p\": 0.2002, \"1080p\": 0.2574 }\n : { \"720p\": 0.14, \"1080p\": 0.24 };\n $pps := $lookup($ppsTable, $res);\n { \"type\": \"usd\", \"usd\": $pps * $dur }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HappyHorseVideoEditApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "happyhorse-1.0-video-edit", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Editing instructions or style transfer requirements.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"tooltip": "Aspect ratio. If not changed, approximates the input video ratio.", "multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image1", "image2", "image3", "image4", "image5"], "min": 0}}]}}}]}], "video": ["VIDEO", {"tooltip": "The video to edit."}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "video", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "HappyHorseVideoEditApi", "display_name": "HappyHorse Video Edit", "description": "Edit a video using text instructions or reference images with the HappyHorse model. Output duration is 3-15s and matches the input video; inputs longer than 15s are truncated.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $ppsTable := { \"720p\": 0.14, \"1080p\": 0.24 };\n $pps := $lookup($ppsTable, $res);\n { \"type\": \"usd\", \"usd\": $pps, \"format\": { \"suffix\": \"/second\" } }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "HappyHorseReferenceVideoApi": {"input": {"required": {"model": ["COMFY_DYNAMICCOMBO_V3", {"options": [{"key": "happyhorse-1.1-r2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the video. Use identifiers such as 'character1' and 'character2' to refer to the reference characters.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4", "21:9", "9:21", "5:4", "4:5"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "step": 1, "display": "number"}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image1", "image2", "image3", "image4", "image5", "image6", "image7", "image8", "image9"], "min": 1}}]}}}, {"key": "happyhorse-1.0-r2v", "inputs": {"required": {"prompt": ["STRING", {"tooltip": "Prompt describing the video. Use identifiers such as 'character1' and 'character2' to refer to the reference characters.", "default": "", "multiline": true}], "resolution": ["COMBO", {"multiselect": false, "options": ["720P", "1080P"]}], "ratio": ["COMBO", {"multiselect": false, "options": ["16:9", "9:16", "1:1", "4:3", "3:4"]}], "duration": ["INT", {"default": 5, "min": 3, "max": 15, "step": 1, "display": "number"}], "reference_images": ["COMFY_AUTOGROW_V3", {"template": {"input": {"required": {"reference_image": ["IMAGE", {}]}}, "names": ["image1", "image2", "image3", "image4", "image5", "image6", "image7", "image8", "image9"], "min": 1}}]}}}]}], "seed": ["INT", {"tooltip": "Seed to use for generation.", "default": 0, "min": 0, "max": 2147483647, "step": 1, "control_after_generate": true, "display": "number"}], "watermark": ["BOOLEAN", {"tooltip": "Whether to add an AI-generated watermark to the result.", "advanced": true, "default": false}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "seed", "watermark"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "HappyHorseReferenceVideoApi", "display_name": "HappyHorse Reference to Video", "description": "Generate a video featuring a person or object from reference materials with the HappyHorse model. Supports single-character performances and multi-character interactions.", "python_module": "comfy_api_nodes.nodes_wan", "category": "partner/video/Wan", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMFY_DYNAMICCOMBO_V3"}, {"name": "model.resolution", "type": "COMBO"}, {"name": "model.duration", "type": "INT"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $res := $lookup(widgets, \"model.resolution\");\n $dur := $lookup(widgets, \"model.duration\");\n $ppsTable := $contains(widgets.model, \"1.1\")\n ? { \"720p\": 0.2002, \"1080p\": 0.2574 }\n : { \"720p\": 0.14, \"1080p\": 0.24 };\n $pps := $lookup($ppsTable, $res);\n { \"type\": \"usd\", \"usd\": $pps * $dur }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WavespeedFlashVSRNode": {"input": {"required": {"video": ["VIDEO", {}], "target_resolution": ["COMBO", {"multiselect": false, "options": ["720p", "1080p", "2K", "4K"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["video", "target_resolution"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["VIDEO"], "output_is_list": [false], "output_name": ["VIDEO"], "output_tooltips": [null], "output_matchtypes": null, "name": "WavespeedFlashVSRNode", "display_name": "FlashVSR Video Upscale", "description": "Fast, high-quality video upscaler that boosts resolution and restores clarity for low-resolution or blurry footage.", "python_module": "comfy_api_nodes.nodes_wavespeed", "category": "partner/video/WaveSpeed", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "target_resolution", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $price_for_1sec := {\"720p\": 0.012, \"1080p\": 0.018, \"2k\": 0.024, \"4k\": 0.032};\n {\n \"type\":\"usd\",\n \"usd\": $lookup($price_for_1sec, widgets.target_resolution),\n \"format\":{\"suffix\": \"/second\", \"approximate\": true}\n }\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "WavespeedImageUpscaleNode": {"input": {"required": {"model": ["COMBO", {"multiselect": false, "options": ["SeedVR2", "Ultimate"]}], "image": ["IMAGE", {}], "target_resolution": ["COMBO", {"multiselect": false, "options": ["2K", "4K", "8K"]}]}, "hidden": {"auth_token_comfy_org": ["AUTH_TOKEN_COMFY_ORG"], "api_key_comfy_org": ["API_KEY_COMFY_ORG"], "unique_id": ["UNIQUE_ID"], "comfy_usage_source": ["COMFY_USAGE_SOURCE"]}}, "input_order": {"required": ["model", "image", "target_resolution"], "hidden": ["auth_token_comfy_org", "api_key_comfy_org", "unique_id", "comfy_usage_source"]}, "is_input_list": false, "output": ["IMAGE"], "output_is_list": [false], "output_name": ["IMAGE"], "output_tooltips": [null], "output_matchtypes": null, "name": "WavespeedImageUpscaleNode", "display_name": "WaveSpeed Image Upscale", "description": "Boost image resolution and quality, upscaling photos to 4K or 8K for sharp, detailed results.", "python_module": "comfy_api_nodes.nodes_wavespeed", "category": "partner/image/WaveSpeed", "output_node": false, "deprecated": false, "experimental": false, "dev_only": false, "api_node": true, "price_badge": {"engine": "jsonata", "depends_on": {"widgets": [{"name": "model", "type": "COMBO"}], "inputs": [], "input_groups": []}, "expr": "\n (\n $prices := {\"seedvr2\": 0.01, \"ultimate\": 0.06};\n {\"type\":\"usd\", \"usd\": $lookup($prices, widgets.model)}\n )\n "}, "search_aliases": null, "essentials_category": null, "has_intermediate_output": false}, "SaveImageWebsocket": {"input": {"required": {"images": ["IMAGE"]}}, "input_order": {"required": ["images"]}, "is_input_list": false, "output": [], "output_is_list": [], "output_name": [], "name": "SaveImageWebsocket", "display_name": "Save Image (Websocket)", "description": "", "python_module": "custom_nodes.websocket_image_save", "category": "image", "output_node": true, "has_intermediate_output": false, "search_aliases": []}, "UnetLoaderGGUF": {"input": {"required": {"unet_name": [["flux-2-klein-4b-Q4_K_M.gguf", "flux1-schnell-Q4_K_M.gguf", "qwen-image-Q4_K_M.gguf", "z-image-turbo-Q4_K_M.gguf"]]}}, "input_order": {"required": ["unet_name"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "UnetLoaderGGUF", "display_name": "Unet Loader (GGUF)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "CLIPLoaderGGUF": {"input": {"required": {"clip_name": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "type": [["stable_diffusion", "stable_cascade", "sd3", "stable_audio", "mochi", "ltxv", "pixart", "cosmos", "lumina2", "wan", "hidream", "chroma", "ace", "omnigen2", "qwen_image", "hunyuan_image", "flux2", "ovis", "longcat_image", "cogvideox", "lens", "pixeldit", "ideogram4", "boogu", "krea2"]]}}, "input_order": {"required": ["clip_name", "type"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "CLIPLoaderGGUF", "display_name": "CLIPLoader (GGUF)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "DualCLIPLoaderGGUF": {"input": {"required": {"clip_name1": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "clip_name2": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "type": [["sdxl", "sd3", "flux", "hunyuan_video", "hidream", "hunyuan_image", "hunyuan_video_15", "kandinsky5", "kandinsky5_image", "ltxv", "newbie", "ace"]]}}, "input_order": {"required": ["clip_name1", "clip_name2", "type"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "DualCLIPLoaderGGUF", "display_name": "DualCLIPLoader (GGUF)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "TripleCLIPLoaderGGUF": {"input": {"required": {"clip_name1": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "clip_name2": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "clip_name3": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]]}}, "input_order": {"required": ["clip_name1", "clip_name2", "clip_name3"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "TripleCLIPLoaderGGUF", "display_name": "TripleCLIPLoader (GGUF)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "QuadrupleCLIPLoaderGGUF": {"input": {"required": {"clip_name1": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "clip_name2": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "clip_name3": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]], "clip_name4": [["clip_l.safetensors", "qwen2.5vl_Q4_K_M.gguf", "qwen_3_4b.safetensors", "t5xxl_fp16.safetensors"]]}}, "input_order": {"required": ["clip_name1", "clip_name2", "clip_name3", "clip_name4"]}, "is_input_list": false, "output": ["CLIP"], "output_is_list": [false], "output_name": ["CLIP"], "name": "QuadrupleCLIPLoaderGGUF", "display_name": "QuadrupleCLIPLoader (GGUF)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}, "UnetLoaderGGUFAdvanced": {"input": {"required": {"unet_name": [["flux-2-klein-4b-Q4_K_M.gguf", "flux1-schnell-Q4_K_M.gguf", "qwen-image-Q4_K_M.gguf", "z-image-turbo-Q4_K_M.gguf"]], "dequant_dtype": [["default", "target", "float32", "float16", "bfloat16"], {"default": "default"}], "patch_dtype": [["default", "target", "float32", "float16", "bfloat16"], {"default": "default"}], "patch_on_device": ["BOOLEAN", {"default": false}]}}, "input_order": {"required": ["unet_name", "dequant_dtype", "patch_dtype", "patch_on_device"]}, "is_input_list": false, "output": ["MODEL"], "output_is_list": [false], "output_name": ["MODEL"], "name": "UnetLoaderGGUFAdvanced", "display_name": "Unet Loader (GGUF/Advanced)", "description": "", "python_module": "custom_nodes.ComfyUI-GGUF", "category": "bootleg", "output_node": false, "has_intermediate_output": false, "search_aliases": []}}
\ No newline at end of file
diff --git a/studio/backend/core/training/diffusion_train_common.py b/studio/backend/core/training/diffusion_train_common.py
index 5cbd82d966..64d602aede 100644
--- a/studio/backend/core/training/diffusion_train_common.py
+++ b/studio/backend/core/training/diffusion_train_common.py
@@ -704,6 +704,15 @@ def _coerce_gradient_checkpointing(value: Any) -> bool:
return bool(value)
+def _coerce_bool(value: Any) -> bool:
+ """Coerce a flag that may arrive as a string through the generic Studio config path
+ (e.g. "false" / "0" / "off"). A non-empty string like "false" is otherwise truthy, so
+ an opt-out would silently no-op. A real bool passes through."""
+ if isinstance(value, str):
+ return value.strip().lower() not in ("", "none", "false", "0", "no", "off")
+ return bool(value)
+
+
def _config_from_dict(config: dict) -> DiffusionLoraConfig:
"""Build a DiffusionLoraConfig from a plain dict. Unknown keys are ignored so a richer
request payload (UI form) does not break construction; a small set of generic Studio
@@ -734,4 +743,7 @@ def _config_from_dict(config: dict) -> DiffusionLoraConfig:
kwargs["gradient_checkpointing"] = _coerce_gradient_checkpointing(
kwargs["gradient_checkpointing"]
)
+ for flag in ("cache_latents", "enable_tf32"):
+ if flag in kwargs:
+ kwargs[flag] = _coerce_bool(kwargs[flag])
return DiffusionLoraConfig(**kwargs)
diff --git a/studio/backend/tests/test_diffusion_train_perf.py b/studio/backend/tests/test_diffusion_train_perf.py
index 1477e24874..c0188a9694 100644
--- a/studio/backend/tests/test_diffusion_train_perf.py
+++ b/studio/backend/tests/test_diffusion_train_perf.py
@@ -186,6 +186,20 @@ def test_config_validates_new_fields():
assert cfg.enable_tf32 is False
assert cfg.cache_latents is False
+ # String flags from the generic Studio dict path are coerced: "false" is otherwise a
+ # non-empty (truthy) string, so an opt-out would silently no-op.
+ cfg = _config_from_dict(
+ {
+ "base_model": _SDXL,
+ "data_dir": "d",
+ "output_dir": "o",
+ "enable_tf32": "false",
+ "cache_latents": "0",
+ }
+ )
+ assert cfg.enable_tf32 is False
+ assert cfg.cache_latents is False
+
# ── torch.compile policy ──────────────────────────────────────────────────────
def test_should_compile_policy():
diff --git a/temp/_pr_body_check.txt b/temp/_pr_body_check.txt
deleted file mode 100644
index aaa5a47a5c..0000000000
--- a/temp/_pr_body_check.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-## Summary
-
-An opt-in **fast transformer** mode for the Studio diffusion backend: load the dense bf16 transformer and torchao-quantise it onto the low-precision tensor cores, instead of the GGUF transformer. Stacked on the Phase 7 perf pass (#6690).
-
-The motivation, measured on a B200 (Z-Image-Turbo, 1024px / 8 steps, LPIPS vs the dense bf16 reference): GGUF stores the transformer 4-bit but **dequantises to bf16 on every matmul**, so it runs at bf16 tensor-core rate and never touches the int8 / fp8 / fp4 cores. It is a memory win that costs speed. Loading the dense bf16 transformer and quantising it dynamically with torchao runs the matmul on the actual low-precision cores:
-
-| config | sec | vs GGUF+compile | LPIPS vs bf16 |
-| --- | --- | --- | --- |
-| GGUF + compile (today's default) | 0.802 | 1.00x | 0.083 |
-| dense bf16 + compile (no quant) | 0.671 | 1.20x | 0.004 |
-| int8 dynamic + compile | 0.603 | **1.33x** | 0.069 |
-| fp8 dynamic + compile | 0.585 | **1.37x** | 0.058 |
-
-Every working scheme beats GGUF on **both** speed and quality (LPIPS lands *below* GGUF's own 4-bit floor of 0.083). The only cost is memory: the dense bf16 transformer must be loaded (~2x the 4-bit GGUF), so the mode is strictly opt-in and gated on resident VRAM headroom. GGUF + compile stays the low-memory default and the fallback.
-
-## What it does
-
-New flag `transformer_quant` on the load request (`auto | int8 | fp8 | nvfp4 | mxfp8`, default off). When set and the device qualifies (CUDA + bf16 + the dense weights fit resident), the loader:
-
-1. loads the **dense bf16 transformer** from the family `base_repo` (`from_pretrained(subfolder="transformer")`) instead of the GGUF,
-2. places it on the device and torchao-quantises the FLOP-heavy linears,
-3. compiles the repeated block (existing Phase 7 regional compile), then applies placement — so the order is **quantize -> compile -> offload**.
-
-`auto` picks the best scheme for the GPU via a real quantise+matmul **smoke probe** (Blackwell nvfp4/mxfp8 -> fp8 -> int8; Ada/Hopper fp8 -> int8; Ampere int8). An explicit scheme is honored only if supported, never silently swapped. **Any** failure (unsupported arch/scheme, OOM, partial quant, or the dense weights not fitting resident) falls back to the GGUF build with a logged reason — the default path cannot regress.
-
-A `min_features=512` filter skips the tiny timestep/pooled/modulation projections: the int8 path uses `torch._int_mm`, which requires activation rows M>16, and those projections run at M=1 and crash it (measured: 239/276 Z-Image linears quantised, full speedup, no crash).
-
-## Design
-
-- New module `core/inference/diffusion_transformer_quant.py` mirrors `diffusion_precision.py` (the text-encoder quant module): pure functions, torch/torchao imported lazily, best-effort, hermetic CPU tests. It owns scheme selection + the arch/capability/smoke probe + the `quantize_` call.
-- `diffusion.py` `load_pipeline` gains the source-branch (dense+quant or GGUF), the VRAM preflight (reuses `plan_diffusion_memory` / `estimate_gguf_dense_mib`), and the fallback. `transformer_quant` threads through `begin_load` / `_LoadState` / `status()` exactly like `text_encoder_quant`.
-- Flag surface mirrors `text_encoder_quant`: request + status models in `models/inference.py`, forwarded in `routes/inference.py`.
-- torchao tensors are not safetensors-serializable; this backend is inference-only, so the engaged transformer carries a diagnostic runtime marker but there is no save path to guard.
-
-Blackwell nvfp4/mxfp8 are wired but currently smoke-fail on this box's torch 2.9 (the FP4/MX kernels need torch>=2.11 / the MX build); `auto` lands on fp8 there with no error, and they will activate automatically once the tooling supports them.
-
-## Measured through the backend (single B200, Z-Image-Turbo, 1024x1024, 8 steps, seed 12345)
-
-End to end through `DiffusionBackend` via `scripts/diffusion_bench.py`. LPIPS vs the dense bf16 reference is from `scripts/quant_probe.py` (the standalone lever probe).
-
-| `transformer_quant` | engaged scheme | median/gen | vs GGUF | load VRAM | gen VRAM | LPIPS |
-| --- | --- | --- | --- | --- | --- | --- |
-| (unset) GGUF + compile | none | 0.823 s | reference | 13.4 GB | 15.3 GB | 0.083 |
-| `auto` | fp8 | **0.614 s** | **1.34x** | 20.9 GB | 16.5 GB | 0.058 |
-| `int8` | int8 | 0.626 s | 1.32x | 20.9 GB | 16.5 GB | 0.069 |
-| `mxfp8` | mxfp8 | 0.651 s | 1.26x | 21.3 GB | 16.7 GB | n/m |
-
-`auto` selects fp8 on this B200 (nvfp4 smoke-fails on torch 2.9 -> the ladder prefers the measured-faster fp8 over mxfp8). The speed-for-memory trade is explicit: the dense bf16 load peaks ~21 GB vs GGUF's 13.4 GB; resident generation VRAM is close (16.5 vs 15.3 GB). Every engaged scheme is faster than GGUF *and* lands below its 0.083 LPIPS floor.
-
-## Tests
-
-CPU-only, hermetic (torch / torchao stubbed via `sys.modules`):
-- new `tests/test_diffusion_transformer_quant.py` — normalisation, the arch-selection ladder (Ampere int8 / Ada-Hopper fp8 / Blackwell nvfp4->mxfp8->fp8 fallback / pre-Ampere none / explicit-unsupported none), the smoke-probe cache + tolerance, the feature filter, and the apply path (calls `quantize_` with a filter_fn, sets the marker, tolerates failure).
-- extended `tests/test_diffusion_backend.py` — default load skips the dense path; the dense path engages and reports the scheme; a quant failure falls back to GGUF; the path is skipped when the plan would offload.
-- extended `tests/test_diffusion_routes.py` — the flag threads through to `begin_load` and an invalid enum is a 422.
-
-`scripts/diffusion_bench.py` gains `--transformer-quant` (through-the-backend benchmark + regression guard); `scripts/quant_probe.py` is the standalone torchao lever probe (latency + PSNR + LPIPS + VRAM vs the dense reference, with the `--min-feat` filter).
-
diff --git a/temp/_pr_body_check2.txt b/temp/_pr_body_check2.txt
deleted file mode 100644
index 312ae185b6..0000000000
--- a/temp/_pr_body_check2.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-## Summary
-
-An opt-in **fast transformer** mode for the Studio diffusion backend: load the dense bf16 transformer and torchao-quantise it onto the low-precision tensor cores, instead of the GGUF transformer. Stacked on the Phase 7 perf pass (#6690).
-
-The motivation, measured on a B200 (Z-Image-Turbo, 1024px / 8 steps, LPIPS vs the dense bf16 reference): GGUF stores the transformer 4-bit but **dequantises to bf16 on every matmul**, so it runs at bf16 tensor-core rate and never touches the int8 / fp8 / fp4 cores. It is a memory win that costs speed. Loading the dense bf16 transformer and quantising it dynamically with torchao runs the matmul on the actual low-precision cores:
-
-| config | sec | vs GGUF+compile | LPIPS vs bf16 |
-| --- | --- | --- | --- |
-| GGUF + compile (today's default) | 0.802 | 1.00x | 0.083 |
-| dense bf16 + compile (no quant) | 0.671 | 1.20x | 0.004 |
-| int8 dynamic + compile | 0.603 | **1.33x** | 0.069 |
-| fp8 dynamic + compile | 0.585 | **1.37x** | 0.058 |
-
-Every working scheme beats GGUF on **both** speed and quality (LPIPS lands *below* GGUF's own 4-bit floor of 0.083). The only cost is memory: the dense bf16 transformer must be loaded (~2x the 4-bit GGUF), so the mode is strictly opt-in and gated on resident VRAM headroom. GGUF + compile stays the low-memory default and the fallback.
-
-## What it does
-
-New flag `transformer_quant` on the load request (`auto | int8 | fp8 | nvfp4 | mxfp8`, default off). When set and the device qualifies (CUDA + bf16 + the dense weights fit resident), the loader:
-
-1. loads the **dense bf16 transformer** from the family `base_repo` (`from_pretrained(subfolder="transformer")`) instead of the GGUF,
-2. places it on the device and torchao-quantises the FLOP-heavy linears,
-3. compiles the repeated block (existing Phase 7 regional compile), then applies placement — so the order is **quantize -> compile -> offload**.
-
-`auto` picks the best scheme for the GPU via a real quantise+matmul **smoke probe** (Blackwell fp8 -> nvfp4 -> mxfp8 -> int8; Ada/Hopper fp8 -> int8; Ampere int8). An explicit scheme is honored only if supported, never silently swapped. **Any** failure (unsupported arch/scheme, OOM, partial quant, or the dense weights not fitting resident) falls back to the GGUF build with a logged reason — the default path cannot regress.
-
-A `min_features=512` filter skips the tiny timestep/pooled/modulation projections: the int8 path uses `torch._int_mm`, which requires activation rows M>16, and those projections run at M=1 and crash it (measured: 239/276 Z-Image linears quantised, full speedup, no crash).
-
-## Design
-
-- New module `core/inference/diffusion_transformer_quant.py` mirrors `diffusion_precision.py` (the text-encoder quant module): pure functions, torch/torchao imported lazily, best-effort, hermetic CPU tests. It owns scheme selection + the arch/capability/smoke probe + the `quantize_` call.
-- `diffusion.py` `load_pipeline` gains the source-branch (dense+quant or GGUF), the VRAM preflight (reuses `plan_diffusion_memory` / `estimate_gguf_dense_mib`), and the fallback. `transformer_quant` threads through `begin_load` / `_LoadState` / `status()` exactly like `text_encoder_quant`.
-- Flag surface mirrors `text_encoder_quant`: request + status models in `models/inference.py`, forwarded in `routes/inference.py`.
-- torchao tensors are not safetensors-serializable; this backend is inference-only, so the engaged transformer carries a diagnostic runtime marker but there is no save path to guard.
-
-Blackwell nvfp4/mxfp8 are wired but `auto` deliberately lands on fp8. NVFP4 is a torchao feature (torch core only provides the `float4_e2m1fn_x2` primitive, not a quantization workflow). It was validated both on this box's torch 2.9 (no FP4 kernel: torchao prints "Skipping import of cpp extensions ... upgrade to torch >= 2.11", so it dequantises FP4->bf16 and runs at bf16-compile rate) and in an isolated torch 2.11.0 + torchao CUTLASS env where the FP4 GEMM is genuinely live -- a 16384^3 GEMM hits ~3826 TFLOPS (2.52x bf16, 1.37x fp8). The catch is shape: the DiT's linears (hidden ~3072, MLP ~12288, M~4096) sit below the crossover where FP4 compute beats fp8, so end-to-end on Z-Image 1024px NVFP4 is **slower (0.81x fp8) and less accurate (LPIPS 0.166 vs fp8's 0.044)** even with the fast kernel. So the Blackwell `auto` ladder puts fp8 ahead of nvfp4 (nvfp4 stays an explicit opt-in); the NVFP4 triton path also still requires MSLK (repo unavailable), while the CUTLASS path is the real one. See `scripts/nvfp4_probe.py` (torch 2.9) and `scripts/nvfp4_t211_probe.py` (torch 2.11 micro + e2e).
-
-## Measured through the backend (single B200, Z-Image-Turbo, 1024x1024, 8 steps, seed 12345)
-
-End to end through `DiffusionBackend` via `scripts/diffusion_bench.py`. LPIPS vs the dense bf16 reference is from `scripts/quant_probe.py` (the standalone lever probe).
-
-| `transformer_quant` | engaged scheme | median/gen | vs GGUF | load VRAM | gen VRAM | LPIPS |
-| --- | --- | --- | --- | --- | --- | --- |
-| (unset) GGUF + compile | none | 0.823 s | reference | 13.4 GB | 15.3 GB | 0.083 |
-| `auto` | fp8 | **0.614 s** | **1.34x** | 20.9 GB | 16.5 GB | 0.058 |
-| `int8` | int8 | 0.626 s | 1.32x | 20.9 GB | 16.5 GB | 0.069 |
-| `mxfp8` | mxfp8 | 0.651 s | 1.26x | 21.3 GB | 16.7 GB | n/m |
-
-`auto` selects fp8 on this B200 (nvfp4 smoke-fails on torch 2.9 -> the ladder prefers the measured-faster fp8 over mxfp8). The speed-for-memory trade is explicit: the dense bf16 load peaks ~21 GB vs GGUF's 13.4 GB; resident generation VRAM is close (16.5 vs 15.3 GB). Every engaged scheme is faster than GGUF *and* lands below its 0.083 LPIPS floor.
-
-## Tests
-
-CPU-only, hermetic (torch / torchao stubbed via `sys.modules`):
-- new `tests/test_diffusion_transformer_quant.py` — normalisation, the arch-selection ladder (Ampere int8 / Ada-Hopper fp8 / Blackwell fp8->nvfp4->mxfp8 fallback / pre-Ampere none / explicit-unsupported none), the smoke-probe cache + tolerance, the feature filter, and the apply path (calls `quantize_` with a filter_fn, sets the marker, tolerates failure).
-- extended `tests/test_diffusion_backend.py` — default load skips the dense path; the dense path engages and reports the scheme; a quant failure falls back to GGUF; the path is skipped when the plan would offload.
-- extended `tests/test_diffusion_routes.py` — the flag threads through to `begin_load` and an invalid enum is a 422.
-
-`scripts/diffusion_bench.py` gains `--transformer-quant` (through-the-backend benchmark + regression guard); `scripts/quant_probe.py` is the standalone torchao lever probe (latency + PSNR + LPIPS + VRAM vs the dense reference, with the `--min-feat` filter).
-
-
diff --git a/temp/_pr_body_live.txt b/temp/_pr_body_live.txt
deleted file mode 100644
index 158f8e2cb5..0000000000
--- a/temp/_pr_body_live.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-## Summary
-
-An opt-in **fast transformer** mode for the Studio diffusion backend: load the dense bf16 transformer and torchao-quantise it onto the low-precision tensor cores, instead of the GGUF transformer. Stacked on the Phase 7 perf pass (#6690).
-
-The motivation, measured on a B200 (Z-Image-Turbo, 1024px / 8 steps, LPIPS vs the dense bf16 reference): GGUF stores the transformer 4-bit but **dequantises to bf16 on every matmul**, so it runs at bf16 tensor-core rate and never touches the int8 / fp8 / fp4 cores. It is a memory win that costs speed. Loading the dense bf16 transformer and quantising it dynamically with torchao runs the matmul on the actual low-precision cores:
-
-| config | sec | vs GGUF+compile | LPIPS vs bf16 |
-| --- | --- | --- | --- |
-| GGUF + compile (today's default) | 0.802 | 1.00x | 0.083 |
-| dense bf16 + compile (no quant) | 0.671 | 1.20x | 0.004 |
-| int8 dynamic + compile | 0.603 | **1.33x** | 0.069 |
-| fp8 dynamic + compile | 0.585 | **1.37x** | 0.058 |
-
-Every working scheme beats GGUF on **both** speed and quality (LPIPS lands *below* GGUF's own 4-bit floor of 0.083). The only cost is memory: the dense bf16 transformer must be loaded (~2x the 4-bit GGUF), so the mode is strictly opt-in and gated on resident VRAM headroom. GGUF + compile stays the low-memory default and the fallback.
-
-## What it does
-
-New flag `transformer_quant` on the load request (`auto | int8 | fp8 | nvfp4 | mxfp8`, default off). When set and the device qualifies (CUDA + bf16 + the dense weights fit resident), the loader:
-
-1. loads the **dense bf16 transformer** from the family `base_repo` (`from_pretrained(subfolder="transformer")`) instead of the GGUF,
-2. places it on the device and torchao-quantises the FLOP-heavy linears,
-3. compiles the repeated block (existing Phase 7 regional compile), then applies placement — so the order is **quantize -> compile -> offload**.
-
-`auto` picks the best scheme for the GPU via a real quantise+matmul **smoke probe** (Blackwell fp8 -> nvfp4 -> mxfp8 -> int8; Ada/Hopper fp8 -> int8; Ampere int8). An explicit scheme is honored only if supported, never silently swapped. **Any** failure (unsupported arch/scheme, OOM, partial quant, or the dense weights not fitting resident) falls back to the GGUF build with a logged reason — the default path cannot regress.
-
-A `min_features=512` filter skips the tiny timestep/pooled/modulation projections: the int8 path uses `torch._int_mm`, which requires activation rows M>16, and those projections run at M=1 and crash it (measured: 239/276 Z-Image linears quantised, full speedup, no crash).
-
-## Design
-
-- New module `core/inference/diffusion_transformer_quant.py` mirrors `diffusion_precision.py` (the text-encoder quant module): pure functions, torch/torchao imported lazily, best-effort, hermetic CPU tests. It owns scheme selection + the arch/capability/smoke probe + the `quantize_` call.
-- `diffusion.py` `load_pipeline` gains the source-branch (dense+quant or GGUF), the VRAM preflight (reuses `plan_diffusion_memory` / `estimate_gguf_dense_mib`), and the fallback. `transformer_quant` threads through `begin_load` / `_LoadState` / `status()` exactly like `text_encoder_quant`.
-- Flag surface mirrors `text_encoder_quant`: request + status models in `models/inference.py`, forwarded in `routes/inference.py`.
-- torchao tensors are not safetensors-serializable; this backend is inference-only, so the engaged transformer carries a diagnostic runtime marker but there is no save path to guard.
-
-Blackwell nvfp4/mxfp8 are wired but `auto` deliberately lands on fp8. NVFP4 is a torchao feature (torch core only provides the `float4_e2m1fn_x2` primitive, not a quantization workflow). It was validated both on this box's torch 2.9 (no FP4 kernel: torchao prints "Skipping import of cpp extensions ... upgrade to torch >= 2.11", so it dequantises FP4->bf16 and runs at bf16-compile rate) and in an isolated torch 2.11.0 + torchao CUTLASS env where the FP4 GEMM is genuinely live -- a 16384^3 GEMM hits ~3826 TFLOPS (2.52x bf16, 1.37x fp8). The catch is shape: the DiT's linears (hidden ~3072, MLP ~12288, M~4096) sit below the crossover where FP4 compute beats fp8, so end-to-end on Z-Image 1024px NVFP4 is **slower (0.81x fp8) and less accurate (LPIPS 0.166 vs fp8's 0.044)** even with the fast kernel. So the Blackwell `auto` ladder puts fp8 ahead of nvfp4 (nvfp4 stays an explicit opt-in); the NVFP4 triton path also still requires MSLK (repo unavailable), while the CUTLASS path is the real one. See `scripts/nvfp4_probe.py` (torch 2.9) and `scripts/nvfp4_t211_probe.py` (torch 2.11 micro + e2e).
-
-## Measured through the backend (single B200, Z-Image-Turbo, 1024x1024, 8 steps, seed 12345)
-
-End to end through `DiffusionBackend` via `scripts/diffusion_bench.py`. LPIPS vs the dense bf16 reference is from `scripts/quant_probe.py` (the standalone lever probe).
-
-| `transformer_quant` | engaged scheme | median/gen | vs GGUF | load VRAM | gen VRAM | LPIPS |
-| --- | --- | --- | --- | --- | --- | --- |
-| (unset) GGUF + compile | none | 0.823 s | reference | 13.4 GB | 15.3 GB | 0.083 |
-| `auto` | fp8 | **0.614 s** | **1.34x** | 20.9 GB | 16.5 GB | 0.058 |
-| `int8` | int8 | 0.626 s | 1.32x | 20.9 GB | 16.5 GB | 0.069 |
-| `mxfp8` | mxfp8 | 0.651 s | 1.26x | 21.3 GB | 16.7 GB | n/m |
-
-`auto` selects fp8 on this B200 (nvfp4 smoke-fails on torch 2.9 -> the ladder prefers the measured-faster fp8 over mxfp8). The speed-for-memory trade is explicit: the dense bf16 load peaks ~21 GB vs GGUF's 13.4 GB; resident generation VRAM is close (16.5 vs 15.3 GB). Every engaged scheme is faster than GGUF *and* lands below its 0.083 LPIPS floor.
-
-## Tests
-
-CPU-only, hermetic (torch / torchao stubbed via `sys.modules`):
-- new `tests/test_diffusion_transformer_quant.py` — normalisation, the arch-selection ladder (Ampere int8 / Ada-Hopper fp8 / Blackwell fp8->nvfp4->mxfp8 fallback / pre-Ampere none / explicit-unsupported none), the smoke-probe cache + tolerance, the feature filter, and the apply path (calls `quantize_` with a filter_fn, sets the marker, tolerates failure).
-- extended `tests/test_diffusion_backend.py` — default load skips the dense path; the dense path engages and reports the scheme; a quant failure falls back to GGUF; the path is skipped when the plan would offload.
-- extended `tests/test_diffusion_routes.py` — the flag threads through to `begin_load` and an invalid enum is a 422.
-
-`scripts/diffusion_bench.py` gains `--transformer-quant` (through-the-backend benchmark + regression guard); `scripts/quant_probe.py` is the standalone torchao lever probe (latency + PSNR + LPIPS + VRAM vs the dense reference, with the `--min-feat` filter).
-
diff --git a/temp/phase10_pr_body.md b/temp/phase10_pr_body.md
deleted file mode 100644
index 4fd4e6ed8a..0000000000
--- a/temp/phase10_pr_body.md
+++ /dev/null
@@ -1,74 +0,0 @@
-## Summary
-
-A selectable **attention backend** for the Studio diffusion transformer, via the diffusers
-`set_attention_backend` dispatcher. Stacked on the Phase 9 pre-quantized loading pass (#6700).
-
-Attention is memory-bandwidth bound, so swapping in a better SDPA kernel is a real end-to-end
-win that is **orthogonal to the linear-weight quantisation** (it speeds the QK/PV matmuls
-torchao never touches) and composes with torch.compile.
-
-Measured on a B200 (Z-Image-Turbo, 1024px / 8 steps, dense bf16 + regional compile = today's
-profile), LPIPS vs the default backend:
-
-| attention | sec | vs default | LPIPS |
-| --- | --- | --- | --- |
-| default SDPA (`native`) | 0.686 | 1.00x | reference |
-| **cuDNN fused (`_native_cudnn`)** | **0.584** | **1.18x** | 0.004 |
-
-cuDNN's fused attention is **1.18x end-to-end, near-lossless** (LPIPS 0.004 is below the
-compile/quant noise floor). It is exact (not quantized) and broadly available on NVIDIA.
-
-## What it does
-
-New load flag `attention_backend` (`auto | native | cudnn | flash | flash3 | flash4 | sage |
-xformers | aiter`, default `auto`). Resolved per device, set on `pipe.transformer` **before
-compile** (compile traces attention):
-
-- **`auto`** picks the best *exact* backend: `_native_cudnn` on NVIDIA CUDA **when a speed
- profile is active** (so `speed_mode=off` stays bit-identical), `native` SDPA elsewhere
- (AMD / Intel / Apple / CPU, which the dispatcher already routes). The GGUF default path
- (which defaults `speed_mode=default`) therefore picks up the cuDNN win automatically.
-- An **explicit** backend is honored verbatim: `cudnn` / `flash` / `flash3` (Hopper) /
- `flash4` (SM100) are exact; `sage` is INT8 attention (a small quality cost, consumer
- friendly); `xformers` / `aiter` are memory-efficient (NVIDIA) / AMD ROCm.
-- An **unavailable** kernel (missing package / wrong arch) is caught at set time and the load
- falls back to the diffusers default rather than failing.
-
-## Design
-
-- New `core/inference/diffusion_attention.py` mirrors the sibling modules (pure functions,
- torch/diffusers imported lazily, best-effort, hermetic tests): `normalize_attention_backend`,
- `select_attention_backend(target, requested, *, speed_active)` (the per-device policy),
- `apply_attention_backend(pipe, backend)` (set + graceful fallback).
-- `diffusion.py` `load_pipeline` selects + applies the backend right before
- `apply_speed_optims` (so it precedes compile); `attention_backend` threads through
- `begin_load` / `_LoadState` / `status()` like the other load knobs, and the engaged backend
- is reported in status. Orthogonal to the transformer/text-encoder quant and to GGUF vs dense.
-- Flag surface: `DiffusionLoadRequest.attention_backend` (Literal) + the route forward +
- `DiffusionStatusResponse.attention_backend`.
-
-## Tests
-
-CPU-only, hermetic (`_is_cuda_nvidia` monkeypatched; a fake transformer records / raises on
-`set_attention_backend`):
-- new `tests/test_diffusion_attention.py` -- normalisation + alias map, the select policy
- (auto -> cuDNN on NVIDIA when speed active; native when off / off-NVIDIA; explicit honored;
- `native` -> no-op), and apply (sets the backend, falls back to the default on an unavailable
- kernel, handles a transformer without the method).
-- extended `tests/test_diffusion_routes.py` -- `attention_backend` threads through to
- `begin_load`, and an invalid value is a 422.
-
-GPU verification: `scripts/perf_levers_probe.py` (the table above; also measured that
-SageAttention v1.0.6 lacks Blackwell kernels and FlashAttention `*_hub` need the `kernels`
-package -> both correctly fall back, while the lossless inductor autotune flags were
-~neutral on this B200/bf16 and are deferred), plus a backend-function smoke (auto ->
-`_native_cudnn`, finite image).
-
-## Scope / notes
-
-- `off` stays bit-identical: `auto` only upgrades attention when a speed profile is active.
-- cuDNN attention needs a recent cuDNN; the dispatcher validates at set time and falls back to
- `native` otherwise, so there is no regression on older stacks.
-- `sage` / `flash*` are wired and validated by the fallback path, but not GPU-verified here
- (sage's PyPI build has no SM100 kernels; the `*_hub` flash variants need `kernels`, which
- conflicts with the diffusers huggingface-hub pin in this env) -> flagged, opt-in.
diff --git a/temp/phase11_pr_body.md b/temp/phase11_pr_body.md
deleted file mode 100644
index 07af352c3d..0000000000
--- a/temp/phase11_pr_body.md
+++ /dev/null
@@ -1,57 +0,0 @@
-## Summary
-
-Make the transformer `auto` quant pick **int8 on consumer / workstation GPUs**, while
-data-center parts keep fp8. Stacked on the Phase 10 attention pass (#6701).
-
-Consumer Blackwell / Ada / Ampere (and workstation RTX) GPUs **halve** fp8 (and fp16/bf16)
-tensor-core throughput when the matmul accumulates in FP32, while **int8 runs at full rate**
-(its int32 accumulate is not nerfed). So on a consumer card the int8 tensor cores are the
-faster path, not fp8.
-
-Public benchmarks back this directly. SDNQ's per-GPU matmul numbers (int8 via
-`torch._int_mm` vs fp8 via `torch._scaled_mm`):
-
-| GPU | bf16 | int8 | fp8 | int8 vs bf16 |
-| --- | --- | --- | --- | --- |
-| RTX 3090 (Ampere) | 76 | **184** | 0 (no fp8 HW) | 2.4x |
-| RTX 4090 (Ada) | 164 | **359** | 83 rowwise / 269 TW | 2.2x |
-| RTX 5090 (Blackwell) | 232 | **471** | 433 | 2.0x |
-| RTX PRO 6000 (data-center) | 390 | 499 | **659** | 1.3x |
-
-int8 wins (or is the only option) on every consumer part; fp8 only wins on the data-center
-chip. This matches the consumer FP8-accumulate nerf exactly.
-
-## What it does
-
-When `transformer_quant=auto`, the per-arch ladder is reordered to put int8 first on a
-consumer / workstation GPU, detected by the existing `_is_consumer_gpu` name heuristic
-(GeForce / TITAN / workstation / unknown -> consumer; recognised data-center tokens like
-B200 / H100 / A100 / L40 -> not). Data-center HBM parts are unchanged and keep fp8 first.
-
-It is a pure reorder of schemes that already exist (`_prefer_consumer_scheme`): no new flags,
-no new kernels. The smoke probe still gates each scheme, and an explicit `transformer_quant`
-(e.g. forcing `fp8`) is still honored verbatim.
-
-## Design
-
-- `diffusion_transformer_quant.py`: `select_transformer_quant_scheme` now walks
- `_prefer_consumer_scheme(tier, device)` -- which moves int8 to the front when
- `_is_consumer_gpu(device)` -- instead of the raw data-center tier. The `_AUTO_LADDER`
- comment documents that it is the data-center order, reordered per GPU class at selection.
-
-## Tests / verification
-
-- Hermetic CPU tests: consumer Blackwell (RTX 5090) and Ada (RTX 4090) and a workstation /
- unknown name -> int8; data-center Ada (L40S), Hopper (H100), Blackwell (B200) -> fp8;
- int8-unavailable on consumer falls back to the rest of the tier (fp8). The shared torch
- stub now carries a device name so the selection sees a GPU class.
-- GPU non-regression on a B200: `_is_consumer_gpu("cuda")` is False, the reorder is a no-op,
- and `auto` still resolves to fp8 -- the data-center path is unchanged.
-
-## Notes
-
-- The consumer speedup itself is from the cited public benchmarks + the NVIDIA accumulate
- specs (this CI box is a data-center B200, so only the non-regression is measured here).
-- int8 is also the broadest-compatibility scheme (Ampere+ and, via the same `torch._int_mm`
- core, the most portable to AMD / Intel), so this also nudges the widest set of consumer
- hardware onto a working fast path by default.
diff --git a/temp/phase12_pr_body.md b/temp/phase12_pr_body.md
deleted file mode 100644
index e237afc91d..0000000000
--- a/temp/phase12_pr_body.md
+++ /dev/null
@@ -1,42 +0,0 @@
-### Summary
-
-Adds opt-in step caching (First-Block-Cache) for the diffusion transformer. Across denoise steps a DiT's output settles, so once the first block's residual barely changes the remaining blocks are skipped and their cached output reused. diffusers ships this natively (`FirstBlockCacheConfig` + `transformer.enable_cache`, with the standalone `apply_first_block_cache` hook as a fallback).
-
-This is the next lever in the Studio diffusion efficiency stack, targeting denoise-time speed on many-step models.
-
-### Measured (Flux.1-dev, 28 steps, 1024px, one B200)
-
-Reference is the no-cache compiled output (`scripts/fbcache_flux_probe.py`):
-
-| mode | latency | speedup | LPIPS vs no-cache |
-| --- | --- | --- | --- |
-| compile baseline | 2.83s | 1.00x | ref |
-| fbcache (threshold 0.08) | 2.03s | 1.40x | ~0.08 |
-
-~1.4x on top of `torch.compile` at a small, well-bounded quality cost.
-
-### Design
-
-- OFF by default and a per-load opt-in. The win scales with step count, so it is for many-step models (Flux / Qwen-Image) and pointless for few-step distilled models (e.g. Z-Image-Turbo at ~8 steps), where a single skipped step is a large fraction of the trajectory.
-- Composes with regional compile only with `fullgraph=False` (the cache's per-step decision is a `torch.compiler.disable` graph break), which the speed layer now switches to automatically when a cache is engaged.
-- Best-effort: a model whose block signature the hook does not recognise is caught and the load proceeds uncached.
-- The residual threshold auto-raises for a quantised transformer (0.08 -> 0.12), which shifts the residual distribution, per ParaAttention's fp8 guidance. An explicit `transformer_cache_threshold` overrides.
-
-### Changes
-
-- new `core/inference/diffusion_cache.py`: `normalize_transformer_cache` + `apply_step_cache` (enable_cache / apply_first_block_cache fallback; lazy diffusers import).
-- `diffusion_speed.py`: `apply_speed_optims` takes `cache_active`; compile drops `fullgraph` when a cache is engaged.
-- `diffusion.py`: `apply_step_cache` runs before compile; `transformer_cache` / `transformer_cache_threshold` thread through `begin_load` -> `load_pipeline`, and the engaged mode is reported in `status()`.
-- `models/inference.py` + `routes/inference.py`: `transformer_cache` (`off | fbcache`) and `transformer_cache_threshold` request fields; engaged mode in the status response.
-- hermetic tests for normalisation, the enable_cache / hook-fallback paths, threshold selection, and best-effort failure handling, plus route threading + validation (422 on a bad enum / out-of-range threshold).
-- `scripts/fbcache_flux_probe.py`: the Flux validation probe (latency / speedup / VRAM / LPIPS vs the compiled no-cache baseline).
-
-### Compatibility
-
-Default behaviour is unchanged: the request field defaults to `null` so nothing engages unless a caller opts in. No change to the GGUF build, the dense fast path, the placement/offload order, or any other family.
-
-### Testing
-
-`python -m pytest tests/ -q -k diffusion` -> 230 passed. The Flux speedup/quality numbers above are from `scripts/fbcache_flux_probe.py`.
-
-Stacked on #6702 (Phase 11). Base branch `diffusion-phase11-consumer-int8`.
diff --git a/temp/phase14_pr_body.md b/temp/phase14_pr_body.md
deleted file mode 100644
index 21a8b98131..0000000000
--- a/temp/phase14_pr_body.md
+++ /dev/null
@@ -1,51 +0,0 @@
-### Summary
-
-Fixes the opt-in dense **int8** transformer quant path, which crashed on FLUX.1 and Qwen-Image with:
-
-```
-RuntimeError: torch._int_mm: self.size(0) needs to be greater than 16, but got 1
-```
-
-Found while benchmarking the dense quant path across all supported models: fp8 worked everywhere, but int8 failed on every Flux.1 and Qwen variant (worked on Z-Image and FLUX.2-klein-4B).
-
-### Root cause
-
-int8 dynamic quant runs through `torch._int_mm`, which requires the activation row count **M > 16**. A DiT's AdaLN **modulation** projections and its **conditioning embedders** are computed once from the `[batch, dim]` conditioning vector (M = batch = 1), not per token, so they hit `_int_mm` at M=1 and crash. Examples (in -> out):
-
-- FLUX.1: `transformer_blocks.*.norm1.linear` 3072 -> 18432, `norm1_context.linear`, `norm_out.linear`, `time_text_embed.*`
-- Qwen-Image: `transformer_blocks.*.img_mod.1` / `txt_mod.1` 3072 -> 18432, `time_text_embed.timestep_embedder.*`
-- FLUX.2-klein: `double_stream_modulation_*.linear`, `single_stream_modulation.linear`
-
-These have large feature dims, so the existing `min_features` filter did not exclude them. (Z-Image / klein-4B happened not to hit an M=1 int8 matmul, which is why they worked.)
-
-### Fix
-
-The int8 filter now additionally skips any `nn.Linear` whose fully-qualified name matches a modulation / conditioning-embedder token: `norm`, `_mod`, `modulation`, `timestep_embed`, `guidance_embed`, `time_text_embed`, `pooled`. These run at M=1 once per block and are a negligible share of the FLOPs, so int8 keeps the full speedup on the attention / FFN layers (M = sequence length).
-
-- The exclusion is **int8-only**: fp8 / nvfp4 / mxfp8 use `scaled_mm`, which has no M>16 limit and quantises these layers fine.
-- Sequence embedders (`context_embedder` / `x_embedder` / `txt_in`, M = seq) are deliberately **not** excluded. Note `context_embedder` contains the substring `text_embed`, which is why the token is the specific `time_text_embed`, not `text_embed`.
-
-### Measured (B200, 1024px, transformer_quant=int8 + speed=default)
-
-int8 now runs on every supported model and is the **fastest** dense path on Flux/Qwen (int8 runs full-rate vs fp8's FP32-accumulate):
-
-| model | eager GGUF | int8 (this PR) | speedup | fp8 (for ref) |
-| --- | --- | --- | --- | --- |
-| FLUX.1-dev (28 step) | 9.62s | 1.98s | 4.86x | 2.15s |
-| Qwen-Image (20 step) | 10.39s | 1.87s | 5.57x | 2.09s |
-| Qwen-Image-2512 | 10.20s | 1.84s | 5.55x | 2.09s |
-| FLUX.1-schnell (4 step) | 1.46s | 0.41s | 3.59x | 0.44s |
-
-Z-Image and FLUX.2-klein-4B (already working) are unchanged.
-
-### Changes
-
-- `diffusion_transformer_quant.py`: add `_INT8_EXCLUDE_NAME_TOKENS`; `make_filter_fn` takes `exclude_name_tokens`; `quantize_transformer` passes it for int8 only.
-- Hermetic test that the int8 filter excludes the modulation / embedder linears and keeps the attention / FFN / sequence-embedder linears (fp8 keeps them).
-- `scripts/int8_linear_probe.py`: the meta-device probe used to enumerate each transformer's Linear layers and derive the exclusion list.
-
-### Testing
-
-`python -m pytest tests/ -q -k diffusion` -> 231 passed. The GPU numbers above are from `scripts/diffusion_bench.py --transformer-quant int8`.
-
-Stacked on #6703 (Phase 12). Base branch `diffusion-phase12-fbcache`.
diff --git a/temp/phase15_pr_body.md b/temp/phase15_pr_body.md
deleted file mode 100644
index d961ca7384..0000000000
--- a/temp/phase15_pr_body.md
+++ /dev/null
@@ -1,31 +0,0 @@
-### Summary
-
-Lets the pre-quantized-checkpoint builder produce a **working int8** checkpoint, not just fp8.
-
-The fast transformer_quant path can either quantise the dense bf16 transformer on the GPU at load (~2x the GGUF load VRAM, full bf16 download) or load a checkpoint that was quantised once ahead of time (`scripts/build_prequant_checkpoint.py` -> `diffusion_prequant.py`), which drops the transformer GPU load peak and download ~2x. That builder already accepted `--scheme int8`, but it applied the dense quant filter **without** the int8-only M=1 exclusion the runtime path got in #6716, so a built int8 checkpoint baked the AdaLN-modulation / conditioning-embedder projections as int8 and crashed at the first denoise step on Flux / Qwen:
-
-```
-RuntimeError: torch._int_mm: self.size(0) needs to be greater than 16, but got 1
-```
-
-### Root cause
-
-int8 dynamic quant runs through `torch._int_mm`, which requires activation rows M > 16. A DiT's modulation / timestep / guidance / pooled-text projections run once from the `[batch, dim]` conditioning vector (M = batch = 1). The runtime path (#6716) excludes them from the int8 filter; the offline builder did not, so an int8 checkpoint diverged from the runtime model (and crashed where the runtime path is correct). fp8 / nvfp4 / mxfp8 use `scaled_mm` (no M limit), which is why fp8 prequant already worked.
-
-### Fix
-
-Factor the scheme -> exclusion decision into one shared `exclude_tokens_for_scheme(scheme)` in `diffusion_transformer_quant.py`, used by **both** the runtime quantise path and the offline builder, so the two can never drift -- an int8 checkpoint built ahead of time now skips exactly the layers the runtime path skips (the module's "offline == runtime, LPIPS-0" invariant). `build_prequant_checkpoint.py` applies it; for fp8 / fp4 / mx the helper returns `()`, so nothing changes for them.
-
-Result: int8 prequant produces a working checkpoint on every supported model, giving **int8** -- the consumer-preferred scheme (consumer cards halve fp8 FP32-accumulate throughput; int8 runs full-rate) -- the same ~2x load-VRAM and download reduction fp8 already had. This directly lowers the peak memory to *load* the fast path on the hardware that needs it most.
-
-### Changes
-
-- `diffusion_transformer_quant.py`: add `exclude_tokens_for_scheme()`; `quantize_transformer` now calls it (behaviour-identical refactor of the inline int8 check).
-- `scripts/build_prequant_checkpoint.py`: pass `exclude_name_tokens = exclude_tokens_for_scheme(scheme)` into the filter.
-- Hermetic test that the shared helper returns the modulation/embedder tokens for int8 and `()` for fp8 / nvfp4 / mxfp8.
-
-### Testing
-
-`python -m pytest tests/test_diffusion_transformer_quant.py tests/test_diffusion_prequant.py -q` -> 43 passed. The runtime int8 path is unchanged (same tokens, now via the shared helper).
-
-Stacked on #6716 (Phase 14). Base branch `diffusion-phase14-int8-modulation`.
diff --git a/temp/phase16_pr_body.md b/temp/phase16_pr_body.md
deleted file mode 100644
index 76cee1e113..0000000000
--- a/temp/phase16_pr_body.md
+++ /dev/null
@@ -1,88 +0,0 @@
-## Summary
-
-Wires the native stable-diffusion.cpp engine into the **live** diffusion route so that when no usable
-CUDA / ROCm / XPU GPU is present (CPU, and Apple MPS when explicitly enabled), generation runs on the
-native `sd-cli` engine instead of diffusers, with diffusers as the guaranteed fallback. Stacked on the
-Phase 15 pre-quant pass (#6717).
-
-The native engine has shipped since Phase 4 (#6679) but was never reachable from the route, which always
-drove the diffusers `DiffusionBackend`. So a CPU / Mac user got the slow, RAM-heavy diffusers path even
-though the faster engine was already in the tree. Measured on this box (192-core CPU, same Q4_K_M
-transformer GGUF), the native engine is the right CPU engine:
-
-| model (CPU, 512px) | diffusers | sd.cpp | sd.cpp speed | sd.cpp RAM |
-| --- | ---: | ---: | ---: | ---: |
-| FLUX.1-schnell | 98.5s | 60.3s | **1.6x** | **1.6x less** |
-| Z-Image-Turbo | 99.1s | 71.9s | **1.4x** | **1.5x less** |
-| Qwen-Image | 243.8s | 88.4s | **2.8x** | **2.2x less** |
-
-(FLUX.1 CPU vs ComfyUI: sd.cpp 60.3s / 18.9 GB beats ComfyUI 102.4s / 71.2 GB too.) The decision
-function `select_diffusion_engine` already existed and was unit-tested; this PR is the routing and
-lifecycle integration around it, not a rewrite. The diffusers path stays the default and only path on
-CUDA / ROCm / XPU, and the universal fallback.
-
-## What it does
-
-- **`diffusion_engine_router.py` (new).** Centralised engine selection at load time, remembered for the
- rest of the load so generate / unload / status / progress all act on the same engine. Built on
- `select_diffusion_engine(backend, ...)`; the device backend comes from
- `resolve_diffusion_device_target().backend`. Records why a fallback to diffusers happened and exposes it
- in status. Env knobs (one canonical interpretation each):
- - `UNSLOTH_DIFFUSION_ENGINE=auto|diffusers|sd_cpp` force an engine
- - `UNSLOTH_DIFFUSION_SD_CPP=auto|0|1` enable / disable the native route
- - `UNSLOTH_DIFFUSION_SD_CPP_MPS=0|1` allow native on Apple MPS (default off)
- - `UNSLOTH_DIFFUSION_SD_CPP_INSTALL=auto|0|1` allow lazy binary install
-
-- **`sd_cpp_backend.py` (new) `SdCppDiffusionBackend`.** Mirrors the public surface the route uses on the
- diffusers backend (`begin_load` / `load_progress` / `generate` / `generate_progress` / `unload` /
- `status`), backed by `SdCppEngine`. It lazily installs the `sd-cli` binary on first use, fetches the
- per-family single-file assets, runs the load on a daemon thread with a download-progress phase, parses
- sd-cli step lines for per-step progress, and supports cancellation. Import-light: no torch / diffusers,
- so selecting it on a CPU box does not pull the GPU stack.
-
-- **`diffusion_families.py`.** Each family gains its native single-file asset mapping (`sd_cpp_vae`,
- `sd_cpp_text_encoders`, `sd_cpp_vae_format`) using the same hashable-tuple pattern as `prequant_repos`.
- The transformer GGUF is reused from the diffusers download path; only the single-file VAE + text
- encoders are new fetches (the diffusers base repo ships those sharded, which sd-cli cannot read). Z-Image
- and FLUX.2-klein use Qwen3-4B, FLUX.1 uses CLIP-L + T5, Qwen-Image uses Qwen2.5-VL; FLUX.2 uses the
- `flux2` VAE latent format.
-
-- **`sd_cpp_engine.py`.** Adds cancellation to `generate` / `upscale`: an optional `cancel_event` polled
- while the child runs, plus a process-group kill (`SdCppCancelled`) so a superseding load / unload /
- arbiter eviction can hard-stop the subprocess and its children. User cancellation does not trigger a
- diffusers fallback.
-
-- **`routes/inference.py` + `gpu_arbiter.py`.** The load handler resolves the device, selects + activates
- the engine before evicting chat (so a fallback never strands a half-native load), and the other handlers
- and the arbiter evictor act on the active engine via the router. The status response gains `engine` and
- `fallback_reason`.
-
-## Selection and fallback
-
-Selection is deterministic and happens before the slow load. Diffusers is chosen (with a recorded reason)
-whenever the native route is disabled, the device has a usable GPU, MPS is not enabled, the family has no
-native asset mapping, or the `sd-cli` binary is unavailable. Scope is text-to-image (the route's only
-mode); image-to-image / edit / LoRA are not exposed there.
-
-## Testing
-
-- `test_sd_cpp_backend.py` (new): asset resolution per family, guidance mapping, status shape, generate
- returns images with per-image seeds, `--vae-format` for FLUX.2, cancellation surfaces as cancelled (not
- a crash), progress parsing, load validation, lazy-install gating, unload semantics.
-- `test_diffusion_engine_router.py` (new): the full selection matrix (cpu -> sd_cpp, gpu -> diffusers,
- opt-out -> diffusers, MPS default vs opt-in, unsupported family, missing binary, forced sd_cpp), and the
- status annotation.
-- `test_diffusion_routes.py`: a route-level test asserting a CPU host with an available binary reports
- `engine=sd_cpp`; the existing fixture now drives the router transparently.
-- `test_sd_cpp_engine.py`: the two no-binary tests are now hermetic (forced no-binary) so they pass
- regardless of a locally installed `sd-cli`.
-
-All 313 diffusion / sd.cpp tests pass. Verified end-to-end on CPU (CUDA hidden): the router selected the
-native engine, fetched the registry assets, and `sd-cli` produced an image, with `status.engine == sd_cpp`.
-
-## Notes
-
-- Everything is additive and opt-out-able: on a CUDA box this is a no-op (diffusers as before).
-- The single-file asset repos are pinned to public, verified sources (Comfy-Org / black-forest-labs /
- comfyanonymous / unsloth GGUF). sd-cli flag construction stays isolated in `sd_cpp_args.py` (already
- test-covered), since upstream notes its CLI flags can change.
diff --git a/temp/phase4_commit_msg.txt b/temp/phase4_commit_msg.txt
deleted file mode 100644
index e85f379032..0000000000
--- a/temp/phase4_commit_msg.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-Studio diffusion (Phase 4): native stable-diffusion.cpp engine for CPU/Mac
-
-Adds the CPU / Apple-Silicon tier of the two-engine strategy, mirroring the
-chat backend's llama.cpp shell-out. Diffusers stays the default on CUDA / ROCm
-/ XPU; this covers the hardware diffusers serves poorly, consuming the same
-split GGUF assets Studio already curates.
-
-- sd_cpp_args.py: pure sd-cli command builder. Maps the family to its
- text-encoder flag (Z-Image Qwen3 to --llm, Qwen-Image to --qwen2vl, FLUX.1
- CLIP-L + T5), and the diffusers memory policy (none/group/model/sequential)
- to sd.cpp's offload flags (--offload-to-cpu / --clip-on-cpu / --vae-on-cpu /
- --vae-tiling / --diffusion-fa), so one user knob drives both engines.
-- sd_cpp_engine.py: SdCppEngine over a located sd-cli. find_sd_cpp_binary()
- with the same precedence as the llama finder (env override, then the Studio
- install root, then in-tree, then PATH), an is_available/version probe, and a
- one-shot subprocess generate that streams progress and returns the PNG.
- runtime_env() prepends the binary's directory to the platform library path
- so a prebuilt's bundled libstable-diffusion.so resolves.
- select_diffusion_engine() is the pure routing decision (GPU backends to
- diffusers, CPU/MPS to native when present).
-- install_sd_cpp_prebuilt.py: resolve + download the per-host prebuilt
- (macOS-arm64/Metal, Linux x86_64 CPU, Vulkan/ROCm/Windows variants) into the
- Studio install root. resolve_release_asset() is a pure, unit-tested
- host-to-asset matrix.
-- scripts/sd_cpp_smoke.py: end-to-end native generation harness.
-
-Tests (CPU-only, subprocess/filesystem stubbed): 49 new across args, engine,
-routing, runtime env, and the installer resolver. Full diffusion suite 166
-passing.
-
-Verified on a B200 box: built sd-cli (CUDA) and the prebuilt (CPU) both
-generate Z-Image-Turbo Q4_K end to end through SdCppEngine: balanced (group
-offload, 5.0s gen), low_vram (full CPU offload + VAE tiling, 13.4s), and the
-dynamically-linked CPU prebuilt (50.4s on CPU), all producing coherent images.
diff --git a/temp/phase4_pr_body.md b/temp/phase4_pr_body.md
deleted file mode 100644
index b951f15940..0000000000
--- a/temp/phase4_pr_body.md
+++ /dev/null
@@ -1,40 +0,0 @@
-## Summary
-
-Phase 4 of porting the richer diffusion stack onto the image-generation backend, building on #6675 (Phase 2: memory / speed / precision) and #6670 (Phase 1: device policy). This adds the **native stable-diffusion.cpp engine**, the CPU and Apple-Silicon tier of a two-engine strategy that mirrors the chat backend's llama.cpp shell-out.
-
-Diffusers stays the default and only path on CUDA / ROCm / XPU. This engine exists for the hardware diffusers serves poorly (CPU, Apple MPS, and very low VRAM budgets), and it consumes the same split GGUF assets Studio already curates for the diffusers path, so a model loaded for one engine needs no re-download for the other.
-
-Everything is additive: new modules plus a standalone installer and smoke script. Nothing in the existing diffusers path changes, so this is a no-op until the native engine is selected. Stacked on #6675; I will rebase onto main and retarget the base once the lower phases land.
-
-## What it does
-
-- Pure sd-cli command builder (`sd_cpp_args.py`). Maps each family to its text-encoder flag (Z-Image's Qwen3 to `--llm`, Qwen-Image's Qwen2-VL to `--qwen2vl`, FLUX.1's CLIP-L + T5 to `--clip_l` / `--t5xxl`) and the diffusers memory policy (`none` / `group` / `model` / `sequential`) to sd.cpp's own offload flags (`--offload-to-cpu`, `--clip-on-cpu`, `--vae-on-cpu`, `--vae-tiling`, `--diffusion-fa`). One user-facing memory knob drives both engines identically.
-- The engine (`sd_cpp_engine.py`). `SdCppEngine` over a located `sd-cli`: a `find_sd_cpp_binary()` with the same precedence as the llama finder (env override, then the Studio install root, then an in-tree build, then PATH), an `is_available` / `version` probe, and a one-shot subprocess `generate` that streams progress and returns the written PNG. `runtime_env()` prepends the binary's own directory to the platform library path (`LD_LIBRARY_PATH` / `DYLD_LIBRARY_PATH` / `PATH`) so a prebuilt's bundled `libstable-diffusion.so` resolves. `select_diffusion_engine()` is the pure routing decision: GPU backends stay on diffusers, CPU / MPS take the native engine when its binary is present, and a `prefer_native` override can force it anywhere.
-- Prebuilt installer (`install_sd_cpp_prebuilt.py`). Resolves and downloads the per-host stable-diffusion.cpp release zip (macOS-arm64 / Metal, Linux x86_64 CPU, plus Vulkan / ROCm / Windows variants) into the Studio install root, where the finder picks it up. `resolve_release_asset()` is a pure, unit-tested host-to-asset matrix, so Apple Silicon and CPU users get a working binary with nothing to compile.
-- Smoke harness (`scripts/sd_cpp_smoke.py`). Drives the real engine over a built or installed `sd-cli` and a set of split GGUF assets, the native analogue of `scripts/diffusion_bench.py`.
-
-## Verification (single B200 box)
-
-Built `sd-cli` from source (CUDA) and installed the prebuilt (CPU), then generated Z-Image-Turbo Q4_K end to end through `SdCppEngine`, all producing coherent images:
-
-| binary | memory mode | offload flags | generation |
-| --- | --- | --- | --- |
-| source (CUDA) | `balanced` | `--offload-to-cpu --diffusion-fa` | 5.0 s |
-| source (CUDA) | `low_vram` | `--offload-to-cpu --clip-on-cpu --vae-on-cpu --vae-tiling --diffusion-fa` | 13.4 s |
-| prebuilt (CPU) | `low_vram` | (same) | 50.4 s on CPU |
-
-The CPU prebuilt run exercises the dynamically-linked path and confirms `runtime_env()` lets the bundled shared library load. The installer was verified live: `resolve_release_asset` selects the correct asset for Linux (CPU / Vulkan / ROCm), macOS-arm64, and Windows (avx2 / cuda12 / vulkan) against a real release, and a real download + extract produced a runnable `sd-cli`.
-
-## Tests
-
-CPU only, with subprocess and the filesystem stubbed, run from `studio/backend`:
-
-```
-python -m pytest tests/test_sd_cpp_args.py tests/test_sd_cpp_engine.py tests/test_sd_cpp_install.py
-```
-
-49 new tests covering the command builder, the offload and family mappings, the binary finder precedence, the version probe, `generate` (success, nonzero exit, missing output, missing binary), `runtime_env`, the engine routing matrix, and the installer's host-to-asset resolver. The full diffusion suite is 166 passing.
-
-## Out of scope (later)
-
-Wiring the route / backend to dispatch to the native engine (asset resolution for the split VAE / text-encoder files, status reporting which engine is active) and the image-to-image / editing / LoRA / upscale / video feature surface. This PR lands the engine, installer, and routing decision as a self-contained, tested unit.
diff --git a/temp/phase6_commit_msg.txt b/temp/phase6_commit_msg.txt
deleted file mode 100644
index 50fd323aa2..0000000000
--- a/temp/phase6_commit_msg.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-Studio diffusion (Phase 6): img2img / inpaint / edit / LoRA / upscale on the native engine
-
-Builds on Phase 4's native stable-diffusion.cpp engine, extending it from
-text-to-image to the wider feature surface, since sd.cpp supports all of these
-through the binary already. Pure command-builder additions plus one engine
-method, so the txt2img path is unchanged.
-
-- sd_cpp_args.py: SdCppGenParams gains image-conditioning fields. init_img +
- strength make a run img2img, adding mask makes it inpaint, ref_images drives
- FLUX-Kontext / Qwen-Image-Edit style editing (repeated --ref-image), and
- lora_dir + the prompt syntax select LoRAs. New
- SdCppUpscaleParams + build_sd_cpp_upscale_command for the ESRGAN upscale run
- mode (input image + esrgan model, no prompt / text encoders).
-- sd_cpp_engine.py: the subprocess runner is factored into a shared _run() so
- generate() (now carrying the conditioning flags) and a new upscale() reuse
- the same streaming / error / output-check path.
-- scripts/sd_cpp_smoke.py: --task {txt2img,img2img,upscale} with --init-img /
- --strength / --upscale-model / --upscale-repeats.
-
-Tests: 10 new across the img2img / inpaint / edit / LoRA flag construction, the
-upscale builder and its validation, and the engine's img2img + upscale paths.
-Full diffusion suite 176 passing.
-
-Verified on a B200 box through SdCppEngine: img2img (Z-Image-Turbo Q4_K, the
-init image conditioned at strength 0.6, 4.8s) and ESRGAN upscale
-(512x512 -> 2048x2048 via RealESRGAN_x4plus_anime_6B, 2.7s), both producing
-coherent images. Video and the diffusers-path feature wiring are deferred.
diff --git a/temp/phase6_pr_body.md b/temp/phase6_pr_body.md
deleted file mode 100644
index af84ede53b..0000000000
--- a/temp/phase6_pr_body.md
+++ /dev/null
@@ -1,35 +0,0 @@
-## Summary
-
-Phase 6 extends Phase 4's native stable-diffusion.cpp engine (#6679) from text-to-image to the wider feature surface: image-to-image, inpaint, edit, LoRA, and ESRGAN upscale. stable-diffusion.cpp already supports all of these through the binary, so this is pure command-builder additions plus one new engine method. The text-to-image path is byte-for-byte unchanged (the new fields all default to off).
-
-Stacked on #6679; I will retarget the base as the lower phases land.
-
-## What it does
-
-- Image conditioning (`sd_cpp_args.py`). `SdCppGenParams` gains `init_img` + `strength` (img2img), `mask` (inpaint), `ref_images` (FLUX-Kontext / Qwen-Image-Edit editing, emitted as repeated `--ref-image`), and `lora_dir` + `lora_apply_mode`. Individual LoRAs are selected with sd.cpp's own `` tags inside the prompt, so no prompt rewriting is needed.
-- Upscale mode. A new `SdCppUpscaleParams` + `build_sd_cpp_upscale_command` drive sd-cli's ESRGAN run mode (input image + ESRGAN model, no prompt or text encoders).
-- Engine (`sd_cpp_engine.py`). The subprocess runner is factored into a shared `_run()` so `generate()` (now carrying the conditioning flags) and the new `upscale()` reuse the same streaming / error / output-check path.
-- Smoke harness. `scripts/sd_cpp_smoke.py` gains `--task {txt2img,img2img,upscale}` with `--init-img` / `--strength` / `--upscale-model` / `--upscale-repeats`.
-
-## Verification (single B200 box, through SdCppEngine)
-
-| task | detail | time |
-| --- | --- | --- |
-| img2img | Z-Image-Turbo Q4_K, init image at strength 0.6, prompt re-themed to autumn | 4.8 s |
-| upscale | RealESRGAN_x4plus_anime_6B, 512x512 to 2048x2048 (4x) | 2.7 s |
-
-Both produce coherent images: the img2img run preserves the source structure while applying the new prompt, and the upscale run quadruples each dimension. inpaint / edit / LoRA are verified at the command-construction level (the real-model runs need specific edit checkpoints / LoRA files).
-
-## Tests
-
-CPU only, subprocess and filesystem stubbed, from `studio/backend`:
-
-```
-python -m pytest tests/test_sd_cpp_args.py tests/test_sd_cpp_engine.py
-```
-
-10 new tests across the img2img / inpaint / edit / LoRA flag construction, the upscale builder and its validation, and the engine's img2img + upscale paths. Full diffusion suite 176 passing.
-
-## Out of scope (later)
-
-Video (`vid_gen`, Wan / LTX), and wiring these tasks through the route / backend and the diffusers path. This PR lands them on the native engine as a self-contained, tested unit.
diff --git a/temp/phase7_commit_msg.txt b/temp/phase7_commit_msg.txt
deleted file mode 100644
index 823ef2e33a..0000000000
--- a/temp/phase7_commit_msg.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-Studio diffusion (Phase 7): accuracy-preserving speed pass
-
-Re-review of the diffusion stack (#6675/#6679/#6680) surfaced one real accuracy
-bug and a dead-on-arrival speed path; this fixes both and adds the lossless /
-near-lossless wins, all measured on a B200.
-
-Correctness:
-- TF32 global-state leak (fix). speed_mode=max flipped torch.backends.*.allow_tf32
- process-wide and never restored them, so a later `off` load silently inherited
- TF32 and was no longer bit-identical. Added snapshot_backend_flags /
- restore_backend_flags (TF32 + cudnn.benchmark), captured before the speed layer
- runs and restored on unload. Verified: load max -> unload -> load off is now
- byte-identical (PSNR inf) to a fresh off.
-- sd-cli timeout could hang forever. _run() blocked in `for line in stdout` and
- only checked the timeout after EOF, so a child stuck in model load / GPU init
- with no output ignored the timeout. Drained stdout on a reader thread with a
- wall-clock deadline. Added a silent-hang regression test.
-
-Speed (diffusers path), near-lossless, opt-in tiers:
-- Regional torch.compile now runs on the GGUF transformer. The is_gguf gate (and
- Z-Image's supports_torch_compile=False) were stale: compile_repeated_blocks
- compiles and runs ~2.2x faster on the GGUF Z-Image transformer on
- torch 2.9.1 / diffusers 0.38 (the per-op dequant stays eager, the rest of the
- block compiles). Measured: off 1.80s -> default 0.82s/gen (+54.7%), PSNR 37.7 dB
- vs eager -- far above the Q4 quant noise floor (~21 dB), so it does not move
- output quality. Gate relaxed; default tier delivers it.
-- cudnn.benchmark added to the default tier (autotunes the fixed-shape VAE convs).
-- torch.inference_mode() around the pipeline call (lossless, strictly faster than
- the no_grad diffusers uses internally).
-
-Memory path:
-- VAE tiling (not bit-identical >1MP) restricted to the model/sequential/CPU tiers;
- the balanced (group) tier keeps exact slicing only, so it is now bit-identical to
- the resident image (verified PSNR inf) and slightly faster.
-- Group offload adds non_blocking + record_stream on the CUDA stream path to
- overlap each block's H2D copy with compute (lossless; gated on the installed
- diffusers signature so older versions still work).
-
-Native (sd.cpp) path:
-- native_speed_flags: a first-class speed knob (default -> --diffusion-fa, a
- near-lossless CUDA win that was previously only added on offload tiers; max also
- -> --diffusion-conv-direct). conv-direct stays opt-in: measured +45% on CUDA, so
- it is never auto-on. Engine generate() merges it, de-duped against offload flags.
-
-Default profile: a GGUF model with no explicit speed_mode now resolves to the
-`default` profile (resolve_speed_mode), since compile's perturbation sits below the
-quantisation noise floor and so does not reduce quality versus the dense reference;
-out of the box a GGUF Z-Image generation drops from 1.80s to 0.81s. Dense models
-stay `off` / bit-identical, and an explicit speed_mode -- including "off" -- is
-always honored, so the byte-identical path remains one flag away and is the
-regression reference.
-
-Tooling: scripts/compile_probe.py (eager vs compiled GGUF probe), scripts/
-perf_verify.py (the B200 verification above), and diffusion_bench.py gains
---speed-mode so the speed tiers are benchmarkable.
-
-Tests: 183 passing (was 166); new coverage for the backend-flag snapshot/restore,
-GGUF compile eligibility, the balanced tiling/slicing split, native_speed_flags +
-the engine de-dup, and the sd-cli silent-hang timeout.
diff --git a/temp/phase7_pr_body.md b/temp/phase7_pr_body.md
deleted file mode 100644
index 85a48d9b9b..0000000000
--- a/temp/phase7_pr_body.md
+++ /dev/null
@@ -1,41 +0,0 @@
-## Summary
-
-A re-review of the diffusion stack (#6675 / #6679 / #6680) focused on performance, then a speed pass that preserves accuracy. The review surfaced one real accuracy bug and one dead-on-arrival speed path; this fixes both and adds the lossless / near-lossless wins, all measured on a B200. Stacked on #6680.
-
-The headline: regional `torch.compile` was gated off for the GGUF transformer, and since the backend is GGUF-only that made it dead on every shipping model. It actually compiles and runs **2.2x faster** now, at a quality delta far below the quantisation noise floor, so it is safe to use.
-
-## Correctness fixes
-
-- **TF32 global-state leak.** `speed_mode=max` flipped `torch.backends.*.allow_tf32` process-wide and never restored them, so a later `off` load silently inherited TF32 and was no longer bit-identical. Added `snapshot_backend_flags` / `restore_backend_flags` (TF32 + cudnn.benchmark), captured before the speed layer runs and restored on unload. Verified: load `max` then `off` is now byte-identical (PSNR inf) to a fresh `off`.
-- **sd-cli could hang past its timeout.** `_run()` blocked in `for line in stdout` and only checked the timeout after EOF, so a child stuck in model load / GPU init with no output ignored the timeout. Drained stdout on a reader thread with a wall-clock deadline; added a silent-hang regression test.
-
-## Speed: diffusers path (near-lossless)
-
-- **Regional `torch.compile` on the GGUF transformer.** The `is_gguf` gate (and Z-Image's `supports_torch_compile=False`) were stale: `compile_repeated_blocks` compiles and runs ~2.2x faster on torch 2.9.1 / diffusers 0.38 (the per-op dequant stays eager, the rest of the block compiles). Gate relaxed.
-- **cudnn.benchmark** added to the `default` tier (autotunes the fixed-shape VAE convs).
-- **`torch.inference_mode()`** around the pipeline call (strictly faster than the internal `no_grad`, numerically identical).
-- **Default profile.** A GGUF model with no explicit `speed_mode` now resolves to `default` (`resolve_speed_mode`), since compile's perturbation sits below the quant noise floor and so does not reduce quality versus the dense reference. Dense models stay `off` / bit-identical, and an explicit value (including `"off"`) is always honored, so the byte-identical path is one flag away and remains the regression reference.
-
-## Memory path
-
-- **VAE tiling** (not bit-identical above 1MP) is now restricted to the `model` / `sequential` / CPU tiers. The `balanced` (group) tier keeps exact slicing only, so it is now **bit-identical** to the resident image (verified PSNR inf) and slightly faster.
-- **Group offload** adds `non_blocking` + `record_stream` on the CUDA stream path to overlap each block's H2D copy with compute (lossless; gated on the installed diffusers signature so older versions still work).
-
-## Native (sd.cpp) path
-
-- **`native_speed_flags`**: a first-class speed knob. `default` adds `--diffusion-fa` (a near-lossless CUDA win that was previously only added on offload tiers); `max` also adds `--diffusion-conv-direct`. conv-direct stays opt-in because it measured **+45% on CUDA** here, so it is never auto-on. The engine `generate()` merges it, de-duped against the offload flags.
-
-## Measured (single B200, Z-Image-Turbo Q4_K_M, 1024x1024, 8 steps)
-
-| config | median/gen | vs off | accuracy |
-| --- | --- | --- | --- |
-| `off` (bit-identical reference) | 1.80 s | reference | reference |
-| `default` (auto for GGUF) | **0.82 s** | **+54.7%** | PSNR 37.7 dB vs eager (Q4-vs-bf16 is ~21 dB, so below the noise floor) |
-| `balanced` (group offload) | 2.19 s | n/a | PSNR inf (bit-identical, tiling now off) |
-| `off` after a `max` load | 1.83 s | n/a | PSNR inf vs fresh `off` (TF32 leak fixed) |
-
-`scripts/perf_verify.py` reproduces all of the above end to end through the real backend; `scripts/compile_probe.py` is the eager-vs-compiled GGUF probe.
-
-## Tests
-
-184 passing (was 166). New coverage: the backend-flag snapshot/restore, GGUF compile eligibility + the `resolve_speed_mode` GGUF auto-default, the `balanced` tiling/slicing split + group `non_blocking`/`record_stream`, `native_speed_flags` + the engine de-dup, and the sd-cli silent-hang timeout. `scripts/diffusion_bench.py` gains `--speed-mode` so the tiers are benchmarkable.
diff --git a/temp/phase8_pr_body.md b/temp/phase8_pr_body.md
deleted file mode 100644
index 312ae185b6..0000000000
--- a/temp/phase8_pr_body.md
+++ /dev/null
@@ -1,59 +0,0 @@
-## Summary
-
-An opt-in **fast transformer** mode for the Studio diffusion backend: load the dense bf16 transformer and torchao-quantise it onto the low-precision tensor cores, instead of the GGUF transformer. Stacked on the Phase 7 perf pass (#6690).
-
-The motivation, measured on a B200 (Z-Image-Turbo, 1024px / 8 steps, LPIPS vs the dense bf16 reference): GGUF stores the transformer 4-bit but **dequantises to bf16 on every matmul**, so it runs at bf16 tensor-core rate and never touches the int8 / fp8 / fp4 cores. It is a memory win that costs speed. Loading the dense bf16 transformer and quantising it dynamically with torchao runs the matmul on the actual low-precision cores:
-
-| config | sec | vs GGUF+compile | LPIPS vs bf16 |
-| --- | --- | --- | --- |
-| GGUF + compile (today's default) | 0.802 | 1.00x | 0.083 |
-| dense bf16 + compile (no quant) | 0.671 | 1.20x | 0.004 |
-| int8 dynamic + compile | 0.603 | **1.33x** | 0.069 |
-| fp8 dynamic + compile | 0.585 | **1.37x** | 0.058 |
-
-Every working scheme beats GGUF on **both** speed and quality (LPIPS lands *below* GGUF's own 4-bit floor of 0.083). The only cost is memory: the dense bf16 transformer must be loaded (~2x the 4-bit GGUF), so the mode is strictly opt-in and gated on resident VRAM headroom. GGUF + compile stays the low-memory default and the fallback.
-
-## What it does
-
-New flag `transformer_quant` on the load request (`auto | int8 | fp8 | nvfp4 | mxfp8`, default off). When set and the device qualifies (CUDA + bf16 + the dense weights fit resident), the loader:
-
-1. loads the **dense bf16 transformer** from the family `base_repo` (`from_pretrained(subfolder="transformer")`) instead of the GGUF,
-2. places it on the device and torchao-quantises the FLOP-heavy linears,
-3. compiles the repeated block (existing Phase 7 regional compile), then applies placement — so the order is **quantize -> compile -> offload**.
-
-`auto` picks the best scheme for the GPU via a real quantise+matmul **smoke probe** (Blackwell fp8 -> nvfp4 -> mxfp8 -> int8; Ada/Hopper fp8 -> int8; Ampere int8). An explicit scheme is honored only if supported, never silently swapped. **Any** failure (unsupported arch/scheme, OOM, partial quant, or the dense weights not fitting resident) falls back to the GGUF build with a logged reason — the default path cannot regress.
-
-A `min_features=512` filter skips the tiny timestep/pooled/modulation projections: the int8 path uses `torch._int_mm`, which requires activation rows M>16, and those projections run at M=1 and crash it (measured: 239/276 Z-Image linears quantised, full speedup, no crash).
-
-## Design
-
-- New module `core/inference/diffusion_transformer_quant.py` mirrors `diffusion_precision.py` (the text-encoder quant module): pure functions, torch/torchao imported lazily, best-effort, hermetic CPU tests. It owns scheme selection + the arch/capability/smoke probe + the `quantize_` call.
-- `diffusion.py` `load_pipeline` gains the source-branch (dense+quant or GGUF), the VRAM preflight (reuses `plan_diffusion_memory` / `estimate_gguf_dense_mib`), and the fallback. `transformer_quant` threads through `begin_load` / `_LoadState` / `status()` exactly like `text_encoder_quant`.
-- Flag surface mirrors `text_encoder_quant`: request + status models in `models/inference.py`, forwarded in `routes/inference.py`.
-- torchao tensors are not safetensors-serializable; this backend is inference-only, so the engaged transformer carries a diagnostic runtime marker but there is no save path to guard.
-
-Blackwell nvfp4/mxfp8 are wired but `auto` deliberately lands on fp8. NVFP4 is a torchao feature (torch core only provides the `float4_e2m1fn_x2` primitive, not a quantization workflow). It was validated both on this box's torch 2.9 (no FP4 kernel: torchao prints "Skipping import of cpp extensions ... upgrade to torch >= 2.11", so it dequantises FP4->bf16 and runs at bf16-compile rate) and in an isolated torch 2.11.0 + torchao CUTLASS env where the FP4 GEMM is genuinely live -- a 16384^3 GEMM hits ~3826 TFLOPS (2.52x bf16, 1.37x fp8). The catch is shape: the DiT's linears (hidden ~3072, MLP ~12288, M~4096) sit below the crossover where FP4 compute beats fp8, so end-to-end on Z-Image 1024px NVFP4 is **slower (0.81x fp8) and less accurate (LPIPS 0.166 vs fp8's 0.044)** even with the fast kernel. So the Blackwell `auto` ladder puts fp8 ahead of nvfp4 (nvfp4 stays an explicit opt-in); the NVFP4 triton path also still requires MSLK (repo unavailable), while the CUTLASS path is the real one. See `scripts/nvfp4_probe.py` (torch 2.9) and `scripts/nvfp4_t211_probe.py` (torch 2.11 micro + e2e).
-
-## Measured through the backend (single B200, Z-Image-Turbo, 1024x1024, 8 steps, seed 12345)
-
-End to end through `DiffusionBackend` via `scripts/diffusion_bench.py`. LPIPS vs the dense bf16 reference is from `scripts/quant_probe.py` (the standalone lever probe).
-
-| `transformer_quant` | engaged scheme | median/gen | vs GGUF | load VRAM | gen VRAM | LPIPS |
-| --- | --- | --- | --- | --- | --- | --- |
-| (unset) GGUF + compile | none | 0.823 s | reference | 13.4 GB | 15.3 GB | 0.083 |
-| `auto` | fp8 | **0.614 s** | **1.34x** | 20.9 GB | 16.5 GB | 0.058 |
-| `int8` | int8 | 0.626 s | 1.32x | 20.9 GB | 16.5 GB | 0.069 |
-| `mxfp8` | mxfp8 | 0.651 s | 1.26x | 21.3 GB | 16.7 GB | n/m |
-
-`auto` selects fp8 on this B200 (nvfp4 smoke-fails on torch 2.9 -> the ladder prefers the measured-faster fp8 over mxfp8). The speed-for-memory trade is explicit: the dense bf16 load peaks ~21 GB vs GGUF's 13.4 GB; resident generation VRAM is close (16.5 vs 15.3 GB). Every engaged scheme is faster than GGUF *and* lands below its 0.083 LPIPS floor.
-
-## Tests
-
-CPU-only, hermetic (torch / torchao stubbed via `sys.modules`):
-- new `tests/test_diffusion_transformer_quant.py` — normalisation, the arch-selection ladder (Ampere int8 / Ada-Hopper fp8 / Blackwell fp8->nvfp4->mxfp8 fallback / pre-Ampere none / explicit-unsupported none), the smoke-probe cache + tolerance, the feature filter, and the apply path (calls `quantize_` with a filter_fn, sets the marker, tolerates failure).
-- extended `tests/test_diffusion_backend.py` — default load skips the dense path; the dense path engages and reports the scheme; a quant failure falls back to GGUF; the path is skipped when the plan would offload.
-- extended `tests/test_diffusion_routes.py` — the flag threads through to `begin_load` and an invalid enum is a 422.
-
-`scripts/diffusion_bench.py` gains `--transformer-quant` (through-the-backend benchmark + regression guard); `scripts/quant_probe.py` is the standalone torchao lever probe (latency + PSNR + LPIPS + VRAM vs the dense reference, with the `--min-feat` filter).
-
-
diff --git a/temp/phase9_pr_body.md b/temp/phase9_pr_body.md
deleted file mode 100644
index 77d9eb0ab6..0000000000
--- a/temp/phase9_pr_body.md
+++ /dev/null
@@ -1,83 +0,0 @@
-## Summary
-
-Pre-quantized transformer loading for the Studio diffusion fast path: load an
-already-quantized transformer checkpoint instead of materialising the dense bf16 and
-quantising it on the GPU. Stacked on the Phase 8 fast-transformer pass (#6694).
-
-The Phase 8 `transformer_quant` mode is fast, but its one cost is load memory + download:
-it loads the **dense bf16** transformer onto the GPU and torchao-`quantize_`s it in place,
-so the load peak is ~2x GGUF's and it pulls the full bf16 weights. Pre-quantizing fixes
-both. Quantise once offline, then at runtime build the transformer skeleton on the **meta**
-device (`accelerate.init_empty_weights`) and `load_state_dict(assign=True)` the quantized
-weights, so the dense bf16 never touches the GPU.
-
-Measured on a B200 (Z-Image-Turbo, fp8, 1024px / 8 steps), through the real loader:
-
-| path | GPU load peak (full pipeline) | on-disk | output |
-| --- | --- | --- | --- |
-| runtime (dense `from_pretrained` -> `quantize_transformer`) | 21.2 GB | ~12 GB bf16 | reference |
-| **pre-quantized (`load_prequantized_transformer`)** | **14.6 GB** | **6.28 GB** | **LPIPS 0.0** |
-
-The fast mode's load peak drops to essentially GGUF's 13.4 GB, the download halves, and the
-output is bit-identical, because it is the exact same torchao config + `min_features` filter
-the runtime path uses, applied ahead of time (the isolated transformer load peak is 12.9 ->
-6.3 GB; the 14.6 GB above includes the resident text encoder + VAE both paths load).
-
-## What it does
-
-`_load_dense_quant_pipeline` now tries a pre-quantized source first, then falls back:
-
-1. **pre-quantized** -- if a checkpoint is configured for the resolved scheme (an explicit
- `transformer_prequant_path`, or the family's hosted repo), `load_prequantized_transformer`
- builds the skeleton on meta and assigns the quantized state dict in, then places it;
-2. **dense + quantise** (the Phase 8 path, unchanged) if no checkpoint is available or its
- load fails;
-3. **GGUF** if quantisation itself is unsupported.
-
-So with nothing configured the behaviour is exactly Phase 8. Hosting of checkpoints is
-deferred: `DiffusionFamily.prequant_repos` ships empty and the new request field defaults
-null, so this is inert until a checkpoint is built/configured.
-
-## Design
-
-- New `core/inference/diffusion_prequant.py` mirrors the sibling quant modules (pure
- functions, torch / accelerate / huggingface_hub imported lazily, best-effort, hermetic CPU
- tests). `resolve_prequant_source` (priority: explicit path -> family repo -> none) and
- `load_prequantized_transformer` (meta-init + `load_state_dict(assign=True)` + metadata
- validation + place + the same `_unsloth_runtime_quant` marker). Any missing / mismatched /
- unreadable checkpoint returns None and the caller falls back -- the default cannot regress.
-- The checkpoint is `{"format", "metadata", "state_dict"}` saved with `torch.save`. torchao
- weight subclasses are not safetensors-serializable, so loading uses `weights_only=False`;
- only a configured first-party family repo or an explicit local path reaches that, which is
- the trust signal (no arbitrary remote pickle). The `PrequantSource.kind` enum leaves room
- for a diffusers-native `TorchAoConfig` artifact later.
-- `scripts/build_prequant_checkpoint.py` builds (and optionally uploads) a checkpoint,
- importing the runtime quant factory (`_make_quant_config` / `make_filter_fn`) so the
- offline artifact is identical to on-the-fly quantisation (the LPIPS-0 invariant).
-- Flag surface: `DiffusionLoadRequest.transformer_prequant_path`, forwarded through the
- route / `begin_load` / `load_pipeline` exactly like `transformer_quant`. `status()` already
- reports the engaged scheme, so no status-model change.
-
-## Tests
-
-CPU-only, hermetic (torch / accelerate / huggingface_hub stubbed via `sys.modules`):
-- new `tests/test_diffusion_prequant.py` -- the resolver (path override wins / family repo by
- scheme / wrong scheme / nothing configured), and the loader (meta-init + `assign=True`,
- never the dense `from_pretrained`, sets the marker; format / scheme / base mismatch, a
- raising `torch.load`, and a missing file each return None).
-- extended `tests/test_diffusion_backend.py` -- the pre-quant branch engages (no dense load,
- no `quantize_transformer`), and a failed pre-quant load falls back to the dense path.
-- extended `tests/test_diffusion_routes.py` -- `transformer_prequant_path` threads through to
- `begin_load`.
-
-GPU verification: `scripts/build_prequant_checkpoint.py` then
-`scripts/verify_prequant_backend.py` (the table above), and `scripts/prequant_probe.py` (the
-original meta-init + assign measurement).
-
-## Scope / notes
-
-- Default unchanged: families ship `prequant_repos=()` and the request field defaults null.
-- The VRAM preflight still estimates the dense size, so the resident gate stays conservative
- (a box that fits the pre-quant but not the dense load still falls back to GGUF). A follow-up
- can lower the estimate when a pre-quant source resolves.
-- GPU-verified on Z-Image / fp8; Flux / Qwen and int8 are wired but unverified -> flagged.