Grand opening25% off everything with FAM-261023-261025-UL4B9this weekendTick it in your cart Halloween Edition36 maps, limited runlimited runShop the drop

FREE TOOL · AddPedDecorationFromHashes

FiveM ped decorations and tattoo list

Every tattoo, crew badge and shirt decal GTA 5 ships — 3,373 overlays across 39 collections, with both hashes, the body zone, and which freemode ped each one was authored for. Search it, filter it by collection, and copy a finished AddPedDecorationFromHashes call. The pair is the data here: a collection without an overlay, or an overlay without its collection, applies nothing.

1,786 are tattoos and 1,587 are badges or decals; 1,712 are authored for the male freemode ped, 1,598 for the female and 63 for either. Names and hashes from the publicly published GTA V data dumps, with the native signatures read from the Cfx.re natives repository.

3,373 of 3,373 decorations

  • FM_CREW_M_000_A
    badge or decalmaletorso
  • FM_CREW_M_000_B
    badge or decalmaletorso
  • FM_CREW_M_000_C
    badge or decalmaletorso
  • FM_CREW_M_000_D
    badge or decalmaletorso
  • FM_CREW_M_000_E
    badge or decalmaletorso
  • FM_CREW_M_000_F
    badge or decalmaletorso
  • FM_CREW_F_000_A
    badge or decalfemaletorso
  • FM_CREW_F_000_B
    badge or decalfemaletorso
  • FM_CREW_F_000_C
    badge or decalfemaletorso
  • FM_CREW_F_000_D
    badge or decalfemaletorso
  • FM_Tat_Award_M_000
    tattoomalehead$20,000
  • FM_Tat_Award_M_001
    tattoomaleleft arm$1,400
  • FM_Tat_Award_M_002
    tattoomaleright arm$9,750
  • FM_Tat_Award_M_003
    tattoomaletorso$2,150
  • FM_Tat_Award_M_004
    tattoomaletorso$10,000
  • FM_Tat_Award_M_005
    tattoomaletorso$12,400
  • FM_Tat_Award_M_006
    tattoomaleright leg$3,500
  • FM_Tat_Award_M_007
    tattoomaleleft arm$4,950
  • FM_Tat_Award_M_008
    tattoomaletorso$1,350
  • FM_Tat_Award_M_009
    tattoomaleleft leg$1,450
  • FM_Tat_Award_M_010
    tattoomaleright arm$2,700
  • FM_Tat_Award_M_011
    tattoomaletorso$1,200
  • FM_Tat_Award_M_012
    tattoomaletorso$1,500
  • FM_Tat_Award_M_013
    tattoomaletorso$2,650
  • FM_Tat_Award_M_014
    tattoomaletorso$1,900
  • FM_Tat_Award_M_015
    tattoomaleleft arm$4,950
  • FM_Tat_Award_M_016
    tattoomaletorso$2,400
  • FM_Tat_Award_M_017
    tattoomaletorso$5,100
  • FM_Tat_Award_M_018
    tattoomaletorso$7,400
  • FM_Tat_Award_M_019
    tattoomaletorso$10,000
  • FM_Tat_M_000
    tattooeitherright arm$10,000
  • FM_Tat_M_001
    tattoomaleright arm$12,500
  • FM_Tat_M_002
    tattoomaleleft leg$3,750
  • FM_Tat_M_003
    tattoomaleright arm$10,000
  • FM_Tat_M_004
    tattoomaletorso$10,000
  • FM_Tat_M_005
    tattoomaleleft arm$2,400
  • FM_Tat_M_006
    tattoomaleleft arm$5,100
  • FM_Tat_M_007
    tattoomaleright leg$3,750
  • FM_Tat_M_008
    tattoomaleleft leg$4,800
  • FM_Tat_M_009
    tattoomaletorso$12,350
  • FM_Tat_M_010
    tattoomaletorso$2,500
  • FM_Tat_M_011
    tattoomaletorso$1,900
  • FM_Tat_M_012
    tattoomaletorso$10,000
  • FM_Tat_M_013
    tattoomaletorso$4,500
  • FM_Tat_M_014
    tattoomaleright arm$5,000
  • FM_Tat_M_015
    tattoomaleleft arm$3,600
  • FM_Tat_M_016
    tattoomaletorso$12,250
  • FM_Tat_M_017
    tattoomaleright leg$3,500
  • FM_Tat_M_018
    tattoomaleright arm$7,500
  • FM_Tat_M_019
    tattoomaletorso$12,300
  • FM_Tat_M_020
    tattoomaletorso$7,500
  • FM_Tat_M_021
    tattoomaleleft leg$5,000
  • FM_Tat_M_022
    tattoomaleright leg$7,300
  • FM_Tat_M_023
    tattoomaleleft leg$7,250
  • FM_Tat_M_024
    tattoomaletorso$11,900
  • FM_Tat_M_025
    tattoomaletorso$2,750
  • FM_Tat_M_026
    tattoomaleleft leg$1,750
  • FM_Tat_M_027
    tattoomaleright arm$7,300
  • FM_Tat_M_028
    tattoomaleright arm$3,250
  • FM_Tat_M_029
    tattoomaletorso$1,000
  • FM_Tat_M_030
    tattoomaletorso$5,000
  • FM_Tat_M_031
    tattoomaleleft arm$7,500
  • FM_Tat_M_032
    tattoomaleleft leg$5,100
  • FM_Tat_M_033
    tattoomaleleft leg$5,050
  • FM_Tat_M_034
    tattoomaletorso$2,450
  • FM_Tat_M_035
    tattoomaleleft leg$4,950
  • FM_Tat_M_036
    tattoomaletorso$5,100
  • FM_Tat_M_037
    tattoomaleleft leg$12,250
  • FM_Tat_M_038
    tattoomaleright arm$1,150
  • FM_Tat_M_039
    tattoomaleright leg$7,500
  • FM_Tat_M_040
    tattoomaleright leg$7,600
  • FM_Tat_M_041
    tattoomaleleft arm$2,600
  • FM_Tat_M_042
    tattoomaleright leg$2,500
  • FM_Tat_M_043
    tattoomaleright leg$7,450
  • FM_Tat_M_044
    tattoomaletorso$7,500
  • FM_Tat_M_045
    tattoomaletorso$10,000
  • FM_Tat_M_046
    tattoomaletorso$10,000
  • FM_Tat_M_047
    tattoomaleright arm$2,500
  • FM_Tat_Award_F_000
    tattoofemalehead$20,000
  • FM_Tat_Award_F_001
    tattoofemaleleft arm$1,400
  • FM_Tat_Award_F_002
    tattoofemaleright arm$9,750
  • FM_Tat_Award_F_003
    tattoofemaletorso$2,150
  • FM_Tat_Award_F_004
    tattoofemaletorso$10,000
  • FM_Tat_Award_F_005
    tattoofemaletorso$12,400
  • FM_Tat_Award_F_006
    tattoofemaleright leg$3,500
  • FM_Tat_Award_F_007
    tattoofemaleleft arm$4,950
  • FM_Tat_Award_F_008
    tattoofemaletorso$1,350
  • FM_Tat_Award_F_009
    tattoofemaleleft leg$1,450
  • FM_Tat_Award_F_010
    tattoofemaleright arm$2,700
  • FM_Tat_Award_F_011
    tattoofemaletorso$1,200
  • FM_Tat_Award_F_012
    tattoofemaletorso$1,500
  • FM_Tat_Award_F_013
    tattoofemaletorso$2,650
  • FM_Tat_Award_F_014
    tattoofemaletorso$1,900
  • FM_Tat_Award_F_015
    tattoofemaleleft arm$4,950
  • FM_Tat_Award_F_016
    tattoofemaletorso$2,400
  • FM_Tat_Award_F_017
    tattoofemaletorso$5,100
  • FM_Tat_Award_F_018
    tattoofemaletorso$7,400
  • FM_Tat_Award_F_019
    tattoofemaletorso$10,000
  • FM_Tat_F_001
    tattoofemaleright arm$12,500
  • FM_Tat_F_002
    tattoofemaleleft leg$3,750
  • FM_Tat_F_003
    tattoofemaleright arm$10,000
  • FM_Tat_F_004
    tattoofemaletorso$10,000
  • FM_Tat_F_005
    tattoofemaleleft arm$2,400
  • FM_Tat_F_006
    tattoofemaleleft arm$5,100
  • FM_Tat_F_007
    tattoofemaleright leg$3,750
  • FM_Tat_F_008
    tattoofemaleleft leg$4,800
  • FM_Tat_F_009
    tattoofemaletorso$12,350
  • FM_Tat_F_010
    tattoofemaletorso$2,500
  • FM_Tat_F_011
    tattoofemaletorso$1,900
  • FM_Tat_F_012
    tattoofemaletorso$10,000
  • FM_Tat_F_013
    tattoofemaletorso$4,500
  • FM_Tat_F_014
    tattoofemaleright arm$5,000
  • FM_Tat_F_015
    tattoofemaleleft arm$3,600
  • FM_Tat_F_016
    tattoofemaletorso$12,250
  • FM_Tat_F_017
    tattoofemaleright leg$3,500
  • FM_Tat_F_018
    tattoofemaleright arm$7,500
  • FM_Tat_F_019
    tattoofemaletorso$12,300
  • FM_Tat_F_020
    tattoofemaletorso$7,500
  • FM_Tat_F_021
    tattoofemaleleft leg$5,000
  • FM_Tat_F_022
    tattoofemaleright leg$7,300
  • FM_Tat_F_023
    tattoofemaleleft leg$7,250
  • FM_Tat_F_024
    tattoofemaletorso$11,900
  • FM_Tat_F_025
    tattoofemaletorso$2,750
  • FM_Tat_F_026
    tattoofemaleleft leg$1,750
  • FM_Tat_F_027
    tattoofemaleright arm$7,300
  • FM_Tat_F_028
    tattoofemaleright arm$3,250
  • FM_Tat_F_029
    tattoofemaletorso$1,000
  • FM_Tat_F_030
    tattoofemaletorso$5,000
  • FM_Tat_F_031
    tattoofemaleleft arm$7,500
  • FM_Tat_F_032
    tattoofemaleleft leg$5,100
  • FM_Tat_F_033
    tattoofemaleleft leg$5,050
  • FM_Tat_F_034
    tattoofemaletorso$2,450
  • FM_Tat_F_035
    tattoofemaleleft leg$4,950
  • FM_Tat_F_036
    tattoofemaletorso$5,100
  • FM_Tat_F_037
    tattoofemaleleft leg$12,250
  • FM_Tat_F_038
    tattoofemaleright arm$1,150
  • FM_Tat_F_039
    tattoofemaleright leg$7,500
  • FM_Tat_F_040
    tattoofemaleright leg$7,600
  • FM_Tat_F_041
    tattoofemaleleft arm$2,600
  • FM_Tat_F_042
    tattoofemaleright leg$2,500
  • FM_Tat_F_043
    tattoofemaleright leg$7,450
  • FM_Tat_F_044
    tattoofemaletorso$7,500
  • FM_Tat_F_045
    tattoofemaletorso$10,000
  • FM_Tat_F_046
    tattoofemaletorso$10,000
  • FM_Tat_F_047
    tattoofemaleright arm$2,500
  • FM_Tshirt_Award_000
    badge or decalmaletorso
  • FM_Tshirt_Award_001
    badge or decalmaletorso
  • FM_Tshirt_Award_002
    badge or decalmaletorso
  • FM_Tshirt_Award_F_000
    badge or decalfemaletorso
  • FM_Tshirt_Award_F_001
    badge or decalfemaletorso
  • FM_Tshirt_Award_F_002
    badge or decalfemaletorso
  • FM_F_Hair_003_a
    tattooeitherhead
  • FM_F_Hair_003_b
    tattooeitherhead
  • FM_F_Hair_003_c
    tattooeitherhead
  • FM_F_Hair_003_d
    tattooeitherhead
  • FM_F_Hair_003_e
    tattooeitherhead
  • FM_F_Hair_005_a
    tattoofemalehead
  • FM_F_Hair_005_b
    tattoofemalehead
  • FM_F_Hair_005_c
    tattoofemalehead
  • FM_F_Hair_005_d
    tattoofemalehead
  • FM_F_Hair_005_e
    tattoofemalehead
  • FM_F_Hair_006_a
    tattoofemalehead
  • FM_F_Hair_006_b
    tattoofemalehead
  • FM_F_Hair_006_c
    tattoofemalehead
  • FM_F_Hair_006_d
    tattoofemalehead
  • FM_F_Hair_006_e
    tattoofemalehead
  • FM_F_Hair_013_a
    tattoofemalehead
  • FM_F_Hair_013_b
    tattoofemalehead
  • FM_F_Hair_013_c
    tattoofemalehead
  • FM_F_Hair_013_d
    tattoofemalehead
  • FM_F_Hair_013_e
    tattoofemalehead
  • FM_F_Hair_014_a
    tattoofemalehead
  • FM_F_Hair_014_b
    tattoofemalehead
  • FM_F_Hair_014_c
    tattoofemalehead
  • FM_F_Hair_014_d
    tattoofemalehead
  • FM_F_Hair_014_e
    tattoofemalehead
  • FM_F_Hair_long_a
    tattoofemalehead
  • FM_F_Hair_long_b
    tattoofemalehead
  • FM_F_Hair_long_c
    tattoofemalehead
  • FM_F_Hair_long_d
    tattoofemalehead
  • FM_F_Hair_long_e
    tattoofemalehead
  • FM_M_Hair_001_a
    tattoomalehead
  • FM_M_Hair_001_b
    tattoomalehead
  • FM_M_Hair_001_c
    tattoomalehead
  • FM_M_Hair_001_d
    tattoomalehead
  • FM_M_Hair_001_e
    tattoomalehead
  • FM_M_Hair_003_a
    tattoomalehead
  • FM_M_Hair_003_b
    tattoomalehead
  • FM_M_Hair_003_c
    tattoomalehead
  • FM_M_Hair_003_d
    tattoomalehead
  • FM_M_Hair_003_e
    tattoomalehead
  • FM_M_Hair_006_a
    tattoomalehead
  • FM_M_Hair_006_b
    tattoomalehead
  • FM_M_Hair_006_c
    tattoomalehead
  • FM_M_Hair_006_d
    tattoomalehead
  • FM_M_Hair_006_e
    tattoomalehead
  • FM_M_Hair_008_a
    tattoomalehead
  • FM_M_Hair_008_b
    tattoomalehead
  • FM_M_Hair_008_c
    tattoomalehead
  • FM_M_Hair_008_d
    tattoomalehead

