The Workshop
    ToolsShowcaseFree toolsPricingFAQGuides
    Log inGet the Workshop

    Free server-owner tool

    FiveM Stream Budget

    What a joining player downloads, and how much of it is wasted. Download size, not server load — a stuttering server is a resmon question, not a folder one. Drop a resource, a resources/ folder or a zip. Runs in this tab — nothing is uploaded.

    How it worksFAQ

    Packing the resource next?

    PackBench bundles your models, textures, and metas into one clean, streaming-ready resource zip, sized the way this report measured.

    Open PackBench

    Server Developer, $19.99/mo

    Reference

    On this page

    1. What a client actually downloads on first join
    2. Why download size is not server load
    3. What dominates a typical pack
    4. The two findings that are free money
    5. Both need the second pass
    6. Cutting a ten-minute first join
    7. What this tool does not check
    8. Frequently asked questions

    What a client actually downloads on first join

    When someone connects for the first time, the client asks each running resource for its file list and downloads every file the manifest names into a local cache before the player can spawn. That is the ten minutes people complain about. It happens once per player per version of each file — change one .ytd and everyone downloads that one again.

    The arithmetic is unforgiving. At roughly 10 Mbit — a normal cap on what a joining client gets — a gigabyte is about fourteen minutes, so a 3 GB resources/ folder is a forty-minute first join. Nothing about your host, your tick rate or your RAM moves that number; deleting bytes is the only thing that does. Which is why this tool refuses to round: two files a byte apart can sit either side of a ceiling, so every size on this page is shown with its exact byte count beside it.

    Why download size is not server load

    Nothing in a folder listing correlates with tick time, thread count, event volume or client frame rate. A 900 MB map pack costs a server nothing — it streams to clients and the server never touches it again. A 40 KB Lua file with a while true do end and no Wait takes the same server down, and no size-based checker can see it.

    The three costs are separate and are fixed in different places:

    • Download size — paid once per player, at join, over their connection. Measured here. Fixed by shipping fewer bytes.
    • Client streaming memory — paid by the player's GPU while an asset is loaded. Related to file size and not file size; nothing here is a VRAM figure.
    • Server CPU time — paid every frame by your host, visible only in a resmon dump, dominated by scripts. The Workshop's Resmon Report reads a dump and ranks resources by per-frame cost — a Server Developer, Pro, or Studio tool, not this page's free tier.

    What dominates a typical pack

    Almost every oversized folder is oversized in one of six ways. Every file lands in exactly one, and the six add up to the total — so the biggest bar is where it went.

    What it isWhat to do about it
    Texture dictionaries.ytdUsually number one, and usually a 4096×4096 sheet saved uncompressed. Re-save with DXT/BC compression and mipmaps, or step the largest sheets down to 2048.
    Models.yft .ydr .yddA drawable over about 16 MB is usually one uncollapsed high-detail mesh with no LODs. Generate L1–L3 LODs, or split the parts into separate drawables.
    Collision and navigation.ybn .ynvA huge .ybn is a collision mesh built from the render mesh: players never see it and the physics engine pays for every triangle. Replace it with a simplified hull.
    Audio.awc .rel .datAn oversized wave bank is almost always 48 kHz stereo where the game plays mono. Re-encode at the rate and channel count the bank needs.
    Map data.ymap .ytyp .ymtOne enormous section the streamer can only load or unload whole. Split it into several .ymap files covering smaller areas.
    Everything else.psd .zip .bak, source artDownloaded by every client and read by nothing, and routinely the second largest thing in a purchased pack. Delete it, or move it out of resources/.

    The two findings that are free money

    The same file shipped by several packs. Six vehicle packs each ship their own copy of the same 12 MB wheel dictionary: every player downloads 72 MB to receive 12. Keep one and have the others depend on the resource that ships it. This is a different problem from two resources shipping the same name — the same bytes under two names costs you a download and nothing else, while two different files under one name means one never appears in game. Clash Finder is the page for that half, and it works on the same drop.

    A high-detail model identical to its own base. A _hi companion exists to hold more geometry than the base asset. When it is byte-for-byte the same file — a common packaging mistake — the pack downloads the same model twice and gains nothing. Delete the companion: the game falls back to the base asset when there is none.

    Both need the second pass

    Both need the second pass switched on, because both are claims about content rather than about size. With it off, the report says the comparison did not happen. It does not say there were no duplicates, and that distinction is the whole reason to trust the rest of the page.

    Cutting a ten-minute first join

    In the order that returns the most megabytes per hour of your time:

    • Scan everything you run, not one pack at a time. Duplicates across packs are invisible from inside a single pack, and they are the biggest free win.
    • Sort by resource and look at the top five. A resource over a quarter of a gigabyte is flagged even when no single file in it is oversized — fifty legal 15 MB dictionaries is 750 MB.
    • Delete what is not an asset. Source files, backups, zipped copies of the pack inside the pack, screenshots. The fastest megabyte you will recover.
    • Then compress, once, in bulk. One extension dominating the drop usually means one decision made once and repeated. Fixing it once fixes it everywhere.
    • Save the scan, then scan again after. The before-and-after tells you whether an afternoon was worth 40 MB or 400. Both scans stay in this browser.

    What this tool does not check

    It counts bytes. A clean budget is not a clean pack, and this page will not imply otherwise. It says nothing about whether the metas are correct, whether a spawn code collides with another resource, whether a mod kit id is free, or whether anything in the folder works at all.

    The total is not a first-join download to the byte, which is why the figure on screen is labelled every byte in the drop rather than every byte a client fetches. A server_script is never sent to a client, and a file no manifest names is downloaded by nobody; both are counted here. Deciding which subset actually ships needs the manifests to be right, so the claim made is the one that is checkable: every file in the folder, in exactly one category, adding up.

    It is also not a VRAM figure. A .ytd begins RSC7 and its header carries the virtual and physical page counts FiveM's own asset budget is expressed in; on-disk size is related to those and is not those. And it cannot see inside a .rpf: a pack distributed that way keeps its own bytes in the total and its contents are reported as unread rather than as empty — along with anything else that was capped, truncated, not opened or not compared, which is printed under the findings and carried into all three exports.

    Frequently asked questions

    Why is my FiveM server's first join so slow?

    Because every file your resources stream is downloaded once by every new player before they can spawn. A 3 GB pack on a 10 Mbit connection is roughly forty minutes; the same pack cut to 900 MB is twelve. Nothing about your server's CPU, RAM or tick rate changes that number — it is bytes over a wire, and it is the one figure this tool measures.

    Is download size the same as server load?

    No, and treating it as if it were is the single most common mistake in this area. A 900 MB map pack of collision meshes costs a running server essentially nothing per frame; a 40 KB Lua script with a busy loop can cost more than every asset you own. Download size is a join-time cost paid by the client. Server load is per-frame CPU time, and you measure that by reading a resmon dump, not a folder.

    How much is too much for one resource?

    This tool warns at 256 MB for a single resource and again at 512 MB, and a well-made add-on vehicle is nowhere near either — the real 40 MB vehicle in this repo's own fixture passes every check clean. The per-file ceilings are 16 MB for a texture dictionary, 16 MB for a model, and higher for collision meshes and audio banks, each with its own advice, because compressing a collision mesh is not a thing you can do.

    What is the fastest way to cut a pack's download size?

    In order of return: delete duplicated files shipped by several packs at once, delete a high-detail model that is byte-identical to its base, re-save uncompressed texture dictionaries with DXT/BC compression, and remove source art, backups and archives left inside a resource. The first two are free — nothing looks different in game — and on a busy server they are usually worth hundreds of megabytes between them.

    Does this upload my resources anywhere?

    No. The scan runs in your browser tab: there is no request in the page and no server behind it. The first pass reads sizes only and opens no file at all — a zip's entry sizes come from its central directory without unpacking it. The optional second pass reads the first 4,096 bytes of the handful of files whose size is shared with another one, so that duplicates can be found, and nothing else is ever opened.

    How does it find duplicate files without reading them all?

    Two files cannot be the same file unless they are the same length, so only the files whose size is shared with at least one other are worth reading — usually a few dozen out of thousands. Those get their first 4,096 bytes hashed, and two files match when both their size and that hash match. The tool says so in every sentence it writes about a duplicate, because that is strong evidence and it is not a byte-for-byte comparison.

    Can it scan a zip I have not unpacked?

    Yes, and the sizes are exact — a zip states every entry's uncompressed size in its central directory. What it cannot do from a zip is the duplicate comparison, because the bytes are never unpacked, and it says that plainly rather than reporting that no duplicates were found. A .rpf cannot be read in a browser at all, and a pack shipped that way is reported as unread rather than as empty.

    Is a clean budget report proof the pack is fine?

    No. It says the files are within the size budgets it checked. It is not a check of whether the pack works, whether its metas are correct, whether its spawn codes collide with another pack, or what it costs your server per frame. Every export carries the list of what was not counted, not compared and not listed.

    More free tools

    All free tools
    JOAAT Hash GeneratorConvert any name to its GetHashKey value.Coordinates HelperReformat GTA5 coords as vector3, vec3 & more.server.cfg BuilderBuild a config whose ensure block is in real dependency order.Spawn Code FinderEvery spawn code in a pack, and how we know each one.Asset Clash FinderWhich resources are fighting over a file name, and which copy wins.Spawn Code RenamerRename a vehicle everywhere its pack actually references it.ID BenchMod kit, siren and light ids that collide — and a safe renumber.

    Build the whole thing in your browser

    These free tools are a taste. The Workshop gives you 15+ FiveM creation tools in one subscription — Paint Booth, UV Studio, EUP Viewer, Easy Meta, PackBench and more — no installs, no downloads, right in the browser.

    See all toolsRead the guides
    © 2026 The Workshop
    GuidesPrivacyTerms
    How this works