ArchiveXL: adding Photo Mode Poses

How to hook up custom photo mode poses with ArchiveXL

Summary

Published: May 09 2023 by @manavortex Last documented update: December 17 2024 by @manavortex

This guide will walk you through adding poses to Cyberpunk 2077's photo mode with ArchiveXL.

Difficulty: You know how to read ;)

Wait, this is not what I want!

Prerequisites:

We will hook up an existing .anims file to photo mode. If you don't have one, you can find a dummy file in the AMM pose guide.

Tool versions:

  • Cyberpunk 2077 2.2

  • WolvenKit >= 8.15.0

  • Notepad++ (you can use any text editor, but N++ is recommended)

Required mods (2.2)

Your finished pose mod will have the following dependencies:

Getting the files

Download either of these files:

  • full Wolvenkit project (Nexus)

  • Wolvenkit source folder (Nexus)

This tutorial assumes that your Wolvenkit project is called your_cool_new_pose_pack, and that your legal name is your_beautiful_name.

If that's not the case, please adjust accordingly!

Setting up the files

At any point during this guide, you can press the green Install button on Wolvenkit's toolbar to check the mod in Wolvenkit.

Step 1: Rename the folders

TL;DR

  1. Use Wolvenkit's Rename feature with the Update in project files box checked

  2. Use Notepad++ to edit photomode_poses_tutorial.xl. Search&replace the original path (tutorial\animations\netrunner_making_poses) with your new folder path.

  3. Test. The. Mod.

Step by step

We usually do this at the very end and I'm leaving you alone with it. However, this time we start by renaming the folders.

Here's how your project should look when you're done.

  1. Select the highlighted tutorial folder and press f2. This will open the rename dialogue.

  2. Change its name, and check the Update in project files? box

  3. Do the same for the netrunner_making_poses folder (you want your file structure to be as tidy as it can be - future you will thank you for it)

  4. Switch your project browser to the resources tab and open photomode_poses_tutorial.xl in notepad++:

  1. Use Edit -> Replace (Keyboard shortcut: Ctrl+H) to open the search and replace menu. Replace the old path with your new path: tutorial\animations\netrunner_making_poses -> your_beautiful_name\animations\your_cool_new_pose_pack

  1. Hit "Replace All"

  2. Save your file (Keyboard shortcut: Ctrl+S)

  3. Now, rename the files under resources as well:

    1. photomode_poses_tutorial.xl -> your_cool_new_pose_pack.xl

    2. r6\tweaks\tutorial\photomode_poses_tutorial.yaml -> r6\tweaks\tutorial\your_cool_new_pose_pack.yaml

  4. Rename r6\tweaks\tutorial to r6\tweaks\your_beautiful_name

That's it for the renaming. Time to test!

  1. Install the mod, and make sure that you still have photo mode poses.

Step 2: hook up your poses

The .xl file

This file tells Cyberpunk to load your custom poses and will be in the same folder as the .archive file for your mod. It looks like this:

# ##############################################################################
# your .json file with the pose names
# ##############################################################################
localization:
  onscreens:
    en-us: tutorial\animations\netrunner_making_poses\localization.json

# ##############################################################################
# link up the .anims file with anything in the photo mode
# ##############################################################################
animations:
  # ##############################################################################
  # female body gender - scope includes player + all NPCs + NPV with patched .ents
  # ##############################################################################
  - entity: photomode_wa.ent
    set: tutorial\animations\netrunner_making_poses\pwa.anims  
    
  # ##############################################################################
  # male body gender - scope includes player + all NPCs + NPV with patched .ents
  # ##############################################################################
  - entity: photomode_ma.ent
    set: tutorial\animations\netrunner_making_poses\pma.anims
    
  # ##############################################################################
  # male big - includes all male big bodied NPCs 
  # ############################################################################
  - entity: photomode_mb.ent
    set: tutorial\animations\netrunner_making_poses\pma.anims

You have to adjust the paths under set and en-us to your new changed folder structure.

If you want to support more body types from the Nibbles Replacer, you can switch to the Mod Browser and enter the following search query to find all the entities: base\characters\entities\photomode_replacer > .ent

Here's what those things do:

animations: A list of entities and animation files that you want to add to them animations/entity: The relative path to the photomode .ent file. There are just three of them. animations/set: The relative path to the .anims file in your Wolvenkit project. localization/onscreens/en-us: A file with translation strings. Holds the name of your photo mode pose set.

localization.json

You can name this file whatever you want, just make sure that you change the path and name in the .xl file.

  • Change the yellow box UI-Photomode-tutorial-netrunner-making-poses to something unique to your mod.

  • To do future you a favour, use names that will make sense even after a year or two - e.g. UI-Photomode-your_beautiful_name-my_cool_poses instead of UI-Photomode-ghuawstsedr-hsarht223445

  • The green text is the name that will show up in photo mode. femaleVariant is the default key - if you don't need different pose names for the male body gender, leave it empty.

The .anim file(s)

If you have created your own animations (as a replacer or for AMM), then you are already familiar with this kind of file. If not, it is time to appropriate one from the game files - pick any, since the process is just like with a replacer.

Just as a reminder, here's how they look:

You will need the green text in your .yaml file.

Optional: If you want your pose to move, you can set the duration in the .yaml as well!

The .yaml file

