LC Skin Texture ✨ (BETA)
Pores, Borrowed From a Real Photo
- image
- mask
- reference
- protect_mask
- image
Too-smooth skin is the most durable tell in this entire hobby. It was the top complaint on SD 1.5, it survived SDXL, and it's still what people say about the newest architectures - the highest-signal realism writeup of 2026 opens with "every portrait looked like a skincare ad." Sharpening doesn't fix it, because there's nothing there to sharpen; denoise passes and beauty nodes make it worse, since smoothing is literally what they do. LC Skin Texture takes the other route: it borrows real pore relief from an actual photograph and lays it over the skin.
What it's actually doing
From the reference image it extracts only the fine brightness relief - pores, tiny creases, the granular stuff - and throws away the colour and the lighting entirely. That relief is then cut into patches and re-assembled with overlapping seams so the pattern never visibly tiles, and added onto your image's skin.
Two details make it behave sanely rather than look like a noise overlay:
- It adds less where the skin already has detail, so it doesn't double-texture an area that's already textured.
- It eases off at hard edges and in deep shadow or bright highlights, where real skin wouldn't show pore structure anyway.
Unwired, it uses the CC0 skin photo bundled with the pack (assets/skin_texture/). Wire your own sharp close-up of bare skin into reference and it'll use that instead - which is the right move if your subject is in an unusual lighting setup or you want a specific skin type.
The synthesis code is adapted from ComfyUI-SkinDetailer (MIT), same as the pack credits openly next to its other borrowed pieces.
Inputs and outputs
Required: image, strength (default 0.45 - subtle, which is correct), pore_size (1 = fine pores; push it up for close-ups where bigger pores and creases read as real), softness (higher = gentler, lower = crisper), and seed, which just changes how the texture patches are arranged, so it's your reroll knob when one patch lands badly.
Optional and worth wiring:
mask- white where skin should get texture. The author's recommendation is an LC Person Mask with mediapipe,face + bodyandremove_featureson. Unwired, skin is found by colour, which is fine on a portrait and increasingly wrong the busier the frame gets.reference- your own skin close-up.
Output is a single image, and it's an output node: you get the on-node before/after wipe on the classic canvas, so you can judge strength by dragging rather than queueing five variants. (In Nodes 2.0 you see the result of the last run instead.)
Where it goes in a chain
Late, and after anything that smooths. The pack's own post-processing order puts denoise and skin upscale first, then Skin Beauty, then sharpening - Skin Texture belongs after that smoothing stack, not before it. The natural pairing for heavy noise is: denoise, Skin Beauty, Skin Texture for structure, then LC Film Grain last. Grain and texture are different jobs - grain is noise, this is structure - and if you skip texture and only add grain, you get a plastic face with film grain on it, which is its own kind of uncanny.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/lonecatone23/ComfyUI_LC123_nodes.git
Or ComfyUI Manager, search ComfyUI LC123 Nodes. No pip step: no requirements.txt, just the torch and numpy ComfyUI already has. The bundled CC0 reference photo ships with the repo - if you install by copying only the .py files around, the node will stop with assets/skin_texture/skin_reference_cc0.jpg is missing, which is a helpful error but a confusing one if you don't know a data file was involved.
Where people get burned
Cranking strength past ~0.6 is the classic mistake, and it doesn't fail gracefully - you get sandpaper, then you assume the node is bad. Start at the default and move in 0.05 steps. Hover the wipe; you'll see it long before a saved PNG does.
The second is mask or reference mismatch. Colour-based skin detection grabs fabric and hands, and a reference photo at the wrong scale makes pores the wrong size for the framing - that's what pore_size is for, not just taste. And if you're feeding a reference with hard directional light, don't worry: only the relief is used, so the reference's lighting never transfers. Just make sure it's sharp. A soft reference produces soft texture, which is the one thing you were trying to avoid.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| strength | FLOAT | 0.450–1 | How much pore texture is added. 0 = none. |
| pore_size | FLOAT | 1.001–2 | 1 = fine pores. Higher = larger pores and creases (for close-ups). |
| softness | FLOAT | 0.500–1 | Higher = softer, gentler texture. Lower = crisper. |
| seed | INT | 00–4294967295 | Changes how the texture patches are arranged. |
| maskopt | MASK | Skin to texture (white). LC Person Mask with mediapipe, face + body and remove_features is ideal. Unwired: skin is found by colour. | |
| referenceopt | IMAGE | Your own sharp close-up of bare skin. Unwired: the bundled CC0 skin photo. | |
| protect_maskopt | MASK | Optional. Areas left alone, e.g. the faces and hands the detailers already redrew (LC VOSR2 Upscale (pipe) 'protected' output, or LC Smart Detailer's mask). Keeps skin detail from being added twice. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |