Recolor a VRChat Avatar Skin Texture in GIMP
Change an avatar's skin colour without painting over its shadows and details. The safest workflow is to identify the colour texture used by the skin material, edit a copy in GIMP, export it under a new filename, and assign that copy to a duplicated Unity material.
Duplicate the texture and material first, then make the colour adjustment in GIMP and compare the result in Unity.
- Find the skin material and its main colour texture in Unity.
- Copy the texture and save an editable GIMP
.xcffile. - Adjust the whole texture or select only the skin-coloured pixels.
- Export a new PNG and assign it to a duplicate material.
- Build and test the avatar under several lighting conditions.
Only edit and upload textures when the avatar licence or creator gives you permission. Keep any required credit, attribution, and redistribution restrictions with the edited avatar.
Identify the Skin Texture in Unity
An avatar mesh is rendered with one or more materials. Each material uses a shader and can reference several textures, so confirm the colour texture before opening anything in GIMP.
- Select the avatar's body or head mesh in the Hierarchy.
- In its Skinned Mesh Renderer, expand Materials.
- Select the material that draws the skin.
- Find the shader's main colour texture slot. Depending on the shader, it may be labelled Base Map, Main Texture, Albedo, or something documented by the shader creator.
- Select the texture asset from that slot and locate it in the Project window.
Do not recolour a normal map, mask, metallic map, or other data texture. Those files control surface information rather than the visible base colour. If the shader uses unfamiliar texture slots, consult its documentation before editing.
Protect the Original Assets
Create separate files before making changes:
- duplicate the skin texture in the Unity project
- duplicate the skin material if other avatar parts share it
- give both copies descriptive names, such as
Body_Skin_Blue.pngandBody_Skin_Blue.mat - open the texture copy in GIMP
- save the working image as an
.xcffile so GIMP can preserve its layers and editable state
GIMP uses Save for its native XCF project format. Use Export As when producing the PNG that Unity will import.
Method 1: Shift the Whole Texture
Use this method when the texture contains skin and you want all of its existing skin tones to move together.
- In GIMP, select the texture layer.
- Open Colors > Hue-Saturation.
- Leave Master selected to affect the full colour range.
- Adjust Hue until the colour is close to the target.
- Refine Saturation and Lightness while watching the highlights and shadows.
- Confirm the filter when the shading and painted details still read clearly.
GIMP's Hue-Saturation filter adjusts hue, saturation, and lightness on the active layer or selection. It does not operate on an image in Grayscale mode.
Method 2: Recolour Only the Skin Pixels
Use a selection when the same texture also contains eyes, clothing, nails, tattoos, or other areas that should keep their original colour.
- Activate Select by Color with Shift+O, or open Tools > Selection Tools > By Color Select.
- Click a representative skin-coloured area.
- Adjust Threshold until the selection includes the intended skin tones without capturing unrelated details.
- Add or remove selection areas where necessary.
- Open Colors > Hue-Saturation and adjust the selected pixels.
- Use Select > None when the adjustment is complete.
Select by Color finds similar pixels throughout the image, even when they are not connected. Inspect the whole texture before applying the change because a similar colour may also appear in the mouth, eyes, clothing, or accessories.
Hue-Saturation or Colorize?
| GIMP filter | Best use | Important behaviour |
|---|---|---|
| Hue-Saturation | Moving existing colours while retaining their variation | Can target the master range or individual colour ranges. |
| Colorize | Applying one consistent tint | Treats the active layer or selection like a grayscale image viewed through coloured glass. |
For most skin edits, begin with Hue-Saturation. Colorize can be useful for a strong stylised tint, but compare the result carefully because it can reduce the colour variation painted into the original texture.
Preserve Texture Details
Check these areas at 100% zoom before exporting:
- face and body shading
- blush, freckles, tattoos, makeup, and body markings
- lips, mouth interior, nostrils, and eyelids
- seams where the head, neck, hands, or feet meet
- transparent or partially transparent pixels
- borders around separate UV islands
If a selection produces a hard colour boundary, undo it and refine the selection rather than painting over the edge. Keep the original texture open for side-by-side comparison.
Export the Recoloured PNG
- Save the editable file as XCF.
- Open File > Export As or press Ctrl+Shift+E.
- Choose a new filename ending in
.png. - Export the image.
- In the PNG options, preserve the alpha channel when the source texture uses transparency.
PNG compression is lossless. The compression level changes export time and file size, not the decoded image quality.
Import and Assign the Texture in Unity
Place the exported PNG inside the project's Assets folder. Unity imports image files there as texture assets.
- Select the new PNG in the Project window.
- In the texture import settings, keep Texture Type set to Default for an ordinary colour texture.
- Keep sRGB (Color Texture) enabled for a normal non-HDR colour texture such as an albedo or base-colour map.
- Review the alpha setting if the source uses transparency.
- Select Apply after changing import settings.
- Assign the PNG to the duplicate material's main colour texture slot.
- Assign the duplicate material to the intended renderer material slot.
Using a duplicate material prevents another mesh that shares the original material from changing at the same time.
A recolour does not need an additional material slot when it replaces the texture on an existing material. Review the avatar's texture memory and material slots in the VRChat SDK before publishing, especially when you keep several colour variants on one avatar.
Test the Avatar
Inspect the avatar in Unity first, then use the VRChat SDK's local avatar test build.
Check the recolour:
- in bright, neutral, and dim world lighting
- across the face, neck, torso, hands, and feet
- with the avatar's facial expressions and blinking
- with shader fallback preview if the avatar uses a custom PC shader
- on each platform build that uses the texture
The Unity scene view alone cannot show every lighting or shader condition encountered in VRChat. Keep the original material available so you can compare or revert quickly.
Troubleshooting
The colour adjustment also changed the eyes, clothes, or tattoos.
Undo the filter and select only the skin pixels before applying Hue-Saturation. Lower the Select by Color threshold, then inspect every UV island for similarly coloured details that were included accidentally.
The skin has a visible seam at the neck or wrists.
Compare the connected texture edges and confirm that the head and body materials use matching recolours. A selection that misses border pixels can leave a thin strip of the original colour along a UV seam.
The new PNG is not appearing on the avatar.
Confirm the exported file is inside the Unity project's Assets folder and assigned to the material used by the visible renderer slot. If the shader has several colour layers, verify that you changed its main colour texture rather than an unused slot.
The entire avatar changed when I edited one material.
Several renderers may share that material asset. Duplicate the material, assign the recoloured texture to the copy, and place the copy only in the renderer slots that should use the new skin.
The texture looks washed out or much darker in Unity.
Check that the file is imported as a Default colour texture with sRGB enabled, then inspect the material's tint, lighting, and shader settings. Do not copy import settings from a normal map or mask texture.
Transparent areas became opaque or gained a border.
Confirm that the GIMP image and exported PNG retain an alpha channel. Compare the Unity texture alpha settings and the material's rendering mode with the original working texture and material.
The avatar looks different when shaders are blocked.
VRChat can replace blocked shaders with a fallback. Preview fallback shaders from the VRChat Action Menu and check the shader author's fallback guidance so the base colour texture remains readable.
Recolour Checklist
- Editing is permitted by the avatar's licence.
- The selected file is the main colour texture, not a normal or mask map.
- The original texture and material remain unchanged.
- The editable work is saved as XCF.
- Skin details and UV seams remain intact.
- The exported PNG has the required alpha channel.
- Unity imports it as a colour texture with the intended settings.
- Only the intended renderer slots use the duplicate material.
- Texture memory and material slots are checked in the SDK.
- The avatar has been tested in VRChat lighting and shader conditions.
Official References
- GIMP 3: Hue-Saturation
- GIMP 3: Select by Color
- GIMP 3: Exporting Files
- GIMP 3: Export Image as PNG
- Unity Manual: Importing Textures
- Unity Manual: Texture Import Settings
- VRChat Creation: Avatar Optimization Tips
- VRChat Creation: Shader Blocking and Fallback System