Native SDXL-EcomID support for ComfyUI.
This extension doesn't use diffusers but instead implements EcomID natively and it fully integrates with ComfyUI.
EcomID enhances portrait representation, delivering a more authentic and aesthetically pleasing appearance while ensuring semantic consistency and greater internal ID similarity (i.e., traits that do not vary with age, hairstyle, glasses, or other physical changes).
| Prompt | Reference Image | EcomID | InstantID | PuLID |
|---|---|---|---|---|
| A close-up portrait of a little girl with double braids, wearing a white dress, standing on the beach during sunset. | ![]() | ![]() | ![]() | ![]() |
| A close-up portrait of a very little girl with double braids, wearing a hat and white dress, standing on the beach during sunset. | ![]() | ![]() | ![]() | ![]() |
| Agrizzled detective, fedora casting a shadow over his square jaw, a cigar dangling from his lips, his trench coat evocative of film noir, in a rainy alley. | ![]() | ![]() | ![]() | ![]() |
| A smiling girl with bangs and long hair in a school uniform stands under cherry trees, holding a book. | ![]() | ![]() | ![]() | ![]() |
| A very old witch, wearing a black cloak, with a pointed hat, holding a magic wand, against a background of a misty forest. | ![]() | ![]() | ![]() | ![]() |
| A man clad in cyberpunk fashion: neon accents, reflective sunglasses, and a leather jacket with glowing circuit patterns. He stands stoically amidst a soaked cityscape. | ![]() | ![]() | ![]() | ![]() |
You can see more showcases in the SDXL-EcomID repository.
In the examples directory, you'll find both the basic workflow and the dedicated face-swapping workflow.


Upgrade ComfyUI to the latest version!
Download or git clone this repository into the ComfyUI/custom_nodes/ directory or use the Manager.
EcomID requires insightface, you need to add it to your libraries together with onnxruntime and onnxruntime-gpu.
Models:
ComfyUI/models/pulid/ (thanks to Chenlei Hu for converting them into IPAdapter format)facexlib dependency needs to be installed, the models are downloaded at first useComfyUI/models/insightface/models/antelopev2ComfyUI/models/instantid directory. (Note that the model is called ip_adapter as it is based on the IPAdapter).Feel free to generate images in various resolutions, as we have trained the controlnet on 2 million high-quality images.
You can set a higher CFG value to achieve even better semantic consistency. Values from 1 to 7 are acceptable, with 6 being recommended.
The pose of the person is aligned with the keypoints generated from the reference image, just like in InstantID. You can achieve a different pose by sending an image to the image_kps input.
There's an EcomID advanced node available, at the moment the only difference with the standard one is that you can set the weights for the ip-adapter (PulID) models and the controlnet separately.
Referenced the following repositories: ComfyUI_InstantID and PuLID_ComfyUI.
Remember at the moment this is only compatible with SDXL-based models, such as EcomXL, leosams-helloworld-xl, dreamshaper-xl, stable-diffusion-xl-base-1.0 and so on.
It works very well with SDXL Turbo/Lighting, EcomXL-Inpainting-ControlNet and EcomXL-Softedge-ControlNet.
The results of the Multi-ControlNet are shown below:

10 commits
Python
100.0%
Native SDXL-EcomID support for ComfyUI.
This extension doesn't use diffusers but instead implements EcomID natively and it fully integrates with ComfyUI.
EcomID enhances portrait representation, delivering a more authentic and aesthetically pleasing appearance while ensuring semantic consistency and greater internal ID similarity (i.e., traits that do not vary with age, hairstyle, glasses, or other physical changes).
| Prompt | Reference Image | EcomID | InstantID | PuLID |
|---|---|---|---|---|
| A close-up portrait of a little girl with double braids, wearing a white dress, standing on the beach during sunset. | ![]() | ![]() | ![]() | ![]() |
| A close-up portrait of a very little girl with double braids, wearing a hat and white dress, standing on the beach during sunset. | ![]() | ![]() | ![]() | ![]() |
| Agrizzled detective, fedora casting a shadow over his square jaw, a cigar dangling from his lips, his trench coat evocative of film noir, in a rainy alley. | ![]() | ![]() | ![]() | ![]() |
| A smiling girl with bangs and long hair in a school uniform stands under cherry trees, holding a book. | ![]() | ![]() | ![]() | ![]() |
| A very old witch, wearing a black cloak, with a pointed hat, holding a magic wand, against a background of a misty forest. | ![]() | ![]() | ![]() | ![]() |
| A man clad in cyberpunk fashion: neon accents, reflective sunglasses, and a leather jacket with glowing circuit patterns. He stands stoically amidst a soaked cityscape. | ![]() | ![]() | ![]() | ![]() |
You can see more showcases in the SDXL-EcomID repository.
In the examples directory, you'll find both the basic workflow and the dedicated face-swapping workflow.


Upgrade ComfyUI to the latest version!
Download or git clone this repository into the ComfyUI/custom_nodes/ directory or use the Manager.
EcomID requires insightface, you need to add it to your libraries together with onnxruntime and onnxruntime-gpu.
Models:
ComfyUI/models/pulid/ (thanks to Chenlei Hu for converting them into IPAdapter format)facexlib dependency needs to be installed, the models are downloaded at first useComfyUI/models/insightface/models/antelopev2ComfyUI/models/instantid directory. (Note that the model is called ip_adapter as it is based on the IPAdapter).Feel free to generate images in various resolutions, as we have trained the controlnet on 2 million high-quality images.
You can set a higher CFG value to achieve even better semantic consistency. Values from 1 to 7 are acceptable, with 6 being recommended.
The pose of the person is aligned with the keypoints generated from the reference image, just like in InstantID. You can achieve a different pose by sending an image to the image_kps input.
There's an EcomID advanced node available, at the moment the only difference with the standard one is that you can set the weights for the ip-adapter (PulID) models and the controlnet separately.
Referenced the following repositories: ComfyUI_InstantID and PuLID_ComfyUI.
Remember at the moment this is only compatible with SDXL-based models, such as EcomXL, leosams-helloworld-xl, dreamshaper-xl, stable-diffusion-xl-base-1.0 and so on.
It works very well with SDXL Turbo/Lighting, EcomXL-Inpainting-ControlNet and EcomXL-Softedge-ControlNet.
The results of the Multi-ControlNet are shown below:

10 commits
Python
100.0%