MCPcopy Index your code
hub / github.com/SameSalamander5710/DynamicFPSLimiter

github.com/SameSalamander5710/DynamicFPSLimiter @v4.4.2-patch1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v4.4.2-patch1 ↗ · + Follow
160 symbols 446 edges 16 files 45 documented · 28% updated 27d agov5.0.0-beta.1 · 2025-11-15★ 1104 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Dynamic FPS Limiter v4.4

A lightweight companion app for RTSS that uses it's profile modification API to dynamically adjust framerate limits based on real-time GPU and CPU usage. - Instead of relying on a fixed FPS cap below average framerates for smooth gameplay, it intelligently raises the cap when performance headroom is available, allowing consistently smooth frametimes, with the caveat of a momentary stutter during FPS limit transition. - Especially useful for reducing input latency when using frame generation tools like Lossless Scaling, by ensuring there's always enough GPU headroom. - When paired with adaptive frame generation in Lossless Scaling, it enables a constant high refresh rate experience with lower power draw and reduced GPU temperatures, without noticeable visual compromises or input lag.

 

Installation

To Build It Yourself,

If you'd like to inspect or customize the source code, follow the instructions in BUILD.md

To Use Prebuilt Executable,

  1. Download the DynamicFPSLimiter_vX.X.X.zip file from the latest release here.
  2. Extract the zip file to a desired location
  3. Run DynamicFPSLimiter.exe as Administrator.
  4. Recommended: Add DynamicFPSLimiter.exeas an exclusion in RTSS to reduce the app's CPU performance overhead.
    • This can be done by holding the Shift key and clicking Add in RTSS, while the app is running.
    • Note: While not strictly necessary, this step is strongly recommended if you have disabled 'passive waiting' for the Global profile in RTSS

Watch the demo here! (Based on v4.2.0)

Watch the demo here! (Based on v4.2.0)

Watch the demo here! (Based on v4.4.2)

[!NOTE] - This app requires Rivatuner Statistics Server (RTSS) running in the background to function. Ensure RTSS is installed before running the app! - Since RTSS runs with elevated privileges, DynamicFPSLimiter must also be run as Administrator to function fully.

[!CAUTION] - The executable in the release was packaged using PyInstaller and may be flagged by some antivirus software as a Trojan. Updating to the latest version of Windows Defender should prevent false detections. - You can confirm whether the app is signed by me using the public certificate here. - You can find the VirusTotal report for the latest release (v4.4.2): - DynamicFPSLimiter_v4.4.2.zip

The Concept

This app was developed to enhance gaming experience in situations where the GPU load/demand varies greatly during a session. This is especially useful when using Lossless Scaling Frame Generation (LSFG). LSFG works best when the game runs with an FPS cap that leaves enough GPU headroom for frame generation. However, if GPU usage hits 100%—which may also cause the game’s base FPS to drop—you may experience input lag, which is undesirable.

Typically, you have two ways to set an FPS cap: - Set a cap just below the average FPS – This works most of the time but can lead to input lag when FPS drops due to GPU saturation. - Set a cap well below the lowest observed FPS – This ensures stability but sacrifices frame rate in less demanding scenes.

This app solves the issue by dynamically adjusting the base FPS limit in demanding areas, reducing input lag while still allowing higher frame rates in less intensive regions. As a result, you get a smoother and more responsive gaming experience without compromising too much performance.

Disclaimer

  • This app is a personal project created for fun and is not officially affiliated with RTSS or Lossless Scaling.
  • As a hobby project, updates and bug fixes may be delayed or may not be provided regularly.

Older versions

For the older interactions or versions of the same idea, see: 1. DynamicFPSLimiter v1.0 2. DynamicFPSLimiter v2.0 3. DynamicFPSLimiter v3.0

License

This project is currently licensed under the Apache License 2.0. See the LICENSE file for details.

Previously licensed under the MIT License. The project was relicensed to Apache 2.0 on April 25, 2025 to provide clearer legal protections and attribution requirements.

Core symbols most depended-on inside this repo

current_stepped_limits
called by 10
src/core/fps_utils.py
set_fractional_framerate
called by 7
src/core/rtss_functions.py
update_hover_text
called by 6
src/core/tray_functions.py
parse_input_value
called by 6
src/core/config_manager.py
current_method_callback
called by 6
src/core/config_manager.py
load_profile_callback
called by 5
src/core/config_manager.py
update_global_variables
called by 5
src/core/config_manager.py
_update_menu
called by 4
src/core/tray_functions.py

Shape

Method 107
Function 42
Class 11

Languages

Python100%

Modules by API surface

src/core/tray_functions.py30 symbols
src/core/config_manager.py28 symbols
src/core/rtss_functions.py16 symbols
src/core/gpu_monitor.py14 symbols
src/core/DFL_v4.py14 symbols
src/core/launch_popup.py8 symbols
src/core/fps_utils.py8 symbols
src/core/autostart.py7 symbols
src/core/themes.py6 symbols
src/core/warning.py5 symbols
src/core/rtss_interface.py5 symbols
src/core/cpu_monitor.py5 symbols

For agents

$ claude mcp add DynamicFPSLimiter \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page