Showing 200. Pick a collection and a body zone and most searches land under fifty rows.

1 of the 39 collections are present in the dump with no overlays at all. They are shown as empty rather than dropped, because a missing collection reads as a gap in the list and an empty one reads as what it is: the game registering a collection it never filled.

THE COLLECTION AND THE OVERLAY

Two hashes, and neither one works alone

AddPedDecorationFromHashes takes a ped, a collection hash and an overlay hash. Understanding why it is two and not one is the difference between a tattoo system that works and an afternoon of silent failures.

The collection is the file

Every decoration the game ships lives in an overlay collection — one XML file per DLC, named things like mpbeach_overlays, mpbiker_overlays or singleplayer_overlays. The collection is a namespace, exactly the way a sound set is for audio. The same overlay name can only be found inside the collection it was filed under.

The overlay is the item

Inside each collection the individual items carry a nameHash entry — MP_Bea_F_Back_000, FM_Hair_Fuzz, mk_000 — plus a zone, a type, a gender and the garment it is allowed on. That name is the overlay. One collection plus one overlay identifies exactly one decoration, and neither half means anything on its own.

Both arguments are hashes

AddPedDecorationFromHashes takes two Hash values, not two strings. The collection hash is the joaat of the collection’s filename and the overlay hash is the joaat of the item’s name, which is why every working example calls GetHashKey on both. Pass the strings themselves and you have handed the native two pointers it will read as numbers.

