Skip to content

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 menu

The 60-second version ​

  1. Unzip into resources, keeping the folder name rm_100_female_pose:

    resources/[animations]/rm_100_female_pose
  2. Add one line to server.cfg:

    cfg
    ensure rm_100_female_pose
  3. Restart, or from the server console:

    refresh
    ensure rm_100_female_pose
  4. Check the server console. server.lua prints 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.luacerulean, rdr3, lua54. Loads clips.lua as a client script and server.lua as a server script. Declares dependency '/assetpacks'
clips.luaA data table and nothing else. Sets the global Config.Clips — 105 rows, 99 of them live
server.luaOne line. A print that confirms the resource started
stream/104 .ycd dictionaries, 452 KB total
README.mdOut of date — see below

There is no client.lua, no config.lua and no html/ folder. So:

Not in this packConsequence
No client.luaNothing requests a dictionary or calls TaskPlayAnim. No pose can play on its own
No menu, no NUIPlayers have nothing to open
No RegisterCommandThere is no chat command
No key bindingThere is no key to press
No exportsexports['rm_100_female_pose'] has no methods on it
No config.luaThere 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:

RoutePage
Write a few lines of Lua that play a clip by dictionary and clip namePlaying a pose
Feed the 99 pairs into an emote resource you already runIntegrating

The minimum that puts a pose on screen, in a client script of your own:

lua
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 saysThis build
An in-game menuNo menu, no html/
/redmorrow <id>No command registered
exports['redmorrow']:Play() / :GetClips()No exports
Config.ForceBodyNo config.lua
A male body variant per clipbodies carries female only, on all 99 rows
A walk field and a flags field per clipDocumented 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 play99
Rows in clips.lua105 — six are commented out
Stream files104 .ycd, 452 KB total
FormatNative RDR2 .ycd
Dictionary prefixredmorrow@ … @f
BodyFemale only
ModeEvery row is loop
Root motionNone. No pose moves the character
Server scriptsOne 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 serverYesAny build supporting fx_version 'cerulean' and lua54 'yes'
Asset packsYesThe manifest declares dependency '/assetpacks'
Your own code, or an emote resourceYesThe pack cannot play a pose by itself
FrameworkNoVORP, RSG, RedEM:RP or none — it looks for nothing
DatabaseNoNo 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:

IDDictionaryClip
regard5redmorrow@regard6@fregard5
pose1redmorrow@regard7@fpose1
pose4redmorrow@regard8@fpose4
hatsdown_clipredmorrow@pose7@fhatsdown_clip
pose28redmorrow@pose27@fpose28
pose47redmorrow@pose46@fpose47

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.

DurationPoses
0.033 s8
0.1 s10
1 s6
1.933 s5
1.967 s26
3.7 s4
9 s21
59 s1
89 s18

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.

EditableLeave alone
clips.lua — label, category, mode, and the six commented-out rowsdict and clip, which must match the names stored inside the .ycd
README.mdstream/*.ycd file names

Where to go next ​

PageWhat's in it
InstallationRequirements, folder name, the asset-pack check, verifying the dictionaries streamed
Playing a poseThe TaskPlayAnim call, loading a dictionary safely, looping and stopping
Animation listAll 99 with dictionary, clip and duration
The clips.lua tableEvery field, the six commented-out rows, and what is safe to change
IntegratingGetting the list into your own resource or an emote menu
TroubleshootingSymptom to cause to fix, including the silent failures
FAQThe 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.

Documentation for RedMorrow. Scripts are licensed per server — redistribution is not permitted.