Extensions/ComfyUI-BCNodes
ComfyUI Extension

ComfyUI-BCNodes

Utility nodes for ComfyUI: logic, mask, image, PostFx film looks, dataset analysis (Caption Audit, Image Quality Gate), Social Media Export, SeedVR2 streaming, loaders and workflow helpers (AutoBypass, Anything Everywhere, comparers).

By 0xBeycan·Created 22 days ago·Updated 2 days ago· 2
0xBeycan/ComfyUI-BCNodes
Nodes54
On cloudLocal install
CategoryBCNodes/logic, BCNodes/workflow
Stars2
Updated2 days ago

Nodes (54)

Any Switch

Pick whichever branch you actually wired up

BCNodes/logic
Anything Everywhere

Stop dragging the same wire across the canvas

BCNodes/workflow
Aspect Prompt List

Prompts Under [WxH] Headers

BCNodes/text
Auto Model Downloader

Make the workflow bring its own models

BCNodes/loaders
BiRefNet Remove Background

The cutout node with actual knobs on it

BCNodes/mask
Blockify Mask

Masks That Snap to Blocks, Not to Pixels

BCNodes/mask
Caption Audit

Catch the word that's in every caption before you train

BCNodes/analysis
Captioner

One training caption per frame, wired straight into your dataset folder

BCNodes/lm
Depth Anything

Depth Anything in One Node, With No Second Pack to Install

BCNodes/image
Draw Mask On Image

Paint a Colour Through a Mask, Per Frame, Without the Round Trip

BCNodes/mask
Fast Groups Bypasser

One switch per chunk of your workflow

BCNodes/workflow
Frequency Merge

The Face of One Upscale, the Skin Texture of Another

BCNodes/image
Image Comparer

Put A and B on one node and drag the divider

BCNodes/workflow
Image Quality Gate

Keep the blurry ones out of the dataset

BCNodes/analysis
Image Resize

Stretch, Pad, Crop or Pillarbox

BCNodes/image
Image Scale By Aspect Ratio

The resize node that takes the mask with it

BCNodes/image
Is Mask Empty

Did the detector actually find anything?

BCNodes/mask
Join Image Lists

Glue two batches together and keep the count

BCNodes/image
LM Config

Change one sampling field without throwing away the model's own defaults

BCNodes/lm
LM Loader

The node that picks your chat model and loads absolutely nothing

BCNodes/lm
Logic Boolean

A slider that behaves like a switch, and the 0.5 gotcha

BCNodes/logic
Lora Loader (Key Fix)

The LoRA Loader That Fixes the Keys Core Skips

BCNodes/loaders
Mask Fill Holes

Stop your matte looking like Swiss cheese

BCNodes/mask
MaskGrow

Grow it, shrink it, feather it — one node, two numbers

BCNodes/mask
Math Expression

Sizes, seeds and step counts without a calculator

BCNodes/logic
PostFx Apply

The film stock and the grain, applied after the sampler

BCNodes/postfx
PostFx Custom Look

Your own grade, or one knob on top of a stock

BCNodes/postfx
PostFx LUT

Drop a .cube in the folder and get a colourist's grade

BCNodes/postfx
PostFx Signature Sheet

Print every film stock onto your own photo

BCNodes/postfx
PostFx Theme

The node you only need when you're chaining looks

BCNodes/postfx
Power Lora Loader

Power Lora Loader — Same Name as rgthree's, Deliberately Different Job

BCNodes/loaders
PreFlight Calibrate

The node that tells you which of your rules is wrong

BCNodes/preflight
PreFlight Observe

PreFlight Observe turns an image into a strict JSON description — and refuses to judge it

BCNodes/preflight
PreFlight Outcome

PreFlight Outcome is how you find out whether your predictions were any good

BCNodes/preflight
PreFlight Report

PreFlight Report predicts how Instagram, TikTok and X will treat your post — as a range, not a verdict

BCNodes/preflight
Prompter

