pedsstreamingtroubleshooting8 min read · updated 9/19/2026

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.

FiveM Add-On Ped Not Loading: Invisible Ped Fixes

#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.

client.lua — /pedcheck
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)
ResultMeaningLook at
in cdimage falseThe model file never reached the clientResource start, .yft name, stream folder
in cdimage true, is ped falseThe name belongs to a non-ped modelModel name collision or wrong file type
loaded false after 10 sModel found but dependencies missing or brokenDrawables, textures, oversize warnings
all true, still invisibleModel loads but has nothing to drawDrawable 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.

FilePurposeNaming in stream/
mypedname.yftSkeleton and fragment; defines the model nameExactly the model name
mypedname.ymtComponent metadata: which drawables and textures existExactly the model name
head_000_r.ydd, uppr_000_u.yddDrawables (meshes) per componentmypedname^head_000_r.ydd
head_diff_000_a_whi.ytdTextures per drawablemypedname^head_diff_000_a_whi.ytd
peds.metaBehaviour: animations, type, capsule, personalityDeclared 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

fxmanifest.lua
fx_version 'cerulean'
game 'gta5'

files {
    'peds.meta',
}

data_file 'PED_METADATA_FILE' 'peds.meta'
peds.meta (one entry, trimmed)
<?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 .yft filename without extension.
  • One <Item> per ped. Several peds can share one peds.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 IsStreamedGfx at 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

SymptomMost likely causeFix
Player becomes the default freemode or stays unchangedModel not in cdimage; resource not started or .yft misnamedCheck ensure order and the .yft filename
Invisible player, shadow and weapon still visibleDrawables not prefixed with pedname^ or missingRename component files with the caret prefix
Grey or white untextured bodyTexture .ytd names do not match the drawablesMatch pedname^uppr_diff_000_a_uni.ytd to pedname^uppr_000_u.ydd
T-pose, sliding or wrong walkWrong ClipDictionaryName, MovementClipSet or PedtypeUse the shipped meta; animals need animal clip sets
Only the spawning player sees the pedModel switched with a local-only trainer on a non-OneSync setup, or others lack the filesSwitch with SetPlayerModel on OneSync; confirm the resource streams to everyone
Game crashes when the ped loadsBroken or oversized drawable, wrong game build for its assetsTest the model alone; check oversize warnings
Works, then reverts after death or relogFramework skin system loads freemodeRe-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.

client.lua
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() after SetPlayerModel; code that keeps using a cached ped handle acts on an entity that no longer exists.
  • SetPedDefaultComponentVariation gives 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

  1. Put the ped alone in a fresh resource with only its stream files and peds.meta, and ensure it last.
  2. Join, run /pedcheck <name> and confirm the model is in the cdimage and loads.
  3. Switch to it with the function above, walk, sprint, crouch, aim and enter a vehicle. Animation problems show within a minute.
  4. Ask a second player to look at you. If they see a different model, the switch happened only locally.
  5. Die and respawn with your framework running. If the ped reverts, the framework hook is missing.
  6. 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?
Usually the component drawables in the stream folder are missing the 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?
Run IsModelInCdimage(GetHashKey('modelname')) on the client. False means the files never reached the game.
Why does my ped T-pose?
The animation fields in 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?
Your framework re-applies the stored freemode skin on spawn. Re-apply the add-on ped after its skin-loaded or spawn events.
Do replacement peds need peds.meta?
No. Replacements reuse a vanilla name, and the game already has metadata for it.
Can I use clothing menus on add-on peds?
Not properly. Clothing and appearance menus are built for the freemode models only.

Ready to pick a map?

Twelve themes on three base map styles, $8 each, instant download.

Relevant to what you just read