Add-on ped not loading in FiveM: invisible peds, missing textures and resets
Add-on peds fail in more ways than almost any other streamed asset. The model can be missing entirely, present but invisible, visible but untextured, animated wrongly, visible only to the player who spawned it, or perfectly fine until the player dies and the framework puts them back into a freemode body. Each failure has a specific cause, and most of them can be identified in a minute with the right check. This guide is the troubleshooting companion to adding custom peds: start with the symptom, find the cause, fix it once.
Short answer: Check the model first: IsModelInCdimage(hash) false means the game never received the files, which is a naming or resource-start problem. If the model exists but is invisible, the drawable files are not named with the pedname^ prefix or are missing. Wrong animations point to ClipDictionaryName or Pedtype in peds.meta, which must be loaded with data_file 'PED_METADATA_FILE'. Resets after respawn come from framework skin systems reloading a freemode model.

#First check: does the game know the model?
Before touching any file, ask the client whether the model exists. Paste this into a client script, restart it and run the command with the ped's name.
RegisterCommand('pedcheck', function(_, args)
local name = args[1]
if not name then return print('usage: /pedcheck <model>') end
local hash = GetHashKey(name)
print(('%s -> hash %d'):format(name, hash))
print('in cdimage:', IsModelInCdimage(hash))
print('valid:', IsModelValid(hash))
print('is ped:', IsModelAPed(hash))
RequestModel(hash)
local timeout = GetGameTimer() + 10000
while not HasModelLoaded(hash) and GetGameTimer() < timeout do Wait(50) end
print('loaded:', HasModelLoaded(hash))
SetModelAsNoLongerNeeded(hash)
end, false)| Result | Meaning | Look at |
|---|---|---|
| in cdimage false | The model file never reached the client | Resource start, .yft name, stream folder |
| in cdimage true, is ped false | The name belongs to a non-ped model | Model name collision or wrong file type |
| loaded false after 10 s | Model found but dependencies missing or broken | Drawables, textures, oversize warnings |
| all true, still invisible | Model loads but has nothing to draw | Drawable naming, component setup |
#What an add-on ped is made of
A ped is not one file. Understanding the parts makes the naming rules obvious.
| File | Purpose | Naming in stream/ |
|---|---|---|
mypedname.yft | Skeleton and fragment; defines the model name | Exactly the model name |
mypedname.ymt | Component metadata: which drawables and textures exist | Exactly the model name |
head_000_r.ydd, uppr_000_u.ydd… | Drawables (meshes) per component | mypedname^head_000_r.ydd |
head_diff_000_a_whi.ytd… | Textures per drawable | mypedname^head_diff_000_a_whi.ytd |
peds.meta | Behaviour: animations, type, capsule, personality | Declared in fxmanifest |
In the game's own archives, component files sit in a folder named after the ped. A FiveM stream folder has no such namespacing, so the folder is encoded into the filename with a caret: mypedname^uppr_000_u.ydd means "the file uppr_000_u.ydd belonging to mypedname". Without the prefix, the engine has no idea which ped a generic name like uppr_000_u.ydd belongs to, and the ped loads with nothing to draw. That is the single most common cause of invisible add-on peds.
Some peds are single-mesh models packed differently, with the textures in mypedname.ytd and no component files at all. Follow what the original download ships; do not rename files that are already prefixed, and never strip the caret when "tidying" file names.
#Manifest and peds.meta
fx_version 'cerulean'
game 'gta5'
files {
'peds.meta',
}
data_file 'PED_METADATA_FILE' 'peds.meta'<?xml version="1.0" encoding="UTF-8"?>
<CPedModelInfo__InitDataList>
<InitDatas>
<Item>
<Name>mypedname</Name>
<ClipDictionaryName>move_m@generic</ClipDictionaryName>
<ExpressionSetName>expr_set_ambient_male</ExpressionSetName>
<Pedtype>CIVMALE</Pedtype>
<MovementClipSet>move_m@business@c</MovementClipSet>
<StrafeClipSet>move_ped_strafing</StrafeClipSet>
<PedCapsuleName>STANDARD_MALE</PedCapsuleName>
<Personality>SERVICEMALES</Personality>
<IsStreamedGfx value="false" />
</Item>
</InitDatas>
</CPedModelInfo__InitDataList>A real entry has many more fields; keep the full entry that shipped with the model and only change what you understand. The rules that matter:
<Name>must equal the.yftfilename without extension.- One
<Item>per ped. Several peds can share onepeds.meta. - Only one resource should define a given
<Name>. Duplicates across resources produce whichever loaded last. - Animal peds need animal values for
Pedtype, clip sets and capsule; copying a human entry onto a dog gives a T-posing dog. - Leave
IsStreamedGfxat the value the model author shipped.
Replacing a vanilla ped (streaming files with an existing name such as a_m_y_business_01) needs no peds.meta at all, because the game already has metadata for that name. That is the fastest way to tell a metadata problem from a model problem: if the model works as a replacement but not as an add-on, the meta is at fault.
#Symptom by symptom
| Symptom | Most likely cause | Fix |
|---|---|---|
| Player becomes the default freemode or stays unchanged | Model not in cdimage; resource not started or .yft misnamed | Check ensure order and the .yft filename |
| Invisible player, shadow and weapon still visible | Drawables not prefixed with pedname^ or missing | Rename component files with the caret prefix |
| Grey or white untextured body | Texture .ytd names do not match the drawables | Match pedname^uppr_diff_000_a_uni.ytd to pedname^uppr_000_u.ydd |
| T-pose, sliding or wrong walk | Wrong ClipDictionaryName, MovementClipSet or Pedtype | Use the shipped meta; animals need animal clip sets |
| Only the spawning player sees the ped | Model switched with a local-only trainer on a non-OneSync setup, or others lack the files | Switch with SetPlayerModel on OneSync; confirm the resource streams to everyone |
| Game crashes when the ped loads | Broken or oversized drawable, wrong game build for its assets | Test the model alone; check oversize warnings |
| Works, then reverts after death or relog | Framework skin system loads freemode | Re-apply after the framework's skin events |
#Switching to the ped correctly
Half of the "ped not working" reports are the switch code, not the ped. SetPlayerModel replaces the player's ped entity, so the handle you had before the call is dead afterwards.
local function becomePed(name)
local hash = GetHashKey(name)
if not IsModelInCdimage(hash) or not IsModelAPed(hash) then
print(('model %s not available'):format(name))
return false
end
RequestModel(hash)
local timeout = GetGameTimer() + 10000
while not HasModelLoaded(hash) do
if GetGameTimer() > timeout then return false end
Wait(0)
end
SetPlayerModel(PlayerId(), hash)
local ped = PlayerPedId()
SetPedDefaultComponentVariation(ped)
SetModelAsNoLongerNeeded(hash)
return true
end- Always re-read
PlayerPedId()afterSetPlayerModel; code that keeps using a cached ped handle acts on an entity that no longer exists. SetPedDefaultComponentVariationgives the ped its default drawables. Skipping it can leave components unset, which looks like missing body parts.- Weapons and armour are cleared by a model change. Re-give them from your inventory if needed.
- Health resets to the new model's default. Save and restore it if the switch happens mid-play.
#Frameworks that switch you back
ESX, QBCore and most appearance resources store a freemode character and re-apply it on spawn, revive and relog. Any add-on ped set before those events is overwritten. There is no universal fix, but the pattern is the same everywhere: keep the player's chosen ped in your own storage (a database column, a resource KVP or a state bag) and re-apply it after the framework finishes loading the skin.
Also remember that clothing menus only work on the two freemode models, mp_m_freemode_01 and mp_f_freemode_01. An add-on ped with its own components can have its variations changed with SetPedComponentVariation, but it will not behave like a freemode character in shops or outfit systems, and saving its "skin" through a freemode-based appearance resource will corrupt the stored outfit. Keep add-on peds out of the regular skin save path.
#A clean test workflow
- Put the ped alone in a fresh resource with only its stream files and
peds.meta, andensureit last. - Join, run
/pedcheck <name>and confirm the model is in the cdimage and loads. - Switch to it with the function above, walk, sprint, crouch, aim and enter a vehicle. Animation problems show within a minute.
- Ask a second player to look at you. If they see a different model, the switch happened only locally.
- Die and respawn with your framework running. If the ped reverts, the framework hook is missing.
- Only then move the ped into your main ped pack resource.
Testing each ped alone first saves the most time on servers with large ped packs, because a single badly named file in a pack of forty peds otherwise looks like "the whole pack is broken".
#Cache, size and game build
- After renaming files, clear the client cache once so the old names are not served from cache. See clearing the FiveM cache.
- High-poly peds with 4K textures trigger oversize warnings and can fail to stream on busy servers. See the oversized assets warning.
- Peds that reference newer DLC animations or expressions need a matching enforced build. See game builds and DLC.
- Keep each ped pack in its own resource so a broken ped can be disabled without losing the rest.
For deep checks, open the files in CodeWalker: a drawable that will not open there will not render in game either, and the .ymt shows which drawable and texture numbers the ped expects, which makes missing files easy to spot. General streaming rules are covered in streaming assets.
Questions
Why is my FiveM add-on ped invisible?
pedname^ prefix, so the engine cannot attach them to the model. Rename them as pedname^uppr_000_u.ydd and so on.How do I check if a ped model is streamed?
IsModelInCdimage(GetHashKey('modelname')) on the client. False means the files never reached the game.Why does my ped T-pose?
peds.meta, mainly ClipDictionaryName, MovementClipSet and Pedtype, do not suit the skeleton. Use the entry that shipped with the model.Why does my ped reset after I die?
Do replacement peds need peds.meta?
Can I use clothing menus on add-on peds?
Ready to pick a map?
Twelve themes on three base map styles, $8 each, instant download.
Relevant to what you just read