A tattoo is not a mesh — it is a ped decoration overlay. The game holds a PedDecorationCollection that lists each tattoo with a UV position, a scale, a rotation and a body zone, and points at a texture in a streamed .ytd. Your appearance script then applies it with AddPedDecorationFromHashes.
Getting that collection right by hand is fiddly: the collection name has to end in _overlays, the texture dictionary name has to be derived from it, and the collection needs its own nameHash entry — miss that one and the tattoo shows up in the menu and then draws nothing.
Drop the resource into resources, add it to your server.cfg, then fully restart the server.
Then paste the matching config block into your appearance script's tattoo list and the entries show up in the character menu.
The game's tattoo scale is not one-to-one with screen pixels, so the exporter applies a calibration factor to the values it writes. What you see in the editor is what you get in-game. If a design still lands slightly off on a particular ped, nudge uvPos in the exported XML — every value is plain text.
Two usual causes: the PedDecorationCollection is missing its own collection-level nameHash entry, or the server was only restarted at resource level. PED_OVERLAY_FILE data_files are registered at server boot only.
The pack ships ready config files for illenium-appearance, qb-clothing, fivem-appearance, ESX, rcore, Menyoo and a standalone Lua table.
Yes. A tattoo marked for both emits separate GENDER_MALE and GENDER_FEMALE presets sharing one texture, which is the vanilla convention.
Tattoo exports are free, limited to 3 per day. Subscribers get unlimited exports.
Create a free account, join the Discord for your credits, and build your first asset in minutes.
Open the Tattoo Creator Create free account