Which is why case does not matter

GetHashKey lowercases its input before hashing, so GetHashKey("mpBeach_overlays") and GetHashKey("mpbeach_overlays") are the same number. We checked all 39 collection hashes and all 3,373 overlay hashes in the dump against our own joaat implementation and every one of them matches the hash of the lowercased name — so the numbers on this page and a GetHashKey call are interchangeable.

The same decoration, three ways

Client-side. The numbers and the GetHashKey calls are interchangeable — these two lines apply the identical decoration. Copy whichever suits your storage: numbers are faster, names are readable in a database.

local collection = "mpbeach_overlays"
local overlay = "MP_Bea_F_Back_000"

print(GetHashKey(collection))
print(GetHashKey(overlay))

AddPedDecorationFromHashes(PlayerPedId(), 2575696819, 2143620721)
AddPedDecorationFromHashes(PlayerPedId(), GetHashKey(collection), GetHashKey(overlay))

Signatures: ADD_PED_DECORATION_FROM_HASHES, CLEAR_PED_DECORATIONS, CLEAR_PED_DECORATIONS_LEAVE_SCARS, REQUEST_STREAMED_TEXTURE_DICT and HAS_STREAMED_TEXTURE_DICT_LOADED. The native’s own documentation spells out the collection argument as the “PedDecorationCollection filename hash” and the overlay argument as the “item name hash”, which is exactly what the two numbers on each row are.

