I've had a few people DM me lately to ask for help making new config files. Making YouTube tutorial videos is a time commitment that I currently can't afford, so I figured I'd write a quick article outlining my steps using some existing configs as well as one that's been on my workbench: Bits and Pieces Skin 2.0 (female).
Setting up the texture files
The first thing I'll do is go to the mod download page and see what the options are:

Here I see that at core there are CBBE and UNP options in 2K and 4K resolution, so I'll need to make at least four config files. Typically my workflow is to pick CBBE or UNP, make a config file for the highest resolution, and then edit it in Notepad++ for the other variants. Usually authors are kind enough to upload files in a similar folder structure for all four cases, so that I could start with CBBE 4K and make the UNP version using a Find and Replace of "CBBE" with "UNP", and then "4K" with "2K" for making the low res versions. I'll start with 4K CBBE. There are "RBT" and "Player and Replacer" versions for each - I'm assuming "RBT" has all the texture variations so I'll download the 4k (CBBE RBT) file as well as the (CBBE Only) fix.
Looking more closely, I also see that there are additional files in the Optional Files section that supply further texture variations. I will download the matching CBBE 4K "Extra Options" file as well as the Extra Matte CBBE file and "BnP Sk fix".

To get the files to the right place, I'll go to my mod manager's mods folder and make a new mod called "SynthEBD Dev - BnP Fem CBBE 4K". You can call it anything you want - the installation name will be determined later when you package the config file. I use MO2 so I'll make the folder in the MO2\mods folder. If you use Vortex I believe you'll want to make a new folder in your staging folder, but I'm not a Vortex user so please leave a comment if I'm wrong.
Within this new folder, I'll make a new folder called "textures". Capitalization doesn't matter but spelling does - this needs to match Skyrim' hardcoded textures folder. Within the textures folder, I'll make yet another new folder with a short name (usually an abbreviation of the mod). This short name will be your Prefix - remember it for when you're packaging your config file later. I will call it "BPFS" - short for Bits and Pieces Female Skin. To this folder, I will extract the mods that I just downloaded.

In some rare cases, mod authors will provide different options as separate downloads that extract to the exact same destination path - for example you could have a muscular texture published as "Muscular.zip" and a non-muscular texture published as "MoreLikePiranha.zip", both of which contain a "textures\male\malebody.dds" file. Obviously you wouldn't be able to extract both of these since one would overwrite the other. SynthEBD allows you to have multiple Prefix folders for this reason - in this tutorial each file path is different so I only need one, but if I did I could make a "textures\BPFS2" folder and reference both prefixes when packaging the config file at the end.
Exploring the downloaded mods
At this point, we're at a good place to start exploring the texture variants. This is a manual process and it's different for every texture mod because different authors will offer different options. Take 10-15 minutes to browse the folders and see what all the different texture files are. I recommend downloading Paint.NET to view them. You can also make a list of the different texture types, and the different variants for each type, as this will come in handy later. In general, there are four different texture types for heads, bodies, hands, feet, and (for beast races) tails. I'm not a texture artist so forgive me for this rough description of what the texture types do.
- Diffuse: this is the color of the texture and the "main" texture file. This has no suffix (e.g. "femalehead.dds")
- Normals: this represents "creases" or "contours" in the texture, for example to depict muscle definition or age wrinkles. This has the suffix "_n" (e.g. "femalehead_n.dds").
- Specular: this is a map of how shiny the texture should be, such as for sweaty vs. dry skin. This has the suffix "_s" (e.g. "femalehead_s.dds").
- Subsurface: this is a map of how light bounces off/through translucent skin. Usually the options here are "default" and "dark" or "black". Most users would use the default option but for those with bright lighting setups due to their ENB or reshade who see an "ugly bronze shine" effect, the darker options can be used instead. This has the suffix "_sk" (e.g. "femalehead_sk.dds").
Heads have a fifth texture called "Height" which is used for complexions. These are found in the "textures\actors\character\(fe)male" folder of the mod and will almost always have the following reserved names:
- (fe)maleheaddetail_age40.dds
- (fe)maleheaddetail_age50.dds
- (fe)maleheaddetail_frekles.dds
- (fe)maleheaddetail_rough.dds
However, some mods add extra files. For example, browsing the main BnP download, I noticed a "textures\BPFS\BnP female skin 4k (CBBE RBT)\BnP\mainRBT\textures\actors\character\female\femaleheaddetail_vamp.dds" file which I assume is a special complexion for vampires - I'll take a note of it so that I can link it to the other vampire textures in the mod.
Take a look now to see how many different variants of these textures your mod provides. Explore all of the different folders in the mod download and catalog all the different options. These are the textures that you'll have to represent to SynthEBD.
Getting started on the config file
Now let's launch SynthEBD and make a new config file. Give it a name as well as the main (or only) prefix that you picked above, and select the appropriate gender (Female in this case). Since this is a full standalone texture mod, and not one that's supposed to be shuffled in as an addition or replacement of other texture sets, this will be a "Primary" config rather than a "Mix-In".

