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 mana vortex
This page will teach you how to add custom eyebrows to the character creator with ArchiveXL.
Wait, this is not what I want!
To learn more about the character creator, check Game Components explained -> Character Creator: .inkcc
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
You want to create a new project in Wolvenkit (call it whatever you want your mod to be called).
Extract the CCXL Eyebrow Template file: copy the
archiveandresourcesfolders to your projectsourcefolder.
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.
Rename the folder
your_nameto whatever your name isRename
your_eyebrows_mod_name_ccxlto 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.
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
gameUiSwitcherInfoThis 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:
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.names: You need a unique name, so changeyour_eyebrows_01to something unique to your mod (e.g.yourmoddername_yourmodname_eyebrows_01). This is what the character creator uses to pick the correct entry fromheadGroups(we'll get to that).
gameuiAppearanceInfo
gameuiAppearanceInfoBelow the switcherInfo, the template has two gameuiAppearanceInfo entries for two eyebrow appearances. For each of the appearances,
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)’.Make sure that the
resourcepath is the relative path to your.appfile for the corresponding gender and eyebrowsMake sure that the resource
flagsproperty is set toSoft
headGroups
Expand the
headGroupsentry and you will see threegameuiOptionsGroupentries:TPP,character_customizationandTPP_photomode.Each of these three entries need to have each of the names of your eyebrows from the
gameuiSwitcherInfoadded tooptions. So when adding additional eyebrows, you would addyour_eyebrows_03etc. to each of those three entries.

Duplicating entries
To add another gameuiAppearance entry which will reference the third and so fourth pair of eyebrows:
right click on the bottommost
gameuiAppearanceentry (here ‘your_eyebrows_02’)select ‘Duplicate in Array/Buffer’
Follow the previous steps regarding the name and resource path
Addanother entry under
gameuiSwitcherInfoand 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.
Open the
componentsentry, then theentMorphTargetSkinnedMeshComponent.Make sure that the
morphResource's depot path points at the correct .morphtarget fileFor
name, put the name of the.morphtargetfile itself.
Your appearance should look like this:
Scroll down and open
partsOverrides->appearanceAppearancePartOverrides->componentsOverrides->appearancePartOverridesMake sure the
componentNameis the same as the morphtarget componentname, chunkMask value is correct andpartResourceisnull

Next, scroll all the down to ‘resolvedDependencies’ and paste the same relative path from
morphResourceinto the entry here.
The .morphtarget file
The .morphtarget defines which .mesh file is being used.
Make sure that the
baseMeshpath points at the correct.meshfile 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:
Expand
localMaterialBufferExpand
materialsExpand the
CMaterialInstancewith the name of@contextMake sure that the
BrowsBaseMaterial's relative path corresponds to the matching.mifileNow go to the
@browsCMaterialInstance, and make sure that thebaseMaterialhas 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
Step 5 - Editing the .xl file
Rename your .xl file to match your mod's name
Open up the file in a text editor (like Notepad++) and make sure that the relative paths match the ones you have in WKit
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
.xlfile: This can happen when the paths are wrongCheck the
.inkcharcustomizationfile: 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