KJNodes for ComfyUI
Various quality of life -nodes for ComfyUI, mostly just visual stuff to improve usability.
Nodes (244)
Burn text labels onto your images
Roughing up a motion track so it doesn't look robotic
Merging two InstanceDiffusion tracks into one
Build a string list from two inputs
Push HunyuanVideo past its frame limit
Push Wan past its frame limit (sometimes)
Stitching two audio clips end to end
Text-prompt masks across a whole batch
Crop a whole frame batch to one consistent mask box
Crop a moving subject out of a video, jitter-free
Pasting your processed crops back where they came from
Pasting detail crops back where they came from
Unpack a bounding box into plain integers
Draw detection boxes onto your image
Snap a mask to a coarse block grid
One true/false switch to drive a whole workflow
Checking a camera path before you render it
The CFG-Zero* trick, wrapped as a model patch
Load a checkpoint with the speed hacks built in
Nudging a model's weights, block by block
Match one image's color grade to another
Match one image's color grade to another
Turn a specific RGB color into a mask
Merge many conditionings without a node pyramid
Regional prompting for two areas in one node
The same regional-prompting node, three regions deep
Four-region regional prompting in one node
The pack's biggest bundled regional-prompting node
A bypassable stand-in for your positive/negative pair
Packing a pile of small masks into fewer tiles
Actually see how your context windows tile a long video
Deprecated, and the only audio-reactive mask node in the pack
Deprecated three-point fade — check Cross Fade Images first
Keyframe a mask's value over a batch of frames
An animated mask from a tiny fluid sim
A gradient anchored to a moving point
A smooth gradient mask, still or animated
Per-object prompts via bounding boxes
Procedural blobby masks that animate over frames
Drawing a moving dot from coordinates
A circle, square, or triangle mask on demand (and animated)
Animated shape masks that move along a path
Rendering (and animating) text as a mask
Animating text along a set of coordinates
An animated cellular-pattern mask
Blending two clips together with a real transition
Turn a stack of images into a transitions video
A per-step weight schedule for Advanced-ControlNet
Pasting a hand-picked noise schedule straight in
The After Effects trick, but inside ComfyUI
Decode long video straight to disk without OOMing
Soft-mask inpainting with a strength dial
A UNET loader with the speed knobs built in
Getting a model's filename as text, not as a loaded model
Apply a LoRA to only the blocks you choose
Text-prompted masks, model auto-downloaded
Check your tracking data before you trust it
See your mask before you commit to it
Forcing a branch to run without saving anything
Your own list of canvas sizes
Stop memorizing SDXL resolutions
VAE-encode a video without loading every frame into memory first
Find out what's actually eating your VRAM
Skipping the base64/JSON tax on live previews
Preview a huge image batch without the lag
Drop the frames where detection found nothing
Reverse a sigma schedule for unsampling
One number, wired everywhere, changed in one place
Turn a list of numbers into a batch of solid masks
Build a custom noise schedule from a list of numbers
Turn off the parts of a LoRA you don't want
A noise latent you actually control
Slice frames out of a batch
Pull specific frames out of a batch by index
Read width, height, and batch size mid-graph
Slice a sub-range out of a latent batch
Pick specific latents out of a batch by index
Read a latent's real dimensions
The inline sanity check for mask batches
Save the frames from the denoise preview
Slice your tracking data down to the window you're sampling
Load a GGUF model with the extra knobs exposed
Animate GLIGEN boxes with a spline instead of typing coordinates by hand
Sample a gradient image into a numeric curve
The inpainting mask node you'll actually use
View HDR IC-LoRA output without it looking washed out
Dial in a Hunyuan LoRA block by block
Generate video that starts and ends on your frames
Shave VRAM off local Ideogram 4 runs (at your own risk)
Draw your prompt for Ideogram 4's JSON format
Blend more than two images without daisy-chaining nodes
See your mask on top of your image
Stitch video chunks without a hard seam
Scrubbing dead-black frames out of a batch
Stitch two clips together with a real transition
Merge several images into one batch, add inputs on demand
Hold each frame N times to stretch a batch
Number your frames so you can actually verify your batch logic
Stitch two images together, any direction
Turn a batch of images into one grid
Paste several images into one, in any direction
Crop an image down to whatever your mask covers
Zoom into a masked region for detail work
Tight crops around a mask, per frame
Pull a screen region straight into ComfyUI (local desktop only)
Four images into one comparison sheet
Nine images in, one contact sheet out
Slice a contact sheet back into frames
The little noise nudge for image conditioning
Rescale an image tensor when something downstream expects -1 to 1
Extend a canvas without touching your original pixels
Pad to a size for outpainting, no arithmetic
Add borders, letterbox, and set up outpainting
A do-nothing node that's actually useful for graph hygiene
Build the reference-plus-canvas image an in-context LoRA needs
The KJNodes resize node (and why you shouldn't use this one anymore)
The resize node that actually handles aspect ratio
Four real sharpening methods on the GPU, pick the right one
Batch images that aren't the same size
Make an image zoom and pan to the music
Crop, resize, pad, and rotate on one interactive canvas
Paste an inpainted crop back cleanly
Model upscaling that won't OOM on a batch
Add controlled noise back into a latent
Put processed frames back where they came from
Drop or replace frames at the indices you name
Drop a latent into a batch at a chosen index
One number, wired to as many places as you want
Smoothing a path of x/y points along a curve
Join many strings, or emit them as a list
Glue two strings together with a delimiter
Real token weighting for a Qwen3-encoded model
Turn a rough cut-and-drag edit into believable motion
A switch that actually skips the branch it doesn't pick
The community's fix for Hunyuan's missing image-to-video
Load, resize, and grab a mask in one node
Batch a whole directory into one workflow
Batch-load a whole folder of clips into frames
Pulling a LoRA out of a finetuned checkpoint
Shrink a LoRA's rank without retraining it
Tune LTX-2's audio/video attention (and trim VRAM)
Clean up LTX-2's generated audio
Dial LoRA strength per transformer block
Per-pathway LoRA strength for LTX-2's audio+video
Cut peak VRAM on LTX-2
Negative prompts for LTX-2, even at CFG 1
Get live previews back for LTX-2 video
Pin multiple keyframes into an LTX video
The AddGuide trick, wired up for a whole batch at once
Regenerate a time slice of an LTX-2 audio+video clip
Shave peak VRAM off LTX video
A one-dial detail boost for LTX video
Anchor LTX video to your input frames
Combine any number of masks into one batch
Turn a batch into a number schedule
Rebuild an image from separate R, G, B (and alpha)
Lie to ComfyUI's VRAM estimator
Watch VRAM move during sampling
A node that does nothing, on purpose
The fp16-accumulation toggle with a bad name
Full-resolution live previews during sampling
Bake a patched or merged diffusion model to disk
Experimental sparse attention for Kandinsky 5 video
Turning a soundtrack into numbers ComfyUI can use
Draw a shape that pulses to the beat
Shift, rotate, and batch-animate a mask
Make a mask shake and spin to the beat
Space out keyframes with gap frames
Force real flash attention, no silent fallback
A deprecated LoRA + torch.compile fix
The in-graph switch for a free speedup on Flux and Wan
Fixing Flux.2's brighten-and-blue habit
Get a sound when your queue actually finishes
Turn a coordinate list into an actual picture you can check
Click points and boxes onto an image for SAM and cropping
Play a frame batch in the graph without saving a file
One preview node for both images and masks
See the inpaint mask you're actually sampling with
Sampling frames without babysitting indices
Stretch or compress pixel values into a new range
Stretching or squashing a mask's intensity
Splice regenerated frames back into a batch
Match a mask to your image, without the gray fringe
Flip a batch of frames back to front
Turn a soft mask into a clean binary one
Fixing wacky video motion without extra training
Save images with captions and a folder you choose
Write a transparent PNG from an image plus a mask
Write text to disk like you'd save an image
Retime a prompt schedule to a new frame count
Apply CFG only over the steps that need it
Grab your screen straight into a workflow
Feed your live screen into ComfyUI as an image
Split one mask into per-object masks
Tell Shakker's Flux union which mode to run
Randomize the order of a batch, deterministically
Get your noise schedule out where you can actually see it
A real math expression node for your workflow
The SLG quality trick tuned for Wan
Pausing a ComfyUI workflow on purpose
Turn any value into text, no matter the type
Drive your generation from a live microphone
Draw a curve, get a schedule (or a motion path) out of it
Cut a detection list into two groups
Pull an image apart into R, G, B and alpha
Keyframe a camera orbit around an object
A proper VRAM allocator trace, not just a printout
A single-line piece of text you can wire around your graph
A text box you wire like any other node
Type a bunch of numbers, get a float list
The strength slider Flux Redux should have shipped with
Auto-expanding a short prompt into a detailed one
Scripting the camera orbit for Stable Video 3D
Time any slice of your ComfyUI workflow
Squeeze extra speed out of your ControlNet with torch.compile
Deprecated, and Cosmos moved on too
Deprecated, but here's what it did and what to use instead
The fine-grained torch.compile knob for video models
Deprecated — three names, one job
Torch.compile for Flux, block by block
Deprecated, from Kijai's own Hunyuan wrapper era
Deprecated — torch.compile for Qwen-Image now lives elsewhere
Deprecated, but the speedup it chased is real
Deprecated, use TorchCompileModelAdvanced
Torch.compile for just the VAE, with real backend and mode controls
Wipes and crossfades between stills
Crossfades and wipes between your frames
Kill the seam on a looping video
A VAE loader for pixel-space models
Blend two VAEs, if they're actually the same shape
Turn an OOM into a picture
See the noise schedule you're actually running
Force ComfyUI to free memory mid-workflow
Apply a LoRA to some of Wan's blocks, not all of them
Trade a little speed for a lot of VRAM on Wan
The KJNodes path to long Wan clips with SVI Pro
A near-free quality bump for Wan video
Cut Wan attention VRAM
Negative prompts for Wan when speed LoRAs force CFG 1
Deprecated, and what to use instead
Pull a live camera frame into your graph
Reshape a value curve for the next node
Stitch two value curves into one
Pull any node's setting out as text
KJNodes for ComfyUI
At this point pretty random collection of utility, model optimization and QoL nodes, while keeping dependencies at minimum.
Documentation is mostly in the node descriptions and tooltips.
Installation
- Clone this repo into
custom_nodesfolder. - Install dependencies:
pip install -r requirements.txtor if you use the portable install, run this in ComfyUI_windows_portable -folder:
python_embeded\python.exe -m pip install -r ComfyUI\custom_nodes\ComfyUI-KJNodes\requirements.txt
JS extensions:
Node insert (default hotkey D, configurable) and shake to disconnect (default disabled, found in settings to enable):
https://github.com/user-attachments/assets/e81f02e6-9cb0-4cb3-bcdd-67e7bd5bf6fb
Node swap (default hotkey S, configurable):
https://github.com/user-attachments/assets/735d973e-1b8b-4936-a1fb-29736b9c063a
Set/Get
UPDATE March 19th 2026
Complete (backwards compatible as far as I'm aware currently) rewrite of Set/Get nodes.
Changelog March 19th 2026
New Features
-
Nodes 2.0 support - Works with nodes 2.0 as well as legacy.
-
Subgraph support — Set/Get now works across subgraph boundaries. A Set in a parent graph is visible to all child subgraphs, and Get nodes search upward through ancestors. Cross-graph connections are resolved during prompt execution.
-
Convert link to Set/Get — Right-click any link midpoint to convert it into a Set/Get pair.
-
Convert to links — Right-click a Set or Get node to convert the pair back to direct links.
-
Convert outputs to Set/Get — Batch operation to convert all outputs of selected nodes into Set/Get pairs at once.
-
Canvas right-click menu — "Convert outputs on all selected nodes to Set/Get" and "Convert selected Set/Get to links".
-
Keyboard shortcuts — Ctrl+Shift+S (add Set to selected / at cursor), Ctrl+Shift+G (add Get at cursor), Ctrl+Shift+L (force-show all connections toggle).
-
"Convert ALL Set/Get to links" setting — One-click button in settings to replace every Set/Get pair with direct links, including across subgraph boundaries.
-
Show links setting — Combo setting (never / selected / always) to control when virtual links between Set/Get pairs are drawn. "Selected" mode shows links only for currently selected Set/Get nodes. Ctrl+Shift+L temporarily forces all links visible.
-
Add Set/Get from connection menu — When dragging from a slot, "Add SetNode" and "Add GetNode" entries appear next to "Add Reroute" in the connection menu.
-
Shift+middle-click creates Set/Get — Shift+middle-click on an output slot creates a connected SetNode; on an input slot creates a connected GetNode. Optional setting to override normal middle-click to also create Set/Get instead of Reroute.
-
Add paired GetNode — Right-click a SetNode to add a paired GetNode pre-configured with the same name.
-
Double-click Get to jump to Set — Double-click a GetNode to center and select its paired SetNode.
-
Default widget value setting — Controls the initial Constant value when a Set node is first connected: empty (default), slot name, slot name (lowercase), or slot name (UPPERCASE).
-
Type inference from output — If a SetNode's input is unconnected but its output is connected to a typed input, the Set adopts that type and recolors accordingly.
-
Getters submenu navigates into subgraphs — SetNode's getter list now includes cross-subgraph GetNodes and can navigate into subgraphs to focus them.
Fixes
-
Paste rename coordination — When pasting Set+Get pairs, GetNodes now correctly follow their SetNode's rename (e.g.,
MODEL->MODEL_0). -
Type/color reset on disconnect — Disconnecting input or output now correctly resets type and color, but only when neither side is still connected.
-
Suffix stripping only on paste —
validateNameno longer strips intentional_Nsuffixes from user-typed names. Only strips during paste to avoidFOO_0_1_2accumulation. -
Connection drawing moved to canvas level — Visualization links remain visible even when nodes are off-screen or collapsed.
Settings
- Settings are now organized under KJNodes > Set & Get and KJNodes > General categories in the settings panel.