Installation

Script Download

Before starting, you must log in to the CFX portal to download the asset. You will be able to download it as many times as you want on the official CFX page. Just as you download it the first time, you will also download it multiple times in the future to get updates.

1

Logging in to the CFX Portal

First, log in to the official CFX portal by clicking here.

2

Finding Your Assets

Once logged in, navigate to the Granted Assets section to access your purchased assets. You can download them by clicking the "Download" button.

Remember, if you encounter any issues or errors when starting the asset, you can check here to see if the problem is related.

Understanding CFX Auth

Downloading Dependencies

The dependencies for this asset are mandatory, so please follow the dependency guide completely and use all required files.

When downloading a dependency, ensure the file is properly unzipped and does not include "-main" at the end of its name. If it does, please remove it.


Remove Old clothing resources

1

Delete the following from your resources folders:

  • esx_skin

  • skinchanger

  • fivem-appearance

  • esx_barbershop

  • esx_clotheshop

  • illenium-appearance

  • rcore_clothing

2

Also delete any tattoo shop resources e.g., esx_tattooshop from your resources folder.


Compatibility With esx_skin and skinchanger

To avoid conflicts with older appearance systems like esx_skin or skinchanger, you need to make sure these are either removed or properly redirected to work with qs-appearance.

To ensure smooth operation, do one of the following:

1

Remove References

Search through all your fxmanifest.lua files across your resources and delete any lines that include esx_skin or skinchanger in the dependencies or requires sections.

2

Declare Provided Services

Open the file qs-appearance/fxmanifest.lua and add the following line at the end:

provides { "esx_skin", "skinchanger" }

This tells the server that qs-appearance will act as a replacement for those older systems, resolving dependency issues without having to modify every resource manually.


Update artifacts and gamebuild

Updating to the latest artifacts and gamebuild is essential to avoid common server issues. Here's how to do it properly:

1

Update Artifacts

Completely replace your current artifacts with the latest version. Download the appropriate artifacts for your operating system from the official links:

2

Update Gamebuild

Using the latest gamebuild is critical to take advantage of the newest features and avoid compatibility errors.

Edit the server.cfg file and add the following line:

sv_enforceGameBuild 3258

You can see the complete guide to update your server here:

How to update my server

Server.cfg Positioning

The script must start right after the framework (e.g., ensure [appearance]), and screenshot-basic must be started before them. If you receive error spam in the console, delete the cache folder to ensure screenshot-basic installs correctly.

Here we attach a small example of how the start order should look:

ensure es_extended
ensure ox_lib
ensure screenshot-basic
ensure [appearance]

Database Installation

For this step, we highly recommend using HeidiSQL to avoid issues, as it provides an updated version of MariaDB. We have a guide that explains step-by-step how to use HeidiSQL. If you choose to use phpMyAdmin, we will not be responsible for any errors that may occur in your database.

How to install HeidiSQL

Select the framework you are using and then execute the SQL in your HeidiSQL. If you encounter errors, ensure you are using the most current version of MariaDB. You can refer to our guide above or search online.

Database for qb and esx
DROP TABLE IF EXISTS `clothing_stores`;
DROP TABLE IF EXISTS `clothing_player_outfits`;
DROP TABLE IF EXISTS `clothing_job_outfits`;
DROP TABLE IF EXISTS `management_outfits`;
DROP TABLE IF EXISTS `player_outfits`;
DROP TABLE IF EXISTS `playerskins`;

CREATE TABLE IF NOT EXISTS `clothing_stores` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`creator` VARCHAR(80) NULL DEFAULT '0' COLLATE 'utf8mb3_general_ci',
	`name` VARCHAR(50) NULL DEFAULT '0' COLLATE 'utf8mb3_general_ci',
	`type` VARCHAR(50) NULL DEFAULT '0' COLLATE 'utf8mb3_general_ci',
	`zone` TEXT NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',
	`show_blip` TINYINT(1) NULL DEFAULT '0',
	`config` TEXT NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',
	PRIMARY KEY (`id`) USING BTREE
)
COLLATE='utf8mb3_general_ci'
ENGINE=InnoDB
;

CREATE TABLE IF NOT EXISTS `clothing_player_outfits` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`owner` VARCHAR(80) NOT NULL DEFAULT '0' COLLATE 'utf8mb3_general_ci',
	`label` VARCHAR(80) NOT NULL DEFAULT '0' COLLATE 'utf8mb3_general_ci',
	`model` VARCHAR(80) NOT NULL DEFAULT '0' COLLATE 'utf8mb3_general_ci',
	`components` TEXT NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',
	`props` TEXT NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',
	PRIMARY KEY (`id`) USING BTREE
)
COLLATE='utf8mb3_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1
;

CREATE TABLE IF NOT EXISTS `clothing_job_outfits` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`creator` VARCHAR(80) NOT NULL DEFAULT '0' COLLATE 'utf8mb3_general_ci',
	`label` VARCHAR(80) NOT NULL DEFAULT '' COLLATE 'utf8mb3_general_ci',
	`job` VARCHAR(50) NOT NULL DEFAULT '0' COLLATE 'utf8mb3_general_ci',
	`grades` TEXT NOT NULL COLLATE 'utf8mb3_general_ci',
	`model` VARCHAR(80) NOT NULL DEFAULT '' COLLATE 'utf8mb3_general_ci',
	`components` TEXT NOT NULL COLLATE 'utf8mb3_general_ci',
	`props` TEXT NOT NULL COLLATE 'utf8mb3_general_ci',
	PRIMARY KEY (`id`) USING BTREE
)
COLLATE='utf8mb3_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1
;

CREATE TABLE IF NOT EXISTS `player_outfits` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `citizenid` varchar(50) DEFAULT NULL,
  `outfitname` varchar(50) NOT NULL DEFAULT '0',
  `model` varchar(50) DEFAULT NULL,
  `props` varchar(1000) DEFAULT NULL,
  `components` varchar(1500) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `citizenid_outfitname_model` (`citizenid`,`outfitname`,`model`),
  KEY `citizenid` (`citizenid`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `playerskins` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `citizenid` varchar(255) NOT NULL,
  `model` varchar(255) NOT NULL,
  `skin` text NOT NULL,
  `active` tinyint(4) NOT NULL DEFAULT 1,
  PRIMARY KEY (`id`),
  KEY `citizenid` (`citizenid`),
  KEY `active` (`active`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

Support With Other Multichar Systems

This script fully overrides and handles all core events from illenium-appearance, making it automatically compatible with any multicharacter system that uses illenium-appearance as its configuration—such as qs-multicharacter, qb-multicharacter, or similar—without requiring manual integration. It detects and adapts seamlessly to these systems out of the box.

Additionally, you can easily retrieve a player’s appearance using a simple function like this:

function Appearance:GetAppearanceFromPed(ped)
    if not DoesEntityExist(ped) then
        Error('Ped does not exist', ped)
        return nil
    end
    local appearance = exports['qs-appearance']:getPedAppearance(ped)
    if not appearance then
        Error('Failed to get appearance from ped', ped)
        return nil
    end
    Debug('Got appearance from ped', appearance)
    return appearance
end

This makes it straightforward to extract and reuse a ped’s appearance in any part of your system.


Skin Migration Support

We understand that many servers previously used other clothing systems, so we’ve built official migration support for all open-code scripts where formats can be analyzed and converted reliably.

If you're using qb-clothing, esx_skin, or fivem-appearance, you can migrate all existing player skins using the guide below:

Skin Migration System

Last updated