Skip to content

Installing 100+ Female Poses ​

Installing this pack takes one line in server.cfg. Getting a pose onto a character takes a little more, because the pack has no menu and no command — read What you still need before you call the job done.

Requirements ​

Required
RedM serverYesAny build supporting fx_version 'cerulean' and lua54 'yes'
Asset packsYesThe manifest declares dependency '/assetpacks'
FrameworkNoVORP, RSG, RedEM:RP or none. The pack never touches one
DatabaseNoThe only server script is a single print
An emote systemIn practice, yesNothing in the pack plays a pose. Something has to call the natives

That last row is the one that surprises people. The pack is 104 .ycd dictionaries plus a reference table, and no code that plays them. Either an emote resource drives the clips, or you write the few lines yourself — see Playing a pose.

Asset packs is a real entitlement check, not a soft warning

dependency '/assetpacks' is checked against your server's licence key by Cfx.re. This pack streams 104 files, so the requirement is genuine rather than boilerplate.

If the key does not have asset packs enabled, the resource refuses to start and no amount of configuration gets around it. Enable asset packs for your key in the Cfx.re portal, then start the resource again. Nothing else on this page matters until that passes.

No npm, no build step, no SQL import, no extra dependencies.

Install ​

  1. Unzip the download into a folder your server loads resources from. The archive is rm_100_female_pose.zip, so the folder is rm_100_female_pose:

    resources/[animations]/rm_100_female_pose
    resources/[standalone]/rm_100_female_pose

    Strip any version suffix the unzip adds, such as rm_100_female_pose-1.0.0.

  2. Add one line to server.cfg:

    cfg
    ensure rm_100_female_pose

    Order barely matters — there are no server scripts to race and no database to wait on. The one exception is an emote resource that reads the dictionaries at start-up: put this line before or alongside it.

  3. Restart the server, or from the server console:

    refresh
    ensure rm_100_female_pose
  4. Confirm the start line appears in the server console, then play a pose. The console line alone is not proof — see Check it worked.

A correct tree. There is no config.lua, no client.lua and no html/ folder, and none are missing — the pack simply does not have them:

rm_100_female_pose/
  fxmanifest.lua
  clips.lua
  server.lua
  README.md
  stream/
    redmorrow@[email protected]
    redmorrow@[email protected]
    redmorrow@[email protected]
    ... 104 in total, 452 KB

Folder name, resource name and the .ycd names ​

The manifest says name 'redmorrow', the folder says rm_100_female_pose, and the README tells you to rename the folder. Three different names, and it is worth being precise about which one the server actually uses.

In CFX, the resource name is the directory name. The name field in fxmanifest.lua is descriptive metadata. It does not rename anything and the server never loads a resource by it.

So there is exactly one rule:

The ensure line must match the folder on disk

Nothing else. If the folder is rm_100_female_pose, write ensure rm_100_female_pose. If you renamed it to redmorrow, write ensure redmorrow.

Folder on diskLine in server.cfgWorks
rm_100_female_poseensure rm_100_female_poseYes
redmorrowensure redmorrowYes
rm_100_female_poseensure redmorrowNo — no such resource
rm_100_female_pose-1.0.0ensure rm_100_female_poseNo — rename the folder first

Both working names are genuinely equivalent here, and that is worth saying because it is not true of the sibling 30+ Female Poses pack. That one exposes exports, and exports['rm_30-custom-female-pose'] breaks the moment its folder is renamed. This pack has no exports, no command and no key binding, so nothing about it is keyed to the folder name.

The dictionary names are a separate matter again. Every dictionary is redmorrow@…@f, and that prefix comes from inside the .ycd files themselves, not from the resource. Renaming the folder to taco would still leave you playing redmorrow@pose5@f.

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 103 keep working. If you have one pose failing and the rest fine, this is almost always why.

Check it worked ​

On start, server.lua prints one line to the server console:

[redmorrow] Female animation pack started.

That line is hardcoded, so it says redmorrow whatever you named the folder.

The console line proves less than it looks like it does

It proves the resource started and the asset-pack check passed. It does not prove a single .ycd reached a client, and it certainly does not prove a pose will play — the pack contains no code that plays one.

The next check is client-side. In the F8 console in game:

lua
DoesAnimDictExist('redmorrow@pose5@f')

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 check failed.

The only test that proves the whole chain is playing a pose. Paste this into F8 — it reports the failure instead of leaving you looking at a character who is doing nothing:

