# CCXL: Creating a Switcher

## Summary

**Published:** ???\
**Last documented edit:** September 3rd 2025 by [icxrus](mailto:undefined)

This page is a guide to create additional switchers in the Character Creator with ArchiveXL.

### Wait, this is not what I want!

To understand theory about switchers, check [CCXL Theory: Switchers](/cyberpunk-2077-modding/for-mod-creators-theory/core-mods-explained/archivexl/archivexl-character-creator-additions/ccxl-theory-switchers.md) .

### Why would I want to do that?

Creating new switchers allows us to add new options to the character creator without occupying existing switchers.

**Examples include:**

* Create switchable tattoo additions that can be toggled *alongside* the game's vanilla *facial tattoos* and *body tattoos (Beginner)*
* Control left and right *eye color* independently using overlay meshes *(Intermediate)*
* Give V switchable hairstyles for feet *(Expert)*

## Requirements

* A WolvenKit project
* A .xl file referencing at least one .inkcharcustomization file
* All necessary meshes, materials, textures, and .app files for your addition
* A .json file for your translation entries, if applicable

## Putting it all together

Knowing how a switcher works is important when it comes to creating new switchers with CCXL. Now that we are familiar with the inner workings of a switcher, we can get started.

Be sure you have a WolvenKit project with a file structure following this format:

<figure><img src="/files/wexHDSgCYNZlqVG5OHJd" alt=""><figcaption></figcaption></figure>

### Create a .xl file

In order to build a switcher, we need a *.xl* file so ArchiveXL knows where to find it.

You can create one in WolvenKit. See these steps to do so:

<figure><img src="/files/Ev4MITgfZj3LdGW5D3KM" alt=""><figcaption><p>Click File > New File</p></figcaption></figure>

<figure><img src="/files/HYzWCvlu1JB0qdgkHLlW" alt="" width="563"><figcaption><p>In the ArchiveXL category, select 'ArchiveXL file', give it a name, and create</p></figcaption></figure>

This will create an empty .xl file that ArchiveXL uses to locate our custom switcher. It can be modified in a text editor like Notepad++. We'll do that once we add our other files but for now, be sure to stick the .xl in the *resources* folder of your project:

<figure><img src="/files/QvdTx9dw7QNYToWPYsib" alt=""><figcaption></figcaption></figure>

### Create the .inkcharcustomization files

Follow the same steps as last time for the .inkcharcustomization file, but—

* Create one for each gender if applicable (add *\_pwa* and *\_pma* respectively when naming)
* Put them in the mod folder of your project

<figure><img src="/files/4UJrTJyYn2EdpV1o4iAg" alt=""><figcaption><p>Find gameuiCharacterCustomizationInfoResource, give it a name and click 'create'</p></figcaption></figure>

Your project structure should look something like this:

<figure><img src="/files/9ywQL7EQy2t7u9V4goBP" alt=""><figcaption></figcaption></figure>

Now that we have the base files for a switcher, let's go ahead and edit our .xl file.

### Modifying the .xl

Open the .xl file in your preferred text editor, and you should have a blank document. Add the following:

```
customizations:
  male: your_modder_name\ccxl\your_mod_name\your_mod_pma.inkcharcustomization
  female: your_modder_name\ccxl\your_mod_name\your_mod_pwa.inkcharcustomization
```

Ensure these paths match the relative paths to your .inkcharcustomization files, and save.