Prompter writes your prompt for you — and can hand back conditioning, ready to sample

BCNodes/lm
Prompt List

Prompt List — Type Twenty Prompts, Get Twenty Runs

BCNodes/text
Qwen LM

Qwen LM runs a chat model inside ComfyUI — no Ollama, no GGUF, no second process

BCNodes/lm
Repeat Mask Batch

Repeat Mask Batch

BCNodes/mask
Save Image

Save Image — Filenames That Actually Tell You What Made the Picture

BCNodes/image
Save Image With Caption

Building a LoRA Dataset Out of Your Outputs

BCNodes/image
Seed

Seed — The Node That Fixes the One Thing `control_after_generate` Gets Wrong

BCNodes/logic
SeedVR2 Chunk Size

How Many Frames Will Your Card Actually Take? Ask It Instead of Guessing

BCNodes/seedvr2
SeedVR2 Framing Downscale

Pick SeedVR2's Downscale From the Face, Not From Your Mood

BCNodes/seedvr2
SeedVR2 PostProcess

SeedVR2 PostProcess — The Colour Match That Stops Upscales Looking 'More AI'

BCNodes/seedvr2
SeedVR2 PostProcess (Compact)

SeedVR2 Decode and Post-Process in One Node, With Your VRAM Not Growing by the Frame

BCNodes/seedvr2/compact
SeedVR2 Preprocess (Compact)

The SeedVR2 Input Stage in One Node, With the Clip Never Held Twice

BCNodes/seedvr2/compact
SeedVR2 Resize

SeedVR2 Resize — The Input Stage ComfyUI's Own Scale Nodes Can't Reproduce

BCNodes/seedvr2
SeedVR2 VAE Decode

SeedVR2 VAE Decode — Where Long Clips Used to Die at Frame 190

BCNodes/seedvr2
SeedVR2 VAE Encode

SeedVR2 VAE Encode — Encodes a Whole Clip Without the VRAM Bill

BCNodes/seedvr2
Select Switch

A Switch You Pick By Name, and Only the Branch You Pick Runs

BCNodes/logic
Show Text

Show Text — A Window Into Your Graph That Also Travels in the File

BCNodes/text
Skin Texture

Skin Texture — Pores, Because 'Glossy Skin' Is Still the Number One AI Tell

BCNodes/image
Social Media Export

Social Media Export — Stop Letting the Platform Crop Your Crop

BCNodes/image
Readme

ComfyUI-BCNodes

Utility nodes for ComfyUI, in one small pack.

