Mods / Adaptive Graphics

Tags: #Graphics #QoL #Tweak #Utility
Author: ozenzoen
Side: Client
Created: Sep 27th at 6:08 PM
Last modified: Sep 29th at 9:17 AM
Downloads: 499
Follow Unfollow 33

Latest release (for Vintage Story 1.21.0 and 1.21.1, potentially outdated):
adaptivegraphics_0.0.2.zip  1-click install


WARNING: The mod is currently in its testing phase. Unexpected results, and instability may occur. User feedback is highly appreciated!


 

Automatically adjusts your graphics settings based on a desired target FPS!


This mod aims to improve your Vintage Story experience by changing graphical settings to achieve a user-set target FPS, in the hopes of achieving a smoother gameplay based on changing circumstances. Included features are:

  • Tracking of the game's Frames per Second to determine if certain settings should be decreased or increased
  • Completely configurable according to your preferences and hardware
  • Last resort option to bring down shader qualities one step further when the target FPS can't be achieved, at the cost of quality
  • Minimal FPS counter on the bottom left of the screen

 

Configuration
 

Recommended to be configured with Config Lib by Maltiez.
Configurable by changing values in the provided config file AdaptiveGraphics.json inside ModConfig folder.

Note on default values: These are the initial settings used in testing, actual default values may still change.

  • TargetFPS - The user desired FPS to achieve
  • ShowFPS - Shows a simple FPS indicator on the bottom left
  • ToleranceFPS - The lower/upper bounds of the target fps, dictates sensitivity to change
  • AllowLastResort - If all options to lower settings have been exhausted, allow to lower each shader quality (SSAO, shadow) by one to try and achieve target fps
  • MinViewDistanceMaxViewDistance - The distances in which the mod can automatically adjust to
  • ViewDistanceStep - How near/far blocks are adjusted to the view distance when automatically adjusting
  • AllowChangeShaderSettings - Allows to automatically change both shader settings (SSAO and Shadow). Typically causes stuttering as shaders are reloaded but less noticeable over time
  • AllowChangeShaderShadowSettings - Allows to automatically change shadow quality settings. No effect if AllowChangeShaderSettings is disabled
  • BaseShadowQualityMaxShadowQuality - The base quality is what you set usually set as your default. The maximum tells the mod how high it can set shadows
    0 - Off
    1 - Low
    2 - Medium
    3 - High
    4 - Very High

  • AllowChangeShaderSSAOSettings - same as AllowChangeShaderShadowSettings but for SSAO quality
  • BaseSSAOQualityMaxSSAOQuality - same as BaseShadowQualityMaxShadowQuality but for SSAO quality
    0 - Off
    1 - Medium
    2 - High

 

The next set of configurations are advanced settings, they are generally not changed unless you understand the changes

  • FpsSampleDuration - The duration (seconds) of the rolling window for average FPS, which will then compared against the Target FPS. Setting this lower cause more sudden changes, higher cause slower changes
  • AsymmetricPercentage - Percentage to skew the Tolerance for the TargetFPS, setting this to 0 disables this. In effect, this makes reaction quicker when fps falls below the target, react conservatively when fps rises
  • FpsTrendDuration - The duration (seconds) to confirm a trend is sustained before an outlier FPS will be used in computing the average. Recommended is 3-5
  • OutlierTolerance - FPS is considered an outlier outside these bounds. This is multiplied to the average of the FPS sampled within the FpsSampleDuration
  • SettleInitial - Wait period (seconds) to let the FPS settle before making adjustments initially on game start
  • SettleAfterAdjust - Wait period to let the FPS settle after making adjustments to the graphical settings
  • SettleAfterPause - Wait period to let the FPS settle after pausing. Used for external settings such as an external frame limiter in use when game is out of focus
  • SamplingInterval - How often (seconds) FPS calculated and collected