I'll also click the "Full Height Config Editor" button to hide all of the patcher configuration options that are not needed when editing a config. Now take a look at the Subgroup Tree:

Each subgroup is meant to contain one or more textures. Clicking the top right + sign (red arrow) will make a new top level subgroup. Each top-level subgroup is meant to contain a set of texture variants.

Clicking the + sign to the left of an existing subgroup adds a nested subgroup (blue arrow). These are meant to contain texture variants belonging to the given top-level texture group:

You'll notice that when you create a nested subgroup, it'll be indented relative to the parent subgroup to which it belongs.
SynthEBD does not care how you design your config file - the structure of the subgroups is completely up to you and you're free to arrange them in whichever way makes sense. The only rule is that when SynthEBD tries to apply your config file to an NPC, it must be able to pick at least one nested/variant subgroup from each top-level subgroup (or the top-level subgroup itself, if there are no variants). If it ever encounters a situation where no variant can be selected for a given NPC due to the distribution rules that you've set, it'll give up and skip to the next config file (or skip the NPC if no config files can be applied to it).
What this means in practice is that you should arrange your config file in a way that'll help you remember what all the variants are. For me, that's usually by making one top-level subgroup for each type of texture and putting the different variants supplied by the mod into nested subgroups within each top-level:

Note that I don't have top-level subgroups for feet because in most cases feet point to the Body textures (open one of the body textures in Paint.NET to see how this works) and the complexions are called "Head Options" in homage to pamona's original Bits and Pieces naming scheme (the name you choose for your subgroup is completely up to you).
However, you can arrange your subgroups completely differently if it suits you, such as in this hypothetical example:

Here the patcher would go to the "Heads" top-level subgroup and pick either the "Green" or "Red" head option, and then go to the "Bodies" top-level subgroup and pick either the "Green" or "Red" body option. The advantage of this approach is that it simplifies the number of subgroups because the diffuse, normal, specular, and subsurface textures for each variant can all be lumped into one subgroup. However, when you have a large mod such as BnP with many textures, I've found that this type of architecture makes it hard for me to track which textures I've already incorporated into the config file as I go along, so I've found it easier to stick to the first option with each texture type listed explicitly.
Adding textures to your config files
At this point you're going to have to refer back the your list of textures supplied by the mod, and make subgroups for each variant within the top-level subgroups that you've made. How you nest your subgroups is up to you - the consideration here is that each nested subgroup will inherit the distribution rules of its parent. You can either have each texture variant in a separate subgroup within the top-level subgroup, or take advantage of the inheritance to apply the same set of rules to multiple texture variants. As an example, head normal maps almost always come in race-specific variants, with each vanilla race getting its own head normal texture. However, the mod LoverGirl Skin provides two different head normal options for Wood Elves: a default one and an alternate texture with a more pronounced brow ridge. My config file for this mod looks as follows:

Here you can see in the Head Normals --> Wood Elf subgroup I've set up a rule that textures within this subgroup can only go to Wood Elves. However, within the Wood Elf nested subgroup, there are further nested subgroups which contain the default or alternate head normal map textures, respectively.
Whenever you make a subgroup that's supposed to directly contain a texture (i.e. you aren't planning to make any further nested subgroups), you'll need to add the texture to the subgroup. For each texture, you'll need to "Add New" an Asset Path:

Then, click the "Search" button and select the texture which this subgroup should contain:

Once you open a texture file, SynthEBD should be able to autodetect what kind of texture it is and auto-fill the Destination path appropriately:

If this is successful, both the Source and Destination path borders will turn green. If the Source border remains red, it means SynthEBD had trouble opening the file - this might be caused by having too long of a file path. If the file name isn't one of the default names and the Destination path stays red, you can use the Set Destination dropdown menu to tell SynthEBD where this texture belongs:

Once the Source and Destination paths show green borders, you're free to add additional textures and/or subgroups, or tag the subgroup with distribution rules.
Linking Subgroups
If you follow my preferred config file architecture, you may end up with a conundrum - you may have several subgroups that always need to be distributed together. For example, in my Tempered Skins for Male config file, there are a bunch of options for body hair and dirt for both bodies/feet and hands. If an NPC gets a body texture with no body hair and dirty skin, it wouldn't make sense for them to get hands with hairy wrists and no dirt. To make sure the correct subgroups get grouped together, drag the subgroup you want to link from the Subgroup Tree into the Required Subgroups box of the currently displayed subgroup:

SynthEBD doesn't need you to link bidirectionally (such as going to the Body Specular 5 subgroup and dragging in Body Diffuse 5 in this example) - it can figure out which textures are compatible from a single-directional linkage like this one. However, know that making a linkage bidirectional can speed up patching. Similarly to linking subgroups, you can also set mutually exclusive subgroups using the Excluded Subgroups list.
In some cases, making linkages can get tedious - in this case, you can use the Group Linker window.

For example, in Feminine Khajiit textures, every texture type has a "Grey Cat" and "Leopard" option. Dragging all required subgroups to the Required Subgroups box of every other subgroup is going to get annoying fast.

To speed this up, we'll open the first Grey Cat subgroup and open that Group Linker window

You can find subgroups to match using their ID and/or name. Here I'll link all of the Grey Cat subgroups using their name. Since I'm getting tired of writing this tutorial and want to go to bed, I will stop typing after "Grey" and click "Match Partial" to allow partial text matches, which populates the list with matching subgroups. Now I have three options:
- Link To These: All of these listed subgroups will be added to the displayed subgroup's Required List
- Link These To: The displayed subgroup will be added to the Required List of all of these listed subgroups
- Link Group Reciprocally: Both of the above will happen, so the linkages will be bi-directional.
I'll link these groups reciprocally using the third option. Now all of the groups in the list above have been added to the Required list of each other:
Head Diffuse:

Head Normal:

In this way you can quickly assign textures to be distributed together even if they're in different top-level subgroups.
Adding Distribution Rules
Distribution rules determine which NPCs can get a given texture or set of textures. The details of distribution rules are covered in my Texture Distribution Rules and Attributes videos so I won't rehash them here. Rather, I'll just point out some distribution rules that configs often should have.
As mentioned earlier, most texture mods have race-specific head normal textures. These should have Allowed Races or Allowed Race Groupings set to limit distribution only to the races for which the texture was intended.

Most config files also have complexion textures, which will go to the Head Detail subgroup. These should get an Allowed Attribute set to "force if and restrict" with the matching head detail distribution rule - in this case "Must Get Age40 Face".

"Must Get Age40 Face" is an Attribute Group that ships by default with SynthEBD. If you investigate the Attribute Groups section of a newly created config file (or the General Settings Menu), you will find that its definition contains the corresponding texture set records from the vanilla game. Therefore, if the NPC being patched has the vanilla "SkinHeadFemaleBretonComplexion_Age40" texture set (or any of the others in the image below) applied in its .esp file, it'll get patched with the corresponding Age40 .dds texture from your config file

Another common area where rules are desirable is Body Normals, which control the muscularity of the NPC. SynthEBD ships with three Attribute Groups with which you can govern muscularity by default, ranging from
1. Must Be Muscular
2. Must Be Athletic
3. Must Be Fit
With these, you can control up to four levels of muscularity. The most ripped normal map could get a Force If and Restrict attribute of "Must Be Muscular" with the highest priority - these would be the "superhero" NPCs who you want to always (Force If) look uniquely (Restrict) muscular:

The next-most muscular would get the "Must Be Athletic" Force If attribute with an intermediate priority. The "Force If" means that if an NPC falls within this group they must get this texture (unless they also fall into the "Must be Muscular" group above, which has a higher priority), but there's no "Restrict" so other NPCs could also be assigned this muscular texture at random.

Then the normal map that looks "in shape but not shredded" would get the "Must be Fit" attribute with the lowest priorty

Finally, the body normal map with no muscle definition at all would be restricted using the disallowed attributes, by adding all of the muscularity levels above to its Disallowed Attributes list:

This of course is all a suggestion based on how I have things set up in my config files. If your texture mod provides more levels of muscularity you may need to edit your attribute groups to make different tiers (or just assign the same tiers to different textures). Likewise, if your mod has fewer levels of muscularity, you can assign multiple tiers to the same texture (e.g. force the texture if the NPC "must be fit" OR "must be muscular"). The rules are meant to be flexible and up to you as the config file author - do whatever you think brings the most life and variety to your game.
Linking to Body Shapes
One of the features advertised by SynthEBD is the ability to tie textures to body shapes. This is done using Body Descriptors, which are set on individual BodySlides or BodyGen morphs. For this tutorial I will use BodySlides as most people use the OBody tie-in rather than the BodyGen, but the same strategy applies to both.

This bodyslide has a chubby shape, so it probably shouldn't go with the highly muscular body normal map textures or it would cause an inconsistency between the shape and texture. To put rules on texture:body shape pairing, you need to make sure your general settings menu is set to your preferred body shape distribution mode. For example, if you use BodyGen mode in General Settings, your config file will display its BodyGen descriptor options:

Likewise, if you set the General Settings to BodySlide mode, your config file will display its BodySlide descriptor options:

So, for a muscular texture map, you would want to disallow bodyslides that are chubby:

Conversely, if you have a cartoonishly muscular normal map, you may want to give it an "Allowed BodySlide Descriptor" of "Exaggerated" and/or "Powerful so that only NPCs getting that normal map would also be forced to get that type of bodyslide.
You may notice the option to the right: "Match any/all Descriptor Categories". By default, this is set to "all" for Allowed Descriptors and "any" for Disallowed Descriptors. For example, many texture mods for female NPCs have both varying levels of muscularity, and also varying levels of shading under the bust which is meant to be used with petite vs. more voluptuous bodyslides. If you have a texture that is highly muscular and has no shading, you may want to give it the following allowed descriptors:
Build: Powerful
Chest: Petite
If the Match Mode is set to "All", then an NPC receiving this body normal texture would need to get a bodyslide annotated as both "Powerful" and "Petite". If the Match Mode were to be changed to "Any", then NPCs receiving this texture could get a BodySlide tagged as either "Powerful" or "Petite", which is probably not the desired effect.
In contrast, if you have a texture with medium muscularity and a voluptuous chest, you may want to make use of the Disallowed attributes instead to make it compatible with a wider range of body shapes, and tag it with the following disallowed descriptors:
Build: Chubby
Chest: Petite
In this case you'd want to Match Mode to be set to "Any" - that way an NPC receiving this texture would be barred from receiving "Chubby" or "Petite" bodyslides. If the Match Mode were instead set to "All", then only bodyslides that were both "Chubby" and "Petite" would be disallowed, so this muscular normal map could pair with a "Chubby"/"Busty" bodyslide or "Slight"/"Petite" bodyslide. For this reason, I'd recommend keeping the default settings, with Allowed Descriptors matching to "All" and Disallowed Descriptors matching to "Any". However, if you want to change this logic, you can do so individually on a per-subgroup basis as in the image above, or change it for all subgroups using the Misc tab:

You may have noticed the third "Shared" option in the dropdown - this works like "All" mode, but will forgive bodyslide categories that don't exist in your bodyslide settings. For example, let's say you've done some extensive customization of your BodySlide settings and you have a particular interest in shoulders, so you've made a new Descriptor for shoulder widths:

Now you have an extremely muscular normal map texture that you want to reserve for characters with cartoonishly muscular proportions, including wide shoulders, so you set up Allowed Descriptors as such:

