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.
FAM-261023-261025-UL4B9this weekendTick it in your cart Halloween Edition36 maps, limited runlimited runShop the drop FREE TOOL · VEHICLES
A vehicle is five files that have to agree with each other: the model in stream, the entry in vehicles.meta, the block in handling.meta, the entry in carvariations.meta and the kit in carcols.meta. When one of them disagrees, almost nothing is printed in the console — the car spawns untextured, or drives like stock, or has an empty mod menu, or cannot be spawned at all. This reads the whole resource and tells you which reference is broken, in which file, on which line.
16 checks that mean something is broken, 6 that mean it will break somewhere, 4 for information. Nothing is uploaded: the folder is read inside this tab.
Or the .zip it came in. Everything is read inside your browser — no upload, no API call, no copy on our side. The models are never even opened: only their names and sizes are used, so a 400 MB pack costs you nothing but the time to read the folder.
HOW TO USE IT
Five steps. The order matters, because one broken reference high up makes everything below it look broken too.
fxmanifest.lua — the one you would put in resources/. If several resources are inside what you drop, each is checked on its own and you can switch between them. If the pack came as a zip, drop the zip: it is opened here and nothing is extracted to disk.<modelName>, the <handlingId>, the carvariations entry and the file names all have to be identical and all lower case.EVERY CHECK
Severity is about what happens in game, not about how unusual the mistake is. An error means something is measurably broken right now.
| Check | Severity | What it breaks |
|---|---|---|
| A modelName in vehicles.meta with no matching .yft under stream | broken | The spawn name registers and the streamer has nothing behind it. Spawning gives you an invalid-model error or silence. |
| A modelName whose .yft exists only with different letter case | broken | Windows finds it, Linux does not. The pack works on your test box and every vehicle is invalid on the live host. |
| A handlingId with no handlingName in handling.meta | broken | The vehicle drives on fallback physics and no amount of editing handling.meta changes it. |
| A txdName with no matching .ytd | broken | The model loads untextured. Shared vanilla dictionaries such as vehshare are recognised and reported as a note instead. |
| A data_file line whose path resolves to nothing | broken | Nothing mounts and nothing is logged. The most common reason a pack installs cleanly and still drives like stock. |
| A data_file target that is not in the files block | broken | The server knows what the file means and the client never receives it, so it is stock for everybody but you. |
| A meta file in the resource that no data_file mounts | broken | Identified by its root element, not its name, so a renamed or glob-matched file is caught too. |
| A data_file type that does not match the file it points at | broken | handling.meta mounted as CARCOLS_FILE is read by the wrong parser and discarded without a word. |
| A carvariations entry naming a mod kit carcols does not define | broken | An empty LS Customs menu on a car that otherwise works. |
| A carvariations entry for a model vehicles.meta never declares | broken | Usually a typo, which means the real vehicle has no colours or kits at all. |
| Two mod kits claiming the same id | broken | Kits resolve by id. One car silently loses every modification. |
| A duplicate spawn name, handling block or variation entry | broken | The second definition replaces the first, so the block you are editing may not be the one in use. |
| A _hi.yft with no base .yft beside it | broken | There is no model for the high-detail version to swap into. |
| A .yft or .ytd outside a folder named stream | broken | FiveM only registers assets inside a stream folder, at any depth. Elsewhere they are just files. |
| Two streamed files with the same name | broken | Streamed names are one flat namespace. One wins and you cannot tell which. |
| A client_script or files entry naming a file that is not there | broken | A missing script stops the resource at load. Packs that ship a vehicle_names.lua reference without the file are the classic case. |
| A model name with capital letters | risky | The game tolerates it. File systems, spawn menus and garage scripts are less forgiving. |
| A handlingId that matches its block only case-insensitively | risky | It resolves in game and breaks every tool that compares the two strings directly. |
| A vehicle with no carvariations entry while the pack ships one | risky | First colour, no liveries, no kit, even when carcols defines one for it. |
| An empty audioNameHash in a pack that ships no audio | risky | The vehicle is silent — no engine, no horn, no collisions. |
| More than one manifest inside one resource | risky | A resource is not recursive. The inner ones are inert, and everything they declare is not loaded. |
| A complete-looking model in stream that nothing registers | risky | A .yft with its own .ytd and no vehicles.meta entry. Dead weight every player downloads. |
| A kit whose name prefix disagrees with its id | information | The game reads the id. The number in the name is the convention that keeps ids unique across packs. |
| The siren setting ids this pack claims | information | Siren ids are global to the server. Listed so you can check them against your other packs before installing. |
| A handling block or mod kit nothing references | information | Loaded and never read. Often left over from the vehicle the pack was built from. |
| A texture dictionary over 16 MB | information | Not an error. It is what turns into texture loss for players on smaller cards. |
The folder is read with the browser File API and a zip is unpacked in the tab with JavaScript. There is no API route behind this page and no request carries your files anywhere — which matters when the pack is one you paid for. Only text files are read: the .meta files, the manifest and the scripts. Every .yft and .ytd is checked by name and size alone, which is both why a paid pack stays private and why a 400 MB resource is validated in a second or two.
The data_file types are checked against the published reference list as a known set rather than as an exhaustive one: a type we do not recognise is reported as information, not as an error, because the published list is long and a valid type we have missed should not look like a mistake. The AUDIO_GAMEDATA, AUDIO_SOUNDDATA and AUDIO_SPEECHDATA types are special-cased, because the path in the manifest is written without the .dat151.rel suffix the file carries on disk, and AUDIO_WAVEPACK points at a folder rather than a file — checking those naively produces four false errors on every pack that ships its own audio.
QUESTIONS
MORE
Write the manifest this page checks, with the data_file types picked from the published list and the files block kept in step with them.
Profiler analyzerDrop a profiler capture and find out which resource is eating the frame, which loop inside it, and what to change.
Hash calculatorThe joaat hash of a model name, for when you need the number a spawn name turns into.
ALSO FREE
Picked because they touch the same files, natives or part of the game.
FROM THE SHOP
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.
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.
Twelve colour palettes across three base map styles, each one a drop-in resource. Add your logo and your district labels in the editor.
The one screen every player sees on every connect. Drag widgets onto a canvas, drop in a video background, and point your server at a single URL we host.