| Registration key | Display name | What it does | | --- | --- | --- | | BC_AutoBypass | Auto Bypass | Bypasses its targets automatically when a watched source is empty | | BC_LogicBoolean | Logic Boolean | 0–1 float → BOOLEAN / NUMBER / INT / FLOAT | | BC_IsMaskEmpty | Is Mask Empty | MASK → BOOLEAN | | BC_MaskFillHoles | Mask Fill Holes | Fills enclosed holes in a mask | | BC_MaskGrow | MaskGrow | Grows / shrinks a mask, then blurs it | | BC_DrawMaskOnImage | Draw Mask On Image | Paints a colour (with opacity) through a mask onto an image batch | | BC_BlockifyMask | Blockify Mask | A mask as the blocks of its bounding box that hold any of it | | BC_RepeatMaskBatch | Repeat Mask Batch | A mask batch repeated amount times | | BC_ImageScaleByAspectRatio | Image Scale By Aspect Ratio | Scales an image / mask to an aspect ratio and side length; MASK output is never None | | BC_ImageResize | Image Resize | Resizes an image batch (and mask) to a width and height: stretch, keep the proportion, pad or crop | | BC_JoinImageLists | Join Image Lists | Concatenates image lists, unlimited inputs | | BC_MathExpression | Math Expression | Arithmetic over a, b, c without eval() | | BC_PromptList | Prompt List | One prompt per line, as a list | | BC_AspectPromptList | Aspect Prompt List | Prompts grouped under [WxH] headers, as prompt / width / height lists | | BC_AnySwitch | Any Switch | First connected non-None input, any type, unlimited inputs | | BC_SelectSwitch | Select Switch | Input of the selected named option, any type; only the selected branch runs | | BC_Seed | Seed | Seed widget; -1 draws a new random seed on every run | | BC_ShowText | Show Text | Shows incoming text on the node, passes it on | | BC_QwenLM | Qwen LM | Runs a Qwen chat model (Qwen3.5-4B / 9B, Qwen3.8-27B, Qwen3-VL-8B, and abliterated builds of Qwen3.5-9B and Qwen3-VL-8B) through ComfyUI core: system / user / prefill and images in, text and thinking out, with the official chat templates and sampling defaults and one LoRA; the model file is found in models/Qwen-LM or models/text_encoders, or downloaded on first use | | BC_LMConfig | LM Config | Sampling settings for an LM node: only the fields you change or link replace the model's official defaults | | BC_LMLoader | LM Loader | Picks the chat model a wrapper node runs (Captioner, Prompter): family, model, precision, one LoRA and its strength, keep loaded; loads nothing itself, and its lists follow the selected family and model | | BC_Captioner | Captioner | One training caption per image frame with the model of a connected LM Loader: a built-in tags or prose prompt, or the image alone (none) for your own image-to-caption LoRA, optionally with an instruction or an LM Config; outputs the frames and their captions as lists, ready for Save Image With Caption | | BC_Prompter | Prompter | One text-to-image prompt from a short brief and / or a reference image with the model of a connected LM Loader: a built-in prompt that writes the person's appearance (include identity) or leaves it to a character LoRA (exclude identity), or none for your own prompter LoRA; text out, and with a CLIP connected the positive conditioning as CLIP Text Encode encodes it | | BC_PreFlightObserve | PreFlight Observe | Runs Qwen3.5-9B INT8 ConvRot (downloaded on first use) as a pure observation sensor: an image or frame batch → a strict observations JSON (garment, exposure, framing, pose, in-image text, …); greedy, so the same input gives the same output; an error comes back as {"error": ...} | | BC_PreFlightReport | PreFlight Report | The rules engine: observations + caption → per-platform verdict ranges (Instagram / TikTok / X: OK, RISK = reach demotion, BLOCK = removal), a summary and the prediction logged to the feedback store | | BC_PreFlightOutcome | PreFlight Outcome | Records what a platform actually did to a published post (clean / demoted / removed); its record list shows each new prediction at once | | BC_PreFlightCalibrate | PreFlight Calibrate | The feedback store as two calibration tables (per platform, per rule), as text for Show Text; runs again only when the store changed | | BC_ImageComparer | Image Comparer | Two images on the node, compared with a sliding divider | | BC_PowerLoraLoader | Power Lora Loader | MODEL + any number of LoRA rows → MODEL, no CLIP; each LoRA with the key fix of Lora Loader (Key Fix) | | BC_LoraLoaderKeyFix | Lora Loader (Key Fix) | MODEL + one LoRA → MODEL, with the keys ComfyUI's own loader leaves out renamed first (lightx2v .diff_m, PEFT keys without the diffusion_model. prefix); the console says how many were renamed and how many match no module | | BC_AnythingEverywhere | Anything Everywhere | Feeds unconnected inputs of a type at prompt time | | BC_FastGroupsBypasser | Fast Groups Bypasser | One bypass toggle per group | | BC_BiRefNetRemoveBackground | BiRefNet Remove Background | Background removal with BiRefNet, plain torch | | BC_DepthAnythingV2 | Depth Anything | Depth map with Depth Anything V2 Small or Depth Anything 3 (Small, Base, Mono-Large, Metric-Large; all Apache-2.0), near = white, at a ControlNet preprocessor's size or exactly width x height | | BC_SeedVR2FramingDownscale | SeedVR2 Framing Downscale | SeedVR2 Resize's downscale_factor from the face size: the tallest SAM 3 face box picks close-up, medium or far, each with its factor; the measured face fraction comes out too | | BC_SeedVR2Resize | SeedVR2 Resize | Original image → the padded frame SeedVR2 encodes (lanczos downscale, shortest-edge antialiased bicubic, pad 16, 4n+1 frames) plus the colour reference | | BC_SeedVR2VAEEncode | SeedVR2 VAE Encode | SeedVR2 VAE encode with the frames streamed from RAM slice by slice, so VRAM does not grow with the frame count | | BC_SeedVR2ChunkSize | SeedVR2 Chunk Size | The longest 4n+1 chunk the SeedVR2 sampler fits on this card, from the latent's size and the card's total memory; wire to Split SeedVR2 Latent's manual frames_per_chunk | | BC_SeedVR2VAEDecode | SeedVR2 VAE Decode | SeedVR2 VAE decode with every decoded slice streamed to RAM, so VRAM does not grow with the frame count | | BC_SeedVR2PostProcess | SeedVR2 PostProcess | Post-Process SeedVR2 Output one frame at a time into one float16 output, no full-size temporaries | | BC_SeedVR2PreprocessCompact | SeedVR2 Preprocess (Compact) | SeedVR2 Resize and VAE Encode in one node: outputs only the latent and the plan PostProcess (Compact) reads, no colour reference kept | | BC_SeedVR2PostProcessCompact | SeedVR2 PostProcess (Compact) | SeedVR2 VAE Decode and PostProcess in one node: decodes only the kept frames and corrects them in place against a reference rebuilt per chunk from the original frames | | BC_AutoModelDownloader | Auto Model Downloader | Lists a workflow's models and fetches the missing ones into models/ | | BC_PostFxApply | PostFx Apply | Applies a postfx film-emulation look (theme + condition + strength) to an image batch, optional look override and mask | | BC_PostFxTheme | PostFx Theme | Built-in postfx theme → POSTFX_LOOK, to start a chain from a named look | | BC_PostFxCustomLook | PostFx Custom Look | Builds a look from common controls, or overrides them on top of an incoming look | | BC_PostFxLut | PostFx LUT | 3D .cube LUT as a look, standalone or layered on a theme | | BC_PostFxSignatureSheet | PostFx Signature Sheet | Labeled contact sheet of every theme in a category applied to one image | | BC_CaptionAudit | Caption Audit | Runs caption-audit over a LoRA caption folder and draws the report card on the node | | BC_SocialMediaExport | Social Media Export | One platform-ready derivative per ticked platform, minimum crop, spec-driven | | BC_ImageQualityGate | Image Quality Gate | Blur / sharpness / noise / clipping / entropy → PASS / SO-SO / FAIL badge, verdict and scores | | BC_SaveImage | Save Image | Saves images with folder / file names built from prompt widget values, any Pillow format, prompt + workflow embedded; preview only in the gallery, never under the node | | BC_SaveImageWithCaption | Save Image With Caption | Saves images as PNG and, with a caption connected, the caption next to each image under the same name, for training datasets | | BC_SkinTexture | Skin Texture | Micro-texture on skin inside a SAM 3 mask: boosts the image's own detail and multiplies in a synthetic pore field, in linear light | | BC_FrequencyMerge | Frequency Merge | The low frequencies (structure, colour) of one image + the high frequencies (texture, fine detail) of another of the same size, split by a Gaussian | | — | Align | Align / distribute buttons in the selection toolbox | | — | Process Monitor | Not a node: live RAM / VRAM bars, an estimate before a run, per-node measurement, the reason a killed run died, a full clear back to the startup memory without a restart, and a drop stale outputs setting (off) (see Process Monitor) |