Known Issues
  • Server error from trying to save config through ConfigLib (fixed in next release)
  • Flicker observed from the sky occurs when view distance is changed (Limitation?)
  • Stutters when changing settings that requires a shader reload (SSAO Quality, Shadow Quality). These lessen eventually as the stutters hit hardest when initially reloading the shaders for the set quality
Future Plans
  • Documentation
  • Minimize oscillations if present
  • Configuration presets
  • Dynamic view distance steps
  • Environment aware (Caves, Below ground, Day/Night)
  • FPS Cap compatibility
  • Testing on different averaging methods
Credits
ResetXPDR for his work on MSFS AutoFPS, which this mod is heavily inspired from
Feedbacks, suggestions, and support are all welcome and appreciated! You can reach me in the Vintage Story discord server.

Mod Version For Game version Downloads Released Changelog Download 1-click mod install*
0.0.2 428 Sep 29th at 9:17 AM adaptivegraphics_0.0.2.zip 1-click install

Added:

  • Asymmetric tolerance
  • Config option to turn off debug logs
  • Log vram warning if view distance is set to more than 512 (As with vanilla)
  • Log median fps

 

Fixed:

  • Fps not updated when Enabled is set to false
  • Empty array exception in logging stats

 

VirusTotal

0.0.1 71 Sep 27th at 6:15 PM adaptivegraphics_0.0.1.zip 1-click install

Initial test release
VirusTotal


15 Comments (oldest first | newest first)

💬 NeoB, Nov 20th at 4:36 PM

It seems that it does not work well with the volumetric shading refreshed mod.

💬 ShaeTsu, Oct 14th at 12:01 PM

eerino Yes, it's the $7 tool on Steam. It lets you use FSR and frame gen in games that don't natively support them. I just use 2x framegen with Vintage Story, it's not a true 120fps but it's good enough to keep the game from triggering headaches for me.

💬 eerino, Oct 12th at 9:34 PM

ShaeTsu I'm in the same boat and playing with many mods and trying to cope with the stuttering. I have a 10-core 16gb memory mac mini m4. You mentioned Lossless Scaling and I had to google it. You're using the $7 utility on steam? If so, and its helping you, I might consider getting it. I just need anything that might help– other than giving up my mods lol 

💬 SalemStyles, Oct 11th at 2:32 AM (modified Oct 11th at 2:44 AM)
Spoiler

Hey there! 👋

First off, I just want to say thank you for creating such an awesome mod. Adaptive Graphics has genuinely improved my gameplay experience and feels like the kind of feature Vintage Story always needed — it’s smart, smooth, and super fun to tweak!

While testing it on my setup (mid-high system with shaders and mods like Volumetric Shading), I noticed something interesting: performance tends to dip in certain biomes (especially dense forests) and during storms, and the mod does try to adapt — but it keeps bouncing back and forth rapidly between settings as soon as conditions change again.

That got me thinking:
Would it be possible to make the system respond based on environmental triggers instead of just framerate trends? For example:

  • When entering a forest biome, automatically lower view distance or shadow quality, since visibility isn’t as important there.

  • When a storm event begins, temporarily switch to a lower performance profile until the event ends.

  • Then, when leaving those areas or the weather clears, smoothly restore previous settings.

This might help reduce constant “back and forth” adjustments and make transitions feel more natural and purposeful, rather than reactionary to short FPS dips. Even a simple “biome or weather sensitivity” toggle in the config could go a long way!

I totally understand that this might be outside the mod’s current focus, and I might be trying to stretch it beyond its original goal — but I figured I’d share the idea in case it sparks something. I’m still learning modding and coding myself, so I really appreciate the effort and depth that goes into something like this.

Thanks again for all your work and for keeping the game so smooth and customizable. Adaptive Graphics already feels like a hidden gem — just thought I’d pass along an idea from a happy tester! 😄🌿

— Salem (curious gamer & shader tinkerer 💚)

💬 ShaeTsu, Oct 8th at 5:45 AM