Now your config file depends on your custom BodySlide descriptors. You can export your BodySlides descriptors using the Export button in your BodySlide menu and ask users to download that file and import it, as pamonha does on his page, but many won't do so. These users won't have a "Shoulders" descriptor category, so when they try to run your config file they won't be able to get correct body shape pairing with this subgroup because none of their BodySlides will be tagged as "Shoulders: Wide". To get around this, you would set the Match Mode to "Shared". This way users who have imported your BodySlide descriptors will be able to use the full functionality of your config file, including restricting to BodySlides with wide shoulders, while users who haven't will still at least need to match the "Build: Exaggerated/Powerful" descriptor which exists in the SynthEBD settings by default.
Non-standard Textures
If you want to distribute non-standard textures (e.g. textures that you can't select using the Set Destination dropdown menu), please see the separate article on this topic.
Validating your Config Files
Once you're done making a config file, you'll want to make sure it doesn't have errors. SynthEBD has a relatively thorough checker using the "Validate" button:

If there are no issues, you will see a "No errors found." popup such as the one above. If there are issues, you will be taken to the status log where they will be reported. Common issues include missing texture paths (caused by forgetting to set them or changing your config prefix):

Or duplicate Subgroup IDs (they all need to be unique within a given subgroup, so feel free to auto-generate or just come up with one yourself):

In addition to "hard errors" that prevent a config file from running, you'll also want to try a few NPCs using the Asset Distribution Simulator. First, make sure that only the config file you're developing is enabled, and then click "Simulate Distribution". Select an NPC that you think should be receiving textures from your config file, and click "Simulate Primary Distribution". Simulation Rounds in the number of times it'll simulate assignment for you to get a sense of how often a given subgroup is picked.

For example, here you see that Hadvar can get the D2 - Elder or D4 - Geonox Stubbled subgroups, in a roughly 1:2 ratio, and cannot get the D1 or D3 subgroups. Each subgroup will have a "Why?" button next to it - clicking that will often bring a report of why the subgroup wasn't chosen:

Sometimes SynthEBD can't automatically figure out why a given group wasn't selected, and the popup will say "No relevant information found." In this case, click the "Show Full Detail Report" button at the top of the window, and copy that report using the white button in the bottom left into Notepad++ or your favorite text editor (the format is optimized for viewing in NP++):

Here you'll see in excruciating detail how SynthEBD made its decision for the last round of distribution for your config, which should help track down any issues. Repeat this process for several NPCs to convince yourself that everything is being distributed as you would expect.
Packaging your Config Files
Once you've finished making all of the different config files that you need to distribute (different resolution options, CBBE and UNP, etc), you can package them into an installer module using the Config Packager:

In the menu that pops up, fill in the following info:

Config name: The name of the config file (purely decorative)
Config Prefix: The default prefix of your config file. This should match the one you used when making the config file (e.g. the folder that you extracted your textures into when you started making the config file). Don't worry if you had to make additional prefixes as instructed above - we can account for this later.
Config description: Short description of what this config installer does
Installation Notes: Message that will be visible to the user. Use this space to give the user a heads up about anything they should know. For example, "this texture mod has bad neck seams for the age40 and age50 complexions, so these textures are disabled and NPCs with these face textures will not be patched" (hypothetical - Bits and Pieces does not actually have bad blending, although some other texture mods do).
Below and to the left you see the node tree. These are the options that a user sees when installing. The installer starts at the Root1 node. You can click the + sign to make options for the user to choose. If needed, you can also click "+ Root Node" to add an additional root node for the installer to enter once the user finishes all options in the first root node (I've personally never needed more than one root node, but the option is there in case someone needs it). Before adding these nodes, add text to the Sub-Options Prompt - this is what the installer will ask the user while prompting them to choose between sub-nodes. Don't worry about the Name and Description for the Root1 node; the user will never see them. Once you've filled this out, add sub-nodes that correspond to your intended options:

The Name field will correspond to the name of the option that the user will see in the installer, and Description will be a floating tooltip that shows up when the user hoovers their mouse over that option. You can then add further sub-nodes:

You can add mod downloads to any node. For example, once the user selects CBBE and 4K, I know which mods they need to download. I can add further sub-nodes such as "Do you want to use the version set up for BodyGen: yes or no", but regardless of the answer, the textures that the user needs to download stay the same, so I can add the downloads here by clicking the + sign next to "Mod Downloads":

Mod Page Name is the name of the Mod (what appears on the Nexus Banner). This is purely for the user's information
Mod Page URL: Copy this from the "Manual Download" button, and paste into your browser to make sure it looks like the screen on the right. You can also just link users to the mod's Downloads tab and have them find it themselves based on the Mod Download Link Text
Mod Download Link Text: The name of the download as it appears on the Downloads tab (not strictly necessary if linking directly to the download page as above, but still nice to have):

Expected File Name: The name of the file that you downloaded to make this config file. If the texture author ever updates their textures and your user downloads the updated version, SynthEBD will still try to install it and as long as all of the original files are still there, there will be no issue. But if the user sees that the file name is different than the one they're downloading, they can at least get a heads up that something has changed and they should be on the lookout for issues.
Override Prefix: If you run into the situation described at the beginning of this tutorial, where the author provides texture options as separate zipped archives containing files with the exact same path, this is where you can specify the additional Prefix that you used. If left blank, SynthEBD will extract the textures to the Config Prefix that you set at the top of the packager. If not left blank, it'll extract to the prefix directory that you specify here.
You can add as many mod downloads as you need to - for BnP we'll need to add "Extra Options" file as well as the Extra Matte CBBE file and "BnP Sk fix".
In addition to the Mod Downloads, you can see that I've specified a Destination Folder Name in the "4K" node. This is the name of the folder that will appear in your mod manager and contain all of the textures extracted from the downloaded texture mod. In this case, once the user finishes installing this config and refreshes their MO2 or Vortex mod list, they will see a new mod called "SynthEBD - Bits and Pieces Female Skin 2.0 CBBE 4K" which they will need to enable.
Once you've specified all of your installer options, its time to point the installer at your config files. First, put them all in an easily accessible directory (I like to use my Downloads folder). You can have them all in the same folder, or in nested folders. I like to nest mine in CBBE and UNP folders.

Now, add the containing folder (in my case the BnP2.0 folder) as the Root Directory by clicking the "SET" button:

Now we can add files for the config installer to package for the recipient user to install. Your main config file will be added by clicking the "+" next to Asset Config Files. If needed, you can add BodyGen Config Files as well (if you've annotated your config file with BodyGen descriptors, distribute it along with your texture config file - if the user already has the same BodyGen config installed, it'll be skipped when your config is installed). As long as the root directory is set, the border around each file will be green. If you forget to set the root directory, or if you move or delete a file without updating its location in the config installer, the border will be red.

Advanced options:
- If you expect your config file to apply to a race that's not in the default Patchable Races list, you can add it here so that it'll be added to the user's Patchable Races list after your config is installed.
- If you used non-standard texture types (again, see the accompanying article on this topic), you can add your new Record Template plugins here.
- While I refer exclusively to textures in this tutorial, SynthEBD is agnostic to what you're distributing - it just knows to distribute files. You can use it to distribute things like meshes as well. By default, SynthEBD knows that .dds files go into "Data\textures" and .nif files go into "Data\meshes". You may find yourself distributing other file types. For example, .tri files also go into the Meshes folder. If your config file distributes .tri files, you can specify where to put them using the Directory Routing feature.

Once you've finished pointing the config installer at all of your config files and any other accompanying files that might be needed, click "Export" and select your Root Directory as the destination. A manifest.json file will appear. Select everything in your root folder, add it to a zipped archive (7z, zip, etc) and you're done!

If you ever need to make changes, just click the "Import" button and select the generated Manifest.json file. Set your Root Directory again and you'll be ready to resume editing.
Now a user can install the config files that you've created!

I know it's a bit of work to make a config file, but at the end of the day it's not difficult; it just requires attention to detail. To recap, the concepts are:
- Tell the config file which texture files live where and what to do with them
- Add rules to any textures that need to be restricted to certain types of NPCs
- Add allowed/disallowed body shape descriptors to any textures that should/shouldn't go with particular body types
- Make modified copies for any variations that a user might need (UNP vs. CBBE, 4K vs. 2K, etc)
- Package all of your work using the config packager.
- Upload
As always, feel free to leave a comment or find me on the Mutagen Discord if you need help.
1 comment