HOW TO USE IT

Five steps, and the last one is where the bugs live

Finding the pair is the easy part. Keeping it on the ped through a model change is the part that separates a working tattoo system from one that loses everything on respawn.

  1. 01 Pick a collection first

    Filter the list to one collection and you are looking at one DLC’s worth of tattoos and decals. Search across everything only when you already know the overlay name.

  2. 02 Check the gender and the zone

    The row tells you which freemode model the overlay was authored for and which body zone it lands on. An overlay applied to the wrong model fails quietly.

  3. 03 Copy the call, not the name

    The copy button gives you a finished AddPedDecorationFromHashes line with GetHashKey on both halves. There is a numeric version too, if you would rather not hash at runtime.

  4. 04 Stream the texture before you apply

    RequestStreamedTextureDict on the collection name, then wait for HasStreamedTextureDictLoaded. Skipping this is why a decoration sometimes appears on the second attempt and not the first.

  5. 05 Re-apply after every model change and every spawn

    Keep your own list of applied pairs, clear the ped, and replay the list. That is the whole of a working tattoo system, and it is the part most of them get wrong.

A test command for any collection and overlay pair

Client-side. /tattoo mpbiker_overlays MP_MP_Biker_Tat_000_M applies one, /tattooclear wipes the ped. The wait loop before the apply is not optional: a decoration applied before its texture is resident draws as nothing.