> If you want to use translation entries, be sure to add these in the .xl also. [*See the wiki about it*](https://wiki.redmodding.org/cyberpunk-2077-modding/for-mod-creators-theory/core-mods-explained/archivexl/archivexl-character-creator-additions/pages/ogzonZ0xI3ppkRsdTaEO#the-.xl-file) *for more info.*

### Modifying the .inkcharcustomization files

Now we can start building our switcher. The easiest way to do this is to start with one .inkcharcustomization file, then copy everything over once we know it works.

Open a .inkcharcustomization file to get started:

<figure><img src="/files/DjgEmDOHFPKFPiK54eod" alt=""><figcaption></figcaption></figure>

First we must determine which group our switcher belongs to. A good way to figure this out is knowing where the camera should focus in the character creator when using our switcher (arms, head, or body).

### Create a cyclic switcher

Click on *headCustomizationOptions* (or whichever category you want to use) and then "Add New Element":

<figure><img src="/files/7ivLIXQSEGusqlS8kUMh" alt=""><figcaption></figcaption></figure>

Then, click "gameuiSwitcherInfo" and Create:

<figure><img src="/files/lMymdfCgOpBhFj3UfK7k" alt=""><figcaption></figcaption></figure>

You should now have an empty switcher:

<figure><img src="/files/FUQWl3zhoKdoPF035FSB" alt=""><figcaption></figcaption></figure>

#### Minimum Attributes:

At minimum, we should change the following attributes to have a working switcher:

* editTags (we have to be able to use this switcher somewhere!)
* localizedName (not required, but helps to identify our switcher in-game)
* name (will be used to identify our switcher in *headGroups* later on)
* options (must have at least 2 options; 'OFF' can be one)
* uiSlot (must occupy a slot)
* uiSlots (give our options slots to occupy)

You should reference [the table](#switcher-attributes) above to learn more about each attribute.

With the minimum requirements met, your switcher should look something like this:

<figure><img src="/files/2k4OX2NqsYXX6hNTMLDB" alt=""><figcaption></figcaption></figure>

Now, let's define our switcher *options:*

<figure><img src="/files/GHSpHFMk8hb3XBOZlTia" alt=""><figcaption></figcaption></figure>

For our options, they should be indexed to determine their order in the switcher. The *names* will reference those of our gameuiAppearanceInfo's, while the *localizedName*s will display as our option names in-game.

Now we need a gameuiAppearanceInfo for each option in our switcher. Follow the same steps you used to create your gameuiSwitcherInfo, but select "gameuiAppearanceInfo" and create, then duplicate it:

<figure><img src="/files/pRDord9Gdr9DAFIrqsRy" alt=""><figcaption></figcaption></figure>

Based on the *options* in our gameuiSwitcherInfo, our first gameuiAppearanceInfo should look like this:

<figure><img src="/files/dZbVL2xvlTSDfw0yO7y2" alt=""><figcaption></figcaption></figure>

Our second should look like this:

<figure><img src="/files/BkWKE2gPspKm32xJd6o8" alt=""><figcaption></figcaption></figure>

The only thing changing right now is our *name*, to match the ones referenced in our gameuiSwitcherInfo *options*.

We can add our *resource* (path to a .app file) and *definitions* (appearance definitions in said .app file) now, or come back to it later.

Right now, we still need to add our switcher and appearances to our *groups*.

### Groups

For most appearance additions, the following groups will suffice:

#### headGroups

If your switcher is in *headCustomizationOptions,* you'll want to use these four *headGroups:*

* FPP
* TPP
* TPP\_photomode
* character\_customization

Adding your switcher and appearances to *headGroups* should look like this:

<figure><img src="/files/FEh6eAl8tGIfuekauSiy" alt=""><figcaption></figcaption></figure>

Once this is done, you can save your .inkcharcustomization file (Ctrl + S) and install this mod to test your switcher. If done correctly, you should have a new switcher at the top of the character creator, with two options:

<div><figure><img src="/files/bxSNSnNrXi98LBW1zOLU" alt=""><figcaption></figcaption></figure> <figure><img src="/files/WyZTv7k2v79Ffp7cbZV9" alt=""><figcaption></figcaption></figure></div>

Of course, if you didn't add any path to *resource* or include any *definitions* in your gameuiAppearanceInfo, then this switcher won't do much.

### Attaching an appearance

I've borrowed some files to use in this demonstration, in order to give our switcher a purpose:

<figure><img src="/files/WKMKuACb6SVaZuTbNWvF" alt=""><figcaption></figcaption></figure>

For a detailed explanation on how these will work together, see [CCXL: Body Tattoos](/cyberpunk-2077-modding/for-mod-creators-theory/core-mods-explained/archivexl/archivexl-character-creator-additions/ccxl-body-tattoos.md).

Going back to our gameuiAppearanceInfo, let's add our .app file to the *resource* path:

<figure><img src="/files/V4WLvq1SRGiw7NsVpd7u" alt=""><figcaption></figcaption></figure>

We'll need to add an appearance definition to the *definitions* slot, but we need to know what they are. Those will be found in our .app file:

<figure><img src="/files/b1ggJCy384SuCOYxz3Mg" alt=""><figcaption></figcaption></figure>

You'll want to add the one for whichever gender you are working on to the *definitions* of your gameuiAppearanceInfo:

<figure><img src="/files/Th9BkAJ0ilP0yGCllud0" alt=""><figcaption></figcaption></figure>

Once this is done, we can save with Ctrl + S, install our mod again, and launch. If your resource and definitions were done correctly, you should now have a fully-functional switcher:

<figure><img src="/files/H3ZXVmkF2fU3eBF1dbr4" alt=""><figcaption></figcaption></figure>

Referencing the [table ](#switcher-attributes)above, now is a good time to make any additional customizations to your switcher (*index*, *localizedName*, add additional *options*, etc.)

Once that's done, you can copy everything over to the other .inkcharcustomization file. Be sure to change the *definitions* of the gameuiAppearanceInfo to correspond with the correct gender when doing so.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.redmodding.org/cyberpunk-2077-modding/for-mod-creators-theory/core-mods-explained/archivexl/archivexl-character-creator-additions/ccxl-creating-a-switcher.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
