Installing Everyday Animations
Installing this pack is one line in server.cfg. Getting an animation onto a character takes one more thing, because the pack has no menu, no command and no key binding — read What you still need before you call the job done.
What you install is 38 .ycd files and a reference table. The server script is a single print, and there is no code anywhere in the resource that plays a clip. That is the normal shape for an asset pack, and it is what makes Check it worked the section to read carefully: the console line you get on start proves less than it looks like it does.
Requirements
| Required | ||
|---|---|---|
| RedM server | Yes | On a current server build. The manifest declares fx_version 'cerulean' and lua54 'yes' |
| Asset packs | Yes | The manifest declares dependency '/assetpacks' |
| Framework | No | VORP, RSG, RedEM:RP or none. The pack never touches one |
| Database | No | The only server script is a single print |
| OneSync | No | Nothing is replicated and nothing is stored |
| An emote menu or your own script | In practice, yes | Nothing in the pack plays an animation. Something has to call the natives |
That last row is the one that surprises people. The 94 animations are all present and all playable, but the thing that plays them is yours.
Asset packs is a real entitlement check, not boilerplate
dependency '/assetpacks' is checked by Cfx.re against your server's licence key. This pack streams 38 files, so the requirement is genuine.
Without the entitlement the resource starts and nothing streams, so no animation plays. That failure is quiet: your menu opens, your command answers, and the character stands still. It is the most common cause of "the list works but nothing happens" on a pack like this. Enable asset packs for your key in the Cfx.re portal before you debug anything else.
No npm, no build step, no SQL import, no extra resources.
Install
Unzip the download into a folder your server loads resources from. As it arrives the folder is
rm_everyday_v1:textresources/[animations]/rm_everyday_v1 resources/[standalone]/rm_everyday_v1Keep the name lowercase and without spaces, and strip any version suffix the unzip adds, such as
rm_everyday_v1-1.0.0. You may rename the folder, as long as theensureline follows it — see Folder name, resource name and the dictionary names.Check for a doubled folder level. Unzipping into a folder you already named creates
rm_everyday_v1/rm_everyday_v1/, which the server reads as an empty resource. The test is one path:textresources/[animations]/rm_everyday_v1/fxmanifest.luaIf
fxmanifest.luais not directly inside the folder you pointensureat, move the inner folder up a level.Add one line to
server.cfg:cfgensure rm_everyday_v1Order barely matters. There is one
printon the server and no database to wait on, andstream/is mounted by the platform itself. The one case worth respecting is an emote resource that reads dictionaries while it starts: put this line before or alongside it.Restart the server, or from the server console:
textrefresh ensure rm_everyday_v1
A correct tree
There is no config.lua, no client.lua and no html/ folder, and none of them are missing. The pack does not have them:
rm_everyday_v1/
fxmanifest.lua
clips.lua
server.lua
README.md
CHANGELOG.md
docs/
stream/
rm@casual_actions.ycd
rm@[email protected]
rm@communication_gestures.ycd
rm@[email protected]
... 38 in total, about 4.7 MBNineteen dictionaries, each shipping as a male and a female file, which is where 38 comes from. None is missing and none is unused — every dictionary named in clips.lua has both of its files on disk. The pairing rule is on the animation list.
The Markdown files inside the download, at the root and in docs/, were written alongside development and describe a fuller build than the one you have. Where they disagree with these pages, these pages were written from the Lua.
Folder name, resource name and the dictionary names
Three names are in play here and they are not the same thing, so it is worth being precise about which one the server uses.
In CFX, the resource name is the directory name. The name field in fxmanifest.lua is descriptive metadata; it renames nothing, and the server never loads a resource by it. This manifest says name 'rm' while the folder says rm_everyday_v1, and the folder is the one that counts.
So there is exactly one rule:
The ensure line must match the folder on disk
Nothing else. If the folder is rm_everyday_v1, write ensure rm_everyday_v1. If you rename it to something shorter, write that instead.
| Folder on disk | Line in server.cfg | Works |
|---|---|---|
rm_everyday_v1 | ensure rm_everyday_v1 | Yes |
rm_everyday | ensure rm_everyday | Yes |
rm_everyday_v1 | ensure rm | No — there is no resource by that name |
rm_everyday_v1-1.0.0 | ensure rm_everyday_v1 | No — rename the folder first |
Renaming is safe here, and that is worth saying plainly: nothing in the pack is keyed to the folder name. There is no command, no key binding and nothing for another resource to call, so a rename cannot break an interface that does not exist. Pick a name, keep it, and keep the ensure line matching.
The dictionary names are a separate matter again. Every dictionary is rm@…, and that prefix comes from inside the .ycd files themselves, not from the resource. Renaming the folder to taco would still leave you playing rm@salute.
Never rename a .ycd file
An RDR2 dictionary stores its own name inside the file. Renaming the file does not rename the dictionary — it only makes the two disagree, and that one dictionary becomes unreachable while the other 18 keep working. If one group of animations fails and the rest are fine, this is almost always why.
If you need different dictionary names, they have to be changed at export time, not on disk.
Check it worked
On start, server.lua prints one line to the server console:
[rm] Animation pack started.That line is hardcoded, so it says rm whatever you named the folder.
The console line proves the resource mounted, and nothing more
It tells you the folder was found, the manifest parsed and the resource started. It does not prove a .ycd reached a client, and it cannot prove an animation will play, because the pack contains no code that plays one.
The next check is client-side. In the F8 console in game:
DoesAnimDictExist('rm@salute')true means the dictionary streamed to your client. false means the resource is not started, you never ran refresh after copying the folder in, or the asset-pack entitlement is missing.
The pack ships no command to test with, so the only check that proves the whole chain is playing a clip from your own code. Paste this into F8 — it reports the failure instead of leaving you looking at a character who is doing nothing:
CreateThread(function()
local dict, clip = 'rm@salute', 'salute'
if not DoesAnimDictExist(dict) then
print('FAILED: ' .. dict .. ' does not exist. Is the resource started?')
return
end
RequestAnimDict(dict)
local deadline = GetGameTimer() + 5000
while not HasAnimDictLoaded(dict) do
if GetGameTimer() > deadline then
print('FAILED: ' .. dict .. ' never loaded')
return
end
Wait(0)
end
TaskPlayAnim(PlayerPedId(), dict, clip, 4.0, -4.0, -1, 1, 0.0, false, 0, false, 0, false)
print('SUCCESS: salute is playing. ClearPedTasks(PlayerPedId()) to stop it.')
end)To stop it:
ClearPedTasks(PlayerPedId())The timeout in that script matters. A clip asked for from a dictionary that never loaded fails silently — no error, no red line, the character stands there. Always guard with DoesAnimDictExist, always wait on HasAnimDictLoaded, and always give the wait a deadline.
Two details in the TaskPlayAnim call are worth noting now rather than debugging later. RDR3's TaskPlayAnim takes thirteen arguments, and its flag values are not GTA V's — a flag word copied out of a FiveM script does not mean the same thing here. Treat 1 as the known-good starting point and verify any variant in game. The -1 is the duration, meaning no time limit, so with a looping flag the clip runs until something stops it. The full argument list is on Playing an animation.
On a female character, swap the dictionary for rm@salute@f. The clip name does not change — that holds on all 94 rows, so choosing a body is a dictionary swap rather than a lookup.
Verification checklist
| Step | How | Expected |
|---|---|---|
| Asset packs | Server console on start | No entitlement error |
| Resource mounted | Server console after ensure | [rm] Animation pack started. |
| Male dictionary streamed | DoesAnimDictExist('rm@salute') in F8 | true |
| Female dictionary streamed | DoesAnimDictExist('rm@salute@f') in F8 | true |
| An animation plays | The script above, in F8 | The character salutes |
| Stop works | ClearPedTasks(PlayerPedId()) | The character returns to idle |
Then run the same test through whatever will actually drive the pack in production — your own code or your emote menu — because that is the layer the pack does not supply.
Common install mistakes
| Mistake | Symptom | Fix |
|---|---|---|
| Asset packs not enabled | The resource starts, nothing streams, nothing plays | Enable asset packs on your Cfx.re key |
ensure name and folder name disagree | Couldn't find resource in the console | Make the line match the folder |
| Doubled folder level | Same | fxmanifest.lua must be directly inside the folder |
| Version suffix left on the folder | Same | Rename the folder |
Forgot refresh | Dictionaries missing after copying the folder in | refresh, then ensure |
Renamed a .ycd | One group of animations fails, the rest work | Restore the original name |
| Typo in a dictionary name | Nothing plays, no error | Copy the name from the animation list |
| Waiting for a menu or a command | Nothing happens on any key | There is none. See below |
| Expecting FiveM | Nothing loads at all | These are RDR2 .ycd files. RedM only |
What you still need
This is the honest part of the page, and it is better read now than discovered after a restart.
| You have | You do not have |
|---|---|
38 streamed .ycd dictionaries, 19 pairs | An in-game menu |
| 94 animations, each with a male and a female version | A chat command |
A readable, editable clips.lua | A key binding |
| A server console line on start | Any exports or events |
| Any config options | |
| Any client-side code that plays a clip |
So one more step is needed before players can use the pack, and there are two routes:
- Feed the pairs to the emote menu you already run. The dictionary and clip values from the animation list go straight into an emote table. RedM Emotes takes them — see three ways to add an emote. Other emote systems work the same way with their own table format. Worked examples are on Integrating.
- Or write the few lines yourself.
RequestAnimDict, wait forHasAnimDictLoaded, thenTaskPlayAnim, andClearPedTasksto end it. Walked through on Playing an animation.
Three things to know before you build either one.
Picking the body is yours to do. Request dict for a male ped or dict .. '@f' for a female one. IsPedMale is reliable on standard multiplayer and story peds and can be wrong on heavily customised ones, so prefer your own server's character-sex field where you have one. Either version plays on either body; the matching one fits better.
Some rows need handling. Five animations are single-frame poses that flash and vanish unless they hold, four move the character and want full-body play and a little space, and two ids appear twice. All of them are listed under Special cases.
Config.Clips is not readable from another resource. clips.lua is a client script in this pack, so the table does exist on the client at runtime — but it is a global inside this resource, and CFX gives every resource its own Lua state. Your script cannot see it however it asks. Copy the rows into your own resource, or add your own client script to this one. Both are on Integrating.
About the clip list in the download
clips.lua holds all 94 rows, and 15 of them are live while 79 are commented out — the 15 greetings are active and the four larger blocks are not.
Nothing is missing from your download, and this is worth being exact about. All 38 .ycd files are present, and every one of the 94 clip names resolves inside them. An emote menu handed a dictionary and a clip name plays any of the 94 today. Nothing in the pack reads the table either, so the split has no effect at runtime.
It matters in one case: copying rows out of clips.lua instead of out of the animation list. Then you get 15 rows and wonder where the rest went.
Uncommenting the blocks does not merge them
The file contains five Config.Clips = { statements. Each one assigns, so it replaces whatever the previous one set rather than adding to it. Uncomment all four blocks and you are left with the contents of the last one alone, silently, with no error anywhere.
Merge the rows into a single table instead, and resolve the two duplicate ids at the same time. The clips.lua file walks through it, and the duplicates are on the animation list.
Updating
Back up your
clips.luaif you edited it.escrow_ignorecoversclips.luaand the.ycdfiles, so the clip list ships readable and editable — and a fresh copy will overwrite your labels, categories, modes and any rows you uncommented or merged.Stop the resource, or stop the server.
Replace
stream/,fxmanifest.luaandserver.luawith the new versions, keeping the folder name the same so yourensureline still matches. Do not mix files from two versions.Merge your edits back into the new
clips.lua. Diff the two rather than dropping your old file in blind — a new version may add rows you want, and your old file would hide them.refresh, thenensurethe resource, and re-run the F8 play test above.
The .ycd files are assets rather than Lua, and the dictionary and clip names inside them do not change between installs. So a reinstall never invalidates a name you already put in a menu.
Which leads to the thing people forget: your emote menu holds its own copy of the dictionary and clip names. Editing clips.lua changes nothing in game on its own. The names have to be in the menu's config too.
Single-player RDR2 through Lenny's Mod Loader
The files in stream/ are standard RDR2 clip dictionaries, so they also work outside RedM.
Install Lenny's Mod Loader for RDR2 if you have not already.
Create a mod folder with a
streamdirectory inside it, under the mod loader's own mods folder.Copy the
.ycdfiles fromstream/into it. Keep the file names exactly as they are.Play a clip with any script or trainer that takes a dictionary and a clip name.
The dictionary and clip names are identical to the RedM side, so the animation list is still the reference table.
Nothing else from this page applies there
There is no server.cfg, no ensure line and no asset-pack entitlement in single-player. fxmanifest.lua and server.lua are ignored, and clips.lua is only a reference document — nothing loads it. Copying stream/ across is the whole installation.
Next
- Playing an animation — the natives, the thirteen arguments, the loading wait, stopping cleanly
- Animation list — all 94 with dictionary, clip name, length and mode
- The clips.lua file — every field, what reads it, and merging the blocks
- Integrating — getting the list into your own resource or an emote menu
- Troubleshooting — symptom, cause, fix
- FAQ — the short answers
- Animation Basics — how RedM animations work in general
- 100+ Female Poses — another assets-only pack, female dictionaries only
- 24+ Dances and 30+ Dances — the dance packs, both run alongside this one
- RedM platform notes — artifacts, natives and the differences from FiveM