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 · StartScreenEffect & SetTimecycleModifier
Two systems, constantly mistaken for one. 173 animpostfx effects you start with StartScreenEffect, and 1,088 timecycle modifiers you set with SetTimecycleModifier. Both are searchable here, both come with a Lua call you can paste, and the difference between them is explained below — because knowing which one you want is most of the job.
Names from the publicly published GTA V data dumps — animPostFxNamesCompact.json and timecycleModifiers.json — with the native signatures read from the Cfx.re natives repository. Nothing here is invented and nothing is padded.
THE ONE THING WORTH READING
An animpostfx is an animation the game plays over your screen and then finishes. A timecycle modifier is a change to how the world is rendered that stays until you undo it. Almost every screen-effect bug in FiveM comes from treating the second one like the first.
| animpostfx | timecycle modifier | |
|---|---|---|
| What it is | A keyframed post-process animation authored in the game’s animpostfx data. It has its own fade in, hold and fade out baked in, and that curve is the effect. | An override of the world’s timecycle values — colour grading, exposure, bloom, fog, depth of field, light intensity — defined in the timecycle_mods XML files. |
| You start it with | StartScreenEffect(name, duration, looped), which is ANIMPOSTFX_PLAY. The name is a plain string. | SetTimecycleModifier(name). The name is a plain string here too — neither system takes a hash. |
| How many at once | As many as you like. Effects stack, which is how the game layers a character-switch wash over a mission tint. | One. Setting a second modifier replaces the first. SetExtraTimecycleModifier gives you a second slot, and that is the whole budget. |
| Intensity control | None. There is no strength argument — you get the duration and the loop flag, and the authored animation decides the rest. | SetTimecycleModifierStrength(float) blends the modifier against the untouched scene, so the same modifier can be a hint or a wall. |
| Does it end on its own | Yes, unless you passed looped = true. Pass 0 as the duration and it plays its authored length. | Never. A timecycle modifier is a state, not an animation. It sits there until something clears it. |
| How you clear it | StopScreenEffect(name) for one, StopAllScreenEffects() for the lot. | ClearTimecycleModifier(), plus ClearExtraTimecycleModifier() if you used the second slot. |
| How you check it | AnimpostfxIsRunning(name) returns a boolean per effect. | GetTimecycleModifierIndex() returns -1 when nothing is set. There is no name to read back. |
Signatures: ANIMPOSTFX_PLAY, ANIMPOSTFX_STOP, ANIMPOSTFX_STOP_ALL, ANIMPOSTFX_IS_RUNNING, SET_TIMECYCLE_MODIFIER, SET_TIMECYCLE_MODIFIER_STRENGTH, CLEAR_TIMECYCLE_MODIFIER, SET_EXTRA_TIMECYCLE_MODIFIER and GET_TIMECYCLE_MODIFIER_INDEX. StartScreenEffect and StopScreenEffect are the FiveM aliases for the two animpostfx natives — same function, friendlier name.
HOW TO USE IT
Get the effect on screen first with the simplest possible call. Durations, loops and strengths are a second problem, and the cleanup is a third — except it is the one your players will notice.
If you want a flash, a wash, a transition or a timed overlay that plays and finishes, that is an animpostfx effect. If you want the world itself to look different for as long as something is true — a night-vision scope, a drunk state, an interior grade — that is a timecycle modifier.
Both natives take a string and both fail silently on a typo. Use the copy button and the capitalisation comes with it.
StartScreenEffect(name, 0, false) plays the authored length. That tells you whether the effect exists and what it looks like before you start arguing with durations and loops.
SetTimecycleModifier(name) followed by SetTimecycleModifierStrength(1.0). Drop the strength towards 0.0 until it stops looking like a filter and starts looking like weather.
StopAllScreenEffects(), ClearTimecycleModifier() and ClearExtraTimecycleModifier() in an onResourceStop handler, and the same three on respawn. Do this first and you will never ship the green-screen bug.
Client-side. /fx PeyoteIn loop holds it open, /fxstop PeyoteIn releases it, /fxstop on its own clears everything. Duration 0 plays the effect's own authored length.
local EFFECT = "ChopVision"
RegisterCommand("fx", function(_, args)
local name = args[1] or EFFECT
local looped = args[2] == "loop"
StartScreenEffect(name, 0, looped)
end, false)
RegisterCommand("fxstop", function(_, args)
if args[1] then
StopScreenEffect(args[1])
else
StopAllScreenEffects()
end
end, false)
RegisterCommand("fxrunning", function(_, args)
print(args[1], AnimpostfxIsRunning(args[1]))
end, false)Client-side. /tc scanline_cam 0.6 sets the modifier and blends it at 60 per cent. Set the modifier first and the strength second — the strength applies to whatever is active when you call it.
local MODIFIER = "scanline_cam"
RegisterCommand("tc", function(_, args)
SetTimecycleModifier(args[1] or MODIFIER)
SetTimecycleModifierStrength(tonumber(args[2]) or 1.0)
end, false)
RegisterCommand("tcstrength", function(_, args)
SetTimecycleModifierStrength(tonumber(args[1]) or 1.0)
end, false)
RegisterCommand("tcoff", function()
ClearTimecycleModifier()
ClearExtraTimecycleModifier()
end, false)
print("timecycle active:", GetTimecycleModifierIndex() ~= -1)WRITE THIS FIRST
A timecycle modifier is client-side render state. It survives your resource stopping, it survives death, and it survives a reconnect that did not restart the game. This handler is three lines and it is the difference between a feature and a support ticket.
Client-side. The /unstick command is worth shipping on its own: it lets a player fix a stuck screen without restarting the game, and it costs you nothing.
local function wipeScreenState()
StopAllScreenEffects()
ClearTimecycleModifier()
ClearExtraTimecycleModifier()
SetTimecycleModifierStrength(1.0)
end
AddEventHandler("onClientResourceStop", function(resource)
if resource ~= GetCurrentResourceName() then return end
wipeScreenState()
end)
AddEventHandler("playerSpawned", function()
wipeScreenState()
end)
RegisterCommand("unstick", function()
wipeScreenState()
end, false)This is the single most reported screen bug in FiveM, and it is not a bug. SetTimecycleModifier writes a client-side render state. Stopping the resource does not clear it, dying does not clear it, and reconnecting a client that never reloaded the game does not clear it either. The player is left staring at a green world and blaming your resource, correctly. Call ClearTimecycleModifier in an onResourceStop handler and on every respawn, every time.
SetExtraTimecycleModifier layers a second modifier on top of the primary one, and ClearTimecycleModifier does not touch it. If the screen is still tinted after a clear, the extra slot is where to look. Clear both and you cannot be wrong.
Both systems take a string, neither returns anything, and neither logs anything. StartScreenEffect("chopvision") does nothing at all because the name is ChopVision. Copy the row from this page rather than retyping it: the animpostfx names are mixed case and several of them are inconsistently cased in the game data itself.
SetTimecycleModifierStrength acts on whatever modifier is currently active. Call it before SetTimecycleModifier and you have set the strength of the thing you just replaced. Set the modifier first, then the strength, in that order, every time you change either one.
StartScreenEffect(name, 0, true) holds the effect until something stops it. If the code path that was going to call StopScreenEffect can be skipped — an early return, an error, a player quitting a job — the effect stays up. Pair every looped start with a stop in a cleanup handler, not only in the happy path.
The loop flag is documented as working on loopable effects only. Pass true on an effect that was authored as a one-shot and it plays once and ends anyway. The list on this page marks which effects ship with a dedicated stop counterpart, which is the best public signal of what will hold.
WHICH ONES LOOP
The game does not publish a loop flag, so nobody can hand you a verified list of loopable effects. What the data does show is which effects were authored as a pair, and that is the strongest public signal there is.
StartScreenEffect(name, 0, true) holds an effect open until you stop it, and the native’s own documentation adds the caveat that this works on loopable effects only. Of the 173 names in the dump, 40 are themselves stop effects — the ones ending in Out — and 39 have one of those waiting for them: ArenaEMP has ArenaEMPOut, PeyoteIn has PeyoteOut, SwitchHUDIn has SwitchHUDOut. An effect built with its own release is an effect built to be held. The remaining 94 have no partner and are best treated as one-shots.
This is our derivation from the naming in the dump, not the engine’s loop flag, and we are labelling it as such. It is reliable enough to plan with and cheap enough to check: paste the test command above, pass loop, and you will know in ten seconds. Two details worth knowing before you do. The pairing is not always a plain Out on the end: some effects swap an In suffix for Out, so MenuMGHeistIn is released by MenuMGHeistOut, and two use an underscore, so MP_Celeb_Win is released by MP_Celeb_Win_Out. We read all three forms. And StopScreenEffect works on any running effect whether or not a matching Out exists, so it is always the safe way to take an effect down.
Client-side. A looped effect with a SetTimeout stop is safer than trusting a duration, because you can cancel it. The timecycle half shows why strength is the useful knob: 0.6 of drug_wobbly is a wobble, 1.0 is unplayable.
local function flash(name, ms)
StartScreenEffect(name, 0, true)
SetTimeout(ms, function()
StopScreenEffect(name)
end)
end
local function drunk(seconds)
SetTimecycleModifier("drug_wobbly")
SetTimecycleModifierStrength(0.6)
SetTimeout(seconds * 1000, function()
ClearTimecycleModifier()
ClearExtraTimecycleModifier()
end)
end
flash("REDMIST", 2500)
drunk(20)OUR APPROXIMATIONS
There is no legal way for us to show you the real thing. Game captures of these effects are Rockstar's footage, and hosting them would be infringement whatever it did for our traffic. So here is the honest alternative: a street scene we drew ourselves, with a CSS filter over it that we think gets close.
Every tile below is our approximation, not a screenshot and not a capture. The scene is our own drawing and the effect is a CSS filter we wrote. Each tile says what the approximation is based on: read straight from the effect’s name, taken from a consistent community description, or an outright guess on our part. Treat the guesses as guesses. The only authority on what an effect looks like is the game.
THE STRENGTH ARGUMENT
SetTimecycleModifierStrength is the only intensity control either system gives you, and it turns a fixed look into a dial.
It blends the active modifier against the untouched scene. At 0.0 the modifier is set but invisible; at 1.0 you get the look the artists authored. Everything in between is a proportional mix, which is how the same modifier serves as a hint of a hangover and as a reason to pull over.
The published native documentation gives no range at all. Values above 1.0 are accepted and push past the authored look, but that is community habit rather than a specification — test it, do not assume it.
SetTimecycleModifier first, SetTimecycleModifierStrength second. The strength acts on whatever modifier is active at the moment you call it, so calling it first sets the strength of the modifier you are about to replace.
Re-apply the strength whenever you change the modifier, and reset it to 1.0 in your cleanup so the next thing that sets a modifier gets a clean dial.
The modifier list on this page shows that count per modifier. It is how many timecycle values the modifier overrides — the heaviest in the dump changes 136 of them, and a modifier that touches two is a nudge. It is the fastest way to guess whether a name you have never heard of is a subtle grade or a whole new world.
13 of the 1,088 modifiers record no modifications at all. They are in the game data, so they are in this list, but expect nothing visible from them.
301 modifiers ship with the base game and 783 arrived in title updates, with a handful more carrying a specific DLC name. Filter by source in the list if you are trying to work out whether a modifier will exist on an older build.
The animpostfx list carries no such split: the dump records the names only, so we do not claim to know which update each effect arrived in.
QUESTIONS
Every tattoo, badge and decal the game ships, with both hashes and the reason they vanish when the ped model changes.
Particle effect listEvery ptfx effect with its asset, and the loading step that decides whether you get a plume or nothing at all.
All the free toolsThe reference tables, the calculators and the generators on this site.
Names from the publicly published GTA V data dumps; native signatures from the Cfx.re natives repository. GTA V, its effects and its art are the property of Take-Two Interactive and Rockstar Games — see our trademark and IP notice.
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.

A native hud.gfx replacement rather than an NUI overlay, so it costs no frame time. Colours, shape and motion are yours before you pay.
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.