ComfyUI Node

G'MIC Cli

Hundreds of classic image filters from one text box

By gemell1·Created 3 years ago·Updated 2 years ago· 10
G'MIC Cli
  • images
  • IMAGE
command

Want a film-emulation grade, chromatic-aberration, bloom, or a proper sharpen pass on your output - without downloading a single model or burning a byte of VRAM? That's this node. It's a text box that pipes your image through the real G'MIC command-line tool, a free and genuinely ancient (in the good way) image-processing suite with somewhere north of five hundred filters. ComfyUI's core is great at diffusion math and lousy at classic photo post-processing; G'MIC is the opposite. Put them together and you get finishing passes that look like they came out of Photoshop, because in spirit they did.

The name is a lie in the friendliest way: this node doesn't call any API and needs no key. It shells out to a binary on your machine.

How it works

GmicCliWrapper is a thin bridge, and the source is only ~50 lines. For every image in your batch it saves the frame to ComfyUI's temp directory, then runs roughly this:

gmic -input /tmp/in.png <your command> -output /tmp/out.png

It auto-prepends a - if your command doesn't already start with - or + (G'MIC invokes filters with a leading dash), then loads the result back as a tensor. Your command string goes through shlex.split, so the usual quoting rules apply. The example command in the pack's own workflow is fx_bokeh 3,8,0,30,... - that long comma tail is just the filter's parameters.

The inputs that matter

There are exactly two, and they're both required:

  • command - a single-line G'MIC command, no leading dash needed. This is where you paste fx_denoise or rodilius 5,3 or whatever you want to run.
  • images - any IMAGE tensor, typically straight out of a LoadImage node or after a sampler/upscale.

Output: IMAGE. Wire it into PreviewImage, SaveImage, or back into a VAE encode if you're doing img2img on the result. It's is_list: false and a single image output, so it drops into any normal image slot.

Installing it

Two installs, really. The node itself is one of the lightest in the ecosystem: no requirements.txt, zero pip dependencies - the entire pack is a single Python file.

cd ComfyUI/custom_nodes
git clone https://github.com/gemell1/ComfyUI_GMIC
# restart ComfyUI

Or search "G'MIC" / ComfyUI_GMIC in ComfyUI Manager and hit install. The part everyone trips on is the second install: the actual gmic executable. Grab it from gmic.eu and put it on your PATH - on Windows that's System Properties → Environment Variables, then restart ComfyUI so it sees the new PATH.

Where people get burned

  • 'gmic' is not recognized / command not found - the binary isn't on PATH. Nine times out of ten that's the whole problem; the README links a Windows PATH walkthrough for exactly this.
  • No soft failures. The node uses subprocess.check_call, so a typo in the command aborts the run with G'MIC's raw stderr - terse, technical, and honest about what it didn't like.
  • It runs per-frame. Every image in the batch gets saved to disk, processed, and loaded back. Fine for single images; sluggish if you feed it a long video frame sequence.
  • Old workflows. The README notes a March breaking change, so if you're dragging in a workflow from before that, the node may need recreating.

One honest take: for one-off exploration this is the wrong tool - guessing at filter syntax blind is miserable. That's what the sibling G'MIC-Qt node (same pack) is for. Use it to preview, then bake the winning command into this node so it runs forever, deterministically.

Categoryimage/preprocessors

Inputs (2)

NameTypeDefaultDescription
commandSTRING
imagesIMAGE

Outputs (1)

NameTypeDescription
IMAGEIMAGE