Superside Crystal Upscaler (portrait detail)
The upscaler for portraits that sits between inpaint and resize — not a generic 2x
- image
- image
- info
There are two different jobs hiding under the word "upscale," and the KB's advice is to decide which one you have before you install anything. "More pixels" is a resize - Lanczos or an ESRGAN model, instant, free, can't hallucinate. "More detail" is a generative pass - a model inventing detail that was never there. This node is firmly the second kind, and it's specialized: it runs Clarity AI's Crystal upscaler on fal (fal-ai/crystal-upscaler), a portrait- and facial-detail-focused upscaler, and it exists to solve a specific pipeline problem rather than to be your general 4x upscaler.
The pipeline problem, stated plainly by the pack's own source: the generative inpaint node this is meant to follow (the Z-Image Turbo inpaint, used for re-skin work) has a real ceiling around ~2048px on its longest edge. Ask the generator for a bigger image and you don't get more detail - the endpoint silently falls back to a fixed square. So once generation is at that ceiling, "more detail" can't come from the generator; it has to come from a dedicated upscale pass on the result. That's this node's job: it sits after the generative inpaint and before you resize back to the original resolution, adding a portrait-aware detail jump (2x by default) so the final plain Lanczos stretch back to the true original covers a smaller gap and looks far sharper than a single ~2.3x interpolation would.
Inputs are image and api_key, with three optional knobs:
scale_factor- 1 to 4, default 2. How much to upscale before the final resize-to-original step. 2 is the sensible default; going to 4 is where you pay more and start to invite artifacts.creativity- 0 to 1, default 0. How much the upscaler is allowed to invent vs. stay literal. At 0 it's a faithful detail restorer; as you raise it, it enhances more aggressively and starts rewriting texture. For faces, the default is where most people want to stay.output_format- png or jpg.
Outputs are image (IMAGE) and info (STRING, the fal result URL).
The honest framing on when to use it: this is a face/portrait-detail upscaler, not a general-purpose one, and it's an API call (metered fal credits, your image leaves the machine). If you're upscaling a landscape or a clean product shot where the detail is already there, you're better off with a free local ESRGAN - the KB's table has your back there. This node earns its keep in exactly the pipeline it was built for: portrait re-skin/retouch work where you generated at ~2K, want real added facial detail, and don't want the final resize to your original high-res file to look soft. Community signal on "Crystal upscaler" is almost nonexistent - nobody's trading tips about it - which matches its role as a production-internal tool made public.
Install - ComfyUI Manager (search "comfyui-superside-nodes") or:
cd ComfyUI/custom_nodes
git clone https://github.com/Superside/comfyui-superside-nodes
pip install -r requirements.txt
Restart ComfyUI, find it under Superside. Paste your fal key into api_key (blank falls back to FAL_KEY, both blank errors). No model files to download - the pack's only real dependency is fal-client.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| api_key | STRING | — | |
| scale_factoropt | FLOAT | 2.01–4 | How much to upscale before the final resize-to-original-size step. |
| creativityopt | FLOAT | 0.000–1 | How much the upscaler is allowed to invent/enhance detail vs. stay literal. |
| output_formatopt | COMBO | png | 2 options: png, jpg |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| info | STRING | — |