Registration keys are BCNodes' own, so the packages above can be installed side by side without a clash. Type BCNodes in the node library to see them all; in the menu they sit in these groups:

| Category | Nodes | | --- | --- | | BCNodes/logic | Logic Boolean, Math Expression, Any Switch, Select Switch, Seed | | BCNodes/mask | Mask Fill Holes, MaskGrow, Draw Mask On Image, Blockify Mask, Repeat Mask Batch, Is Mask Empty, BiRefNet Remove Background | | BCNodes/image | Image Scale By Aspect Ratio, Image Resize, Join Image Lists, Depth Anything, Social Media Export, Save Image, Save Image With Caption, Skin Texture, Frequency Merge | | BCNodes/postfx | PostFx Apply, Theme, Custom Look, LUT, Signature Sheet | | BCNodes/analysis | Image Quality Gate, Caption Audit | | BCNodes/text | Prompt List, Show Text | | BCNodes/lm | Qwen LM, LM Config, LM Loader, Captioner, Prompter | | BCNodes/preflight | PreFlight Observe, Report, Outcome, Calibrate | | BCNodes/loaders | Power Lora Loader, Lora Loader (Key Fix), Auto Model Downloader | | BCNodes/seedvr2 | SeedVR2 Framing Downscale, Resize, VAE Encode, Chunk Size, VAE Decode, PostProcess; Compact: Preprocess (Compact), PostProcess (Compact) | | BCNodes/workflow | Image Comparer, Anything Everywhere, Fast Groups Bypasser, Auto Bypass |

