Skip to main content
OptimizationCluster guide · 9 min read

FiveM Streaming and Asset Optimization Guide

Slow joins and stutter are usually a streaming problem, not a script problem. Here is how FiveM streams assets, why oversized textures and models hurt load times, and how to audit and right-size your stream folders.

FiveM Streaming Optimization: Cut Join Times Fast
Quick answer

FiveM streaming optimization means reducing the total size of streamed assets (YTD textures, YDR and YFT models, YMAP data) so clients download and load them faster on join. The biggest wins come from compressing oversized texture dictionaries, capping texture resolution to what the asset actually needs, and removing duplicate or unused stream files. Smaller stream folders mean shorter initial downloads, faster level load, and lower client memory pressure.

On this page

Why streaming, not scripts, usually controls join time

When a player connects to your FiveM server, the client does two heavy things before they spawn. First it downloads every file your resources mark for streaming. Second it loads those files into GTA V's streaming system so the world, vehicles, peds, and props can render. A server with hundreds of megabytes of textures and models will make players sit on the loading screen far longer than a server with a tight, audited asset set, even if both run identical scripts.

This is the part of optimization that resmon and txAdmin performance graphs will not show you. CPU time per resource matters for in-game stutter, but it has almost nothing to do with how long a fresh player waits to join. Join time is dominated by download size and how the engine ingests your stream folders. If you have ever watched new players quit on the loading screen while veterans get in fine, you are looking at a streaming and caching problem.

How FiveM streams assets

Any file placed in a folder named stream inside a resource is picked up automatically and treated as a game asset, as long as the resource manifest declares the folder. Modern manifests do this implicitly for a top-level stream directory; YTYP archetypes and some map data are additionally registered with data_file entries (for example data_file 'DLC_ITYP_REQUEST'). The common file types are:

  • YTD texture dictionaries. These hold the actual texture images for vehicles, clothing, props, and map objects.
  • YDR drawables and YFT fragments. These are 3D models. YFT is used for breakable or physics objects like vehicles, YDR for static drawables.
  • YMAP and YTYP. Map placement and archetype definitions that tell the engine where objects sit and how they behave.
  • YBN, YND, YNV. Collision and navigation data.

On connect, the client compares its local cache against the server manifest. Anything it does not already have, it downloads. Those files land in the client cache (the data\cache\files area inside the FiveM application data folder). On a later join the client reuses cached files, which is why your second connection is faster than your first. The size and number of these files is the single biggest lever on first join time.

Why huge assets slow joins specifically

A 16MB vehicle YTD is not just a slow download. The streaming engine has to decompress and register it, and GTA V's streaming system has a finite memory budget. When you exceed practical limits you get two visible symptoms: long loads, and texture loss or model pop where the engine silently fails to stream something in. People call the second one "texture flickering" or "low res cars," and it is almost always an oversized or over-budget asset problem, not a graphics setting.

Texture dictionary sizes and resolution

Most bloat in custom FiveM content lives in YTD files. A car pack author exports every texture at 4096x4096 because that is the default, when 2048 or even 1024 would be indistinguishable at gameplay distance. A single 4K uncompressed-looking texture can be several megabytes; a vehicle with diffuse, normal, specular, dirt, and detail maps at 4K can blow past 30MB on its own. Multiply that across fifty add-on cars and you have a multi-gigabyte server that takes minutes to join.

The fix is to open YTD files in a tool like OpenIV or CodeWalker, check the per-texture resolution and compression format, and downscale anything larger than it needs to be. Use DXT/BC compression formats rather than uncompressed RGBA. For most map props and clothing, 1024x1024 diffuse textures are plenty. Reserve 2048 for hero vehicles or objects the player gets close to.

On-demand streaming versus preload

FiveM streams assets on demand based on the player's position and what the game engine requests, the same as base GTA V. You do not get to fully "preload" the world. What you control is total catalogue size and how that catalogue is organized. A practical implication: splitting one giant resource into logical resources does not reduce download size, but it does let you disable or stop streaming content you are not using. If your server runs a single map but ships three unused map packs in the resource folder, those still get streamed and downloaded. Remove them.

Caching, and why it cuts repeat join time

The client cache is your friend for returning players and your enemy for first-time joins. You cannot make the first download smaller through caching, only through asset size. But you can avoid breaking the cache unnecessarily. Every time you re-export or re-pack an asset, its hash changes and every player re-downloads it on their next join. Batch your content updates instead of pushing a new car or texture tweak every day, and your regular players stop paying the download tax repeatedly.

Auditing your largest resources

You cannot optimize what you have not measured. Do a size audit before touching anything:

  1. Sort your resources and stream folders by total size on disk. On any OS this is a one-minute job in the file explorer or with a command line du-style tool.
  2. Inside the biggest offenders, sort by file type. Almost always the YTD files dominate.
  3. Open the worst YTD files in OpenIV or CodeWalker and read the actual texture resolutions and formats.
  4. Check for duplicates. Car packs frequently ship the same shared texture in every vehicle folder. Shared textures can often be consolidated.
  5. Look for assets nothing references. Orphaned YMAP entries, leftover dev props, and old map versions are common.

