CCXL: Eyebrows

This page will tell you how to use ArchiveXL to add eyebrows to the character creator.

Summary

Created: April 25 2025 by lumad11 Last documented update: April 25 2025 by manavortex

This page will teach you how to add custom eyebrows to the character creator with ArchiveXL.

Wait, this is not what I want!

You will need:

  • CCXL Eyebrows Template (download from Nexus)

  • The latest Wolvenkit (stable | Nightly)

  • You own edited eyebrow textures

Step 1 - Starting a new project

  1. You want to create a new project in Wolvenkit (call it whatever you want your mod to be called).

  2. Extract the CCXL Eyebrow Template file: copy the archive and resources folders to your project source folder.

Step 2 - File names and paths

Once you’ve placed the folders from the template into your project folders, your project in Wolvenkit should look like this:

Now we'll rename a few folders.

Use the Wolvenkit "Rename" dialogue for this, and make sure that the checkbox is checked

  1. Rename the folder your_name to whatever your name is

  2. Rename your_eyebrows_mod_name_ccxl to your actual mod name

You still need to adjust the paths for files you add, but we will do that together.

Step 3 - The files

The files are split up by body gender. Anything with pma in their name is for masc V, pwa for fem.

The .inkcharactercustomization file is the entry point for the character creator. You need only one per body gender

Each additional eyebrow slot needs the following files per body gender:

  • .app

  • .morphtarget

  • .mesh

... and a material file that can be shared between masc and fem:

  • .mi

Textures and materials (.mi files) can be shared between masc and fem V, but every .app, .morphtarget and .mesh file needs to have a pma and pwa version.

I also recommend that you number all the files except for the .inkcc files in relation to which eyebrow pair they belong to.

This section will explain what the files do, which you can use to add more entries. All paths should have been updated when you used Wolvenkit's internal rename, buit do check to make sure

To add more files to each folder, right click on the file, click ‘copy’ and paste into the specific folder, or hold the ctrl key and drag and drop the file to its parent folder.

The .inkcc

The .inkcharactercustomization defines what is shown in game and enables adding your own entries to the eyebrows switcher with custom names. Open the first .inkcc file you want to start with.

Under headCustomizationOptions you will see a few entries. Before we start duplicating anything, let's talk about what they do.

gameUiSwitcherInfo

This is where you will be adding slots to the eyebrows switcher. Open the entry and find options.

To add another entry, left click options and you will see a yellow button as shown in the image below:

For each of the appearances, change the following properties:

  1. localizedName: This will show in the character creator for the eyebrow slot. Call it e.g. ‘[your mod name] [slot number]’, so you can tell the slots apart from each other in the game.

  2. names: You need a unique name, so change your_eyebrows_01 to something unique to your mod (e.g. yourmoddername_yourmodname_eyebrows_01). This is what the character creator uses to pick the correct entry from headGroups (we'll get to that).

gameuiAppearanceInfo

Below the switcherInfo, the template has two gameuiAppearanceInfo entries for two eyebrow appearances. For each of the appearances,

  1. Open the first one called your_eyebrows_01, and change it to the same value you put into names in the previous step (e.g. yourmoddername_yourmodname_eyebrows_01 )’.

  2. Make sure that the resource path is the relative path to your .app file for the corresponding gender and eyebrows

  3. Make sure that the resource flags property is set to Soft

headGroups

  1. Expand the headGroups entry and you will see three gameuiOptionsGroup entries: TPP, character_customization and TPP_photomode.

  2. Each of these three entries need to have each of the names of your eyebrows from the gameuiSwitcherInfo added to options. So when adding additional eyebrows, you would addyour_eyebrows_03 etc. to each of those three entries.

Duplicating entries

To add another gameuiAppearance entry which will reference the third and so fourth pair of eyebrows:

  1. right click on the bottommost gameuiAppearance entry (here ‘your_eyebrows_02’)

  2. select ‘Duplicate in Array/Buffer’

  3. Follow the previous steps regarding the name and resource path

  4. Addanother entry under gameuiSwitcherInfo and link it to your new ‘gameuiAppearance’ like I explained.

If you started with the ‘pma’ .inkcc, repeat the process for the ‘pwa’ .inkcc. Next we move on to the .app files.

The .app file

The .app file connects the .inkcc appearances with the correct .morphtarget file, which in turn points at the .mesh with the actual appearances.

  1. Open the components entry, then the entMorphTargetSkinnedMeshComponent.

  2. Make sure that the morphResource 's depot path points at the correct .morphtarget file

  3. For name, put the name of the .morphtarget file itself.

Your appearance should look like this:

  1. Next, scroll all the down to ‘resolvedDependencies’ and paste the same relative path from ‘morphResource’ into the entry here.

The .morphtarget file

The .morphtarget defines which .mesh file is being used.

  1. Make sure that the baseMesh path points at the correct .mesh file for your current body gender.

Next I’ll explain what you need to do in the .mesh file.

The .mesh file

This file contains your eyebrow appearances. Thanks to ArchiveXL's magic, you only need to check the material path:

  1. Expand localMaterialBuffer

  2. Expand materials

  3. Expand the CMaterialInstance with the name of @context

  4. Make sure that the BrowsBaseMaterial's relative path corresponds to the matching .mi file

  5. Now go to the @brows CMaterialInstance, and make sure that the baseMaterial has the exact same path.

The .mi file

Open the .mi file you want to change the textures of.

There are only three entries you want to change the path to:

  • SecondaryDiffuseAlpha

  • DiffuseTexture

  • NormalTexture

Each entry’s path should match that of the imported textures. So for the secondary diffuse, it should match the _ds texture, diffuse the _d texture, and for the normals the _n texture.

Step 4 - Importing your eyebrow textures

You can read about importing textures with Wkit here: Textures: Importing, editing, exporting

The guide says that textures “must be a square, and its size must be a power of two”. This is NOT the case for eyebrow textures. The vanilla eyebrow textures are 512x256 but I personally use 2048x1024

Step 5 - Editing the .xl file

  1. Rename your .xl file to match your mod's name

  2. Open up the file in a text editor (like Notepad++) and make sure that the relative paths match the ones you have in WKit

  3. To add more eyebrows, simply duplicate the last line from each file type (.app, .morphtarget and .mesh), and make sure that the paths match. ( _wa_ is for femV, _ma_ for masc)

Step 6 - Test in-game

Once done, install the mod from Wkit and check in the CC if the eyebrows are showing up.

(This is what the textures in the template look like)

Troubleshooting

The eyebrows are invisible!

  • Double-check your .xl file: This can happen when the paths are wrong

  • Check the .inkcharcustomization file: Did you forget to add a slot for the eyebrow switcher?

  • Check the chain of the files above. Make sure none of them is missing a path.

Other problems

If you have any questions or don’t know why your eyebrows aren’t showing up, you can ask for help in the modding discord server.

Happy modding!

Last updated

Was this helpful?