Without this file (r6/tweaks/your_beautiful_name/your_cool_new_pose_pack.yaml), the animations will be in the entity, but the photo mode won't know about them.

The yaml file has three sections:

Adding the category

The first block will introduce your new category to the photo mode.

I recommend doing search and replace on netrunner_making_poses, because it's used a bunch of times.

  • PhotoModePoseCategories.netrunner_making_poses: This is the name of the category, used to assign individual pose entries to your category.

  • displayName: This must match the secondaryKey in your .json

Define the pose entries

Now comes a long list of entries. They'll look like this:

PhotoModePoses.sit_chair_table_keyboard__2h_on_keyboard__make_amm_addon: This is the unique key to assign your pose to your pose set. You'll need it in the third block. animationName: This must match the animation name in your .anim file (the green box). category: This must match the category in the first block. displayName: What'll show up in photo mode

Telling photo mode about the poses

You register your poses for photo mode by creating the following entry categories. You can use yaml anchors to minimize copy-pasting:

Add both code blocks:

# ##############################################################
# Player
# ##############################################################
photo_mode.character.malePoses: &AddPosesM
  - !append PhotomodePoses.sit_chair_table_keyboard__2h_on_keyboard_01__thinking
  - !append PhotomodePoses.sit_chair_table_keyboard__2h_on_keyboard__make_amm_addon
photo_mode.character.femalePoses: &AddPosesF
  - !append PhotomodePoses.sit_chair_table_keyboard__2h_on_keyboard_01__thinking
  - !append PhotomodePoses.sit_chair_table_keyboard__2h_on_keyboard__make_amm_addon

Characters with *AddPoses will use the poses defined under &AddPoses. If you don't want a character to use certain poses, don't put *AddPoses next to their photomode.character entry.

An entry without YAML anchors, where poses are manually appended to each character, looks like this:

Finishing up

Before you can share your pose pack, you need to change the paths. If you don't and the next modder also doesn't, then only one of your mods will work.

You can find a full guide on changing the paths here.

If you rename files or folders under resources, remember to delete the old control files from your game directory.

The result

At any point during this guide, you can press the green Install button on Wolvenkit's toolbar to check the mod in Wolvenkit.

She has no idea what she's doing
Fortunately, you can hire specialists

Optional: Further fine-tuning poses

Spawning props with the pose

You can find a more detailed guide on this on xbae's website.

It is possible to have certain props spawned automatically. However, this feature works only for Player V.

Example of prop spawned with the pose after defining it in yaml

In your .yaml file (r6/tweaks/your_beautiful_name/your_cool_new_pose_pack.yaml), add the acceptedWeaponConfig attribute.

Find a list of the potential entries under Cheat Sheet: Poses/Animations ->AcceptedWeaponConfig

I'm using KNIFE as example

In the case of weapons, V spawn with whatever weapon you were holding when entering PhotoMode, or the default weapon if none was defined.

The position of the prop is defined by WeaponRight/ WeaponLeft bone.

Pose conditions [Optional]

You can limit the availability of poses by setting a poseStateConfig. For example, the following entry in your yaml will cause the pose to be unavailable unless V is swimming forwards:

  poseStateConfig: POSE_STATE_SWIMMING_MOVING

Find a list of the potential entries under Cheat Sheet: Poses/Animations -> poseStateConfig

Once installed, it will be in the same folder as the .archive file for your mod — so you should name it your_mod_name.archive.xl

Your file should look like this:

What do these things do?
  • animations:

    • entity: The relative path to the photomode scope for patching. There are five of them in total; you can delete the ones you don't need.

    • set: The relative path to the .anims file in your Wolvenkit project.

  • localization

    • onscreens/en-us: A file with translation strings. Holds the name of your photo mode pose set.

Photo mode knows about custom NPCs through their own .xl file, where you add their .ent to their body gender's scope — so you don't have to do anything here!

  1. From the animations section, delete the blocks that you don't want

  2. Replace tutorial\animations\netrunner_making_poses\pXa.anims with the relative path to your .anim file(s) as copied from Wolvenkit's project browser

  3. Replace tutorial\animations\netrunner_making_poses\localization.json with the relative path to your .json file as copied from Wolvenkit's project browser

  4. Optional: For compatibility with older game versions, copy the code under animations: (not the label itself) from the <= 2.1 page in the code box above and add it to your file.

  5. Optional, but recommended: Run your .xl file through yamllint to check for syntax errors.

  6. Save your file.

What does this do?
  • PhotoModePoses.sit_chair_table_keyboard__2h_on_keyboard__make_amm_addon: This is the unique key to assign your pose to your pose set. You need this in the third part of the .yaml to hook up the poses with photo mode.

  • animationName: This must match the animation name in your .anim file (the green box).

  • category: This must match the category in the first block.

  • displayName: The name of your pose (plain text or a LocKey in your .json file)

What does this do?

&AddPosesM and &AddPosesF are so-called yaml anchors. They allow easy re-using of lists that you defined previously.

An entry without YAML anchors, where poses are manually appended to each character, looks like this:

If your pose lists are identical, you can use one anchor (&AddPoses), and treat the second body gender like any of the NPC pose sets.

Before finishing up, make sure to run your file through yamlLint and get rid of any errors.

Finishing up

If you rename files or folders under resources, remember to delete the old control files from your game directory!

Last updated

Was this helpful?