Skin Packs

Many people wrongly assume that skin packs are only available for creation to Marketplace Partners. No! It's a very easy process, which can easily be fully automated by python. But that's not it. Let's learn how to make a skin pack!

WARNING

The development_skin_packs doesn't seem to function correctly. You need to use skin_packs folder and reload Minecraft every time you made a change.

What is needed

Here is what is needed:

📁com.mojang
📁skin_packs
📁my_skin_pack
📁texts
🈵en_US.lang
🖼️my_skin.png
📝manifest.json
📝skins.json

manifest.json

skin_packs/tutorial_skin_pack/manifest.jsonCopy
json
{
    "format_version": 2,
    "header": {
        "name": "Tutorial Skin Pack",
        "uuid": "bb9616eb-327c-4a81-9f00-064cae820cd5",
        "version": [
            1,
            0,
            0
        ]
    },
    "modules": [
        {
            "type": "skin_pack",
            "uuid": "e4bc71b6-8f9b-4094-9d47-dc3824f8a3dc",
            "version": [
                1,
                0,
                0
            ]
        }
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  • format_version can be 1 too, as v2 doesn't change much for skin packs.
  • name is self explanatory. However, it isn't of great importance.
  • uuid and version are already familiar to us. Both UUIDs in the manifest need to be different. You can generate them via a generator linked in useful links. As a reminder, you CANNOT use the same UUID TWICE.
  • type in modules needs to be set to skin_pack, of course.

skins.json

This file is used to define textures and shortnames for skins. Most of the options are, however, hard-coded or unchangeable.

skin_packs/tutorial_skin_pack/skins.jsonCopy
json
{
    "geometry": "geometry.json",
    "serialize_name": "Tutorial Skin Pack",
    "localization_name": "tutorial",
    "skins": [
        {
            "localization_name": "tutorial_skin_1",
            "geometry": "geometry.humanoid.custom",
            "texture": "goggled_gecko_no_goggles.png",
            "type": "free"
        },
        {
            "localization_name": "tutorial_skin_2",
            "geometry": "geometry.humanoid.customSlim",
            "texture": "goggled_gecko.png",
            "type": "free"
        }
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  • The geometry object must be the same as on the example code in every object. Mojang removed the ability to add custom geometries via skin packs, because the feature was abused.
  • serialize_name is for marketplace.
  • localization_name is a pack identifier. Don't use in other skin packs as it affects translations.
  • skins array, where you define your each skin. The skins will be displayed in the same order in minecraft as they are defined here.
    • localization_name is going to be used in the .lang file. Think of it as the skins identifier.
    • geometry you can use geometry.humanoid.custom and geometry.humanoid.customSlim here.
    • texture is the name of the image file, located in the main skin pack folder.
    • type is only accessible to marketplace partners, leave it as free, otherwise it will be locked.

texts/en_US.lang

Finally, we'll define the names of the skin pack and every skin in the .lang file. Of course "en_US" can be replaced with any language.

skin_packs/tutorial_skin_pack/texts/en_US.langCopy
skinpack.tutorial=Tutorial Skin Pack

skin.tutorial.tutorial_skin_1=Skin 1
skin.tutorial.tutorial_skin_2=Skin 2
1
2
3
4

The first line defines the pack's name itself. It's done in this format:

skinpack.[pack localization_name]=Actual Pack Name

The other lines define the skins' names:

skin.[pack localization_name].[skin localization_name]=Actual Skin Name

Done! Now, when you open Character Creator, you'll see your skins available to be chosen!

Troubleshooting

If you play on MC version lower than 1.18.30, you might experience a bug when "Equip" button is not showing. You need to download a special texture pack.

Download Equip Button Fix

Contributors