local function applyDecoration(ped, collection, overlay)
    RequestStreamedTextureDict(collection, false)

    local tries = 0
    while not HasStreamedTextureDictLoaded(collection) and tries < 200 do
        Wait(5)
        tries = tries + 1
    end

    AddPedDecorationFromHashes(ped, GetHashKey(collection), GetHashKey(overlay))
end

RegisterCommand("tattoo", function(_, args)
    local collection = args[1] or "mpbeach_overlays"
    local overlay = args[2] or "MP_Bea_F_Back_000"

    applyDecoration(PlayerPedId(), collection, overlay)
end, false)

RegisterCommand("tattooclear", function()
    ClearPedDecorations(PlayerPedId())
end, false)

WHY THEY DISAPPEAR

The ped changed, so the decorations went with it

Decorations live on the ped instance, not on the player. Every system that swaps a model is therefore a system that throws your decorations away, and the engine does not warn you about any of it.

A model change destroys the ped that was wearing them

Decorations are stored on the ped instance, not on the player. SetPlayerModel or SetEntityModel does not re-skin the ped you had — it creates a new one and hands you that. The new ped is clean, and every decoration you applied went with the old one. This is the number one reason a tattoo system looks like it is losing data: the data was never lost, the ped was.

So does every respawn

The same thing happens on death and on a fresh spawn, and it happens before most frameworks fire their own ready event. Re-apply from your saved list on playerSpawned rather than trusting what is already on the ped, and keep the list in your own storage — there is no native that reads the applied decorations back out by name.

Freemode male and female are different models

