Discord Facebook Instagram Reddit Twitch Twitter Youtube
Spell Perk Item Distributor (SPID) and Keyword Item Distributor (KID)
How-To Use, Edit, and More
It is truly amazing the leaps and bounds the Skyrim modding community has made over the more than a decade since it’s initial release (do I sound like a broken record yet? lol), and the Spell Perk Item Distributor (SPID) and Keyword Item Distributor (KID) mods that powerofthree released in 2020 and 2021, respectively, are prime examples. The sheer number and variance in mods using these frameworks are astonishing. If you don’t have any desire to learn how to use these, but still want to be able to take advantage of them, there are so many mods you can download and use out of the box. But I am telling you that, with a little bit of time spent learning how to tweak these (and it’s really not that difficult), you can personalize your game more than ever before. So customizability you can tweak easily, with minor scripts that basically run once AND with essentially no conflicts to patch, I don’t think calling these revolutionary is an understatement.
So, I’m going to break this page up into a few parts: the first will be some basic info about SPID and KID; the second will be a quick how to tweak an already existing ini file (for example, a mod distributing a particular weapon or outfit or item or spell); the third will be how to create your own SPID/KID mod; the fourth will be some of my favorite mods that are built on SPID/KID; and the final section will be a reference guide to help with customizing your distribution. Enjoy!
- SPID - Links and Basic Information
- SPID - Filtering
- KID - Links and Basic Information
- KID - Filtering
- SPID Examples
- Tweaking SPID Ini Files
- KID Examples
- Tweaking KID Ini Files
Spell Perk Item Distributor (SPID)
“SKSE plugin that can be used to add spells/perks/items/shouts/packages/outfits/keywords/factions to every NPC in the game, using config files.”
Spell Perk Item Distributor xEdit Scripts
“xEdit Scripts for the Spell Perk Item Distributor to make ini files.”
The following information is my short version of what can be found on the description of the mod page, with emphasis added where I thought it would be helpful (and some just copied verbatim):
List of Distributable Types: Spell Perk Item Shout LevSpell Package Outfit Keyword DeathItem Faction
Distributed records should be written to an ini file containing the suffix “_DISTR” (for example, MyMod_DISTR.ini).
They should follow this general format:
Spell = formID~esp(OR)editorID|strings|formIDs(OR)editorIDs|min/max level,skill(min/max)|gender/unique/summonable|NONE|chance
Items have their own specialized format:
Item = formID~esp|strings|formIDs(OR)editorIDs|min/max level,skill(min/max)|gender/unique/summonable|itemCount|chance
Helpful Terms:
FormID - eight digit hex-numbers that are unique identifiers for nearly everything in the game; for this purpose the leading zero digits will be removed (eg. 0x12345) - It is important to note that if you compact an ESP in order to ESLify it, the FormIDs will change and your distribution ini will need to be updated, so I suggest compacting BEFORE creating your ini.
EditorID - a different identifier than FormID, one that is not bound to the eight digit hex-number limitation, and is therefore easier to read. If you use thte EditorID instead of FormID, you do not need to worry about updating if the FormID changes.
Esp - the mod containing the record. You do not need to include this in the ini if the item you are distributing is from the Skyrim base game or DLC.
KywdName - the name (editor ID) of the keyword
Filtering:
Filters are for distributing to only specific groups of NPCs. Filters that you’re not using can be marked as NONE or left blank.
NOTE: Combining multiple filters will progressively restrict the pool of NPCs that can be distributed to. Distribute the same record multiple times to add it to different types of NPCs.
List of Valid Filter Form Types:
Faction Class CombatStyle Race Outfit NPC VoiceType
More Information About Filtering:
Multiple entries should be separated using a comma.
Requirements [strings, formIDs] - require actor to have all keywords or filter forms, using + (eg. ActorTypeGhost+ActorTypeAnimal to get animal ghosts).
Exclusions [strings, formIDs] - exclude actors that have name/keyword/form, using - (eg. -Serana).
Wildcards [strings] - find all actors that have name, editorID or keyword containing wildcard, using * (eg. *Draugr to get Draugr/Draugr Death Lord/Draugr Mage).
Matches [strings, formIDs] - this is default setting. NPC has to match with any filter.
These are evaluated in the following order :
1.Requirements 2.Exclusions 3.Matches 3.Wildcards
Actor Level is minimum/maximum actor level. Records will be distributed to NPCs with levels within this range. This filter is skipped for NPCs that level up with the player.
Skill Level (OneHanded, Lockpicking, ect) range from 0 - 17, followed by the min and max Skill Level required. Supports pattern matching.
List of Skills:
OneHanded = 0 TwoHanded = 1 Marksman = 2 Block = 3 Smithing = 4 HeavyArmor = 5 LightArmor = 6 Pickpocket = 7 Lockpicking = 8 Sneak = 9 Alchemy = 10 Specchcraft = 11 Alteration = 12 Conjuration = 13 Destruction = 14 Illusion = 15 Restoration = 16 Enchanting = 17
Traits Gender : M/F Unique : U Summonable : S
Traits can be combined (eg. M/U/F to get all male unique summonable NPCs) Traits can be negated (eg. -U to get all non-unique NPCs)
Chance Percentage chance that records will be distributed to NPCs Value is from 0.0 -100.0, default chance is 100 if left blank or NONE.
Notes Regarding Distributable Types:
Items
All items (that can be added to NPC inventory) are accepted.
Leveled Items are included under Item.
itemCount is the amount of items that should be added. Default is 1 if no count is specified
Packages
Packages are added to the top of the actorbase package stack, so they will probably take priority over everything else, excluding quest alias and scene packages.
Keywords
Keywords can either be distributed as normal, using formids from other mods, or you can assign your own custom keyword to NPCs
These keywords should be checked in-game using SKSE’s HasKeywordString function.
Keywords will be applied first, so you could distribute a keyword to NPCs, and then check if it exists when distributing other things
Keyword Item Distributor (KID)
“SKSE plugin that distributes keywords to weapons/armor/magic effects/ingestibles and other items, using config files.”
Distributed records should be written to an ini file containing the suffix “_KID” (for example, MyMod_KID.ini).
They should follow this general format:
Keyword = formID~esp(OR)keyword editorID|type|strings,formIDs(OR)editorIDs|traits|chance
Helpful Terms:
FormID - eight digit hex-numbers unique identifiers of the keyword; for this purpose the leading zero digits will be removed (eg. 0x12345) - It is important to note that if you compact an ESP in order to ESLify it, the FormIDs will change and your distribution ini will need to be updated, so I suggest compacting BEFORE creating your ini.
Keyword EditorID - a different identifier than FormID, one that is not bound to the eight digit hex-number limitation, and is therefore easier to read. If you use thte EditorID instead of FormID, you do not need to worry about updating if the FormID changes.
Esp - the name of the mod containing the keyword. You do not need to include this in the ini if the keyword you are distributing is from the Skyrim base game or DLC.
Keyword Types:
Weapon Armor Ammo Magic Effect Potion Scroll Location Ingredient Book Misc Item
Filtering:
Filters are for distributing to only specific groups of items.
NOTE: Combining multiple filters will progressively restrict the pool of items that can be distributed to. Distribute the same keyword multiple times to add it to different types of items
Strings: Keyword editorIDs (eg. WeaponTypeDaedric) Item names (eg. Iron Sword) Effect archetypes (Magic Effects only) (List of archetypes on KID mod page) Actor Values (Books, Magic Effects)
Multiple strings should be separated using a comma.
All keyword editorIDs and names (vanilla and modded) are supported.
FormIDs/EditorIDs:
To match specific items in a mod : using formIDs : (0x1234MyAwesomeSword.esp, 0x4567MyAwesomeArmor.esp) using editorIDs : (MyAwesomeSwordID, MyAwesomeArmorID)
To get all items in a mod : (MyAwesomeSwords.esp,MyAwesomeArmors.esp)
Magic Effects - Effect Shader/Hit Art/Visual Effect formIDs or editorIDs Location - Music Type / Crime Faction / Parent Location formIDs or editorIDs Ammo - Projectile
Multiple entries should be separated using a comma.
More Information About Filtering:
Multiple entries should be separated using a comma.
Requirements [strings, formIDs] - require actor to have all keywords or filter forms, using + (eg. ActorTypeGhost+ActorTypeAnimal to get animal ghosts).
Exclusions [strings, formIDs] - exclude actors that have name/keyword/form, using - (eg. -Serana).
Wildcards [strings] - find all actors that have name, editorID or keyword containing wildcard, using * (eg. *Draugr to get Draugr/Draugr Death Lord/Draugr Mage).
Matches [strings, formIDs] - this is default setting. NPC has to match with any filter.
These are evaluated in the following order :
1.Requirements 2.Exclusions 3.Matches 3.Wildcards
Traits:
Item specific filters you can use to narrow down items further. Negative pattern matching can be used with single letter traits (eg. -H to get all non-hostile magic effects, -E to get non-enchanted items) (List of traits and how to use them to filter on KID modpage)
Chance:
Percentage chance that keywords will be added to items
Value is from 0.0 -100.0, default chance is 100 if left blank or NONE.
Examples (from the SPID modpage):
;this will add 3000 gold to everyone except Nazeem Item = 0xF~Skyrim.esm|ActorTypeNPC,-Nazeem|NONE|NONE|NONE|3000
;this has a 50% chance to add a perk from test.esp to all NPCs from Test faction Perk = 0x9DE80test.esp|NONE|0x1BCC0test.esp|NONE|NONE|NONE|50
;this will add Flames to all female NPCs between actor levels 25 and 50 Spell = 0x12FCD~Skyrim.esm|NONE|NONE|25/50|F
;this will add Flames to all male unique NPCs who have a minimum Destruction skill of 10 Spell = 0x12FCD~Skyrim.esm|NONE|NONE|14(10)|M/U
;this will add Unrelenting Force to all NPCs that are vampire ghosts Shout = 0x13E07~Skyrim.esm|ActorTypeGhost+Vampire
;this will add a custom keyword, ActorTypePoor to Brenuin Keyword = ActorTypePoor|Brenuin
Breakdown of format:
Spell = formID~esp
Spell = editorID
Item = formID~esp
Item = editorID
This is the first part of the format and which you pick depends on what you are distributing (Spell = Spell, Perk, Shout, LevSpell, Package, Outfit, Keyword, DeathItem, Faction OR Item = Item), and the second half depends on what identifier you want to use. Keep in mind that if you use formID, you will want to be sure that you won’t want to compact in the future. EditorIDs rarely change, but formIDs change when compacting. The “esp” is the mod containing the record to be distributed (unless it is from the base game or DLC, in which case, you don’t need to include an esp at all).
Strings
This is the first half of the second part of the format and begins the filtering: You can use Keyword EditorIDs, Actorbase names or Actorbase EditorIDs. You can use multiple strings separated with a comma. All keyword strings, names, and EditorIDs (vanilla and modded) are supported. Examples include:
Keyword EditorID – ActorTypeNPC
Actorbase Names – Balgruuf
Actorbase EditorIDs – BalgruufTheGreater
FormIDs or EditorIDs
This is the second half of the second part of the format and allows for further filtering. Valid filter form types include Faction, Class, CombatStyle, Race, Outfit, NPC, VoiceType.
Min/max level, skill (min/max)
This is the third part of the format and allows for filtering by actor level or specific skill level of the NPC
Gender/unique/summonable
This is the fourth part of the format and allows for filtering by gender, uniqueness, and summonability of the NPC
NONE (for Spell) or itemCount (for Item)
This is the fifth part of the format and will be left NONE for most record distribution types, excepting Item. If left blank for an Item distribution, it will default to 1, but if you want more, what you put here is the quantity.
Chance
This is the final part of the format and determines the chance the distribution happens to the NPCs filtered into the format. Default chance is 100 if left blank or NONE. 100 is 100% and 1 is 1%, etc. You can use decimal places and I often play around with different numbers until I get the right fit.
Examples (from the KID modpage):
;add MysticismSpells keyword to all magic effects in Mysticism Keyword = MysticismSpells|Magic Effect|MysticismMagic.esp
;add NoviceDestruction keyword to all matching magic effects Keyword = NoviceDestruction|Magic Effect|NONE|20(0/25)
;add poisonous food keyword to all poisonous foods Keyword = PoisonousFood|Potion|NONE|P,F
;add keyword to all non-enchanted heavy gauntlets (armor having both ArmorHeavy and ArmorGauntlet keywords) Keyword = 0x1234~MyArmorMod.esp|Armor|ArmorHeavy+ArmorGauntlet|-E
;Add keyword using name, to all bound arrows Keyword = MysticalAmmo|Ammo|*Bound
;Add sun damage keyword to magic effects with sun hit art Keyword = MagicDamageSun|Magic Effect|0x02019C9D,0x0200A3BB,0x0200A3BC
;Add spell tome destruction keyword to all books that teach destruction spells Keyword = SpellTomeDestruction|Book|NONE|S,20 ;alternate method Keyword = SpellTomeDestruction|Book|Destruction|S
Breakdown of format:
Keyword = formID~esp
Keyword = editorID
This is the first part of the format and which you pick depends on what identifier you want to use. Keep in mind that if you use formID, you will want to be sure that you won’t want to compact in the future. EditorIDs rarely change, but formIDs change when compacting. The “esp” is the mod containing the record to be distributed (unless it is from the base game or DLC, in which case, you don’t need to include an esp at all).
Type
This is the second part of the format and determines the type of item you want the keyword added to. These can be: Weapon, Armor, Ammo, Magic Effect, Potion, Scroll, Location, Ingredient, Book, Misc Item
Strings
This is the first half of the third part of the format and begins the filtering: You can use Keyword EditorIDs, Item Names, Effect Archetypes, or Actor Values. You can use multiple strings separated with a comma. All keyword strings, names, and EditorIDs (vanilla and modded) are supported. Examples include:
Keyword EditorID – WeaponTypeDaedric
Item Names – Iron Sword
Effect Archetypes – BoundWeapon (Magic Effects Only)
Actor Values – (Books, Magic Effects)
FormIDs or EditorIDs
This is the second half of the third part of the format and allows for further filtering.
To match specific items in a mod, use formIDs or editorIDs of the specific items.
To match all items in a mod, use the formIDs or editorIDs of the broader category:
Magic Effects – Effect Shader or Hit Art or Visual Effect formID or editorID
Location – Music Type or Crime Faction or Parent Location formID or editorID
Ammo - Projectile
Traits
This is the fourth part of the format and allows for furthering filtering:
Armor:
E - enchanted
T - template
AR(min/max) - armor rating (float values)
HEAVY - heavy armors
LIGHT - light armors
CLOTHING – clothing
Weapon:
E - enchanted
T - template
W(min/max) - weight (float values)
Ammo:
B - is bolt
Magic Effect:
H - hostile
D - delivery
CT - casting type
school(min/max)
(Schools: None = -1, Alteration = 18, Conjuration = 19, Destruction = 20, Illusion = 21, Restoration = 22)
Potion:
P - poison
F - food
Ingredient:
F - food
Book:
S - teaches spell
AV - teaches actor value (skill)
numeric actor value (eg. 20 for Destruction)
Chance
This is the final part of the format and determines the chance the keywords are distributed. 100 is 100% and 1 is 1%, etc. Default chance is 100 if left blank or NONE. You can use decimal places and I often play around with different numbers until I get the right fit.
Creating Your Own SPID/KID Mods
For creating your own SPID/KID mods, it’s pretty straight forward, once you understand the format that the ini File needs to be in (see previous section for examples and more). If you are using records or keywords from the base game or DLCs, you don’t even need a plugin! All you need is the distribution ini file. If you want to reference records or keywords in mods that already exist (and you are using in your modlist), you also don’t need a plugin, but you do need to specify the esp in the distribution file. If you are adding records/keywords that do not exist, you will need to create a plugin. The most common example of this is an outfit record which uses another mod (armor/clothing/etc) for the items themselves. In most cases, the plugin you are creating the outfits in will not exceed the ESPFE/ESL record limit, so it won’t take up a plugin slot in your load order.
I’ll be adding more to this section in the coming weeks (screenshots/examples/etc).
SPID/KID Reference Guide
WIP