Installation

cd ComfyUI/custom_nodes
git clone https://github.com/0xBeycan/ComfyUI-BCNodes
pip install -r ComfyUI-BCNodes/requirements.txt

Restart ComfyUI. requirements.txt holds opencv-python (the morphology of MaskGrow and the hole filling of Mask Fill Holes) and the two packages that back the PostFx and Caption Audit nodes, postfx and caption-audit; everything else ships with ComfyUI. Without postfx and caption-audit the pack still loads and only those nodes are absent. If this repository is still present under its old name ComfyUI-AutoBypass, delete that folder — its AutoBypass node is this pack's BC_AutoBypass.

The Align buttons are not a node; they appear in the toolbox above a multi-selection.

Documentation

  • Logic — booleans, arithmetic, switches and the seed
  • Mask — mask checks, fill / grow / draw / blockify / repeat, BiRefNet background removal
  • Image — scaling and resizing, image lists, depth maps, social media export, saving, skin texture, frequency merge
  • PostFx — film-emulation looks: themes, custom looks, LUTs, signature sheets
  • Analysis — the caption set audit and the image quality gate
  • Text — prompt lists and showing text
  • LM — chat models through ComfyUI core: Qwen LM, LM Config, LM Loader, Captioner, Prompter, the models and their files, sampling, LoRAs, models.yaml
  • PreFlight — how Instagram, TikTok and X would likely treat an image or video before it is published: the observation sensor, the rules engine, reading a verdict, the feedback loop and calibration
  • Loaders — LoRA loading (with the key fix for LoRAs core loads only in part) and the model downloader
  • SeedVR2 — the downscale factor from the framing, the SeedVR2 input stage, streaming VAE encode / decode, the chunk size and the VAE tile for the card, post-processing
  • Workflow — image comparer, Anything Everywhere, group bypass, Auto Bypass, the Align buttons
  • Unused outputs — unconnected whole-batch outputs come out empty
  • Measurements — time, RAM and output size of the mask nodes and Image Resize against the nodes they replace
  • Process Monitor — RAM / VRAM live, an estimate before a run, per-node measurement, the report of a killed run, the full clear
  • Development — the repository layout, the tests and the import rule

Third-party code

Everything else in this pack is BCNodes' own code.

License

MIT. The code in models/birefnet/arch/ keeps its own MIT notice, in models/birefnet/arch/LICENSE; the code in models/depth_anything_v2/arch/ keeps its Apache-2.0 license, in models/depth_anything_v2/arch/LICENSE.