This mod is black magic for someone like me whose PC is on the edge of "good enough to run vanilla at stable 120fps" and "barely manages 60fps heavily modded", and gets headaches from low/inconsistent FPS. Capped ingame FPS at 60, changed target FPS to match in the config, and using Lossless Scaling I'm able to get an extremely stable and convincing "120fps" in heavily modded worlds.

💬 Novarleeir, Oct 1st at 10:14 PM

Is there anything that allows the mod to dynamically adjust the internal resolution? 

💬 ozenzoen , Oct 1st at 2:24 PM

pngwn All right! You could also set `SettleAfterPause` to 1 for it to not run adjustments while paused or in the background.

eerino Not a silly question! I haven't tested on a mac but it should work. These are all ingame setting adjustments.

💬 eerino, Oct 1st at 1:45 PM

might be a silly question but would this work on Mac? 

💬 pngwn, Sep 30th at 8:10 PM

ozenzoen I'll keep playing with it and let you know if it happens again. I can give you my current settings as well:

Spoiler
{
  "Enabled": true,
  "ShowFPS": true,
  "TargetFPS": 100,
  "ToleranceFPS": 20,
  "AllowLastResort": true,
  "DebugLogs": true,
  "MinViewDistance": 256,
  "MaxViewDistance": 1024,
  "ViewDistanceStep": 96,
  "AllowChangeShaderSettings": false,
  "AllowChangeShaderShadowSettings": false,
  "BaseShadowQuality": 2,
  "MaxShadowQuality": 3,
  "AllowChangeShaderSSAOSettings": false,
  "BaseSSAOQuality": 1,
  "MaxSSAOQuality": 2,
  "FpsSampleDuration": 5,
  "AsymmetricPercentage": 0.5,
  "FpsTrendDuration": 3,
  "OutlierTolerance": 0.1,
  "SettleInitial": 30,
  "SettleAfterAdjust": 7,
  "SettleAfterPause": 0,
  "SamplingInterval": 0.5,
  "Version": 0,
  "SamplingIntervalInterval": 0.5
}
💬 ozenzoen , Sep 30th at 3:27 PM (modified Sep 30th at 3:28 PM)

pngwn Hello, I tried recreating this by pausing the game and letting the mod run but haven't crashed yet. If you could give me a bit more info that would really help. Does it still happen?

blacksheepboy Thanks! Hope you've had better temp storms with this mod on!

💬 blacksheepboy, Sep 29th at 10:36 PM

very cool idea and sounds like an involved project. my game crashes during temp storms due to my ancient rig so excited to give this a try! 

💬 pngwn, Sep 29th at 11:25 AM

I had my game crash while using this, I'm not sure if it caused the crash for sure but it had never crashed when using any of the other mods. I had the game paused when the crash occured:

Crash Report
Running on 64 bit Windows 10.0.19045.0 with 32690 MB RAM
Game Version: v1.21.1 (Stable)
9/29/2025 7:19:54 AM: Critical error occurred
Loaded Mods: chiseltoolslite@1.15.1, driedpeat@1.1.1, forestsymphony@1.0.6, forestworld@1.0.1, immersiveorecrush@2.2.4, manualscraping@1.3.0, dryness@0.0.1, temporalsreformed@0.0.6, game@1.21.1, vsimgui@1.1.13, zoombuttonreborn@2.0.0, adaptivegraphics@0.0.2, anastastemod@1.1.21, backpackpackplusexpanded@1.2.5, betterfirepit@1.1.6, butchering@1.10.5, carryon@1.10.9, commonlib@2.8.0, configlib@1.10.4, coolergreens@1.0.0, coreofartspatch@1.0.3, danatweaks@3.6.0, durablebetterprospecting@1.4.0, egocaribautomapmarkers@4.0.3, extrainfo@1.10.1, farseer@1.3.2, fastknapping@1.0.0, fromgoldencombs@1.9.4, genelib@2.0.0, handytweaks@1.2.6, hudclockpatch@1.1.1, hydrateordiedrate@2.2.20, immersivewoodchopping@0.8.2, immersivewoodsawing@0.2.8, improvedhandbookrecipes@1.1.3, insanitylib@1.0.5, jaunt@2.1.0-rc.1, minishipfix@1.0.1, oneroof@1.11.0, realsmoke@1.1.3, rebuildablebloomery@1.0.3, reedbuff@1.1.1, rockchisel@1.0.2, showcraftable@1.2.5, simplefootstepsredux@1.0.4, smithingplus@1.8.0-rc.3, stepupadvanced@1.2.1, stickydirt@0.1.1, swapoffhandhotkey@0.1.1, terraprety@7.0.8, th3dungeon@0.4.4, thecritterpack@1.3.3, toolsmith@1.2.10, trailmodcupdate@1.3.0, Verticality@0.3.1, vigor@0.5.0, vsatlas_resized@1.0.9, creative@1.21.1, survival@1.21.1, artofgrowingpatch@1.1.5, betterloot@2.0.0, equus@1.2.0-rc.8, extraoverlays@1.6.0, wearandtear@1.5.14
System.NullReferenceException: Object reference not set to an instance of an object.
at Vintagestory.Client.NoObf.ChunkRenderer.OnRenderBefore(Single dt) in VintagestoryLib\Client\Render\ChunkRenderer.cs:line 159
at Vintagestory.Client.NoObf.ClientMain.MainRenderLoop(Single dt) in VintagestoryLib\Client\ClientMain.cs:line 879
at Vintagestory.Client.GuiScreenRunningGame.RenderToPrimary(Single dt) in VintagestoryLib\Client\MainMenu\Screens\GuiScreenRunningGame.cs:line 172
at Vintagestory.Client.ScreenManager.Render(Single dt) in VintagestoryLib\Client\ScreenManager.cs:line 719
at Vintagestory.Client.ScreenManager.OnNewFrame(Single dt) in VintagestoryLib\Client\ScreenManager.cs:line 663
at Vintagestory.Client.NoObf.ClientPlatformWindows.window_RenderFrame(FrameEventArgs e) in VintagestoryLib\Client\ClientPlatform\GameWindow.cs:line 113
at OpenTK.Windowing.Desktop.GameWindow.Run()
at Vintagestory.Client.ClientProgram.Start(ClientProgramArgs args, String[] rawArgs) in VintagestoryLib\Client\ClientProgram.cs:line 338
at Vintagestory.Client.ClientProgram.<>c__DisplayClass10_0.<.ctor>b__1() in VintagestoryLib\Client\ClientProgram.cs:line 133
at Vintagestory.ClientNative.CrashReporter.Start(ThreadStart start) in VintagestoryLib\Client\ClientPlatform\ClientNative\CrashReporter.cs:line 95
💬 Genom, Sep 29th at 10:48 AM

Thanks for the quick response, ozenzoen, I was able to change the min view distance without a ctd now.

💬 ozenzoen , Sep 29th at 10:09 AM (modified Sep 29th at 10:10 AM)

Genom Glad to hear that, thanks! I've introduced a fix in 0.0.2 for a crash, which I believe should fix what you described. I would appreciate it if you let me know if it still happens!

💬 Genom, Sep 29th at 9:54 AM

Great mod, makes my gameplay feel much more smooth and I didn't feel like the quality was changing significantly!

One thing I noticed is that when trying to change the options in game via ConfigLib it made the game crash (wanted to change FPS Counter, since it obstructs the HUD mod and wanted to increase min view distance, game ctd both times)

 (edit comment delete)
Основной веб-сайт | Почтовый сервер | FTP сервер | Административная панель | API интерфейс | Content Delivery Network | Статические файлы | Ресурсы сайта | Изображения | Файловое хранилище | Блог | Интернет-магазин | Техническая поддержка | Справочная система | Документация | Форум | Новости | Загрузки | Демонстрация | Тестовая среда | Приложение | Медиа контент | Разработка | Промежуточная среда | Бета версия | Безопасная зона | Вход в систему | Панель управления | Портал | Система управления контентом