Protoface Ideogram Remove Background · Remove Background
One input, two useful outputs
- image
- mask
- files
- run id
The shortest node in the pack
Two real inputs. That's it. Wire an image in, get a cutout out.
Matting is the most commoditised operation in this ecosystem - rembg, BiRefNet, InSPyReNet, SAM, ComfyUI shipped BiRefNet in core in May 2026, and the quality frontier moved years ago from "can it find the subject" to "can it survive hair, fur and semi-transparency". Nobody has won that last fight, which is the reason a paid hosted node is even worth discussing: the local options are free and excellent, and they still choke on flyaway hair.
So the honest framing: use this when the local ones are failing on the specific image in front of you, when you're on a machine without the nodes installed, or when you want it done in one node with no model downloads. Not as your default - your default should be BiRefNet, because it's free and local and good.
This is the Remove Background task from Ideogram in Protoface, the beta pack of hosted-model nodes for ComfyUI. Paid per run, executed remotely.
How it works
The image is uploaded to Protoface's asset store (content-hashed, cached for reruns), the provider segments the subject, and the result comes back as a native IMAGE with the foreground isolated, plus a MASK. The pack's shared adapter handles validation, journaling, submission, polling and download - the same code path every node in this pack uses, which is why the control list here is so short.
generation_id still applies even on a node this simple. Fixed means "reuse or resume the job I already paid for"; increment to actually re-run it. If you change the input image, you've made a new request anyway.
The inputs that matter
image - media input, and it takes the native IMAGE type, so you can wire anything in your graph to it: a Load Image, an upscaler's output, a Nano Banana result. It also has a References mode for a Protoface asset id or a reused result asset, which is the path for chaining remote jobs without re-uploading.
One catch: the field expects a single asset. If you're feeding it a batch - say, an image list from a generation node - split it first. The pack errors out rather than silently picking one.
generation_id - the paid-request switch. And request_scope, which the frontend fills in automatically. You only touch request_scope in headless workflows, where you have to supply your own stable unique value; leave it blank in a script and the node refuses to run.
Outputs
image is the cutout - a native IMAGE list with the foreground isolated against transparency.
mask is the same segmentation as a native MASK, with inverted-alpha semantics per the pack's convention. This is the output people ignore and shouldn't: a mask is what you feed into a compositing node, an inpainting pass, or a background-replacement workflow. Same data, much more useful shape.
files is the original download as PROTOFACE_FILE - and on a matting node specifically, check here. The pack's docs call out that files holds originals "including transparent PNGs", and a transparent PNG that survives as a file is the thing you actually want if you're compositing outside ComfyUI. A GLB-style format caveat applies elsewhere; here it's simpler - the file is the file.
run id is a string for Protoface Resume Run, in case the job outlived your session.
Install
Manager → search Protoface → install protoface-nodes → restart → reload the browser. Manual:
git clone --branch v0.1.0 --depth 1 https://github.com/protoface-ai/protoface-comfyui.git custom_nodes/protoface
python -m pip install -r custom_nodes/protoface/requirements.txt
ComfyUI 0.41.0+ and Python 3.10+, with ComfyUI's own interpreter. Pillow and av come with the pack and are what carry images and native media in and out. Then click Protoface in the lower-right and enter your key.
Where people get burned
Paying for what a free node does. BiRefNet in core is very good. Try it first; come here when hair, veils, or thin structures come back chewed.
Feeding a batch. One asset per field. Split the batch, or you'll get an "expects one asset" style validation error.
Assuming a transparent result survives every path. Keep an eye on files if you need the original alpha, rather than inspecting whatever a downstream preview flattened.
Re-running by requeueing without bumping generation_id. Same recorded job back. That's deduplication working, not a broken node.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | COMBO | A public URL, a data URI, or an asset id. | |
| generation_id | INT | 00–9007199254740991 | Keep fixed to reuse/resume this paid job. Increment for a fresh paid generation; independent of the model seed. |
| request_scope | STRING | Automatically assigned per node. Headless clients must supply a stable unique workflow/node ID. This is not a secret. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |
| files | PROTOFACE_FILE | — |
| run id | STRING | — |