Visual modding: maps, vehicles, clothing and textures
All the visual modding of a server: the tools (OpenIV, CodeWalker, Blender + Sollumz), the GTA formats, and how to add and edit maps/MLO, vehicles, clothing and textures that are streamed to the client, with performance, legality and security.
Up to now you have worked with scripts: logic in Lua that reacts to events. But a large part of what makes a server unique is not code, it is content: cars that do not exist in base GTA, police stations with an interior, new gas stations, an entire island, custom uniforms or the reskin of a police vehicle. All of that is assets: 3D models and textures that your server sends to each player's game. This chapter is your map of visual modding: the tools, the formats, and how to add and EDIT maps, vehicles, clothing and textures, being honest about where it gets tricky.
What an asset is and how it reaches the player
An asset is a model or texture file from the GTA V engine. The most common are .yft (geometry with physics, e.g. a car body), .ydr (static models like props or a building), .ytd (texture dictionaries) and .ymap (maps that place props and interiors in the world). You do not put them into the player's game by hand: you put them in a folder called stream/ inside your resource, and FiveM takes care of transmitting ("streaming") them to the client when they connect.
resources/
└── crx_adder/
├── fxmanifest.lua
├── stream/
│ ├── adder.yft
│ └── adder.ytd
└── data/
├── handling.meta
├── vehicles.meta
├── carcols.meta
└── carvariations.metaResource of an add-on car
The stream/ folder is magic for FiveM: any asset you put inside is sent automatically to the client, whether it is in subfolders or not. You do not need to declare them one by one. What you DO have to declare are the data .meta files, which are not assets but configuration the engine has to register.
The GTA V file formats
Before touching anything it helps to know what each extension is. GTA V stores almost everything inside packed and compressed files; modding tools exist to open, read and repack those formats. This is the basic cheat sheet you will use every day.
- .rpf (RAGE Package File): GTA's proprietary "zip". All the other files live inside it. They are opened with OpenIV. The game DLCs, the big mods and the base content are packed this way.
- .ydr (Drawable): a static 3D model without complex physics: a prop, a lamppost, a building. It carries its geometry, materials and texture references.
- .ydd (Drawable Dictionary): a container with several drawables inside. It is the typical format of ped CLOTHING (each component and its variations).
- .yft (Fragment): a model with physics and breakable pieces. It is the format of VEHICLES (chassis, doors, a hood that dents) and destructible objects.
- .ytd (Texture Dictionary): a texture dictionary: the "package" of images (.dds) that dress a model. Reskins, liveries and paint go here.
- .ymap (Map): places objects in the world: positions, rotations and which props appear. It is what "places" an MLO or some parked cars in their spot.
- .ytyp (Type Definitions): defines the types of props and interiors (which entities exist and their limits). Many MLOs need it so the game "knows" their pieces.
- .ybn (Bounds / collisions): the invisible geometry the player and cars collide with. Without a correct .ybn you go through walls or float.
Mental rule: .yft = moves/breaks (cars), .ydr = stays still (props/buildings), .ydd = gets worn (clothing), .ytd = colors/textures, .ymap = places, .ytyp = defines, .ybn = collides. If you memorize this, 90% of the tutorials stop sounding like gibberish.
The tools of the trade
Creating or adapting assets is not done in a text editor: there are specialized programs, each for a phase. You do not need to master them all to INSTALL someone else's content, but you do to understand it and, if it comes to that, repair or create it from scratch.
- OpenIV: the explorer and editor of GTA V's own files. It opens .rpf files, lets you look at how the original assets are made, extract them, edit metadata and replace textures. It has an "Edit mode" that you must enable to change files, and it supports .oiv packages that install mods in one click. It is the foundation of everything.
- CodeWalker: the world viewer and editor. With it you fly across the whole GTA map, open and edit .ymap files, place and move props with millimeter precision, pull exact coordinates (X Y Z and heading), check .ybn collisions and verify that one MLO does not clash with another before uploading it. It lets you create basic interiors and new ymaps.
- Blender + Sollumz: Blender is the 3D modeling program (free) and Sollumz is the essential add-on that teaches it to read and export the GTA formats: you import/export .ydr, .ydd, .yft and .ytd, adjust materials to the GTA shader, paint skeleton weights on clothing and export models ready for the game. It is the modern way to create or port a car, a prop or a garment.
- 3DS Max + GIMS Evo: the classic alternative to the Blender+Sollumz pairing. GIMS Evo is the equivalent plugin for 3DS Max. A lot of veterans are still there; if you start today, Blender + Sollumz is more accessible and free.
- Photoshop or GIMP + DDS plugin: to create and edit the textures (.dds) you later pack into a .ytd. You need the DDS plugin (Intel/NVIDIA in Photoshop; GIMP brings it almost natively) to open and save with the correct compression.
Be honest with yourself about the curve: installing a ready-made pack is a matter of minutes; modeling your own car in Blender, adjusting an MLO in CodeWalker or solving the skeleton weights of a garment is a craft that takes weeks of practice. Start by installing and editing; create from scratch once you already master the workflow.
Adding and editing an MLO (an interior or map)
An MLO ("Map Loading Object") is a custom-made interior or area of the map: the floor of a police station, a club, a mansion, or a whole neighborhood. It comes as a resource with its assets in stream/ and one or more .ymap files that place that geometry and those props at specific coordinates in the world. The simple way to load a resource's maps is to declare it as a map.
fx_version 'cerulean'
game 'gta5'
author 'YourName'
description 'Police station interior MLO'
version '1.0.0'
-- Mark this resource as a map: loads the .ymap files automatically
this_is_a_map 'yes'
files {
'data/comisaria.ymap',
'data/props.ytyp'
}
-- Register the type definitions (props/entities) of the MLO
data_file 'DLC_ITYP_REQUEST' 'data/props.ytyp'fxmanifest.lua of an MLO
With this_is_a_map 'yes', FiveM treats the resource's .ymap files as part of the world. Many MLOs also include a .ytyp (prop type definition), which is registered with data_file 'DLC_ITYP_REQUEST'. Once loaded, the interior exists in the world: to see it you need the entry coordinates that the MLO author usually provides, and you teleport there with an admin command (for example /tp x y z) to check it.
Editing a .ymap in CodeWalker, step by step
Editing a map is not scary once you understand the cycle: you open, move, export, test. CodeWalker does all the visual work; you only decide where each thing goes.
- Open CodeWalker (RPF Explorer) and drag the .ymap in, or use the World/Project to load it over the real map and see where it lands.
- Enable the project's edit mode (Project window → New Project → add the .ymap) so you can move and create entities, not just look.
- Select an existing prop and move/rotate it with the gizmos; or add new props from the entity catalog (Add Entity) by searching the model by name.
- To pull exact coordinates of an entrance, position the camera, look at the position (Position X Y Z) and the angle: that is what you will pass to a teleport or a blip.
- Save the .ymap (Save) and, if you touched new prop types, make sure you have the corresponding .ytyp listed in the fxmanifest.
- Go back to FiveM, restart the resource (restart) and check in-game. If something does not show up, verify that the prop's model is in stream/ or in an already loaded DLC.
Collisions (.ybn) are the #1 cause of "broken" MLOs: if you walk on the new floor but fall into the void, or go through a wall, the .ybn for that area is missing or faulty. CodeWalker lets you visualize the collision bounds to locate the gap. A pretty interior without collision is scenery, not a playable place.
If after loading the MLO you see floating geometry, walls you walk through or the old interior mixed with the new one, it is almost always a conflict between two resources that touch the same area, or a missing .ytyp. Load it on its own, with no other maps active, to isolate the problem.
Adding and editing an add-on vehicle
An add-on car is a new vehicle that coexists with the base GTA ones, with its own spawn name. It needs the models in stream/ (the chassis .yft and its texture .ytd) and four .meta files that describe its properties: how it drives, what internal name it has, its colors and its variations. Those .meta files go in files{} of the fxmanifest and, in addition, are connected to the engine with a data_file line for each one.
fx_version 'cerulean'
game 'gta5'
author 'YourName'
description 'Adder add-on car'
version '1.0.0'
-- The .meta files are data, not scripts: they must be listed in files{}
files {
'data/handling.meta',
'data/vehicles.meta',
'data/carcols.meta',
'data/carvariations.meta'
}
-- And connect them to the engine with their corresponding type:
data_file 'HANDLING_FILE' 'data/handling.meta'
data_file 'VEHICLE_METADATA_FILE' 'data/vehicles.meta'
data_file 'CARCOLS_FILE' 'data/carcols.meta'
data_file 'VEHICLE_VARIATION_FILE' 'data/carvariations.meta'fxmanifest.lua of an add-on car
- vehicles.meta: defines the car, including its spawn name (the <modelName>). It is the name you will use to spawn it. It also links the model, the audio and the vehicle class.
- handling.meta: how it drives (top speed, acceleration, braking, grip, mass, weight distribution, damage). It is the file you will touch to "balance" a car.
- carcols.meta: colors, paint combinations and available mods/extras (kits, spoilers).
- carvariations.meta: which variations, default colors, wheels and extras appear tied to that model when it spawns.
After putting the resource in resources/ and adding ensure crx_adder in your server.cfg, restart. To test it, if your framework brings a spawn command use it (for example /car adder), where "adder" is the spawn name you saw in vehicles.meta. If you misspell the spawn name nothing will appear: it is not a code error, there simply is no model with that name.
Editing the behavior: handling, colors and extras
A vehicle's balance is tweaked in handling.meta. You do not need Blender for this: it is an XML you open with any text editor. The key fields: fMass (weight in kg), fInitialDriveForce (thrust), fBrakeForce (braking), fTractionCurveMax/Min (grip) and nInitialDriveGears/fInitialDriveMaxFlatVel (speed). Change a little and test: raising the mass makes the car more stable but slower, lowering the braking makes it dangerous.
<Item type="CHandlingData">
<handlingName>adder</handlingName>
<fMass value="1800.000" />
<fInitialDriveForce value="0.350" />
<fBrakeForce value="1.200" />
<fTractionCurveMax value="2.700" />
<fTractionCurveMin value="2.300" />
<fInitialDriveMaxFlatVel value="180.000" />
</Item>Fragment of handling.meta, adjust weight, force, braking, grip and speed
Colors and extras are managed in carcols.meta and carvariations.meta. The "extras" (extra_1, extra_2…) are optional pieces of the model (a roof rack, a light bar): they are toggled by script or from a tuning menu. If you want to tweak the geometry of the car itself (add a modeled spoiler, fix a headlight), then you do open the .yft in Blender with Sollumz, edit the mesh, and export again.
Practical rule: one car, one test. Add ONE vehicle, restart it and check it in the game before adding the next one. That way, if something blows up, you know exactly which one it was. And never edit the handling of 50 cars at once without testing: one wrong value can make the car fly off when it spawns.
Clothing: dressing the ped
Clothing in GTA V is not a single piece: the character (ped) is made up of interchangeable parts. Each part has a "drawable" (the 3D mesh of the garment) and a "texture" (the pattern/color of that garment). Changing a t-shirt = changing the drawable number of the torso component; changing the color of that t-shirt = changing the texture number. There are two big groups: components (what covers the body) and props (accessories that go on and off: helmets, glasses, hats).
- Components (component IDs): 0 = head/face, 1 = mask, 2 = hair, 3 = torso/arms (hands), 4 = legs (pants), 5 = backpack/parachute, 6 = feet (shoes), 7 = accessories (chains), 8 = undershirt, 9 = vest/armor, 10 = patches/decals, 11 = torso (jacket/coat, the main top garment).
- Props (prop IDs): 0 = hats/helmets, 1 = glasses, 2 = earrings/ears, 6 = watches, 7 = bracelets. They go on and off independently.
- WATCH OUT for the classic trick: the visible top garment is usually component 11 (torso), and 3 (torso/arms) controls which hands/arms show. That is why sometimes you change the jacket and weird hands appear: you have to match the 11 with the correct 3.
There are two ways to add new clothing to a server, and it pays to choose well:
- Add-on clothing (via stream): you put the .ydd (drawables) and .ytd (textures) in stream/ along with their .meta files, and it is added as extra clothing to a ped model (mp_m_freemode_01 / mp_f_freemode_01). It is the cleanest for service uniforms (police, EMS) and large packs.
- Clothing by script: wardrobe resources like illenium-appearance, qb-clothing or codem-vehiclekeys/clothing manage clothing stores and save the player's outfit in the database. Many commercial packs come ready to be used from these systems (eup-style).
Creating or porting a garment in Blender + Sollumz
Creating clothing is one of the most demanding tasks because the mesh has to deform with the character's skeleton. The flow with Sollumz is: you import the base .ydd of the component you are going to replace (to get the correct skeleton), you model or import your garment, and you do the critical part: the skin weights (skeleton weights). Every vertex of the clothing has to be "glued" to the correct bones so it moves with the body; if the weights are wrong, the garment stretches like gum when running.
- Import the base drawable with Sollumz to inherit the ped's skeleton (armature).
- Model/import the garment and parent the mesh to the armature; transfer or paint the weights (Weight Paint or Data Transfer from the base body).
- Assign the material to the GTA shader (Sollumz) and create/pack its .ytd of textures.
- Export as .ydd and name it according to the component numbering and its variation (drawable + texture index).
- Test it by changing the component to its matching number and check LOD (at a distance) and deformation when running/crouching.
Numbering matters: if your garment is drawable 12 of the torso (component 11), it has to be named and registered exactly as such, with its textures as variations (0,1,2…). A typical failure is the garment that appears in the store but shows up invisible or as a black blob: it is almost always mismatched numbering or the .ytd not linked.
Textures: inside the .ytd
A texture is the image that covers a model: a car's paint, the design of a t-shirt, a shop's sign. In GTA they live packed in a .ytd (texture dictionary). For reskins you do not need Blender: OpenIV is enough to open the .ytd, export the image, edit it and put it back in.
- Open the .ytd with OpenIV (enable Edit mode). You will see the list of textures it contains.
- Export the texture you want to change as .dds (or .png to edit more comfortably).
- Edit it in Photoshop/GIMP respecting size and name. Save it again as .dds with the correct compression.
- Reimport it into the .ytd (Replace) keeping the same internal name, save, and test in-game.
About the DDS format: GTA uses block-compressed textures. Use DXT1 (BC1) for textures without transparency (opaque paint, asphalt), DXT5 (BC3) when you need an alpha channel (transparencies, logos with a cut-out edge). The size must be a power of 2 (256, 512, 1024, 2048, 4096) and you should generate mipmaps (reduced versions the game uses at a distance) so it does not flicker or waste resources.
Name consistency: if you replace a texture, the model looks for it by its internal name. If you accidentally rename it or change the size/compression, the car can come out white, hot pink (GTA's "no texture") or black. Pink = missing texture; it is the universal sign of "I can't find this material".
Performance and streaming: the hidden cost of assets
Every asset you add has two costs: the player has to download it when connecting (more megabytes = slower entry to the server) and the game has to keep it in memory (more RAM and, if you overdo it, FPS drops and crashes from lack of memory). A server with 300 add-on cars in 4K and ten giant MLOs can take minutes to load and perform badly on modest machines. Streaming is not free: it is the factor that most puts off new players.
- Optimize the textures (.ytd): absurd resolutions (4K on a wheel or a tiny sign) bloat the download without it showing on screen. Drop to 1024 or 512 whatever is not looked at up close.
- Take care of the LODs (levels of detail): a model should simplify at a distance. A car or MLO without LODs always renders the full mesh and spikes the graphics load.
- Do not overuse huge MLOs with tons of props if you only use one corner. Every placed prop is geometry that gets loaded.
- Watch the total weight of the resources folder: it is exactly what each player downloads the first time (and after every update).
- Measure with resmon (client console, F8 key → type resmon): a map or car resource should read 0.00–0.01 ms at rest. If a stream resource spikes CPU/memory, something is wrong.
- Remove what you do not use. Every loaded asset weighs and takes up streaming budget even if nobody sets foot on it.
The resource size directly affects the join time: what takes a player from "Joining…" to being inside is, to a large extent, downloading your assets. A lightweight server retains players; one that takes 4 minutes to load loses them before they even get in.
Legality and security: the dangerous side
Assets have an author and, very often, a license or a price. Using content without permission is stealing someone else's work and can bring you problems (including the shutdown of the server and Cfx/Tebex bans). But there is an even more direct risk: the "free" or "leaked" packs that circulate on shady sites and random Discord servers sometimes come with backdoors: hidden code that gives control of your server to a third party, wipes your database or steals your players' data.
- Use assets with permission: purchased, your own, or explicitly released for free use. Respect Rockstar's and Cfx.re's (FiveM) TOS.
- Be wary of "leaked", "leaks" or "free premium" packs: if it seems too good, it usually hides something.
- Scan and review any resource of uncertain origin before adding it: a car or clothing pack does NOT need a server.lua making requests to weird sites, using PerformHttpRequest to unknown domains, or obfuscated/chained code.
- Suspect obfuscated code (base64 strings, loadstring, unreadable names): it is the usual signature of a backdoor hidden inside what should be just models.
- Test the unknown on an isolated local server, never directly in production, and keep backups of your database.
Crxative-M includes resource security auditing precisely for this: to detect backdoors and dangerous patterns in packs before they reach your server. Even so, the golden rule does not change: if you do not trust the source, do not upload it to production.
An honest closing: visual modding has a high and very uneven curve. Reskinning a texture or moving a prop you can do today; creating a car or a garment from scratch in Blender takes weeks. Start by EDITING what already exists (vehicle reskins, moving props in CodeWalker, balancing a handling) and leave creation from scratch for when the workflow feels natural. Every asset you master is a piece of identity of your own for your server.
Put it into practice
Got a question about this? The AI chat knows all of it and answers with code.
Ask the AI