Maturity: Draft. This page covers how Cyberpunk 2077 lists and plays V's photo-mode poses, how mods add them, what a pose clip holds, and what the game does to the body's helper joints under a pose. It was consolidated on 27 September 2026 from the installed 2.31 game (the REDmod TweakDB sources, the compiled TweakDB, photo-mode resources), the WolvenKit, ArchiveXL and TweakXL sources, and the installed pose packs and pose tools on the reference MO2 profile. Sections 6–8 (the rig for posing, the graph after the pose clip, and changing a pose at runtime) come from the pose editor study of the same day: the photo-mode body graph's node tree, the decompiled 2.31 scripts, RED4ext.SDK's animation layouts, and the Red Hot Tools, ArchiveXL and AMM sources. Nothing here has runtime evidence of its own. Grades follow the knowledge rules: source engine, framework or tool source or decompiled scripts, resource extracted game or mod resources, wiki Modding Docs, runtime running game, [offline] our own tool runs, hypothesis not yet established. Hashes, versions and counts are in the pose library design and the pose editor design, which also hold the Studio's designs built on these facts.
Photo-mode faces (expressions) are a separate chain, covered in facial expressions. How to drive the photo-mode menu from script is in photo mode.
1. The chain
| Step | What | Grade |
|---|---|---|
| Lists | photo_ and malePoses are string[] flats (compiled as array:String) of PhotoModePoses.* record names: 142 female and 143 male in 2.31, identical in tweakdb.bin, tweakdb_ and the REDmod sources. NPC puppets have their own lists (judyPoses, panamPoses… 53 in all). | resource |
| Categories | photo_ orders PhotoModePoseCategory { categoryName, displayName } records. Vanilla has idleCategory (Idle), actionCategory (Action) and naturalCategory (Natural, added in 2.3), labelled by secondary keys (UI-PhotoMode-OptionCategoryIdle…). | resource |
| Record | PhotoModePose : PhotoModeItem (see §2). 255 vanilla records: 114 idle, 62 action, 76 natural, 3 others. | resource REDmod database\, poses.tweak |
| Puppet | Character.Player_: the female entity is ep1\ (tagged [EP1]), the male …\. ArchiveXL's bundled scope photomode_ (and _, _, _, _, _) lists the base and EP1 entities of every photo-mode character. | resource; source ArchiveXL bundle/ |
| Sets | The puppet's root animated component (woman_, base\) and its entAnimationSetupExtensionComponents list the sets. The vanilla female pose sets are base\ (133 clips), …\ (73), …\ (23) and two EP1 sets of 2 each. Not every clip is listed as a V pose (90 of the idle set's 133 are). | resource |
| Lookup | The record's animationName is found by name among those sets. All 142 female records resolve: 90 in idle, 28 in action, 24 in natural. How a duplicate name across sets is settled (priority, then order?) is untested; for faces, the wiki says the first match wins. The vanilla female list names natural_ twice, so the menu has 141 distinct poses [offline: the Studio's catalogue]. | resource; rule hypothesis |
| Clip | 2 frames (0.033 s), 71 joints, 13 float tracks, Normal, animAnimationBufferCompressed, no motion extraction, for every vanilla V pose. The natural poses are 2 or 3 frames. | resource |
2. The pose record
| Field | Meaning | Default and use | Grade |
|---|---|---|---|
displayName | Menu text | Vanilla LocKey#…; mod packs mostly literal text (1,902 of 1,907 mod records), e.g. 01, 03 | resource |
locked | Hidden until unlocked | false everywhere | resource |
animationName | Clip name | — | resource |
animationTime | Time into the clip | 0; vanilla uses it for 17 records (quadruped poses, e.g. 6.64 s); 27 of 2,079 mod records. Start or hold time is untested | resource; meaning hypothesis |
category | Category record | Inherited from PhotoModePoseIdle / …Action / …Natural | resource |
acceptedWeaponConfig | What V holds | POSE_; vanilla also has handguns, rifles, guitar, microphone, cigarette; packs define their own props (POSE_, POSE_, …) | resource |
poseStateConfig | Where the pose is allowed | POSE_; also ground-and-air, crouch, flat, car, bike, swimming, ladder, walk, sprint | resource |
lookAtPreset | Look-at behaviour | LookatPreset.PhotoMode_ (166 records), …_ (41), none (48) | resource |
disableLookAtForGarmentTags, filterOutForGarmentTags | Garment rules | e.g. look-at off with Collar / HelmetFull; pose hidden with Coat, HeadCover, Collar | resource; hiding in the menu hypothesis |
positionOffset, rotation | Placement of the puppet | Vanilla swim poses (0, 0, 0.35) and (0, 0, 0.85); two records (0, 1.35, 0); two rotations of 45° | resource; axes hypothesis |
poseSize, allowMoveUpDown | Placement limits | — | resource |
No field names an icon, an .anims file or a workspot resource: the menu is a text list.
3. What a pose clip holds
- Rig.
base\: 71 joints (characters\ base_ entities\ woman_ base\ woman_ base.rig Root,Trajectory,Hips,reference_,joint Spine…) and 13 float tracks:headBodyPartVis,leftArmBodyPartVis,rightArmBodyPartVis,legsBodyPartVis,predictiveLookAtDirectionX/,Y/ Z allowFeetIk,enableLeftFootIk,enableRightFootIk,footStepOffsetX/. There are no face tracks, in vanilla or in any inspected pack. The male rig isY/ Z man_, with the same layout resource.base.rig - The compressed buffer is not ACL [source: WolvenKit
WolvenKit.RED4/atTypes/ ClassesExt/ CustomData/ animAnimationBufferCompressed.cs 11720772, read as documentation] [resource: XF Studio's native decoder, whose keys equal WolvenKit's export (§9)]. It is a flat key list, little-endian, in five runs whose lengths the buffer declares (numAnimKeys,numAnimKeysRaw,numConstAnimKeys,numTrackKeys,numConstTrackKeys):- Animated keys, 10 bytes: time normalised to 16 bits over the buffer's
duration, then 16 bits holding the joint index (bits 0–12), the channel (bits 13–14: position, rotation, scale) and the rotation's w sign (bit 15), then three values quantised to 16 bits over [−1, 1] (v / 65535 · 2 − 1). An earlier reading said 12 bytes; the key blocks only add up at 10. - Raw keys, 16 bytes: the same 4-byte head, then three float32.
- Constant keys, 16 bytes: the 16 joint, channel and sign bits first, then a 16-bit time, then three float32. There is one per joint channel that doesn't change; an animated channel's keys take precedence.
- Float-track keys, 8 bytes (16-bit time, 16-bit track, float32) and constant track keys, 8 bytes (16-bit track, 16-bit time, float32).
- Rotations store (x, y, z) = q.xyz / √(2 − d) with d = 1 − |w|. They are rebuilt as xyz · √(2 − d) and w = 1 − d with d = x² + y² + z², negated when the sign bit is set: a unit quaternion by construction. Raw and constant rotations use the same mapping.
- The key block is in the set's
animationDataChunks[unkIndex](a deferred buffer) atfsetInBytes,zeInByteslong (dataAddress; omitted fields mean none), or inline ininplaceCompressedBuffer(possibly aKARKOodle stream) ordefferedBuffer. idle_is 132 animated, 4 raw and 108 constant keys, plus 4 track and 12 constant track keys: 3,240 bytes. The 133-clip idle set is 159 KB. Mod pose clips key all three channels of all 71 joints (213 channels), mostly as constants resource.stand_ 01 - The rig (
animRig) keeps its bone table after its properties: one i16 parent index per bone, then one reference transform per bone (translation xyzw, rotation xyzw, scale xyzw) resource [source: WolvenKit's rig appendix reader, as documentation].
- Animated keys, 10 bytes: time normalised to 16 bits over the buffer's
- SIMD. The other format,
animAnimationBufferSimd, appears in a few face clips (three inui_, 5 of 444 in the Mega Pack) and in three of the character-preview body idles. No body pose clip surveyed uses it resource. The native decoder reads it too (every frame of every joint; layout in archive formats §11), so a pack's SIMD pose plays like any other [source: the Studio].female_ face.anims - Longer clips. Some packs ship multi-frame poses with motion extraction, e.g. Photo Mode Unlocker XL's
wp_: 141 to 361 frames, some with a motion-extraction block resource. Photo Mode Pose Selector's per-character "freeze pose animation" shows that such poses play over time in photo mode source.hg_ silver_ * - Most multi-frame mod clips hold still. On the reference profile 562 of the 1,641 female poses with a clip have more than 3 frames, but 371 of those have no animated keys at all (every channel constant): only 191 move [resource: the buffers' key counts].
4. How photo mode plays a pose
Selection is native. The menu's attributes 5 (category) and 6 (pose) hold option data.
PhotoModePose_is script-readable (Record AnimationName(),AnimationTime(),PositionOffset()…), but no script starts a clip [source: 2.31 decompiledorphans.script].The body graph
player_has:photomode.animgraph - one
MixerSlot(two normal, two additive and two override entries); - a
WORKSPOTgraph slot with aWorkspotHub; - the features
PhotomodePoseCategory(anIntInputposeCategoryIndexdriving a switch over the head and chest rotation nodes) and sixAnimFeature_(head and chest X/Y/Z);PhotomodeBodyPartRotate FreezeFrame, foot IK request nodes and look-at controllers;- 85
SkAnimnodes (weapon idles, a default standing idle) resource.
Which slot plays the chosen clip is not traced [hypothesis: the mixer slot].
- one
Photo mode has no body idle: static pose clips hold. Only look-at and the gaze-triggered blinks move. Community tools freeze even those with
SetIndividualTimeDilationresource (facial expressions §4).The helper joints are a second graph. The puppet also has an animated component
deformationswithwoman_andbase_ deformations.rig base\resource. It drives 114 named muscle, twist and corrective joints from the main skeleton, which is why body meshes carry joints the pose clip doesn't key: deltoids,characters\ base_ entities\ woman_ base\ deformations_ rigs\ woman_ base_ deformations.animgraph l_…, knuckles, the latissimus, buttocks, knees and calves. The graph has these nodes:Wrist_ 0_ JNT Node Count PointConstraint_WeightedTransform 94 SimpleBounce90 AimConstraint_ObjectUp 78 SetBoneTransform72 OrientConstraint_WeightedTransform 62 PointConstraint46 SimpleSpline44 OrientConstraint31 AimConstraint_ObjectRotationUp 14 TwistConstraint10 TranslationLimit8 The shadow component has its own rig (
shadow_) resource. The graph is one linear chain of 420 nodes overrig_ wa woman_(181 joints); the Studio evaluates it from the game's files with inferred semantics that reproduce the rig's A pose for 179 of 181 joints (body animation §3).base_ deformations.rig
5. How mods add poses
| Route | Mechanism | Photo mode | Grade |
|---|---|---|---|
| TweakXL + ArchiveXL | YAML records PhotoModePoses.<id> ($base: PhotoModePoses.idle_) and PhotoModePoseCategories.<id> ($base: idleCategory), !append-once onto the gender lists and poseCategories (often reused on NPC lists through a YAML anchor); .xl animations: entries (entity: a path, a list or a scope such as photomode_; set; optional priority (default 128), vars and component (default root)). ArchiveXL files each entry under FNV-1a 64 of the component name seeded with the target's path hash, and at InitializeAnimations appends it to the gameplay sets of the animated component of that name in an entity made from that template. With the default, only the puppet's root component receives it, not deformations or shadow. A set or target the depot lacks is skipped. The list operations are item tags (- !append-once PhotoModePoses.x), and a YAML anchor carries them to the NPC lists that reuse it | Yes | resource; source ArchiveXL Extensions/, Config.hpp, Extension.cpp (5474e34d); TweakXL YamlReader.cpp, TweakChangeset.cpp (f8da6be) |
| Records reusing another pack's sets | A pack of records only; the clips come from a "core" pack's sets | Yes, with the core pack | resource |
| Multi Pose Pack Framework (legacy) | Replaces the base player_ / player_ whole, adding empty numbered set slots (photomode_ … _, …_, …_) that packs fill by path | Only while the base entity is the puppet; the EP1 puppet (§1) makes it inert with Phantom Liberty | resource; EP1 effect hypothesis |
| Vanilla clip replacement | A same-named clip in a winning copy of a vanilla set | Yes (global, exclusive) | wiki |
| Appearance Menu Mod custom poses | Lua data files under AppearanceMenuMod/: return { modder, category, entity_, naming a workspot entity whose sets hold the clips; AMM plays them through a workspot (PlayInDeviceSimple, SendJumpToAnimEnt) | No: AMM-only | resource; source AMM Modules/ |
| Runtime records (CET, redscript) | TweakDB writes at runtime | Yes, invisible to offline readers | hypothesis |
On the reference profile (920 enabled mods) resource:
- 44 packs add 1,907 pose records and 87 category records. They append about 1,510 entries to
femalePoses, 324 tomalePosesand 86 toposeCategories. Every record uses$base: PhotoModePoses.idle_.stand_ 01 - 45 mods'
animations:entries reach V's photo-mode entity. - 23 mods ship AMM custom-pose files. Four are AMM-only; their 24 files list 656 "Woman Average" clips.
- 150 animation names are used by more than one mod record.
- A female V's menu would offer about 1,650 poses in about 90 categories. The Studio's catalogue, read the game's way, lists 1,642 in 90 categories (1,641 with an installed clip) and 477 for a male V [offline, 27 September 2026]. The rest of the list is counted, not shown: 6 entries name no record (one pack writes
PhotoModePosesv.forPhotoModePoses.), 2 poses name a category no list holds, 1 clip isn't in any set, and 8 clip names are held by more than one set. - TweakXL property names are case-sensitive. A pose-pack generator writes
CategoryName:in its category records. TweakXL derives property names from the record getters with a lower-case first letter (categoryName) [source: TweakXLRed/TweakDB/ Reflection.cpp ResolvePropertyName], so the key is not a known property, and those categories inherit vanilla'scategoryNamethrough$base. Their poses still name the category record, and the packs are in wide use, which suggests the menu groups poses by the category record's name rather than bycategoryName[hypothesis: G1].
Pose tools. Photo Mode Pose Selector reads the lists the native menu builds (OnSetupOptionSelector), offers search, favourites, arrow-key stepping and per-character freeze, and stores favourites in SQLite keyed by the category text plus the pose text. Its README notes that a cross-category browser would need indexing beyond the menu's list [source: its init.lua, README.md 1.2.0]. Photo Mode Unlocker XL adds 31 categories and 199 full records of its own resource.
6. The rig for posing
- Joints resource:
woman_'s 71 joints arebase.rig Root,Trajectory,Hips,reference_; the spinejoint Spine…Spine3,Neck,Neck1,Headand the two eyes; per side the shoulder, arm, forearm and hand, a weapon socket, five metacarpals (LeftInHandThumb…LeftInHandPinky), two thumb and three joints for each other finger (LeftHandIndex1–3…), and the thigh, shin, foot, heel and toe. Every left joint's twin swapsLeftforRightin its name. - No posing limits. The rig's only angle data is its ragdoll description: 22 bodies with swing and twist ranges relative to their capsules (the upper arm ±6°, the forearm −30…55° and −40…25°, the head ±20°). They are physics tuning, not anatomical limits resource.
- IK setups: the rig lists two-bone foot setups for each leg (
LeftUpLeg→LeftLeg→LeftFoot, hinge Z) resource. - What a pose can key: only these 71 joints. The 114 helper joints the body meshes are also skinned to are solved by the
deformationsgraph (§4), so a pose never addresses them resource.
7. What the body graph does after the pose clip
The photo-mode body graph runs, from the pose source to its output [resource: its node tree]:
- The pose source: a
MixerSlotover theWORKSPOTgraph slot, whose inputs are a loopingidle_and astand WorkspotHub. Which of the two plays a chosen pose is not traced hypothesis. PoseCorrection.- Head and chest rotation: six
RotateBonenodes onHeadandSpine(X, Y, Z; ±90°), each fed by a float inputRotateHeadX…RotateChestZ/rotateDegree; the graph declares them as sixAnimFeature_features (one float,PhotomodeBodyPartRotate rotateDegree) resource [source: RED4ext.SDK generated type]. - Terrain foot IK: an
AddSnapToTerrainIkRequestwhose hips request uses theikLeftLegandikRightLegchains. Clips switch it with the float tracksallowFeetIk,enableLeftFootIkandenableRightFootIkresource. The community documents that it glues feet to the floor, and removes it per pose in WolvenKit when a pose's feet should leave the ground [wiki: "Removing Foot Snap IK from Poses/Animations"]. - Look-at: two
LookAtControllers, with inputs forEyes,Head,Chest,LeftHandandRightHand(isEnabled,target,mode,suppress) resource. - Limb IK:
AddIkRequestfor the four chains, thenIk2for each arm (LeftArm→LeftForeArm→LeftHand, hinge Z, at most 165° left and 180° right) andIk2Constraintfor each leg, with inputs per chain:isEnabled,position,rotation(a quaternion),poleVector,weightPosition,weightRotationandpoleVectorOverideWeightresource. - An override blend for the eyes, then the output.
So head, chest, gaze, feet and all four limbs can be bent on top of any pose. Whether the external IK requests reach the branch that plays poses is untested hypothesis.
8. Changing a pose at runtime
| Lever | What it reaches | Grade |
|---|---|---|
IKTargetAddEvent queued on the entity: bodyPart (the chain, e.g. ikRightArm), SetStaticTarget(position), SetStaticOrientationTarget(quaternion), or entity targets; request weights, transitions and priority; removed with IKTargetRemoveEvent | The limb IK chains (§7); the game's climbing code uses it for both hands | source 2.31 ikTargetEvents.script, orphans.script (IKTargetRequest, AnimTargetAddEvent), locomotionTransitions.script (CreateIKConstraint) |
LookAtAddEvent with bodyPart Eyes, LeftHand or RightHand and extra parts (Head, Chest) with weights and suppression | The look-at controllers; an AI shield aims a hand this way; AMM aims NPC eyes, head and chest this way | source 2.31 aiLookats.script; AMM Modules/ |
AnimationControllerComponent.ApplyFeature(obj, name, feature); public SetInputFloat/; private native SetInputQuaternion; the AnimInputSetter… events | Any graph input by group and name, e.g. RotateHeadY with AnimFeature_ | source 2.31 animationControllerComponent.script |
| The loaded clip's key data | RED4ext.SDK lays out animAnimationBufferCompressed with one span per key run (compressed, raw, constant, track, constant track), and its in-memory constant key is 16 bytes (the 16-bit header, 2 bytes where the file keeps the time field, three float32 values), the same record the file stores; so the spans are expected to point into the loaded key block. At SDK tag 1.0.0 its header can't be included (it names AnimBufferState.hpp and AnimKeyFrames.hpp, which ship with an anim prefix). The XF Runtime Bridge's pose.live.read checks exactly this in the running game (the runs against their counts and each other, field offsets against the reflection data) before pose.live.apply writes the XF carrier's keys. Whether evaluation reads these spans every frame is untested | source SDK animAnimationBufferCompressed.hpp, animKeyFrames.hpp; WolvenKit animAnimationBufferCompressed.cs; per-frame use hypothesis, the test card's L2–L4 decide it |
| Hot reload | Red Hot Tools reloads changed archives, forgets their resources from the loader and resource bank, keeps live references only for widget libraries, and calls ArchiveXL.Reload. ArchiveXL merges animation sets when an animated component initialises. So a set the puppet already holds is expected to stay old until a new puppet is made (re-entering photo mode) | source Red Hot Tools ArchiveLoader.cpp; ArchiveXL Animation/; the puppet part hypothesis |
| A workspot on the photo-mode stand-in | AMM plays any workspot clip on the stand-in it adopts from PhotoModePlayerEntityComponent.SetupInventory (PlayInDeviceSimple then SendJumpToAnimEnt), outside the menu's lists; photo mode rewrites the stand-in's transform only when one of its own rows changes, so a pose placed this way holds until then (photo mode §13) | source AMM Modules/, init.lua:392-404; Photo Mode Ex PhotoModeExService.cpp:512-548 |
| Engine hooks | The only animation function address in the public address libraries is AnimatedComponent::InitializeAnimations (ArchiveXL hooks it); a hook on graph evaluation would need new reverse engineering | source ArchiveXL Red/ |
How the Studio plans to use these levers is in the pose editor design.
9. Where this lives in XF Studio
| Piece | What it does | Evidence |
|---|---|---|
src/, anim-decode.ts | A set's clip index (names, frames, buffer kind, key counts), read record by record so that sets whose other records hold curve data still list; one clip's keys (§3); the rig's bone table; sampling (linear, slerp for rotations, constants otherwise). Served by the route's native decode worker. Written from the format; WolvenKit is documentation and the oracle only | tools/ against WolvenKit's animation export (projects/, WolvenKit 8.17.4 libraries): 21 clips (4 vanilla poses, Photo Mode Unlocker XL's 216-frame wp_ and 16 poses from 14 packs), 13,548 keys, worst difference 1.7 × 10⁻⁷. WolvenKit writes an exact identity for 17 rotations within 1.5 × 10⁻⁴ of it (at most 0.02°); these are counted apart. For the one clip with motion extraction it writes root motion into Root, which the decoder leaves out (V stays in place), so Root is not compared there. WolvenKit 9.0.1 and 8.17.4 could not read two other packs' sets at all (an index out of range); the native decoder reads them, with no oracle [offline, 27 September 2026] |
src/, tweakxl-yaml.ts | TweakXL records and list operations (§5), read as TweakXL reads them: scalars kept as text (displayName: 01 is "01"), item tags kept, mutations applied after assignments (deletions, prepends, appends, -once, -from) | 817 of the reference profile's 818 TweakXL YAML files parse to the same structure as a general YAML parser; the other has an unresolved alias, which yaml-cpp refuses too [offline] |
src/, pose-catalogue-host.ts, / | The catalogue per body gender (lists, categories, labels, clip, animationTime, placement, outfit filters, badges for held props, vehicles and moving clips, provenance, diagnostics), with set indexes cached by archive identity and a pose sampled on demand | MO2 reference profile, 1,642 female poses: 7.7 s with empty caches (3.6 s opening the route, 2.8 s reading 927 text files, 0.15 s indexing 128 sets), 3.7 s in a new process with warm caches (2.0 s opening the route), 1.3 s again in the same process; the catalogue is 1.35 MB of JSON. Direct route: 141 vanilla poses, all with a decodable clip, in 1.0 s [offline] |
src/, IdleAnimation pose mode, SceneHost.setPose | A sampled pose as a body clip for the idle's rigs: game (x, y, z) → glTF (x, z, −y) for translations and rotation axes, scales swapped, the record's positionOffset and rotation (Euler degrees about X, Y, Z) applied to Root [hypothesis: axes, G7]; a moving pose loops its changing channels, which the host samples at every frame (clipMotion). The idle's deformation rig evaluates the helper joints for it; the face keeps the idle's face or a held expression composes over it | tests/ (axes, placement, looping, a lent expression over a turned head, the motion service's supersession and rollback). A 6-frame moving clip with all 213 channels changing is 55 KB and answers in about 25 ms on the reference route [offline] |
src/ | The Poses module: the tree (Favourites, Recent, categories), search, the game's outfit filter by the worn garments' visual tags (garment.tags in the character record), greyed poses with plain reasons, per-user favourites and recent (xfs/) | tests/, tests/. The reference profile's female list: 1,642 poses in 90 categories, listed in 5.2 s with empty set caches; 1,531 carry an outfit filter, almost all inherited from idle_ (Coat, Collar, HeadCover, HelmetFull, Mask); one pack writes CName("None") in the list, which reads as no tag [offline] |
Open questions
- How does the native menu start a pose clip (mixer slot or workspot), and is
animationTimea start or a hold time? Do static 2-frame poses loop? - Which set wins when two sets hold the same clip name:
priority, component order, ArchiveXL append order? - Is a pose whose
filterOutForGarmentTagsmatches V's outfit hidden from the menu, or only disabled? The Studio hides it by default, with "Show them" (decision Q4), matching the worn garments' visual tags. - In which axes and space do
positionOffsetandrotationapply? - Does a game without Phantom Liberty use the base
player_for V, and does a pack that targets only one of the two entities show in the other?wa_ photomode.ent What does the deformation graph compute for each helper joint?Mostly answered [offline]: each node kind's semantics, checked at the A pose (body animation §3). Still open: the same checked against the game in strong poses.- Does the engine sample a loaded clip's constant keys every frame, so that writing them changes a held pose live, or does it copy or cache them per selection or per load?
- Do
IKTargetAddEventtargets andLookAtAddEventhand targets act on the photo-mode puppet while it holds a pose? - After a hot reload, does re-selecting a pose pick up a reloaded set, or only a newly created puppet?
- Does individual time dilation 0 on the puppet stop its graph from evaluating?
- Does the menu group poses by the category record's name or by its
categoryName(§5)? - Do the animation-setup extension components' sets join the
rootcomponent's clip lookup, as the Studio assumes? The vanilla pose sets are listed there.
The prepared in-game checks for 1–6 are G1–G7 in the pose library design; 7–10 are steps LP1–LP9 of the pose editor design.
Related pages
Photo mode · Facial expressions · Body rendering · Mod loading · Archive format · Pose library design · Pose editor design