Nodes/ComfyUI_StripesConv/Stripe Blend (Freq Conv)
ComfyUI Node

Stripe Blend (Freq Conv)

Stripe Blend is a multiply in a fancy FFT coat — here's when it's worth it

By bemoregt·Created 5 months ago·Updated 5 months ago· 0
Stripe Blend (Freq Conv)
  • natural_image
  • stripe_image
  • blended_image

Stripes. You want stripes on your image - maybe a scanline effect, a barcode texture, a halftone-ish banding, some geometric texture mash-up. StripeBlend (display name "Stripe Blend (Freq Conv)") takes a natural image and a stripe pattern, multiplies them together pixel by pixel, and hands you back a grayscale composite. That's the whole job. It's a single-purpose postprocessing node from the tiny ComfyUI_StripesConv pack, and honestly, the marketing outruns the math - which we'll get to.

What it actually does under the hood

Here's the thing worth knowing before you use it: the "Freq Conv" in the name isn't just branding. The node genuinely does run both images through a 2D FFT, convolves the two spectra, inverse-FFTs the result, and normalizes to 0–1. But the convolution theorem says that whole dance is mathematically identical to plain old pixel-wise multiplication of the two images. The FFT round trip is a multiply in a fancy coat. The author's own README is upfront about it - "output = natural_image × stripe_image" - and the shipped code confirms it: FFT → convolve spectra → IFFT → normalize collapses back to the pointwise product, just with extra floating-point steps and a full-range renormalization.

So treat it as a multiply-blend node, because that's what you'll actually observe. Before the multiply, both inputs get converted to grayscale using the standard 0.299/0.587/0.114 luma weights. If your stripe image is a different size than your photo, it's resized to match with Lanczos resampling automatically. Then the product is clamped and stretched back to the full 0–1 range, so the output keeps contrast instead of drifting toward black.

The inputs and output

Only two inputs, both required, both plain IMAGE:

  • natural_image - the source photo or render.
  • stripe_image - the pattern to multiply into it.

There are no optional widgets, no sliders, no controls. You don't pick a blend mode or an intensity. If you want to adjust the effect strength, wire the output into a core node with a blend/level control and mix it back with the original.

The single output is blended_image, a standard IMAGE tensor (grayscale duplicated into RGB channels), so it plugs into anything downstream - Save Image, a VAE encode, a mask preview, whatever.

One honest gotcha from the source: it only looks at the first image in the batch (tensor[0]). Feed it a batch and you get one output frame, not a per-frame pass.

Installing it

This pack is about as dependency-light as ComfyUI nodes get. No requirements.txt, no model files to download - just numpy, torch, and Pillow, which ComfyUI already ships. Two ways in:

  • ComfyUI Manager - search "ComfyUI_StripesConv", install, restart.
  • Manual:
    cd ComfyUI/custom_nodes
    git clone https://github.com/bemoregt/ComfyUI_StripesConv
    Then restart ComfyUI. That's it.

Where it's useful, and where it isn't

Reach for this when you want a hard, mechanical stripe composite: texturing a portrait with banding, generating pattern-overlaid reference art, or making abstract output from a photo + procedural stripes. It's also a decent teaching tool - the included stripe_blend.py CLI can generate a sine-wave stripe on the fly (--freq and --angle) and dump an FFT panel (--fft) so you can see the spectra, which is nice for getting a feel for spectrum convolution.

The honest take: if all you need is photo × pattern with color intact, core ComfyUI's Image Blend node with multiply mode gets you ~95% of the way and doesn't force grayscale. StripeBlend's niche is the forced monochrome, the auto-resize, and the FFT framing. It's a novelty utility - fine for a specific look, not something your default workflow is missing.

Troubleshooting

  • Your color vanished. By design - everything is grayscaled before the multiply. Re-add color downstream if you need it.
  • Result looks too dark or flat. The output is renormalized to 0–1, but if your stripe is mostly black, the product will still skew dark. Feed it a brighter pattern or fix contrast after.
  • Different sizes are fine. The stripe gets Lanczos-resized to the photo automatically; no pre-resizing needed.
  • "Missing node" when you load a workflow. You (or whoever made the workflow) haven't installed the pack. Install via Manager first.
  • Nothing shows in the preview. The output is grayscale duplicated to RGB, so it looks identical on all channels - that's normal, not a bug.

Also fair warning: this is a low-traffic corner of the ecosystem - there's essentially no community discussion about the pack, so the source and README are all there is. Read the code if something surprises you; it's ~100 lines and easy to follow.

Categoryimage/postprocessing

Inputs (2)

NameTypeDefaultDescription
natural_imageIMAGE
stripe_imageIMAGE

Outputs (1)

NameTypeDescription
blended_imageIMAGE