mp_m_freemode_01 and mp_f_freemode_01 are separate peds with separate UV layouts, and the dump marks most overlays GENDER_MALE or GENDER_FEMALE for that reason. Applying a male overlay to the female model is not an error the native reports; you simply get nothing, or something stretched across the wrong part of the body.

A missing texture looks like a missing decoration

If the decoration’s texture is not resident the ped renders without it and nothing is logged. Request the texture dictionary and wait for it before you apply, which is what the snippet on this page does. The appearance resources everybody uses request the collection name as the dictionary, and that is the pattern we recommend — the per-item txdHash the game data carries is not in the public dump, so we cannot list it here.

Clearing takes the scars with it

ClearPedDecorations wipes everything on the ped, including damage decals and anything another resource applied. If you only want to drop the tattoos and keep facial scars, CLEAR_PED_DECORATIONS_LEAVE_SCARS is the one to call. And since there is no native to remove a single decoration, changing one tattoo means clearing the ped and re-applying the whole set.

Keep your own list and replay it

Client-side. This is the shape of every working tattoo system: your list is the truth, the ped is a render of it. /skin swaps the model and the decorations survive, because they are re-applied rather than preserved.

local applied = {}

local function remember(collection, overlay)
    applied[#applied + 1] = { collection = collection, overlay = overlay }
end

local function replayAll()
    local ped = PlayerPedId()

    ClearPedDecorations(ped)

    for _, deco in ipairs(applied) do
        RequestStreamedTextureDict(deco.collection, false)

        while not HasStreamedTextureDictLoaded(deco.collection) do
            Wait(5)
        end

        AddPedDecorationFromHashes(ped, GetHashKey(deco.collection), GetHashKey(deco.overlay))
    end
end

AddEventHandler("playerSpawned", function()
    replayAll()
end)

RegisterCommand("skin", function(_, args)
    local model = args[1] or "mp_m_freemode_01"

    RequestModel(model)

    while not HasModelLoaded(model) do
        Wait(10)
    end

    SetPlayerModel(PlayerId(), model)
    SetModelAsNoLongerNeeded(model)

    replayAll()
end, false)

There is no native in the published list that reads a ped’s applied decorations back out by name, and no native that removes one of them. That is not an omission on our part — it is the reason the pattern above is the pattern. Your storage is the record; CLEAR_PED_DECORATIONS plus a replay is the only edit operation you have.

ZONES, PEDS AND GARMENTS

Three fields that decide whether anything shows up

Every row carries them, and each one fails silently when it is wrong. The native returns void, so a mismatch looks exactly like a bad hash.

ZoneOverlaysWhat lands there
ZONE_TORSO2,297Chest, stomach, back and sides. The biggest zone by a wide margin, and where every shirt decal lands.
ZONE_HEAD348Face and neck, including the hairline overlays and the facial tattoos.
ZONE_LEFT_ARM229Left upper and lower arm. Sleeves are authored as one overlay per arm, not one per pair.
ZONE_RIGHT_ARM256Right arm, filed separately, so a matching pair means applying two overlays.
ZONE_LEFT_LEG134Left thigh and calf. Mostly hidden by anything other than shorts.
ZONE_RIGHT_LEG109Right leg, same as its counterpart.
Gender is a model, not a preference

mp_m_freemode_01 and mp_f_freemode_01 are different peds with different UV layouts, which is why 1,712 overlays are marked male and 1,598 female. Only 63 are marked as working on either. Apply an overlay to the model it was not drawn for and you get nothing, or something stretched across the wrong place.

Garment locks a decal to one torso

68 of the 3,373 overlays name a specific torso component instead of All — the single-player shirt decals. The decoration only draws while the ped is wearing that exact component, so a clothing change can make it disappear without anything clearing it. Those rows are tagged in the list.

The facing is the finer placement

Where the game data records one, the row shows it: front, back, left, right, chest or stomach. ZONE_TORSO covers a lot of ground, and the facing is how you tell a back piece from a chest piece without applying it to find out.

Price is the game’s, not ours

1,462 overlays carry a non-zero price in the game data — what the in-game tattoo parlour charges for them in GTA Online. It is shown because it is in the dump and because it is a decent proxy for how prominent a piece is. It has nothing to do with this site; everything here is free.

QUESTIONS

About ped decorations in FiveM

What is a ped decoration in FiveM?
Anything the game paints onto a ped’s skin or clothing without changing the model: tattoos, crew badges, shirt decals and the award logos. They are not clothing components and they are not props — you do not set them with SetPedComponentVariation. They are applied one at a time with AddPedDecorationFromHashes and removed all at once with ClearPedDecorations, and the game ships thousands of them split across one overlay collection per DLC.
What is the collection, and why do I need GetHashKey on it?
The collection is the overlay file the decoration lives in — mpbeach_overlays, mpbiker_overlays, singleplayer_overlays and so on — and it works as a namespace, so an overlay name is only findable inside its own collection. AddPedDecorationFromHashes is declared as taking two Hash arguments, not two strings, so both halves have to be hashed before they go in. GetHashKey is joaat, and joaat lowercases its input first, which is why the capitalisation you use does not matter. We verified every hash in this list against our own joaat implementation: all 39 collections and all 3,373 overlays hash to exactly the numbers the dump records, so you can paste the number from a row or call GetHashKey on the name and get the same result.
Why do my tattoos disappear when the ped changes clothes or models?
Because the decorations belong to the ped, and a model change does not modify your ped — it replaces it. SetPlayerModel spawns a new ped and gives you that, so everything you had applied stayed with the one the engine threw away. Death and respawn do the same. The fix is not a native, it is an architecture: keep your own list of collection-and-overlay pairs, and after any model change or spawn clear the ped and replay the whole list. Clothing component changes do not clear decorations, but anything that swaps the model does.
Why is my decoration applied but invisible?
Three usual causes. The texture was not resident when you applied it — call RequestStreamedTextureDict on the collection and wait for HasStreamedTextureDictLoaded before AddPedDecorationFromHashes. The overlay was authored for the other gender, so a GENDER_MALE overlay on mp_f_freemode_01 lands on nothing. Or the overlay is garment-locked: a handful of the single-player decals are restricted to one specific torso component, and if the ped is not wearing that component the decal has nowhere to draw. The row on this page shows the gender, the zone and the garment for exactly this reason.
How do I remove just one tattoo?
You cannot, and that is the honest answer — the published native list has no per-decoration remove. ClearPedDecorations wipes the ped completely, including damage decals and anything another resource applied, and CLEAR_PED_DECORATIONS_LEAVE_SCARS is the softer version that keeps facial scars. So removing one item means clearing the ped and re-applying everything you still want, which is another reason to keep your applied list in your own storage rather than reading it back off the ped.
Where does this list come from?
The publicly published GTA V data dumps, specifically pedOverlayCollections.json: 39 collections and 3,373 overlays with their names, hashes, type, zone, gender, garment restriction and in-game price, as the game data records them. The native signatures are from the Cfx.re natives repository. The hashes were independently re-derived with joaat and all 3,412 of them match. Nothing is invented: two of the 39 collections are present in the dump with no overlays at all, and they are shown that way rather than quietly dropped.

Names, hashes and attributes from the publicly published GTA V data dumps (pedOverlayCollections.json); native signatures from the Cfx.re natives repository. The decoration art itself is the property of Take-Two Interactive and Rockstar Games — see our trademark and IP notice.

FROM THE SHOP

What we build when it is not free

The free tools and the paid work come out of the same place. These are the lines closest to what this page is about.

Grand opening: 25% off every product with FAM-261023-261025-UL4B9, until 25 October. It is applied at checkout.

The Downtown Dusk graphics design, shown at Discord banner size
Graphics packs

Graphics packs for FiveM

One design, cut to every slot your server shows up in: the server list strip, the Discord header, the stream art, each composed for its own crop.

From $12.00124 designs · 20 formatsBrowse the designs
Orange EMBER FiveM-compatible minimap for GTA 5 — google style — showing Los Santos street detail
Minimaps

Minimaps for FiveM

Twelve colour palettes across three base map styles, each one a drop-in resource. Add your logo and your district labels in the editor.

From $8.0036 finished mapsBrowse the minimaps