222 settings, every one documented in plain English inside the game. A graphics and resolution suite, a canvas scaler the game never shipped, and the fix for the stuttery camera that has been reported for years.
StepsThe install¶
Step 01Get the archive
Ungodly Bendy Enhanced
v1.2.0Graphics, resolution, UI scaling, frame-pacing and subtitle-sync suite. 222 settings and an in-game window on F7.
If you want to check the download first, the SHA-256 for this archive is on the downloads page.
Step 02Unblock, then extract
Before extracting: right-click the
UngodlyBendyEnhanced_v1_2_0.rarfile → Properties. If there is an Unblock checkbox at the bottom of the General tab, tick it and click OK. This stops Windows refusing to load the extracted DLL.Then extract it anywhere — your Downloads folder is fine. You get:
Archive contents UngodlyBendyEnhanced_v1_2_0\ ├─ UngodlyBendyEnhanced.dll <- this is the file you install └─ README.md <- documentation; does not go in the game folderStep 03Copy the DLL into the plugins folder
Copy
UngodlyBendyEnhanced.dllinto:Destination <game folder>\BepInEx\plugins\Which, on a default Steam install, is:
Full path, typical Steam install C:\Program Files (x86)\Steam\steamapps\common\Bendy and the Ink Machine\BepInEx\plugins\Result:
After copying BepInEx\ ├─ cache\ ├─ config\ ├─ core\ ├─ patchers\ ├─ plugins\ │ └─ UngodlyBendyEnhanced.dll <- here └─ LogOutput.logWhich on a real machine looks like this — note the Community Patch is already in there too, since these captures are of a finished install:
View full size · 1752×130the plugins folderThe entire mod install: two DLLs, 54 KB and 242 KB. Nothing else belongs in here — no READMEs, no extracted folders, no .rar files. Step 04Launch, and press F7
Start the game. At the main menu — or at any point during play — press F7.
A settings window opens over the game with a tab list down the left, a status panel below it, and a scrolling pane of settings on the right. Every setting carries a plain-English explanation of what it does to your game and to your framerate.
View full size · 1920×1080GeneralThe window as it opens: Master Enable at the top is the switch that reverts every override live, with no restart, which makes it the fastest way to prove whether the mod is responsible for something you are seeing. Step 05Confirm in the log
If the window does not open, check
BepInEx\LogOutput.logfor this banner:LogOutput.log — Enhanced loaded ============================================================= Ungodly Bendy Enhanced v1.2.0 by StixsworldHD (StixsmasterHD4k) Press F7 in game to open the settings window. =============================================================- Banner present, window will not open — another mod has taken
F7. Change
MenuKeyin the config file (see below). - Banner absent — the DLL is in the wrong folder, or you installed the 32-bit BepInEx. This game needs x64.
- Banner present, window will not open — another mod has taken
F7. Change
Step 06Optional: pick a preset and stop there
You do not have to tune anything. Open the Presets tab and click one. For most people, Ungodly or Balanced is the whole configuration process.
View full size · 1920×1080PresetsEight one-click looks. Presets only change graphics settings — your resolution, window mode, monitor choice, UI scaling and hotkey are never overwritten, because those depend on your hardware and your eyes rather than on a visual style. The recommended setups page suggests which one to start from for your hardware, and what to change afterwards.
ConfigThe configuration file¶
Everything in the window is also a plain text setting. BepInEx generates the file automatically the first time the plugin runs:
<game folder>\BepInEx\config\stixsworldhd.bendy.ungodlyenhanced.cfgEach entry carries its own description, type and default, so the file is readable on its own. Edit it with the game closed; the mod reads it at launch.
View full size · 1752×130Under the hoodWhat it is actually doing¶
You do not need this to install the mod. It is here because knowing what a mod touches is how you decide whether to trust it.
The camera jitter fix
PlayerController splits its work across two loops: your view rotates in
Update() at render rate, but the world only translates in
FixedUpdate() at the physics rate — Unity's default 50 Hz.
A CharacterController has no interpolation, so those fifty positional
updates a second are literally all you ever see, no matter what your GPU is doing.
| Physics rate | Render rate | Frames per movement step | |
|---|---|---|---|
| 50 Hz (vanilla) | 144 FPS | 2.88 | uneven — this is the jitter |
| 60 Hz | 144 FPS | 2.40 | still uneven |
| 144 Hz | 144 FPS | 1.00 | clean |
So the mod raises the physics rate to match your refresh rate. That part is simple. The part that is not simple is why nobody had done it properly before.
Why raising the physics rate is dangerous on its own
PlayerController.Move() contains a genuine unit bug: the horizontal
movement term is multiplied by the timestep and is therefore framerate independent, but the
vertical term is a velocity used directly as a displacement. Fall distance comes out
proportional to 1/dt, which means doubling the physics rate
doubles how far you fall and how high you jump.
| Physics rate | Jump apex with no compensation | Error |
|---|---|---|
| 50 Hz (vanilla) | baseline | — |
| 120 Hz | 2.32× baseline | +132% |
| 144 Hz | 2.78× baseline | +178% |
| 240 Hz | 4.59× baseline | +359% |
Naively raising the rate would launch you through ceilings and turn survivable drops lethal. So the mod rescales three values on the player to cancel the error: gravity multiplier and ground-stick force scale linearly with the timestep ratio, which is exact; jump speed is solved numerically, because linear scaling still leaves jumps landing about 3.6% short at 144 Hz — enough to fail a ledge you are meant to clear. The mod simulates the vanilla jump arc and bisects for the speed that reproduces that exact apex at the new timestep.
Subtitle synchronisation
New in v1.2.0, and a measurable bug rather than a perception problem. Dialogue and
subtitles run on two entirely separate wall-clock queues:
AudioManager advances the voice every
(clip length − one physics timestep), while
MainSubtitlesController advances the text every (clip length),
with no subtraction. They differ by exactly one physics step per line, each resets its own timer
to zero, and the gap accumulates without ever self-correcting.
| Line | Vanilla (50 Hz) | At 144 Hz physics | With the drift fix |
|---|---|---|---|
| 5 | 80 ms | 27.8 ms | 0 ms |
| 10 | 180 ms | 62.5 ms | 0 ms |
| 20 | 380 ms | 131.9 ms | 0 ms |
| 30 | 580 ms | 201.4 ms | 0 ms |
Audio and text disagreeing becomes noticeable at roughly 100 ms. Vanilla crosses that at line 7. A Harmony prefix subtracts the same timestep from the duration handed to the subtitle queue so both advance on identical intervals, which removes the accumulating term entirely — zero drift at any physics rate.
Matched intervals cannot survive a frame hitch or an audio device glitch on their own, so the mod also compares the subtitle timer against the real playback position of the voice clip and snaps it back past a tolerance. That correction only runs when both queues are provably on the same line — it checks their remaining counts match first, and leaves everything alone if they do not, rather than risk snapping to the wrong subtitle.
A manual offset of ±2 seconds is on the new Subtitles tab, for reading slightly ahead of the delivery or compensating audio hardware latency — some Bluetooth headsets sit 100–200 ms behind, which no amount of in-game correctness can fix.
The UI scaling fix
Two separate problems. First, the game has no canvas scaler anywhere —
every canvas runs at a permanent scale factor of 1, so the interface is laid out in raw pixels.
Second, the only aspect compensation in the game,
AspectRatioUtil, is an unclamped straight line:
GetPercent() = (aspect - 1.6) / 0.17699993
GetScale() = 0.9 + GetPercent() * 0.100000024Fed 16:10 it returns 0.90. Fed 16:9 it returns 1.00. Those are the only two aspect ratios it was ever tested against, and it extrapolates without limit past them:
| Display | Aspect | Vanilla returns | This mod returns |
|---|---|---|---|
| 1280 × 1024 (5:4) | 1.250 | 0.702 | 0.703 |
| 1920 × 1080 (16:9) | 1.778 | 1.000 | 1.000 |
| 2560 × 1080 (21:9) | 2.370 | 1.335 ✗ | 1.000 |
| 5120 × 1440 (32:9) | 3.556 | 2.005 ✗ | 1.000 |
On a 32:9 super-ultrawide the vanilla formula scales the main menu to very nearly double size, throwing the artwork clean off the screen. That is the bug people report as “the menus are broken on ultrawide”. The replacement is a clamped ratio that passes through the developers' exact two anchor points, so inside the range it was designed for the output is equivalent to within 4×10−4, and outside it degrades gracefully instead of exploding.
What it does not touch
- No game files are modified. Everything is patched in memory at runtime.
- The plugin carries zero compile-time reference to the game's own
Assembly-CSharp. Every game-specific type is resolved by name at runtime, so a future game patch that renames one produces a logged warning and everything else keeps working, rather than the whole mod failing to load. - Master Enable off restores vanilla bit-for-bit. The mod captures a full snapshot of the original post-processing state before it changes anything.
- Nothing is written outside the game folder except the BepInEx config file.
Where to goNext¶
The Community Patch installs the same way and takes about thirty seconds. It fixes a different category of problem entirely — the softlocks and the save lockout — and the two were audited against each other specifically so they can run together.