Keep a simple before/after record of total stream size. Cutting a server from 3GB to 900MB of streamed assets is a realistic outcome on a content-heavy server, and it directly shortens the first join.

Players downloading on join

Every streamed byte travels over your server's connection to each joining client. If your host has limited upload bandwidth, a large stream catalogue means players download slowly and your server's outbound link saturates during peak join times. Two things help: shrink the catalogue (covered above), and consider whether your host's upload capacity matches your content size and concurrent join rate. The asset diet is the part you control directly and should always come first.

Concept to mechanism, one worked example

Say you add a 60-car police pack and joins jump from 25 seconds to 90 seconds. The mechanism: that pack added 1.8GB of YTD and YFT files, so every new player now downloads an extra 1.8GB and the engine has to register all of it. You open the pack in OpenIV, find every livery and body texture exported at 4096, batch-downscale liveries to 2048 and bodies to 1024 with BC compression, and remove three duplicate wheel texture sets shared across all cars. The pack drops to roughly 600MB. First join falls back toward 35 to 40 seconds, repeat joins are near instant from cache, and the low-res-car flicker some players reported disappears because you are no longer fighting the streaming memory budget.

Checklist
  • Sort all resources by total disk size and list the top 10
  • Within the largest resources, identify YTD files over 8MB
  • Open the worst YTD files in OpenIV or CodeWalker and check resolutions
  • Downscale textures above the resolution the asset actually needs
  • Convert uncompressed textures to DXT/BC compression formats
  • Cap most prop and clothing diffuse maps at 1024x1024
  • Remove unused map packs, orphaned YMAPs, and leftover dev assets
  • Consolidate duplicate shared textures across vehicle packs
  • Record total stream folder size before and after
  • Batch content updates so returning players do not re-download often
  • Verify no texture loss or model pop after downscaling in-game
Asset type Recommended max Notes
Hero vehicle body/livery texture 2048x2048 Reserve 4096 only for showcase vehicles
Standard vehicle texture 1024-2048 Most diffuse maps fine at 1024
Clothing / ped texture 1024x1024 2048 only for close-up hero items
Map prop diffuse texture 1024x1024 512 acceptable for small/distant props
Normal / specular maps One step below diffuse Detail loss is rarely visible
Single vehicle YTD total Under 8MB Audit anything larger
Texture format DXT/BC compressed Avoid uncompressed RGBA
Common mistakes

Shipping every texture at 4096. Default export resolution is overkill for most assets. Fix: downscale to 1024-2048 based on how close the player gets, using OpenIV or CodeWalker.

Leaving uncompressed textures in YTDs. Uncompressed RGBA bloats files and memory. Fix: re-save textures in DXT/BC compression formats.

Keeping unused map and car packs in the resources folder. They still stream and download even if no script starts them as a map. Fix: remove or move out anything not in active use.

Re-exporting assets constantly. Every re-pack changes file hashes and forces every player to re-download on next join. Fix: batch updates and avoid needless re-exports.

Duplicated shared textures across a pack. Many car packs ship identical wheel or glass textures in every folder. Fix: consolidate to shared assets where the pack structure allows.

Blaming resmon for slow joins. CPU time per resource does not control download or load time. Fix: audit stream folder size separately from per-frame CPU cost.

The Quasar take

Most servers we audit are not slow because of bad scripts. They are slow because nobody ever opened the car packs and looked at the texture sizes. A two-hour YTD audit usually beats a week of script micro-optimization for join time.

Why does my FiveM server take so long to join?
Almost always because of large streamed assets. On first connect the client downloads every streamed file and the engine loads them. Oversized YTD textures and YFT/YDR models are the usual cause. Audit and shrink your stream folders before anything else.
What is the FiveM stream budget?
It refers to GTA V's finite streaming memory that holds active textures and models. When your assets exceed practical limits you get texture loss, model pop, and long loads. Capping texture resolution and using compressed formats keeps you within budget.
What texture size should FiveM assets use?
Most prop and clothing textures are fine at 1024x1024. Standard vehicles can use 1024-2048. Reserve 4096 only for showcase hero vehicles. Always use DXT/BC compression instead of uncompressed formats.
Does splitting one big resource into many reduce download time?
No. Total streamed size is what gets downloaded, regardless of how many resources it is split across. Splitting only helps if it lets you disable content you are not actually using.
How do I find my largest streamed assets?
Sort your resources and stream folders by size on disk, then sort the biggest ones by file type. YTD texture dictionaries almost always dominate. Open the worst ones in OpenIV or CodeWalker to inspect resolutions.
Will optimizing assets fix texture flickering on cars?
Often yes. Low-res or flickering cars usually mean the streaming system cannot keep oversized assets in memory. Downscaling textures and using compression frees budget and removes the symptom.

Ready for the next step?

Stop guessing. Get a concrete plan for your server and move with confidence.

Written by
Kishi · FiveM Coach
Part of the FiveM Coach by Quasar team. We help server owners launch, fix, grow, and monetize stable RP cities.