Street Fighter 6 mods by Wael, built and released together. Each release carries Fluffy Mod Manager packages:
| Package | What it does | Needs |
|---|---|---|
| SF6 Slots Loader | costume mods become extra outfit slots, the original outfits stay; stage mods become variants or new cells of their stage in the stage menus (experimental); a Settings tab in Replays (outfit and stage shown in replays) | REFramework; the Replays Settings tab needs SF6 Native Core 0.8.2 or newer |
| SF6 Color Mod | extra costume colours, a colour editor, Drive colours per character and per player, all from the game's own menus: colormod/README.md | REFramework, SF6 Native Core |
| SF6 Native Core | the shared native-UI core the mods display through: core/README.md | REFramework |
| SF6 Recording Manager | (CRSM) 30 recording slots per character in Training, drills, a reversal picker and online sharing of recordings, all in the game's training pause menu: crsm/README.md | REFramework, SF6 Native Core |
| SF6 Profile Mod | opens the full Fighter Profile where the game opens the limited one, and shows a player's Steam name on a key press: see below | REFramework, SF6 Native Core |
| Report a bug | report_mod.dll, in the Slots Loader's package: R / pad X on Fighter Settings sends the author a report, only once you confirm: see below |
REFramework, SF6 Native Core |
Install what you want: the Slots Loader works on its own (only its Replays Settings tab and the Stage Variation hint in the guide bar need the Native Core); the Color Mod, the Recording Manager and the Profile Mod need the Native Core of the same
release. Each release also carries SF6_ModSuite_AllInOne_v<version>.zip, every package in one: install either it or
the separate packages, never both (two packages shipping the same files conflict in Fluffy Mod Manager).
This repository was named SF6-SlotsLoader until 07/10/2026 and SF6-CostumeSlotsLoader until 30/09/2026; the old links lead here.
SF6_ProfileMod_<version>.zip (since 1.22.0, optional, needs the Native Core 0.8.2 or newer) is one plugin, reframework/plugins/profile_mod.dll.
- It opens the full Fighter Profile where the game opens the limited one. It only reuses what the server already sent: the sections the server does not send stay empty. It does not bypass anyone's privacy settings. The limited profile shows briefly first.
- On a profile whose platform line already shows a Steam ID, R / pad X switches that line between the ID and the player's Steam name. A line the game hides stays hidden. Network: only on a press of that key, the shown ID is sent to steamcommunity.com (HTTPS) to read the public name, and to steamcommunity.com again if the account has no community profile. Nothing is sent at any other time. Names are kept in memory for the session, never written to disk or to the log.
- Off switches, in
reframework\data\profile_mod.ini(create it; it is not shipped):full_profile=0,steam_name=0.
report_mod.dll (in SF6_SlotsLoader_<version>.zip and the all-in-one, needs the Native Core, does nothing without it): on Battle Settings > Character, R / pad X sends the author a picture of
the game, your text, the outfit, the mods' versions and two cleaned logs, only once you confirm on a menu that tells you so, your Steam ID included; the menu then follows your report: waiting
for a fix, to test. Kept 90 days, one per account per costume. report_mod/README.md has the full list.
SF6_CRSM_<version>.zip (the Recording Manager, CRSM) adds slots 9-30 to the game's 8 recording slots in Training,
drills, slot names, a reversal picker and Community sharing of drills, all in the training pause menu (Recording
Settings > Manager / Record / Replay). Since 2.0.0 it is one native plugin, reframework/plugins/SF6_CRSMNative.dll,
with no Lua script.
- Install the SF6 Native Core of the same release with it.
- Remove the Lua version (1.x) first: delete
SF6_RecordingManager.lua,SF6_RecordingSlotManager.luaand thecrsmfolder fromreframework\autorun\(andCRSM_REFrameworkUI.luaif you added it). While one of them is there the plugin leaves the menu to it. - Your 1.x recordings, drills and names are kept: they stay in
reframework\data\SF6_RecordingSlotManager_data\, the same folder as 1.x, and no package overwrites it. - Community (since 2.1.0): sharing and liking drills need an identity verified by Steam, obtained by the plugin
in the background (nothing to click). The server keeps your Steam account id for moderation; lists only show your
CFN name, with
[V]for a verified share. Version 2.0.x can browse and download, not share or like. - The zip's
README.txthas the details (settings, logs, the emergency stop). The source is incrsm/; crsm/README.md also says what the plugin sends to the Community server.
The rest of this page is about the Slots Loader.
Street Fighter 6 costume mods replace an existing outfit: install a Ryu mod and Outfit 1 is gone until you uninstall it. This loader turns every installed costume mod into an extra outfit slot and puts the original outfit back, so Outfit 1 and the mod live side by side in the costume spinner. An extra outfit shows under its mod's name in the game's lists ("Outfit VII" when the mod gives none); that name is local, online it travels as its outfit number only.
Install it once. After that nothing changes in how you use the game: install costume mods the way you already do, start the game, and the new outfits are there.
Only the outfits you own get extra slots (since 1.11.0). A mod made for a fighter's Outfit 2, 3 or 4 shows only
when the game counts that outfit as yours: a default outfit, one bought with in-game currency or in the shop, or one
given by a DLC. Mods made for Outfit 1 or the Drive Tech outfit always show. Whatever makes the game say yes counts,
an unlock-all script included. The check is made offline and kept until the game closes, so nothing changes during an
online session. reframework\data\SF6_CostumeSlots_data\native_log.txt has one line per hidden slot.
Game updates (since 1.11.0): when an update adds a fighter or an outfit, the loader picks it up from the game by itself at the next launch; no new Slots Loader release is needed. Run the clean-up below first (Patch day).
Grab SF6_SlotsLoader_v<version>.zip from Releases, install it in
Fluffy Mod Manager or copy it over your Street Fighter 6 folder, then install costume mods as usual. You need
REFramework in dinput8.dll, official build 1.5.8 or newer. For the Color Mod or the Recording Manager, install
SF6_NativeCore_<version>.zip and SF6_ColorMod_<version>.zip / SF6_CRSM_<version>.zip from the same release. Or
take SF6_ModSuite_AllInOne_v<version>.zip alone: it holds every package.
Costume mods can also go straight into reframework\costume_mods\<Character>\, as downloaded: the
.zip, .7z or .rar file itself, or an unpacked folder with a natives tree or a .pak. Nothing to
unpack, nothing to convert.
Stage mods (experimental, since 1.9.0) go into reframework\stage_mods\, as downloaded too. On the stage
select screen of Fighting Ground > Versus, UP / DOWN cycles a stage through its original look and its variations;
since 1.26.0 the mods that are other stages are entries of their own after the game's stages (an arrow beside the last
cell, RIGHT there moves the list). Since 1.20.0 they also show in Battle Settings > Other > Stage Settings and Training pause >
Environment Settings > Change Stage: a mod that is really another stage (a Suzaku Castle over the Training Room) gets
a cell of its own, with its picture and name, and a mod that only changes a stage's look (lighting) is a variation of
that stage, cycled with X / R and confirmed. Random Stage Settings has a tick per cell. Only the game's own stage ids
travel online. Without stage mods, no stage is changed and nothing is hooked. See stages/README.md.
Slotsloader Manager (since 1.18.0): the Slots Loader follows ZZtaii's Slotsloader Manager contract 2 (SlotsloaderContract=2 in its modinfo.ini, docs/MANAGER_CONTRACT.md). When that Manager installs the loader it behaves as ZZtaii's Slotsloader fork does (one outfit per variant, no in-game costume options); installed any other way, nothing changes.
Replays Settings (since 1.20.0): Replays has a sixth tab, Settings, with two rows. Replay Outfit Settings is a grid of
the fighters; a fighter set to On is shown in replays in the costume and colour you pick (the colour row also lists
the Color Mod's RW / MC colours), with a live 3D preview; R / pad X opens the Costume options of that outfit, as in
Edit Character. Off (Default) shows the outfit you really wore, taken from a local journal of your online matches
(replay_journal.jsonl, written from the first match played with 1.20.0); older replays show what they recorded.
Stage Settings picks the stage shown in replays, modded stages included. Replay Music picks the music of replays: the same
values as the game's Battle BGM row, with Character and Opponent meaning player 1's and player 2's music; T or the pad's Y opens
the game's Character Music screen (those playlists are the game's own, shared with online). Its last value, Custom, plays a list
of your own: T opens the game's playlist dialog on that list, and a replay picks one of its tracks at random (an empty list
behaves as Random). All of it applies on your PC only: the replay file is never changed, and neither are your own outfit, colour
and costume options, your online music setting, or the game's playlists when on Custom. The choices are in
reframework\data\SF6_CostumeSlots_data\replay_outfits.json. The Settings tab needs the SF6 Native Core 0.8.2 or newer
(without it the tab is not added; the log says so).
The Settings tab also has a Replay Music row (Character, Opponent, Stage, Random, or Custom: a list of your own), which forces the music of replays only; Random, the default, is what replays do. T / pad Y opens the game's Character Music screens (those playlists are the game's, so editing one changes online music too) or, on Custom, the playlist screen for your own list. Your online music setting is never changed.
Updating in Fluffy Mod Manager: disable or remove the previous version first. Since 1.9.0 the mod is named SF6 Slots Loader.
Each costume mod ticked in Fluffy gets an outfit slot of its own, even when two of them replace the same
outfit. Fluffy copies the mods it installs into the game (loose files in natives\ when REFramework's
loose file loader is on, a pak otherwise), so two mods of one outfit end up as one. The loader reads
Fluffy's list of installed mods instead and takes each mod from its archive in Fluffy's
Games\SF6\Mods folder. Unticking a mod removes its slot at the next launch.
The loader looks for Fluffy in Documents, Desktop, Downloads, the game folder and the root of each drive.
If yours is elsewhere, give its folder (the one with Modmanager.exe) in
reframework\costume_mods\settings.ini:
FluffyModManager=D:\Tools\FluffyModManagerThe outfit a Fluffy mod replaces still shows that mod (the last one installed for it): the game reads
Fluffy's copy over everything else. To keep the original outfit as well, put the mod in
reframework\costume_mods\<Character>\ instead of ticking it in Fluffy.
More in docs/FLUFFY.md: checking it worked, log lines, what to send when reporting.
The slots exist as patch paks the loader writes into the game folder at launch. If the loader is turned off before Fluffy Mod Manager re-reads the game archives, those paks stay and Fluffy records them as game files (the slots then show even with every mod off). So, in this order:
- The game updated: before letting Fluffy re-read the archives ("EXE changed") and before turning mods off,
close the game and run
SF6_SlotsClean.exe(double-click, in the game folder;--dry-runonly lists). It removes the loader's runtime paks and state files, and nothing else:reframework\costume_mods, other mods' data and Fluffy's files are not touched. - Let Fluffy re-read the game archives.
- Launch the game: the loader rebuilds the slots from
reframework\costume_mods.
Double-click reframework\costume_mods\SF6_CostumeAudit.bat. It changes nothing: it checks that the loader,
REFramework and the native plugin are in place, says what the last launch did, lists the
costume mods it finds (Fluffy Mod Manager paks in the game folder, archives and folders in costume_mods)
with the outfits each one gave, then the extra outfits by character. The report is saved as
SF6_CostumeAudit.txt next to it: send it with SF6_CostumeLoader.log when reporting a problem.
- Archives are recognised by their content, not their name, and unpacked once into the hidden
costume_mods\.cachefolder, then reused until the archive changes. Only what the game needs is kept. The first launch after adding a large archive takes a few extra seconds; the next ones don't. - Bundles: an archive or folder holding several options gives one outfit slot per option.
- Add-ons: an option that only changes a part (no gloves, other hair, a weapon) is combined with the
outfit it completes, the way Fluffy Mod Manager installs them together. The loader reads Fluffy's
addonforand bundle names; without them it matches options of the same archive that touch the same outfit. Each outfit gets one variant per add-on, plus one with all of them. - Combining two downloads: a costume and an add-on published separately (a hair, a weapon) are combined
when both archives sit in one sub-folder of the character,
costume_mods\<Character>\<any name>\. Only the combined outfit is made, not the costume alone as well. Several add-ons downloaded separately (a cat and a book, one archive each) in that sub-folder give one outfit wearing all of them, as long as they do not replace the same files (otherwise one variant per add-on). An add-on made for another outfit's folder than the costume's (a hair for Outfit 1 next to a costume of Outfit 2) still brings its parts to the costume, as long as the costume has none of that part. - Modular mods (main files, body options, skin options, optional extras) give one outfit per body option with the default skin, as Fluffy installs them by default.
- A mod that only changes a part of an original outfit (glasses, earrings) gives that outfit with the change, in a slot of its own.
- Variants share most of their files, and the generated pak stores identical data only once.
- Broken, password-protected or unrelated archives are skipped and reported in
SF6_CostumeLoader.log.
A modular mod or an outfit with add-ons is one outfit whose options you choose in game, live, per player: on
Fighter Settings press F (or click) on the Costume row of an outfit with options; on the character select press R1
(pad) or C (keyboard) in your panel; in Training, pause menu > P1 / P2 Character Select, R1 or C too (applied when
you confirm the popup). Add-ons, retouches and outfits with parts taken off become options of the outfits
they fit, the game's outfits included. Choices are kept in
reframework\data\SF6_CostumeSlots_data\costume_choices.json.
Runtime options are always on: the RuntimeOptions= setting of reframework\costume_mods\settings.ini is gone (a line
left in the file is ignored and the log says so).
Design and rules: docs/RUNTIME_OPTIONS.md.
For mod-manager and tool authors: what the Slots Loader writes and reads (outfits, registry, options manifest, variants), the Slotsloader Manager contract and everything 1.13.0 changed: docs/SLOTS_LOADER_1.13_CHANGES.md, docs/MANAGER_CONTRACT.md.
NSFW costume mods go in a folder of their own, reframework\costume_mods_nsfw\<Character>\, instead of
reframework\costume_mods\<Character>\. The loader makes that folder (with a folder per fighter) next to
costume_mods; the Slots Loader package ships it too. It takes the same things, with the same rules: mod folders,
archives, sub-folders, paks, modular mods and runtime options (costume_mods\settings.ini applies to both folders).
Left empty, it changes nothing. Both folders count as one: an add-on, a retouch or a version from costume_mods_nsfw
still goes on every outfit it fits, the game's outfits included, as an NSFW option (not offered nor worn while
NSFW outfits are hidden), and the add-ons of costume_mods go on NSFW outfits too. Only sub-folders stay apart (a
sub-folder of one folder never groups with one of the other). An outfit is NSFW when its base comes from
costume_mods_nsfw.
Mods left in costume_mods are looked at too, by name (creators tag their mods, or put "nsfw" in the names):
-
A mod whose name says it is NSFW (its archive, folder or pak name, the folder around all its options, its Fluffy menu name, the
modinfo.ininame of a one-option mod) is an NSFW mod, exactly as if it were incostume_mods_nsfw(its outfits hidden and numbered after the others, its options on other outfits NSFW options). -
An option whose name says so (its
modinfo.ininame, its folders, the Fluffy menu groups it hangs from, such as "4! NSFW style options") is an NSFW option of an outfit that stays shown: while NSFW outfits are hidden, it is not offered in the costume options menu and not worn; your choice of it is kept and comes back when they are shown. The outfit never wears one by default when its group can do without it (else the outfit itself is NSFW). With runtime options off (versions before this change only), an outfit made with an NSFW option is an NSFW outfit. -
The words (Slotsloader Manager 1.0.8's NSFW filter, by ZZtaii):
nsfw, nude, naked, topless, bottomless, pubic, pubes, nipple, pasties, lewd, futa, see through, see thru, no panties, no underwear, erotic. Case, spaces and dashes do not matter ("See-Through" = "seethrough"), but a word must appear as one run ("no panties" is not found in "Normal panties"); clothing words (bikini, lingerie, thong) are not in the list. To change it, add a line tocostume_mods\settings.ini:NsfwKeywords=nsfw, nude, lingeriereplaces the list;NsfwKeywords=(empty) turns the detection off.SF6_CostumeLoader.lognames every mod and option it caught (linesnsfw: ..., with the word and where it was found) and the count. -
No
modinfo.inifield says a mod is for adults (Fluffy's fields are name, version, author, category, description, screenshot, AddonFor, NameAsBundle; Nexus's adult flag is not in the downloads), so only names count. -
Hidden by default. NSFW outfits are listed only while "Display NSFW Outfits" is on. In game: Options > Interface > Other Settings > Display NSFW Outfits (Off / On; needs the Native Core 0.9.0 or newer; the row is saved at once and applied without a relaunch). The setting is kept in
reframework\data\SF6_CostumeSlots_data\settings.json:"display_nsfw": trueshows them,falsehides them (the file is created, set tofalse, the first time the plugin finds an NSFW outfit or option). A change takes effect at the next screen that lists outfits (character select, Battle Settings), without a relaunch; the outfits stay installed either way; editing the file by hand works too, and the row follows it. -
Hidden means not listed by the character select screens or Battle Settings / Fighter Settings, like an outfit you do not own (the game's list of the fighter's outfits is filtered, so an unlock-all script does not bring them back). A fighter whose Battle Settings outfit is an NSFW one goes back to its Outfit 1 when they are hidden.
-
Numbers: a fighter's NSFW outfits come after its other outfits in the costume list (ten numbers further, so outfits added later to
costume_modsstill come before them), and keep their numbers from one launch to the next. A mod moved from one folder to the other, or that becomes NSFW by its name (or stops being NSFW), is numbered again once; a Battle Settings choice of it follows it to its new number. Other outfits keep their numbers. -
Not kept apart: an NSFW mod is merged with, or made an option of, any other mod, as if both folders were one. An NSFW add-on, retouch or version on an outfit that stays shown (a game outfit, an outfit of
costume_mods) is an NSFW option of it: not offered nor worn while NSFW outfits are hidden, your choice of it kept for when they are shown. A merged outfit takes a version that is not NSFW as its base when there is one. The Slotsloader Manager does not list the mods ofcostume_mods_nsfw.
The costume menu shows two small squares next to each colour. Capcom picks them by hand for its own outfits, so they cannot be read from a mod. Since 1.7 the loader computes them for every modded outfit: the tints of the outfit's two largest colour zones, taken from the mod's own colour files and colour masks. Measured on the game's own outfits, the result looks like the outfit (vivid colours, the right family most of the time, sometimes the other way round) but is not what Capcom would have picked. This is a trial and may be removed. An outfit whose materials do not use the game's colour system (a full character replacement) keeps the squares of the original outfit, as before 1.7.
The game imports amd_ags_x64.dll from its own folder, so a proxy with that name is mapped into the process
before any engine code runs. That is the moment the loader does its work:
- It scans the installed costume mods: the mods Fluffy Mod Manager installed (each one from its archive),
the patch paks and loose files in the game folder, and the archives and folders under
reframework/costume_mods/. - It rebuilds a patch pak that relocates each modded costume to a free slot, from 5 to 104, which is 100 extra slots per character, and restores the outfit the mod had overwritten from the base pak. The game files that declare the slots (its costume table, version scenes and outfit names) are built from the game's own, so the fighters and outfits of the installed game version are always there.
- Colours, physics chains, shared body parts, weapons and the
streaming/high resolution textures follow the costume to its new slot. Files made before a game update are brought up to date on the way (see below). - It reads every slot back the way the game will load it, repairs what cannot load, and leaves out a slot it cannot repair instead of letting it stall the game. Only the slots in use are declared to the game.
- It writes a registry that the native plugin reads to make the slots selectable (those of the outfits the player owns) and, online, to show the other players a legal outfit. The registry also carries each slot's colour swatches.
A fingerprint of the installed mods is kept, so a launch with nothing changed costs about 20 ms. A launch after installing or removing a mod takes a few seconds, up to about fifteen with many large archives.
Mods published since 2023 were made for older versions of the game. The loader recognises the known differences (old texture suffixes, colour files in older layouts, broken texture headers, parts whose materials no longer match) and fixes them in its own pak, without touching the mod files. COMPATIBILITY.md lists what it fixes and the mods tested; TESTING.md lists what still needs testing.
Online, the extra slot is aliased to one of the character's own outfits for the other players (DriveTech, or Outfit 1 for a character without it, such as Arjun), so matchmaking stays valid. Since 1.9.0 everything in game is done by one native REFramework plugin (no Lua script), driven by the game's own events: menus shown or closed, an outfit folder mounted, the stage select screen. A fight triggers none of them, so the plugin does nothing during a fight. Official REFramework stops Lua scripts during online matches, not native plugins. See plugin/README.md, and docs/REFRAMEWORK_COMPATIBILITY.md for why every DLL of the suite works online and on every REFramework build.
build.bat builds everything into build/
common/ shared by both loaders: KPKA pak reader and writer, archive reading, third party code
proxy/ the AGS proxy: one DllMain for the stage and costume passes
costumes/loader/ costume loader: mod detection, slot relocation, scene and material patching
costumes/tools/ generators for the data files, run against your own game installation
slots_clean.cpp: SF6_SlotsClean.exe, the patch-day clean-up
costumes/audit/ SF6_CostumeAudit.bat / .ps1, shipped in costume_mods: what is installed, for users
stages/ stage slots: loader pass, redirection, tools, notes
plugin/ native REFramework plugin: menus, ownership, colours, online alias, stage select, VS screen
core/ SF6 Native Core: sf6core_native.dll, its C API (core/include) and docs
colormod/ SF6 Color Mod: SF6_ColorModNative.dll and its locale table
crsm/ SF6 Recording Manager: SF6_CRSMNative.dll, its locale table, package texts and offline tests
packaging/ builds the distributable zips (make_suite_packages.py: those of a release; make_bundle.py: the all-in-one)
The costume loader has no hooks, no user interface and no scripting. It imports kernel32, bcrypt (to hash
the mod fingerprint), and advapi32 and user32 for the archive decoders; the game has all four loaded
already. Every AGS export is forwarded to amd_ags_x64_real.dll, the genuine AMD library that ships with the
game. The stage slots add one hook, described in stages/README.md, installed only once a
stage variant is selected.
Visual Studio 2022 or Build Tools with the C++ workload, then build.bat at the root:
build\amd_ags_x64.dll costume slots + stage slots (the releases)
build\costumes_only\amd_ags_x64.dll costume slots alone, no stage slots
build\SF6_CostumeSlotsNative.dll REFramework plugin
build\core\sf6core_native.dll SF6 Native Core (core\build.bat)
build\colormod\SF6_ColorModNative.dll SF6 Color Mod (colormod\build.bat)
build\crsm\SF6_CRSMNative.dll SF6 Recording Manager (crsm\build.bat)
build\costume_loader.exe, paktool.exe, loadtest.exe, stagepak.exe, stagetest.exe, textest.exe
build.bat deps also rebuilds the archive decoders. Everything is compiled with /MT and /EHa. Structured
exception handling must not be disabled: the loaders run inside DllMain and swallow any fault rather than
taking the game down with it.
The loader starts from two data files that are derived from your own copy of the game and are deliberately not distributed here:
vanilla_costume_index.tsv, an index of the original costume files, built bycostumes/tools/build_vanilla_inventory.pyandcostumes/tools/make_vanilla_index.py.- the static structural tables that declare the extra slots, built by
costumes/tools/make_static_structural.py.
Both scripts read the game paks through REasy-parser. Point the
REASY_PARSER environment variable at your checkout before running them. Since 1.11.0 the loader builds the structural
tables from the game at each pak build and adds the game's costumes missing from the index by itself: the shipped
copies are the fallback (logged) and the starting point.
Only one amd_ags_x64.dll can exist in the game folder. If another tool already uses that entry point, rename
its DLL to amd_ags_x64_chain.dll and keep the genuine AMD library as amd_ags_x64_real.dll. The loader then
loads the chained module from a separate thread and logs it in SF6_CostumeLoader.log. Without that file, the
loader loads nothing else.
REFramework in dinput8.dll, official build 1.5.8 or newer (plugin API 1.10). The Native Core, the Color Mod and the
Recording Manager are built with REFramework's plugin API 1.15 headers (core/third_party/reframework, REFramework
commit 76520cac) and run on REFramework 1.5.8 (the core checks the running version before using anything newer; the
Recording Manager uses nothing past plugin API 1.10).
Written by Wael. Released under the MIT licence, see LICENSE.
Third party code is vendored under common/third_party/, plugin/include/, stages/loader/third_party/,
core/third_party/ and colormod/third_party/: the zstd decompressor, miniz, bcdec, the LZMA SDK 7z decoder,
UnRAR, the REFramework plugin API, the stb image libraries, Lua 5.4.3 and nlohmann/json. The REFramework
helpers and the native menu row technique used by the core and the Color Mod are LL's work, used with his
permission. See THIRD_PARTY.md for the licences.
This repository ships no game data: the tables the loader needs are generated from your own installation, and the release archive carries a prebuilt copy of them. Street Fighter 6 is a trademark of Capcom.