> For the complete documentation index, see [llms.txt](https://visionstore.gitbook.io/visionstore-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://visionstore.gitbook.io/visionstore-docs/scripts/advanced-clothing/configuration/appearance-sections.md).

# Appearance sections and creator

The six appearance sections, the character creator, the tattoo catalog and add-on faces.

Everything on this page is in `config/sections.lua`.

## The six sections

| Section            | Tab              | What the player edits                                                                                                                                            |
| ------------------ | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `face_body`        | FACE & BODY      | Heritage (father / mother), resemblance and skin tone, eye colour, body type (creator only), and an ADVANCED group with separate skin parents and a third parent |
| `face_adjustments` | FACE ADJUSTMENTS | The 20 GTA face features in groups: NOSE, BROWS, CHEEKS, EYES, LIPS, JAW, CHIN, NECK                                                                             |
| `overlays`         | OVERLAYS         | The 12 head overlays: blemishes, facial hair, eyebrows, ageing, makeup, blush, complexion, sun damage, lipstick, moles & freckles, chest hair, body blemishes    |
| `hair`             | HAIR             | Hairstyle grid, hair colour, highlights, plus extra grooming tabs                                                                                                |
| `apparel`          | APPAREL          | The clothing menu (see [Clothing catalog](/visionstore-docs/scripts/advanced-clothing/configuration/clothing-catalog.md))                                        |
| `tattoos`          | TATTOOS          | Tattoos by body zone, with opacity and remove all                                                                                                                |

Which sections a place shows comes from its shop type (see [Shops and locations](/visionstore-docs/scripts/advanced-clothing/configuration/shops-and-locations.md#shop-types)). Reordering or removing a group, feature or overlay in `Config.Sections` changes what the interface offers; prices are not affected.

{% hint style="info" %}
Heritage, face features, overlays and hair only work on the **freemode** models (`mp_m_freemode_01` / `mp_f_freemode_01`).
{% endhint %}

### Hair tabs

```lua
hair = {
    label = "hair", icon = "hair", camera = "head",
    include = { "beard", "eyebrows", "makeUp", "blush", "lipstick" },
    tabs = { "styles", "color", "highlight" },
},
```

`include` lists overlays shown as extra tabs inside HAIR, so a barber sells them too (FACIAL HAIR, EYEBROWS, MAKEUP, BLUSH, LIPSTICK). Empty it to make your barbers sell hair only. An included overlay without its own price in the `barber` profile costs `prices.overlays` (25).

### Overlay colours

Each overlay in `overlays.list` can set `colors = "hair"` or `colors = "makeup"` (which in-game colour swatches it uses) and `secondColor = true`. `opacityStep = 0.1` is the step of the opacity slider.

## Tattoos

```lua
tattoos = {
    label = "tattoos", icon = "tattoo", camera = "torso",
    source = "illenium",                 -- "illenium" = read shared/tattoos.lua of illenium-appearance at runtime ; "custom" = Config.TattooCatalog
    defaultOpacity = 1.0,                -- 0.1 .. 1.0 (illenium stacks the decoration opacity*10 times)
    zones = {
        { id = "ZONE_HEAD",      label = "head",      camera = "head" },
        { id = "ZONE_TORSO",     label = "torso",     camera = "torso" },
        { id = "ZONE_LEFT_ARM",  label = "left_arm",  camera = "arm_left" },
        { id = "ZONE_RIGHT_ARM", label = "right_arm", camera = "arm_right" },
        { id = "ZONE_LEFT_LEG",  label = "left_leg",  camera = "leg_left" },
        { id = "ZONE_RIGHT_LEG", label = "right_leg", camera = "leg_right" },
    },
},
```

By default the catalog is read live from illenium's `shared/tattoos.lua`, so any tattoo you add to illenium shows up automatically. Set `source = "custom"` to use your own list instead:

```lua
Config.TattooCatalog = {
    ZONE_TORSO = {
        { name = "TAT_AR_000", label = "Turbulence", hashMale = "MP_Airraces_Tattoo_000_M",
          hashFemale = "MP_Airraces_Tattoo_000_F", zone = "ZONE_TORSO",
          collection = "mpairraces_overlays", price = 150 },
    },
}
```

A tattoo without a hash for the player's gender is hidden and refused by the server. The checkout price comes from the `tattoos` pricing profile (`overrides[name]`, then `price`) or the shop's `tattooPrice`, not from a `price` field in the catalog.

## Character creator

```lua
Config.CharacterCreator = {
    allowCancel = false,                 -- the player must finish creating the character
    allowModelChange = true,             -- FACE & BODY shows the model selector
    models = { "mp_m_freemode_01", "mp_f_freemode_01" },
    useIlleniumRoutingBucket = true,     -- isolate the player while creating (illenium's ChangeRoutingBucket / ResetRoutingBucket events)
    startSection = "face_body",
    initializeNewCharacter = true,
    defaultModels = { male = "mp_m_freemode_01", female = "mp_f_freemode_01" },
}
```

| Option                     | What it does                                                                                                                                                                              |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `allowCancel`              | `false` = ESC never closes the creator (FINISH CREATING YOUR CHARACTER FIRST). The player must press SAVE CHARACTER.                                                                      |
| `allowModelChange`         | Show the MALE / FEMALE selector in FACE & BODY. Hidden while the character has a ped from `/giveped`.                                                                                     |
| `models`                   | Models offered by that selector.                                                                                                                                                          |
| `useIlleniumRoutingBucket` | Put the player alone in a routing bucket while creating.                                                                                                                                  |
| `startSection`             | The section shown first.                                                                                                                                                                  |
| `initializeNewCharacter`   | A brand new character often spawns as a story ped, on which heritage and overlays do nothing. This switches it to `defaultModels` and resets it to GTA's defaults when the creator opens. |
| `defaultModels`            | Freemode models used by `initializeNewCharacter`.                                                                                                                                         |

The creator shows all six sections, charges nothing and shows the total as FREE.

{% hint style="success" %}
**Multicharacter scripts need no change.** With the guard lines from [illenium-appearance setup](/visionstore-docs/scripts/advanced-clothing/illenium-setup.md) in place, illenium hands character creation to Vision Clothing on QBCore, Qbox, ESX and ox\_core, and your multicharacter continues its spawn when the player saves. Without the guards, see [Integration examples](/visionstore-docs/scripts/advanced-clothing/developers/integration-examples.md).
{% endhint %}

## Parent names and portraits

`Config.ParentNames` holds the 46 GTA Online heritage parents (index 0 to 45) shown on the FATHER / MOTHER pickers. Portraits are optional: put `parent_0.webp` to `parent_45.webp` plus an `index.json` in `html/assets/faces` (see `html/assets/faces/README.md`). Without them a neutral icon is used.

## Add-on faces

```lua
Config.AddonFaces = { resource = "my_faces_pack", count = 52, label = "Face %s" }
```

Support for an add-on faces pack that adds extra heads after GTA's 46. The pickers offer the extra `count` faces **only while the resource named in `resource` is started**, so the default entry is harmless without such a pack. Set `resource` to your pack's resource name and `count` to the number of heads it adds, or set `Config.AddonFaces = false`. `label` names them (`%s` = head index). Skin tones stay the 46 GTA parents.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

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

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://visionstore.gitbook.io/visionstore-docs/scripts/advanced-clothing/configuration/appearance-sections.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
