📈 GH Trending Explorer 🎲 Surprise me

← all repos

artzox / BFI-Presenter

git clone https://github.com/artzox/BFI-Presenter.git v.1.0.16 · 4d ago

Variable MPRT strobing for PC games on fixed-refresh displays: the motion clarity of black frame insertion without giving up brightness.

+4
stars, 24h · #6,855
+~30
stars, 7 days · #5,977
+170
stars, 30 days · #4,505
170
★ total · +21% this week
0
forks · 7 open issues

Star history (as recorded here)

2026-10-20 · 157 ★ 2026-10-23 · 170 ★
LanguageC++
LicenseGPL-3.0
Created2026-10-10 (13d ago)
Last push1d ago
Watchers4
OwnerUser

Links

README excerpt
# BFI Presenter
**Variable MPRT strobing for PC games on fixed-refresh displays: the motion clarity of black frame insertion without giving up brightness.** Developed and tested on a 120 Hz OLED (Sony A95L); higher refresh rates work the same way, with more refreshes per strobe cycle and a real rolling band for rolling scan at 240 Hz and above.
Classic black frame insertion (BFI) shows each frame for one refresh and then blacks out the next. Motion gets sharper because each image is on screen for less time (a lower MPRT, motion picture response time), but the screen is dark half the time, so the picture loses half its brightness.
BFI Presenter implements the **Variable MPRT** method described by Blur Busters instead. Each pixel's light for the whole strobe cycle is front-loaded into the lit refresh, up to the panel's ceiling, and only what doesn't fit spills into the following refresh:
- **Dark and mid-tone pixels**, nearly all of a typical image, fit in the lit refresh and get the full motion-clarity gain of BFI.
- **Bright highlights** that would clip spill over, so they stay on screen a little longer (a variable MPRT per pixel) instead of being dimmed or clipped.
- **Brightness is kept.** At `Gain 1.0` the average light matches the game without strobing. In HDR the panel's headroom (`DisplayPeakNits`) leaves room for most content to fit entirely in the lit refresh, and an **ABL guard** keeps the boosted refresh within an OLED's full-screen power budget so the panel doesn't dim it.
On top of that comes the Blur Busters CRT-simulator approach: **rolling scan with phosphor fade**. The strobe can be split into horizontal bands lit in turn from the top down, each row fading out like CRT phosphor after the simulated beam passes, so the screen never goes fully dark and flicker is softer. At 120 Hz this alternates two halves with the fade hiding the seam; at 240 Hz and above it becomes a real rolling band.
### Why a presenter
Software strobing usually runs on the game's frame clock, so any late frame leaves a lit or dark refresh on screen too long: a flash. BFI Presenter takes over presentation and runs the strobe on the **display's own vblank clock**. A late game frame becomes a repeated image (a CRT-like stutter) instead of a flash, and the game is paced to the strobe so each frame lands on the refresh that shows it.
### Features
- **Strobe:** Variable MPRT (the default) or classic BFI with hue-preserving highlight roll-off (Ctrl+Shift+M switches); frames per cycle, gain, dark-frame floor, sine and inverted cycles; rolling scan with phosphor fade or a soft seam.
- **HDR:** SDR, scRGB and HDR10 output with a display-peak ceiling and the ABL guard.
- **Pacing:** game frame cap at Refresh / Half / Quarter, Smooth or Lowest-latency pacing, just-in-time release so each frame finishes right before its lit refresh (or, as an opt-in for Reflex games with irregular frame delivery, Reflex's frame limit), automatic frames ahead, hitch guard.
- **APIs:** Direct