PuLID, InstantID and IP-Adapter vs .char: which to use for consistent characters
Use PuLID, InstantID or IP-Adapter if you want full control over each node in a ComfyUI graph and work with one model family. Use .char if you want one node with a saved identity that you do not rewire for each graph, and that also works outside ComfyUI.
TL;DR
| ROW | PuLID / InstantID / IP-Adapter | .char |
|---|---|---|
| Training needed | No per-character training | None on FLUX.2 and H3 R2V. An adapter trained once on Krea 2 and other H3 nodes |
| Photos required | 1 or more | 1 to 2 |
| Models supported | Model-specific | FLUX.2, Krea 2, FLUX.1, Z-Image Turbo, MiniMax H3, LTX-2.5, plus Nano Banana Pro and H3 R2V via fal |
| Portable file | No, set up per graph | Yes, one .char file |
| Face / body / wardrobe / voice | Face, mainly, and no voice | Face, body, wardrobe and an optional voice clip |
| Runs locally | Yes, in ComfyUI | Yes, in the OmniChar app and ComfyUI, or hosted on OmniChar Cloud |
| Open source | Yes | Yes, GPL-3.0 |
| Cost | Free on your own GPU | Free to run locally. OmniChar Cloud uses credits |
| Drift measurement | None | Continuity score out of 100 on every take |
What each one is
PuLID / InstantID / IP-Adapter
They are ComfyUI methods that bring a face or look from reference images into a graph. Each one is wired into the graph by hand, and each is specific to certain models, so changing models means rewiring the graph. InstantID is in maintenance mode.
.char
A .char is one portable file that holds reference photos, an identity fingerprint, a locked description, an optional trained adapter and an optional voice clip. It works in the OmniChar app, the ComfyUI node and OmniChar Cloud. FLUX.2 and H3 R2V use the references directly; Krea 2 and other H3 nodes use an adapter trained once. Every take gets a continuity score out of 100.
Strengths
Where PuLID / InstantID / IP-Adapter wins
- Full control over each node and weight in the graph
- Uses plain reference images, with nothing to build first
Where .char wins
- One node instead of rewiring each graph
- The identity is saved once and reused
- Works outside ComfyUI too, in the OmniChar app and OmniChar Cloud
- Scores every take out of 100 for drift
When to use which
Questions
Is InstantID still maintained?
InstantID is in maintenance mode.
Do I need to rewire my graph for each model?
With PuLID, InstantID or IP-Adapter, each graph is wired by hand and the setup is model-specific. The .char node is one node with a saved identity.
Can I use .char outside ComfyUI?
Yes. The same .char works in the OmniChar app and OmniChar Cloud.
Which models does the node support?
FLUX.2, Krea 2, FLUX.1, Z-Image Turbo, MiniMax H3 and LTX-2.5, plus hosted models via fal.