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.

Recolour Without Replacing the Original

Duplicate the texture and material first, then make the colour adjustment in GIMP and compare the result in Unity.

  1. Find the skin material and its main colour texture in Unity.
  2. Copy the texture and save an editable GIMP .xcf file.
  3. Adjust the whole texture or select only the skin-coloured pixels.
  4. Export a new PNG and assign it to a duplicate material.
  5. Build and test the avatar under several lighting conditions.
Check the avatar licence

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.

  1. Select the avatar's body or head mesh in the Hierarchy.
  2. In its Skinned Mesh Renderer, expand Materials.
  3. Select the material that draws the skin.
  4. 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.
  5. 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.png and Body_Skin_Blue.mat
  • open the texture copy in GIMP
  • save the working image as an .xcf file 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.

  1. In GIMP, select the texture layer.
  2. Open Colors > Hue-Saturation.
  3. Leave Master selected to affect the full colour range.
  4. Adjust Hue until the colour is close to the target.
  5. Refine Saturation and Lightness while watching the highlights and shadows.
  6. 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.

  1. Activate Select by Color with Shift+O, or open Tools > Selection Tools > By Color Select.
  2. Click a representative skin-coloured area.
  3. Adjust Threshold until the selection includes the intended skin tones without capturing unrelated details.
  4. Add or remove selection areas where necessary.
  5. Open Colors > Hue-Saturation and adjust the selected pixels.
  6. 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

  1. Save the editable file as XCF.
  2. Open File > Export As or press Ctrl+Shift+E.
  3. Choose a new filename ending in .png.
  4. Export the image.
  5. 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.

  1. Select the new PNG in the Project window.
  2. In the texture import settings, keep Texture Type set to Default for an ordinary colour texture.
  3. Keep sRGB (Color Texture) enabled for a normal non-HDR colour texture such as an albedo or base-colour map.
  4. Review the alpha setting if the source uses transparency.
  5. Select Apply after changing import settings.
  6. Assign the PNG to the duplicate material's main colour texture slot.
  7. 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.

Texture memory still matters

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

Related Guides