0 of 0

File information

Last updated

Original upload

Created by

Rainy

Uploaded by

RainyMidnight

Virus scan

Safe to use

121 comments

  1. RainyMidnight
    RainyMidnight
    • member
    • 24 kudos
    Locked
    Sticky
    New Version 1.1 Features:

    • New condition: "plugin" - allows for filtering by .esp. The filter activates on all plugins that change the actor in any direct way. Example use case: exclude all NPCs changed by an appearance overhaul.
    • New color option: "color": "random" - chooses a random color for the overlay.
    • New color option "color": "random-saturated" - works like the random option, but only assigns saturated colors.
    • It is now possible to specify default color options for each overlay in the mod config json files.
    • Added support for the following overlay packs: Sunstarved Tanlines, Lyru's Tattoo pack collection, Lyru's Tattoo pack collection 2, Lewd Marks.

    1.2:

    • Support for older game versions. If you experience any problems on older versions please let me know.

    1.3

    • Added support for the following overlay packs: Flawn's Argonian Overlays, TitKit by Monsto SSE, Imperfect Skin Overlays, Niohoggr Warpaints, Obi's Tattoos 3BA 4K, Breast Veins.
    • Fixed some bugs.
  2. Omgitsepicnesswow
    Omgitsepicnesswow
    • premium
    • 0 kudos
    Hi thanks for the great mod!
    Any chance you have the source code posted somewhere? I am trying to make a mod that conditionally distributes racemenu overlays to the player and would greatly appreciate it.
  3. danteswrath420
    danteswrath420
    • member
    • 0 kudos
    I got the overlay to work once, but decided to change it, but now the NPCs are stuck with the previous overlay and I can't get the new one to work no matter what I try.

    Here are my rules:

    {
      "distributionRules": [
        {
          "conditions": [
            {
              "gender": [
                "female"
              ]
            }
          ],
          "distributionMode": "one",
          "baseChance": 1.0,
          "overlays": [
            {
              "id": "private-body-tattoos:bs_thehag_vamp1_full",
              "slot": "body",
              "type": "bodypaint",
              "gender": "female",
              "theme": "artistic",
              "set": "bs_thehag_vamp1_full",
              "color": "0xE00B0B",
              "glow": true,
              "glowColor": "0xE00B0B"
            }
          ]
        }
      ]
    }
  4. Since the distribution rules target a certain group of our choice and distribute a set of overlays to them, should I make multiple individual files if I am targeting select NPCs via EditorID and applying a specific preset (each different)?

    Or is there a way I can group these npc-related configs in a single file, but have control over which overlay is applied to whichever npc I want?
    1. Sorry for troubling people here, but I can't figure out why this distribution rule will not work. Everything seems right, I even followed the example of glowing mages
      {
          "distributionRules": [
              {
                  "conditions": [
                      {
                          "editorId": [
                              "Gabriella"
                          ]
                      }
                  ],
                  "baseChance": 1.0,
                  "overlays": [
                      {
                          "id": "community-overlays-3:co2_64",
                          "weight":1,
                          "color": "0x00FFFF",
                          "glow": true,
                          "glowIntensity": 20.0,
                          "glowColor": "0x520052"
                      }
                  ]
              }
          ]
      }

      Do the file names have to be something specific? Is it not recognizing my rule at all if I name it ODF_customNPCs.json?
    2. So there's one way I have managed to make this work, which is by not using the EditorID but rather the faction and gender. I should have mentioned that the NPC is affected by an appearance overhaul using EasyNPC. Even so, the overlay distribution works if I do not use the EditorID. I even tried the plugin method by using my merged esp, but no affect.
      Here's my rule for now:
      {
          "distributionRules": [
              {
                  "conditions": [
                      {
                          "faction": [
                              "DarkBrotherhoodFaction"
                          ],
                          "gender": [
                              "female"
                          ]
                      }
                  ],
                  "baseChance": 1.0,
                  "distributionMode": "one",
                  "overlays": [
                      {
                          "id": "community-overlays-3:co3_62_body_f",
                          "weight": 1,
                          "color": "0x00FFFF",
                          "glow": true,
                          "glowIntensity": 20.0,
                          "glowColor": "0x520052"
                      }
                  ]
              }
          ]
      }

      If I add in the EditorID of Gabriella, it stops working. Do I have to write all the plugins that are affecting the NPC, or only appearance plugins? Like, should it be plugins : ["Skyrim.esm", "unofficial skyrim special edition patch.esp", "NPC Appearances Merged.esp"] or should it be plugins : ["NPC Appearances Merged.esp"]
       
  5. oshawott64
    oshawott64
    • supporter
    • 0 kudos
    Can't seem to get the mod to work. Have been getting this error:

    FAILED! Could not get SKEE interface map - tracking will be disabled

    on game version (1.5.97)
  6. zainjavaid
    zainjavaid
    • member
    • 1 kudos
    Is it possible to toggle the Mod on & off via MCM or script ? if not could you please add this feature? Thanks
  7. glaciereater
    glaciereater
    • supporter
    • 0 kudos
    Thank you - this is wonderful, and it worked out-of-the-box quite smoothly.

    One question: for the NPCs who were assigned overlays by this, where is the information stored (SKSE co-save?) and is it possible to tweak/re-roll in any ways?

    Also, this is more hypothetical, but if we were to uninstall the mod and/or overlay after they are applied to the NPCs, would that cause problems?
    1. MajorKirrahe89
      MajorKirrahe89
      • member
      • 16 kudos
      I wanted to ask that myself - these are pretty important things to know.
    2. priye
      priye
      • member
      • 0 kudos
      I'm only speaking for me but even if you uninstall the mod the overlay still remains, so i would be careful.
    3. RainyMidnight
      RainyMidnight
      • member
      • 24 kudos
      All information is stored by RaceMenu. This mod makes no direct modification to your save, and uninstalling would leave no trace of the mod, other than the overlays and a tag which are stored by RaceMenu. Mass re-rolling is not possible, as the mod does not keep track of specific overlays it applied, but you can tweak any NPC directly by editing them in RaceMenu with a tool like this: https://www.nexusmods.com/skyrimspecialedition/mods/19353
    4. glaciereater
      glaciereater
      • supporter
      • 0 kudos
      Thank you for clarification- makes sense!
  8. mertz
    mertz
    • premium
    • 21 kudos
    Thank you for making this. I've got a couple of technical questions and I apologize if I missed these when scouring the Description page and the how-to article.


    • I've noticed that some JSON files have UNIX-style paths and others have double-slash Windows paths. If you use UNIX-style paths does the path to the asset need to include the full path from the root of the Skyrim directory or can they start in "textures?"
    • Where are the logs written? I looked in the skee log and it didn't seem to be logging anything related to ODF.
    1. RainyMidnight
      RainyMidnight
      • member
      • 24 kudos
      Logs should be in Documents/MyGames and then either Skyrim.INI or Skyrim Special Edition, then SKSE/OverlayDistributionFramework.log.

      Different filepaths are needed due to some skyrim jank where .bsa packed files only work with a certain format. Look at the mod config article I just released for more information.
    2. mertz
      mertz
      • premium
      • 21 kudos
      Awesome thank you!
      I'm not seeing a log being written for some reason but I'll test with another install on another machine and test to see if I can reproduce it reliably.  

      Also I'm not surprised at all about Skyrim jank. :)
  9. mertz
    mertz
    • premium
    • 21 kudos
    Here's a handy JSON Validator if anyone needs it when creating distribution definitions.
    1. kraag
      kraag
      • premium
      • 89 kudos
      Sending your code online can expose it to theft by middlemen, regardless of what the code does or its perceived importance, some may like the option to use an offline JSON syntax checking tool, such as the one contained within the JSON plugin in Notepad++
    2. mertz
      mertz
      • premium
      • 21 kudos
      Technically JSON is semi-structured data and not code. 

      I 100% agree with you on the Notepad++ option.  I usually use python json-lint in WSL myself.
  10. aghasurkhail
    aghasurkhail
    • member
    • 0 kudos
    will it conflict or effect npc replacers?
  11. zainjavaid
    zainjavaid
    • member
    • 1 kudos
    [2025-07-26 19:05:25.677] [log] [info] [plugin.cpp:763] MOD 'natural-pubic-hairstyles': 65/65 files found (65 corrected)
    [2025-07-26 19:05:25.684] [log] [info] [plugin.cpp:763] MOD 'skin-feature-overlays': 16/16 files found (16 corrected)
    [2025-07-26 19:05:25.730] [log] [info] [plugin.cpp:763] MOD 'sunstarved-tanlines': 125/125 files found (125 corrected)
    [2025-07-26 19:05:25.730] [log] [info] [plugin.cpp:798] Loaded 3 mod configs
    [2025-07-26 19:05:25.731] [log] [info] [plugin.cpp:1398] Loading distribution rules from directory: Data/SKSE/Plugins/ODF_distribution_rules
    [2025-07-26 19:05:25.731] [log] [info] [plugin.cpp:1401] ODF_distribution_rules directory not found: Data/SKSE/Plugins/ODF_distribution_rules
    [2025-07-26 19:05:25.731] [log] [info] [plugin.cpp:3309] SUCCESS! Registered actor initialization event sink
    [2025-07-26 19:05:25.731] [log] [info] [plugin.cpp:3323] SUCCESS! Initialized SKEE Body Morph Interface for ODF tracking
    [2025-07-26 19:05:25.731] [log] [info] [plugin.cpp:3333] Performing initial scan for target NPCs in currently loaded actors...
    [2025-07-26 19:05:25.731] [log] [info] [plugin.cpp:3337] Scanning all loaded actors for target NPCs...
    [2025-07-26 19:05:25.731] [log] [info] [plugin.cpp:3355] Initial scan complete - processed 0 actors

    hi , In the logs I can see it scanned and found 0 actors to apply and then it stops, does it not run again?  previously I had set the gender to be both and yet no overlay was applied. Is there something that I am not following ?
    1. RainyMidnight
      RainyMidnight
      • member
      • 24 kudos
      it seems like your distribution rule file was not found. did you put it into the correct directory SKSE/Plugins/ODF_distribution_rules?
    2. zainjavaid
      zainjavaid
      • member
      • 1 kudos
      yeah I validated the Json found an extra comma corrected it and it applied. Thanks 

      Followup Q:

      How to match the color and transparency code visible in Racemenu with the color and Alpha attributes in the config ?
      Example 2DFFC1AA shows in Racemenu (A:45, R:255 G:193 B:170) ? 
    3. RainyMidnight
      RainyMidnight
      • member
      • 24 kudos
      The format is hexadecimal where 2 letters correspond to one attribute eg 2D is hexadecimal for 45, which is your alpha value. You can just use ChatGPT or an online converter to convert RGB to hexadecimal. In the config you use 0xFFC1AA, so the color code without the alpha and with a 0x prepended.
    4. zainjavaid
      zainjavaid
      • member
      • 1 kudos
      Thankyou for the info, but I think there might be issue with type strechmarks because the mod works fine with pubic hairs. Is there something wrong with the below config? Thanks 

      FOUND POTENTIAL NPC:  [] (Name: Bandit Beastmaster, FormID: 0x000B6256, Class: Bandit Beastmaster, Race: Breton [BretonRace], Plugins: None) - Evaluating against 1 rules
      [2025-07-27 16:46:03.308] [log] [info] [plugin.cpp:3069] RULE MATCH:  matches rule with 1 conditions (baseChance: 1 >= 0.98852503) - Selected 1 overlays
      [2025-07-27 16:46:03.308] [log] [info] [plugin.cpp:3189] ApplyOverlaysToActor() called for  with 1 overlays:
      [2025-07-27 16:46:03.308] [log] [info] [plugin.cpp:3190]   [skin-feature-overlays:sfo_stretch_toosh color=0xFF0000 [rule:color=0x00FFFF] [rule:glow=true] [rule:glowColor=0x520052] [rule:glowIntensity=20.0]]
      [2025-07-27 16:46:03.309] [log] [info] [plugin.cpp:2493]  overlay using distribution rule color: 0x00FFFF

      {
          "distributionRules":[
              {
                  "conditions":[
                      {
                          "gender":["female"],
                  "race":["NordRace","ImperialRace","BretonRace"],
                      "class":["-EncClassVampire"]

                      }
                  ],
                  "baseChance":1.0,
                  "overlays":[
                      {
                          "type": "stretchmark",
                          "color": "0xFF0000",
                          "glow": true,
                          "glowIntensity": 20.0,
                          "glowColor": "0x520052"
                      }
                  ]
              }
                  ]
              }        
          ]
      }

      {
                  "id": "sfo_stretch_toosh",
                  "filepath": "Textures\\Actors\\Character\\Overlays\\SFO\\Stretch Toosh.dds",
                  "slot": "body",
                  "type": "stretchmark",
                  "theme": "default",
                  "gender": "female",
                  "bodyType": "all"
              }



    5. RainyMidnight
      RainyMidnight
      • member
      • 24 kudos
      you have too many brackets; this should work:
      {
          "distributionRules":[
              {
                  "conditions":[
                      {
      "gender":["female"],
      "race":["NordRace","ImperialRace","BretonRace"],
      "class":["-EncClassVampire"]
                      }
                  ],
                  "baseChance":1.0,
                  "overlays":[
                      {
                          "type": "stretchmark",
                          "color": "0xFF0000",
                          "glow": true,
                          "glowIntensity": 20.0,
                          "glowColor": "0x520052"
                      }
                  ]
              }
      ]
      }
    6. zainjavaid
      zainjavaid
      • member
      • 1 kudos
      Great! Once last suggestion , could you make alpha between 0-255 instead of 0 to 1 to correspond with Racemenu ? Thanks