FiveM image hosting
FiveM image hosting with links that do not expire.
Screenshots from screenshot-basic and ScreenCapture, photos from LB Phone, item icons for ox_inventory and loading-screen video, served from one CDN address per file. The link you store today still works next year, and bandwidth is never billed.
No card · 3 GB free · Bandwidth never billed
On this page
What a FiveM server actually needs from an image host
A roleplay server produces images constantly: a player takes a photo with the phone, an admin screenshots a player on a report, an inventory shows two hundred item icons, a loading screen plays a clip. Every one of those ends up as a URL stored somewhere — in a phone database, in a log line, in a Discord message — and the image is only as useful as that URL is durable.
That is where general-purpose hosts fall short. Chat attachments come back as signed links that stop working, free image sites throttle API uploads or remove old content, and a self-hosted folder behind a home connection goes down with the router. BasiX is built for the opposite: one direct address per file, no landing page in front of it, no expiry unless you ask for one.
Screenshot upload from screenshot-basic, ScreenCapture and LB Phone
Most FiveM resources already know how to upload to a media host; they only need a URL and a key. BasiX answers the upload endpoints those scripts were written for, so the change is a configuration line rather than a fork. LB Phone uses its built-in Custom upload method for photos, video and audio. ScreenCapture sends server-side screenshots and clips with its remote-upload export. screenshot-basic uploads directly, including from the short overload that cannot send headers, because the key can also travel as a query parameter on upload endpoints.
If you would rather not touch third-party configs at all, the basix resource exposes exports.basix:screenshot(source, options, cb). It captures a player’s screen through screenshot-basic and uploads it from the player’s machine with a one-time presigned URL, so your key never reaches a client.
Lua — screenshot a player on a report
exports.basix:screenshot(source, { folder = 'reports' }, function(err, file)
if err then return print('[basix] ' .. err) end
print(file.url)
end)A CDN address you can build yourself
Every file lives at https://cdn.basix.media/<publicId>/<path>. The publicId is eight characters and the same for every file in your account; the path is the one you chose at upload. That means your code can build an image address from a name, without asking an API first — exactly what an inventory needs.
Files are served over HTTPS with an ETag, open CORS and range requests, so video seeks natively in NUI. After you replace a file, the new version is everywhere within five minutes. If you set a placeholder image, a missing image under your publicId returns that placeholder instead of a broken icon.
server.cfg — ox_inventory item images
setr inventory:imagepath "https://cdn.basix.media/<publicId>/items"Originals untouched, thumbnails on demand
BasiX stores and serves your files byte for byte; nothing is re-compressed behind your back. When you need a smaller version, add ?w= to the address and you get a WebP resized to fit, generated once and then cached. A phone gallery can load ?w=256 thumbnails while the full photo stays one tap away, and item icons can be requested at the size the UI draws them.
Accepted types are images (JPEG, PNG, GIF, WebP, AVIF), video (MP4, WebM, MOV) and audio, detected from the bytes rather than the file name. The limit is 2048 MB per file on every plan, so loading-screen video fits as well as screenshots.
Links that do not expire, and mistakes you can undo
A file stays online until you delete it. If you want old report screenshots cleaned up automatically, set a retention policy on that folder — it is opt-in, folder by folder, and individual uploads can be marked as exempt. Deleting by mistake is not final either: deleted files go to a trash and stay recoverable for 7 days on the free tier and 30 or 90 days on a paid plan.
If you go over your storage, nothing disappears: the account turns read-only, existing links keep working, and you get a grace period and a bulk export before anything is removed.
Pricing without a bandwidth bill
Storage is what you pay for; bandwidth is never billed, on any plan, under a fair-use rule that is written down. There is a free tier with no card, then Starter €5 (25 GB), Pro €15 (120 GB), Business €49 (500 GB), Ultra €89 (1000 GB) per month, tax included. Logs and databases share the same storage, so one subscription covers the server rather than three.
Questions
No. A link works until you delete the file, or until a retention policy you set on its folder removes it. There is no signed query string and no time limit.
Related
Updated Oct 26, 2026