04 The install

Install Ungodly Bendy Enhanced

One DLL into one folder, then press F7. This page covers the install, the first-launch checks, and what the mod is actually doing to your game once it is in.

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

  1. Step 01Get the archive

    If you want to check the download first, the SHA-256 for this archive is on the downloads page.

  2. Step 02Unblock, then extract

    Before extracting: right-click the UngodlyBendyEnhanced_v1_2_0.rar file → 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 folder
  3. Step 03Copy the DLL into the plugins folder

    Copy UngodlyBendyEnhanced.dll into:

    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.log

    Which on a real machine looks like this — note the Community Patch is already in there too, since these captures are of a finished install:

    Windows Explorer showing the plugins folderView full size · 1752×130
    the 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.
  4. 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.

    General tab of the Ungodly Bendy Enhanced settings windowView full size · 1920×1080
    GeneralThe 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.
  5. Step 05Confirm in the log

    If the window does not open, check BepInEx\LogOutput.log for 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 MenuKey in 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.
  6. 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.

    Presets tab of the Ungodly Bendy Enhanced settings windowView full size · 1920×1080
    PresetsEight 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:

Config file
<game folder>\BepInEx\config\stixsworldhd.bendy.ungodlyenhanced.cfg

Each 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.

Windows Explorer showing the config folderView full size · 1752×130
the config folderBoth files are generated automatically on first run, not shipped in the archives. BepInEx.cfg is the loader's own settings; the 88 KB stixsworldhd.bendy.ungodlyenhanced.cfg is every one of the 222 settings written out in plain text with its description, type, default and valid range.

Under 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 rateRender rateFrames per movement step
50 Hz (vanilla)144 FPS2.88uneven — this is the jitter
60 Hz144 FPS2.40still uneven
144 Hz144 FPS1.00clean

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 rateJump apex with no compensationError
50 Hz (vanilla)baseline—
120 Hz2.32× baseline+132%
144 Hz2.78× baseline+178%
240 Hz4.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.

LineVanilla (50 Hz)At 144 Hz physicsWith the drift fix
580 ms27.8 ms0 ms
10180 ms62.5 ms0 ms
20380 ms131.9 ms0 ms
30580 ms201.4 ms0 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:

The vanilla formula
GetPercent() = (aspect - 1.6) / 0.17699993
GetScale()   = 0.9 + GetPercent() * 0.100000024

Fed 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:

DisplayAspectVanilla returnsThis mod returns
1280 × 1024 (5:4)1.2500.7020.703
1920 × 1080 (16:9)1.7781.0001.000
2560 × 1080 (21:9)2.3701.335 ✗1.000
5120 × 1440 (32:9)3.5562.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.