Installing in FiveM
Exporting the resource
Click Download resource in the top right of the editor. The server rebuilds the resource from scratch every time so it always reflects the current state of all your overlays.
The downloaded <collection>.zip contains:
<collection>/
├── fxmanifest.lua
├── <collection>_overlays.xml # PedDecorationCollection
├── shop_tattoo.meta # tattoo shop entries for both genders
└── stream/
├── <collection>_tat_000.ytd
├── <collection>_tat_001.ytd
└── …
The generated fxmanifest.lua registers the data files automatically:
fx_version 'cerulean'
game 'gta5'
file '<collection>_overlays.xml'
data_file 'PED_OVERLAY_FILE' '<collection>_overlays.xml'
data_file 'TATTOO_SHOP_DLC_FILE' 'shop_tattoo.meta'
Installing on a FiveM server
- Unzip into your server's
resources/folder (e.g.resources/[tattoos]/<collection>/). - Add
ensure <collection>to yourserver.cfg. - If your server uses a custom tattoo script (most do), register the new tattoos with it - see Using the tattoos with a custom tattoo script below.
- Restart the server (or just the affected resources). Your tattoos should
now show up both in the stock GTA V tattoo shop (via the generated
shop_tattoo.meta) and inside your custom tattoo script's menu.
Naming convention
grzyTattooTool generates predictable names from your collection name. If
your collection is called mypack, the export produces:
| Asset | Name |
|---|---|
| Overlay XML | mypack_overlays.xml |
| Collection hash | mypack_overlays |
| Preset name hash | mypack_tat_000_m / mypack_tat_000_f |
| YTD file | mypack_tat_000.ytd |
The numeric index (000, 001, …) follows the overlay order inside the
collection. The trailing _m / _f indicates the ped gender. These are the
exact values you'll need if you reference the tattoos from another script.
Using the tattoos with a custom tattoo script
There is no single "default" tattoo script for FiveM - every server runs a different one (e.g. ESX/QBCore tattoo shops, character creators, etc.). If your server uses a custom script you'll need to register each tattoo with that script as well.
The steps are always roughly the same, regardless of which script you're using:
-
Open your tattoo script's folder on the server.
-
Find its config file - it's the file that lists every tattoo the script offers (often named
config.lua,tattoos.lua,shared.lua, or similar). Open it and look at how an existing tattoo entry is structured. -
Copy that existing entry for each new tattoo you want to add and fill in the values from the Naming convention table above:
- Wherever the script asks for a collection / dictionary / overlay
name, use
<collection>_overlays. - Wherever it asks for a name hash / preset / overlay hash, use
<collection>_tat_<NNN>_<m|f>- one entry per gender you want it available for. - The numeric index
<NNN>is the overlay's position in your collection (starts at000).
- Wherever the script asks for a collection / dictionary / overlay
name, use
-
Save the config, restart the tattoo script resource on your server, and the new tattoos should show up in its menu.
If you're not sure which field is which, look at one tattoo that already works in the script in-game and copy its format exactly - just swap the strings for your collection / name hash values.
Still stuck? Hop into the grzy.tools Discord and share which tattoo script you're using - chances are someone else has already integrated it.
Tips & best practices
- Use one collection per pack. Don't pile unrelated tattoos into the same collection - every export bundles the entire collection into one resource.
- Name collections like FiveM resources. Lowercase, no spaces; use
_or-. The collection name is reused for the resource folder, the<nameHash>, every YTD name and theshop_tattoo.metaentries. - Mirror instead of re-importing. If a tattoo should exist on both sides (e.g. left and right forearm), upload it once and use the mirror button - the position is flipped automatically.
- Re-export after every change. The
.zipyou uploaded to FiveM is a snapshot - download a fresh one after any meaningful changes.