100+ Female Poses
99 custom female pose animations for RedM, streamed as native RDR2 .ycd dictionaries, with a readable clips.lua listing every dictionary and clip name.
It is an asset pack. It streams the animations and tells you what they are called. It does not play them for you — there is no menu, no chat command and no export. You drive the clips from your own script or your emote resource.
No framework No database 99 poses Female only Asset pack — no menuThe 60-second version
Unzip into
resources, keeping the folder namerm_100_female_pose:resources/[animations]/rm_100_female_poseAdd one line to
server.cfg:cfgensure rm_100_female_poseRestart, or from the server console:
refresh ensure rm_100_female_poseCheck the server console.
server.luaprints one line and that line is the whole of its server-side behaviour:[redmorrow] Female animation pack started.
No framework, no database, no SQL, no build step. One ensure line and nothing else.
Nothing happens in game yet, and that is correct
That console line is the only confirmation the pack gives you. There is no key to press and no command to type. Until you add code that calls TaskPlayAnim, the 99 dictionaries are sitting on the client unused.
Go to Playing a pose next.
Your server key needs asset packs enabled
The manifest declares dependency '/assetpacks', a licence-key entitlement check. Without it the resource refuses to start, and nothing in the resource can work around it. See Installation.
This is an asset pack, not an emote menu
This is the thing most worth knowing before you install it. The resource is five items:
fxmanifest.lua | cerulean, rdr3, lua54. Loads clips.lua as a client script and server.lua as a server script. Declares dependency '/assetpacks' |
clips.lua | A data table and nothing else. Sets the global Config.Clips — 105 rows, 99 of them live |
server.lua | One line. A print that confirms the resource started |
stream/ | 104 .ycd dictionaries, 452 KB total |
README.md | Out of date — see below |
There is no client.lua, no config.lua and no html/ folder. So:
| Not in this pack | Consequence |
|---|---|
No client.lua | Nothing requests a dictionary or calls TaskPlayAnim. No pose can play on its own |
| No menu, no NUI | Players have nothing to open |
No RegisterCommand | There is no chat command |
| No key binding | There is no key to press |
| No exports | exports['rm_100_female_pose'] has no methods on it |
No config.lua | There are no settings to change. Everything tunable lives in clips.lua |
The sibling 30+ Female Poses pack does ship a menu, a command and five exports, and can be handed to players as-is. This one cannot. If you were expecting the same shape, that is the difference.
There are two routes to actually using it:
| Route | Page |
|---|---|
| Write a few lines of Lua that play a clip by dictionary and clip name | Playing a pose |
| Feed the 99 pairs into an emote resource you already run | Integrating |
The minimum that puts a pose on screen, in a client script of your own:
local dict, clip = 'redmorrow@pose5@f', 'pose5'
CreateThread(function()
RequestAnimDict(dict)
local timeout = GetGameTimer() + 5000
while not HasAnimDictLoaded(dict) do
if GetGameTimer() > timeout then
print('dictionary did not load — is rm_100_female_pose started?')
return
end
Wait(0)
end
TaskPlayAnim(PlayerPedId(), dict, clip, 4.0, -4.0, -1, 1, 0.0, false, 0, false, 0, false)
end)RDR3's TaskPlayAnim takes thirteen arguments
Its flag values are different numbers meaning different things from GTA V's, so a flag word copied from a FiveM script will not do what it says there. A clip requested from a dictionary that never loaded fails silently — the character simply stands there, with no error anywhere. Always wait on HasAnimDictLoaded with a timeout, as above.
Duration -1 loops forever. ClearPedTasks or ClearPedSecondaryTask stops it. For the rest, see Playing a pose and the RedM platform notes.
Config.Clips is not readable from another resource
CFX gives every resource its own Lua state, so a global set inside rm_100_female_pose does not exist in yours. Reading the list means either copying the table into your own resource or adding your own client script to this one. Both are covered in Integrating.
The README in the download is out of date
The README.md shipped inside the folder, and the comment header at the top of clips.lua, describe a version of this pack that is not the one you downloaded. They mention an in-game menu, a /redmorrow command, exports['redmorrow']:Play() and :GetClips(), a Config.ForceBody option, and the files config.lua, client.lua and html/.
None of that exists in build 1.0.0. The files are not in the zip.
| The README says | This build |
|---|---|
| An in-game menu | No menu, no html/ |
/redmorrow <id> | No command registered |
exports['redmorrow']:Play() / :GetClips() | No exports |
Config.ForceBody | No config.lua |
| A male body variant per clip | bodies carries female only, on all 99 rows |
A walk field and a flags field per clip | Documented in the header, present on no row |
Treat clips.lua itself — the table, not its comment header — as the authority, and these docs as the manual. The header's one genuinely useful paragraph is the TaskPlayAnim call, which is correct and is reproduced above.
What is actually in it
| Poses that play | 99 |
Rows in clips.lua | 105 — six are commented out |
| Stream files | 104 .ycd, 452 KB total |
| Format | Native RDR2 .ycd |
| Dictionary prefix | redmorrow@ … @f |
| Body | Female only |
| Mode | Every row is loop |
| Root motion | None. No pose moves the character |
| Server scripts | One print |
Every live clip has its dictionary present in stream/ — zero missing. Five .ycd files belong to no live entry: redmorrow@pose35@f, redmorrow@pose78@f, redmorrow@pose87@f, redmorrow@pose93@f and redmorrow@redmorrow_p3@f.
The full table, with the dictionary, clip and duration of all 99, is on the animation list.
The pack is named "100+" and 99 play
Ninety-nine is the real number
clips.lua has 105 rows and six are commented out — pose78, pose87, pose93, redmorrow_p23, pose29 and pose35. That leaves 99 live, one short of the hundred the name promises.
Nothing is missing from your download. Those rows' .ycd files are still in stream/, so re-enabling one is deleting the leading -- from its line and restarting the resource. See The clips.lua table.
Requirements
| Required | ||
|---|---|---|
| RedM server | Yes | Any build supporting fx_version 'cerulean' and lua54 'yes' |
| Asset packs | Yes | The manifest declares dependency '/assetpacks' |
| Your own code, or an emote resource | Yes | The pack cannot play a pose by itself |
| Framework | No | VORP, RSG, RedEM:RP or none — it looks for nothing |
| Database | No | No SQL, no server-side state |
The asset-pack entitlement is genuine here, not boilerplate: this resource streams 104 files. If the check fails, enable asset packs for your key in the Cfx.re portal.
Every pose is a looping, static, female-only hold
All 99 rows agree on three things, which keeps the integration simple:
mode = 'loop'. There is not one once or hold entry. Nothing in the pack is an action with a beginning and an end — they are poses, so they are meant to be held. Play them with duration -1 and clear the task to stop.
rootMotion = false. No pose walks, turns or slides the character. Where you start the clip is where the character stays.
bodies = { female = ... }. No male variant ships anywhere in the pack — there is no male .ycd and no male dictionary name. The clips will play on a male model, but they were authored for female proportions and usually look wrong on one.
Each row carries id, label, dict, clip, category, duration, mode, rootMotion and bodies. label and category are yours to rename and are the most worthwhile edit in the file: the 99 rows currently carry 99 different categories, so grouping by category buys you nothing until you rewrite them.
Six ids that do not match their dictionary
Ninety-three of the 99 follow the obvious pattern — id pose5 lives in dict redmorrow@pose5@f under clip pose5. Six do not:
| ID | Dictionary | Clip |
|---|---|---|
regard5 | redmorrow@regard6@f | regard5 |
pose1 | redmorrow@regard7@f | pose1 |
pose4 | redmorrow@regard8@f | pose4 |
hatsdown_clip | redmorrow@pose7@f | hatsdown_clip |
pose28 | redmorrow@pose27@f | pose28 |
pose47 | redmorrow@pose46@f | pose47 |
These six break any code that guesses
Building a dictionary name as 'redmorrow@' .. id .. '@f' works for 92 poses and silently fails on these seven — the dictionary never loads, no error is printed, and the character stands still. Read the dict and clip pair out of clips.lua, or copy it from the animation list.
redmorrow@pose47@f is a real dictionary, but it belongs to the separate row pose47_pose47, not to pose47. Guessing lands you on the wrong pose rather than on nothing, which is harder to notice.
Durations
The duration field spans 0.033 s to 89 s. The eight 0.033 s entries are single frames — one frame at 30 fps, which when looped is a static pose held indefinitely, exactly what a pose pack wants. The 59 s and 89 s entries are long idles with gentle movement in them.
| Duration | Poses |
|---|---|
| 0.033 s | 8 |
| 0.1 s | 10 |
| 1 s | 6 |
| 1.933 s | 5 |
| 1.967 s | 26 |
| 3.7 s | 4 |
| 9 s | 21 |
| 59 s | 1 |
| 89 s | 18 |
duration is metadata, and nothing reads it
It is a number the pack author wrote into clips.lua. No code in the pack consults it, and it is not read out of the .ycd. If a pose looks like it runs longer or shorter than the table says, trust the game — GET_ANIM_DURATION gives the real figure. Full breakdown on the animation list.
The folder name is the resource name
In CFX the resource name is the directory name on disk. The name 'redmorrow' line in fxmanifest.lua is metadata and renames nothing.
The download is rm_100_female_pose.zip, so the folder is rm_100_female_pose and the line is ensure rm_100_female_pose. The README tells you to rename the folder to redmorrow and use ensure redmorrow — that works too. Either is fine, and nothing in the pack breaks either way, because the dictionary names (redmorrow@…@f) are baked inside the .ycd files and are completely independent of the resource name.
The only rule: the ensure line must match the folder name on disk. Strip any version suffix like rm_100_female_pose-1.0.0 before adding it.
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 dictionary becomes unreachable.
What you can edit
escrow_ignore covers clips.lua and README.md, so clips.lua ships readable and editable and stays that way after escrow. The .ycd files in stream/ are assets rather than Lua, so escrow does not apply to them.
| Editable | Leave alone |
|---|---|
clips.lua — label, category, mode, and the six commented-out rows | dict and clip, which must match the names stored inside the .ycd |
README.md | stream/*.ycd file names |
Where to go next
| Page | What's in it |
|---|---|
| Installation | Requirements, folder name, the asset-pack check, verifying the dictionaries streamed |
| Playing a pose | The TaskPlayAnim call, loading a dictionary safely, looping and stopping |
| Animation list | All 99 with dictionary, clip and duration |
| The clips.lua table | Every field, the six commented-out rows, and what is safe to change |
| Integrating | Getting the list into your own resource or an emote menu |
| Troubleshooting | Symptom to cause to fix, including the silent failures |
| FAQ | The questions that come up first |
Related reading: Animation Basics for how RedM streams .ycd dictionaries, RedM Emotes if you want a menu to put these in, and RedM platform notes for how RDR3 differs from FiveM.
Support
RedMorrow Discord. Bring your server console output and whether DoesAnimDictExist('redmorrow@pose5@f') returns true on your client.
Version 1.0.0.