Pepper Loadingscreen
Free loading screen with real loading progress, video, player welcome and info cards – standalone.
Overview
Pepper Loadingscreen shows a short intro video when players connect, flowing seamlessly into a loop. On top of it you
get the server name, a subtitle, real loading progress with loading phases, a welcome with player name and player
count, rotating info cards and tips. You set everything up in html/config.js (or html/custom.js) – any framework.
Features
- Intro video → seamless loop, both replaceable (WebM or image)
- Real loading progress with bar, percentage and text per loading phase
- Welcome with player name and player count on connect
- Rotating info cards and tips with counter and timer bar, optional QR code (e.g. for your Discord)
- 3 layouts:
classic,center,side - German and English with automatic language selection, accent color, darkening, video sound
html/custom.jsfor your own settings that survive updates- Standalone, no dependencies; no script runs in game
Requirements
| Dependency | Required/optional | What for | Link |
|---|---|---|---|
FiveM server (fx_version 'cerulean') |
required | Any recent build | https://runtime.fivem.net/artifacts/fivem/ |
| Framework | not needed | Works with ESX, QBCore, Qbox or no framework | – |
| OneSync | not needed | – | – |
| Database | not needed | Stores nothing – no database, no oxmysql | – |
| Multicharacter script | optional | May close the loading screen itself (see "Multicharacter") | – |
Installation
- Download the resource from the Cfx.re Portal (https://portal.cfx.re/assets/granted-assets).
- Extract it to
resources/[pepper]/pepper_loadingscreen. Do not rename the folder. - Remove other loading screens – FiveM only shows one. Delete them from
server.cfgand fromresources. - Add it to your
server.cfg:ensure pepper_loadingscreen - Adjust
html/config.js(or copyhtml/custom.example.jstohtml/custom.js) and restart the server. There is no database and there are no items.
First test
- Connect to the server – the intro video starts and flows into the loop.
- The loading bar with percentage runs, the text changes with the loading phases (game data, map, scripts, session).
- Check the welcome "Welcome, <name>" and the player count.
- Change
serverNameinhtml/config.js, restartpepper_loadingscreenand reconnect – only then do you see the change.
Configuration
| File | Controls |
|---|---|
html/config.js |
All settings and texts (language, layout, color, video, progress, welcome, cards, QR code, tips) |
html/custom.js |
Your own values that override config.js – never shipped by updates (template custom.example.js) |
html/media/ |
Videos and still image (intro.webm, loop.webm, poster.jpg) |
html/style.css |
Look, for deeper changes |
fxmanifest.lua |
loadscreen_manual_shutdown for multicharacter scripts |
General, video and progress
window.PEPPER_LOADINGSCREEN = {
locale: "auto",
layout: "classic",
accentColor: "#e5484d",
video: { intro: "media/intro.webm", loop: "media/loop.webm", poster: "media/poster.jpg", sound: false, volume: 0.3, shade: 0.25 },
// …
};
| Option | Default | Description |
|---|---|---|
locale |
"auto" |
"auto" (player's language, otherwise English), "de" or "en" |
layout |
"classic" |
"classic" (bottom), "center" (centered) or "side" (left sidebar) |
accentColor |
"#e5484d" |
Accent color (lines, dots, tip bar) |
video.intro |
"media/intro.webm" |
Plays once – WebM or image, "" = off |
video.loop |
"media/loop.webm" |
Loops afterwards – WebM or image, "" = off |
video.poster |
"media/poster.jpg" |
Still image until the video plays or if it does not load |
video.sound / video.volume |
false / 0.3 |
Video sound on/off, volume 0–1 |
video.shade |
0.25 |
Darkening 0–1 for readability |
progress.enabled / percent / phases |
true |
Loading bar, percentage, text per loading phase |
Welcome, cards, QR code and tips
| Option | Default | Description |
|---|---|---|
welcome.name / welcome.players |
true / true |
Welcome with player name, player count (from sv_maxclients) |
cards.enabled / cards.interval |
true / 10 |
Info cards on/off, seconds per card |
qr.url |
"" |
Link for the QR code, e.g. your Discord, "" = off |
tips.enabled / tips.interval / tips.shuffle |
true / 8 / false |
Tips on/off, seconds per tip, random order |
locales.<language> |
de, en |
Server name, subtitle, loading texts and phases, welcome ({name}), player count ({players}, {max}), cards, QR text, tips |
Your own video
Use WebM (VP9 or VP8) – FiveM can not play MP4 with H.264. Recommended: 1920×1080, 30 fps, ideally under 10 MB (players download the files when connecting). Convert it e.g. with HandBrake (preset "WebM") or ffmpeg:
ffmpeg -i video.mp4 -c:v libvp9 -b:v 5M -an loop.webm
Put the file into html/media/ and enter it, e.g. loop: "media/my-video.webm". Only one video? Set intro: ""
and use your video as loop. An image (.jpg, .png, .webp) works instead of a video, too.
Own settings that survive updates
Copy html/custom.example.js to html/custom.js and only enter what differs from config.js. Lists such as tips or
cards are replaced as a whole.
window.PEPPER_LOADINGSCREEN_CUSTOM = {
qr: { url: "https://discord.gg/your-server" },
locales: { de: { serverName: "Mein Server" }, en: { serverName: "My Server" } },
};
Multicharacter
By default FiveM closes the loading screen automatically. If your multicharacter script closes it itself
(ShutdownLoadingScreenNui), uncomment this line in fxmanifest.lua:
loadscreen_manual_shutdown 'yes'
Commands and permissions
Pepper Loadingscreen has no commands, no keys and no permissions. It is only visible while connecting; on the server,
server/handover.lua passes the player name and player count to the loading screen once per connect.
FAQ
The video is black or missing?
The file is MP4 or the path is wrong – use WebM (VP9/VP8) and check the path in config.js. Until the video plays, the
loading screen shows the still image from video.poster.
The old loading screen still shows up?
Remove the other loading screen from server.cfg and resources and clear your FiveM cache. FiveM only shows one
loading screen.
My changes are not visible?
Restart the resource and reconnect – loading screens are downloaded when connecting.
The loading screen closes too early or too late?
If your multicharacter script closes the loading screen itself, uncomment loadscreen_manual_shutdown 'yes' in
fxmanifest.lua (see "Multicharacter"). Without such a script, leave the line commented out.
Does it work with my framework?
Yes. The loading screen is standalone and works with ESX, QBCore, Qbox and any other framework.
Does it cost performance in game?
No. No script runs in game; measured at 0.00 ms. Only on the server a small script passes the name and player count on connect.
Does it interfere with my queue or whitelist?
No. The server script only uses deferrals.handover and no deferrals.defer(), so queue and whitelist scripts stay
untouched.
The welcome or player count is missing?
Both come from the server script on connect. Check that server/handover.lua is still listed in fxmanifest.lua and
welcome.name / welcome.players are true. Without the data both lines stay hidden.
Can I use an image instead of a video?
Yes. Enter an image path (.jpg, .png, .webp) as loop and set intro: "".
How do I change the color and the layout?
accentColor sets the accent color, layout picks classic, center or side. For more, edit html/style.css.
How do I change texts, tips and info cards?
Under locales.de and locales.en in config.js (or in your custom.js). With locale: "auto" every player gets
German or English matching their game language.
How do I update Pepper Loadingscreen?
New versions appear in the Cfx.re Portal (Granted Assets) and are announced in Discord. With html/custom.js your
settings survive the update; otherwise back up html/config.js and your own videos from html/media/ first.
Support
Questions or bugs? Open a ticket in our Discord: https://discord.gg/6NaFJWKDYu – link your purchase with /verify
first.
Permanently tested on the Pepper Scripts dev server.
Changelog
Current version 1.1.0: real loading progress, welcome with player count, info cards, QR code, three layouts,
automatic language selection and custom.js. All changes are listed in the CHANGELOG.md in the resource folder.
Found a mistake? Report it on Discord.