lua
CreateThread(function()
    local dict, clip = 'redmorrow@pose5@f', 'pose5'
    RequestAnimDict(dict)
    local timeout = GetGameTimer() + 5000
    while not HasAnimDictLoaded(dict) do
        if GetGameTimer() > timeout then
            print('FAILED: ' .. dict .. ' never loaded — is the resource started?')
            return
        end
        Wait(0)
    end
    TaskPlayAnim(PlayerPedId(), dict, clip, 4.0, -4.0, -1, 1, 0.0, false, 0, false, 0, false)
    print('SUCCESS: pose5 is playing. ClearPedTasks(PlayerPedId()) to stop it.')
end)

The timeout matters. A clip requested from a dictionary that never loaded fails silently — no error, no red line, the character just stands there. Always wait on HasAnimDictLoaded and always give the wait a deadline. Full detail, including why the RDR3 flag values are not GTA V's, is on Playing a pose.

Verification checklist ​

StepHowExpected
Asset packsServer console on startNo entitlement error
Resource startedServer console after ensure[redmorrow] Female animation pack started.
Dictionary streamedDoesAnimDictExist('redmorrow@pose5@f') in F8true
A pose playsThe script above, in F8The character holds the pose
Stop worksClearPedTasks(PlayerPedId())The character returns to idle

Common install mistakes ​

MistakeSymptomFix
Asset packs not enabledResource refuses to startEnable asset packs on your Cfx.re key
ensure name and folder name disagreeNo such resource in the consoleMake the line match the folder
Version suffix left on the folderSameRename the folder
Forgot refreshDictionaries missing after copying it inrefresh, then ensure
Renamed a .ycdOne pose fails, 98 workRestore the original name
Waiting for a menu or a commandNothing happens on any keyThere is none. See below
Expecting FiveMNothing loads at allThese are RDR2 .ycd files. RedM only

What you still need ​

This is where it is worth being blunt, because the pack's own documentation points the other way.

The resource's README.md and the comment header of clips.lua describe features this build does not have. They mention an in-game menu, a /redmorrow command, exports['redmorrow']:Play() and :GetClips(), a Config.ForceBody option, and files called config.lua, client.lua and html/. None of that ships here — the client side of this resource is clips.lua and nothing else. The documents look like they were written against a fuller build or a template; they are stale rather than wrong-headed, and the assets themselves are all present and correct. Trust clips.lua's data and these pages, not the README's prose.

What you actually have after installing:

You haveYou do not have
104 streamed .ycd dictionariesAn in-game menu
99 playable poses listed in clips.luaA chat command
A readable, editable clips.luaA key binding
A server console line on startAny exports
Any config options

So one more step is needed before players can use the pack:

  • Write a few lines yourself. RequestAnimDict, wait for HasAnimDictLoaded, then TaskPlayAnim. Walked through on Playing a pose.
  • Or feed the pairs to an emote resource. The dict 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.

Config.Clips is not readable from another resource

clips.lua sets a global called Config.Clips, and it is a global inside this resource. CFX gives every resource its own Lua state, so your script cannot see it however it asks.

To use the list from your own code, either copy the table into your own resource or add your own client script to this one. Integrating covers both.

Two more things worth knowing before you build on it. Never derive a dictionary from an id — six of the 99 rows have a dictionary that does not match, listed on the animation list. And the pack ships female dictionaries only, so poses will play on a male ped but were not authored for those proportions.

About the count ​

clips.lua holds 105 rows. Six are commented out — pose78, pose87, pose93, redmorrow_p23, pose29 and pose35 — which leaves 99 live poses against a product name of "100+".

Ninety-nine is the real number, and nothing is missing from your download. Every live clip has its dictionary in stream/, and the .ycd files for five of the six disabled rows are sitting there too. Re-enabling one is deleting the leading -- from its line; the asset is already on disk. The remaining row, pose29, points at redmorrow@pose26@f, which the live pose26 entry still uses.

Updating ​

  1. Stop the resource, or stop the server.

  2. Replace the folder with the new one, keeping the same name so your ensure line still matches.

  3. Keep your clips.lua if you edited it. escrow_ignore covers clips.lua and README.md, so clips.lua ships readable and editable and a fresh copy will overwrite your labels, categories and any rows you re-enabled. Diff the two rather than dropping the new one in blind — a new version may add rows you want.

  4. refresh, then ensure the resource, and re-run the F8 play test above.

The .ycd files in stream/ are assets rather than Lua, so escrow does not apply to them at all. They are also identical between installs, which means a reinstall never changes a dictionary or clip name.

Next ​

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