Skip to content

RetroArch Run‐Ahead and Input Lag Reduction

Rion edited this page May 27, 2026 · 3 revisions

RetroArch Run-Ahead and Input Lag Reduction

RetroArch includes several latency reduction features that can make games feel more responsive. This page explains what Run-Ahead does, how the related options are exposed in Batocera, and what is recommended for common arcade cores such as FinalBurn Neo and MAME.

This is especially useful for CRT users because a real CRT display already has extremely low display latency. Run-Ahead does not fix display lag. Instead, it reduces the internal delay inside the emulated game itself.

What Run-Ahead Actually Does

Many games do not show a button press on the very next frame. Some games have 1, 2, 3 or more frames of built-in input delay before the action becomes visible on screen.

RetroArch Run-Ahead works by calculating frames ahead in the background and then showing the result closer to the moment the input was pressed.

In simple terms:

  • CRT display lag = already very low
  • Emulator/video sync lag = handled by correct video sync and emulator settings
  • Internal game logic lag = what Run-Ahead is designed to reduce

Important CRT Note

Run-Ahead is not a replacement for a correct CRT setup.

For Batocera CRT Script users, first make sure that:

  • CRT output is working correctly
  • SwitchRes is selecting the correct resolution and refresh rate
  • The game is running at the intended video mode
  • VSync behavior is left at the recommended/default Batocera CRT setup

Run-Ahead is an extra latency reduction feature. It should be used after the normal CRT setup is already working correctly.

Do not use Run-Ahead to hide a broken video mode, bad refresh rate, or incorrect CRT configuration.

Where to Find the Setting in Batocera

From EmulationStation, Run-Ahead and related latency options can be configured per game.

  1. Highlight the game you want to configure.
  2. Hold the A button to open the game options menu.
  3. Go to Advanced Game Options.
  4. Scroll down to Latency Reduction.
  5. Open the Latency Reduction submenu.

Inside this menu you will find options such as:

Run-Ahead Frames
Use Preemptive Frames
Use Second Instance for Run-Ahead
Automatic Frame Delay
Variable Refresh Rate
Threaded Video

Exact wording can vary slightly depending on Batocera version, RetroArch version, and the selected core.

Batocera Latency Reduction Options

Run-Ahead Frames

This option controls how many frames RetroArch should run ahead.

Common values include:

Auto
None
1
2
3
4
5
6

For most games, start with:

Run-Ahead Frames: 1

Do not set this too high. High values can cause visible jitter, stutter, animation problems, missing frames, or strange rollback-like behavior.

Use Preemptive Frames

Preemptive Frames is another latency reduction method supported by some cores.

In Batocera, the menu description explains that this uses preemptive frames instead of normal Run-Ahead and only runs ahead when the controller state changes.

This can reduce CPU usage compared to traditional Run-Ahead in some cases, because it does not constantly run hidden frames when there is no input change.

For cores like FinalBurn Neo, this can be a very good option to test.

Recommended FBNeo test:

Run-Ahead Frames: 1
Use Preemptive Frames: On
Use Second Instance for Run-Ahead: Off

If Preemptive Frames causes problems, turn it off and use normal Single Instance Run-Ahead instead.

Use Second Instance for Run-Ahead

This option controls whether RetroArch should use a second silent core instance for Run-Ahead.

Common values include:

Auto
On
Off

Recommended starting point for most cores:

Use Second Instance for Run-Ahead: Off

Only try setting it to On if Single Instance Run-Ahead causes audio buzzing, crackling, instability, or if the core documentation recommends Second Instance.

Automatic Frame Delay

Automatic Frame Delay is separate from Run-Ahead.

It can reduce latency by delaying frame output as much as possible without causing dropped frames. This is a more advanced setting and can be sensitive to performance.

For most CRT Script users, leave this at:

Automatic Frame Delay: Auto

Only change it if you know what you are testing.

Variable Refresh Rate

Variable Refresh Rate is for displays and setups that support VRR technologies such as G-Sync, FreeSync, or HDMI 2.1 VRR.

This is generally not relevant for normal CRT setups.

For CRT users, leave this at:

Variable Refresh Rate: Auto

Threaded Video

Threaded Video can improve performance, but it can also increase latency and cause more video timing issues.

For latency-focused CRT use, this should normally be left at:

Threaded Video: Auto

Do not enable Threaded Video unless you need it for performance and have tested that it does not make input response or frame pacing worse.

Single Instance vs Second Instance

RetroArch Run-Ahead has two main operating modes:

Single Instance
Second Instance

In Batocera, Single Instance is used when:

Use Second Instance for Run-Ahead: Off

Second Instance is used when:

Use Second Instance for Run-Ahead: On

Single Instance

Single Instance is usually the first mode you should try.

It works by using save states in RAM. RetroArch briefly runs hidden frames with audio and video muted, then shows the frame that should be visible after the input has been applied.

Advantages

  • Lower CPU usage than Second Instance
  • Usually faster
  • Best choice for many lightweight cores
  • Recommended first test for most systems

Disadvantages

  • Depends heavily on clean and reliable save states
  • Some cores may produce audio buzzing, glitches, or instability
  • Not every core behaves correctly after rapid save/load operations

Second Instance

Second Instance runs a second copy of the core silently in the background.

The primary core handles the normal gameplay/audio path, while the second core runs ahead and produces the video frame. This avoids some problems caused by repeatedly loading save states in the main core.

Advantages

  • Can avoid audio buzzing caused by save-state loading
  • Can improve compatibility with some cores
  • Recommended for some MAME use cases

Disadvantages

  • Higher CPU usage
  • The system may effectively need to run the game twice
  • Not automatically better
  • Not supported or recommended for every core

When Should You Use Second Instance?

Use Second Instance if:

  • Single Instance causes audio buzzing
  • Single Instance causes crackling or instability
  • The core has save-state issues
  • The core documentation specifically recommends Second Instance
  • You are using MAME/current and want to test Run-Ahead

Do not use Second Instance just because it sounds more advanced. If Single Instance works correctly, it is often the better choice because it is lighter on CPU.

How Many Frames Should You Use?

Do not blindly set Run-Ahead to a high value.

The correct number of frames depends on the game. Some games only need 1 frame. Some may need 2 or more. Too many frames can cause stutter, rollback effects, animation glitches, missing frames, or strange behavior.

A simple test method:

  1. Launch the game.
  2. Pause emulation. (keyboard letter P)
  3. Hold a direction or button.
  4. Advance frame by frame.
  5. Count how many frames pass before the action appears on screen.
  6. The correct Run-Ahead value is usually that number minus 1.

Example:

Action appears after 2 frame advances
2 - 1 = 1 frame of Run-Ahead

If the game feels strange, stutters when pressing buttons, or shows rollback-like behavior, lower the Run-Ahead value.

Recommended Starting Point

For most users and most cores, start with:

Run-Ahead Frames: 1
Use Preemptive Frames: Off
Use Second Instance for Run-Ahead: Off
Automatic Frame Delay: Auto
Variable Refresh Rate: Auto
Threaded Video: Auto

Then test per game.

If it works correctly, leave it there.

If you get audio buzzing, crackling, or strange behavior, try:

Run-Ahead Frames: 1
Use Preemptive Frames: Off
Use Second Instance for Run-Ahead: On

If performance drops or the game stutters, turn Second Instance off again or disable Run-Ahead for that game/core.

FinalBurn Neo / FBNeo

FinalBurn Neo has strong support for RetroArch latency reduction features.

The official Libretro documentation says that FBNeo widely supports input latency reduction and recommends:

Run-Ahead Single Instance
Preemptive Frames

Important note:

Run-Ahead Second Instance is not guaranteed for FBNeo.

This is because proper Second Instance support does not exist in standalone FBNeo in the same way.

Recommended FBNeo Settings

For FBNeo, start with normal Single Instance Run-Ahead:

Run-Ahead Frames: 1
Use Preemptive Frames: Off
Use Second Instance for Run-Ahead: Off

You can also test Preemptive Frames:

Run-Ahead Frames: 1
Use Preemptive Frames: On
Use Second Instance for Run-Ahead: Off

If Preemptive Frames feels good and causes no issues, it is a good option for FBNeo.

FBNeo Warning

Avoid using Rewind together with Run-Ahead or Preemptive Frames if you notice problems. There have been reports of possible conflicts when Rewind is active at the same time.

Recommended:

Rewind: Disabled
Run-Ahead Frames: 1

or:

Rewind: Disabled
Use Preemptive Frames: On

MAME / MAME Current

MAME has partial support for RetroArch latency reduction features.

The official Libretro arcade documentation says that MAME partially supports these features, with:

Run-Ahead Second Instance recommended

Recommended MAME Current Settings

For MAME/current, start by testing:

Run-Ahead Frames: 1
Use Preemptive Frames: Off
Use Second Instance for Run-Ahead: On

If performance is not good enough, try disabling Run-Ahead or using another arcade core if the game is supported there.

MAME/current is usually more demanding than FBNeo, so Second Instance can require a stronger CPU.

MAME 2003-Plus

MAME 2003-Plus documentation says Run-Ahead is supported when set to:

Second Instance

However, the documentation also mentions known issues with Run-Ahead support.

Recommended MAME 2003-Plus Settings

Test carefully:

Run-Ahead Frames: 1
Use Preemptive Frames: Off
Use Second Instance for Run-Ahead: On

If you notice glitches, audio issues, broken behavior, or unstable gameplay, disable Run-Ahead for that game/core.

Beetle PSX HW Warning

Be careful with Second Instance on some hardware-rendered cores.

For example, the Beetle PSX HW documentation says that using Run-Ahead with Second Instance will break the hardware renderer.

For Beetle PSX HW, avoid:

Use Second Instance for Run-Ahead: On

Quick Core Recommendation Table

Core Recommended Method Batocera Starting Point Notes
FinalBurn Neo Single Instance or Preemptive Frames Run-Ahead Frames: 1, Second Instance: Off Second Instance is not guaranteed
MAME/current Second Instance Run-Ahead Frames: 1, Second Instance: On Partial support, higher CPU usage
MAME 2003-Plus Second Instance Run-Ahead Frames: 1, Second Instance: On Supported, but known issues exist
Beetle PSX HW Avoid Second Instance with hardware renderer Second Instance: Off Second Instance can break hardware renderer
Lightweight 8/16-bit cores Start with Single Instance Run-Ahead Frames: 1, Second Instance: Off Test per game
Cores with audio buzzing Try Second Instance Second Instance: On Only if Single Instance has issues

Practical CRT Advice

For Batocera CRT Script users, the best approach is:

  1. First make sure CRT output and SwitchRes are working correctly.
  2. Make sure the game is running at the correct resolution and refresh rate.
  3. Leave the standard CRT/VSync behavior at the recommended default.
  4. Then test Run-Ahead if you want to reduce internal game lag even further.

Do not use Run-Ahead to hide a broken setup.

Safe Default Recommendation

For most arcade users:

FBNeo

Run-Ahead Frames: 1
Use Preemptive Frames: Off
Use Second Instance for Run-Ahead: Off

or test:

Run-Ahead Frames: 1
Use Preemptive Frames: On
Use Second Instance for Run-Ahead: Off

MAME/current

Run-Ahead Frames: 1
Use Preemptive Frames: Off
Use Second Instance for Run-Ahead: On

If You Are Unsure

Use this:

Run-Ahead Frames: 1
Use Preemptive Frames: Off
Use Second Instance for Run-Ahead: Off
Automatic Frame Delay: Auto
Variable Refresh Rate: Auto
Threaded Video: Auto

Then only enable Second Instance if the core needs it.

Troubleshooting

Audio buzzing or crackling

Try:

Use Second Instance for Run-Ahead: On

If that fixes it, the core may not behave cleanly after repeated save-state loading.

Game stutters when pressing buttons

Try lowering the number of Run-Ahead frames.

Example:

Run-Ahead Frames: 2

change to:

Run-Ahead Frames: 1

Game becomes unstable or glitches

Disable Run-Ahead for that game/core.

Example:

Run-Ahead Frames: None

Some cores do not support it properly.

CPU usage is too high

Disable Second Instance first.

Second Instance is more demanding because it runs a second copy of the core in the background.

Try:

Use Second Instance for Run-Ahead: Off

If that is still too heavy, disable Run-Ahead:

Run-Ahead Frames: None

Rewind causes problems

Disable Rewind when using Run-Ahead or Preemptive Frames.

Summary

Single Instance should usually be tested first. It is faster and lighter on CPU.

In Batocera, this means:

Run-Ahead Frames: 1
Use Second Instance for Run-Ahead: Off

Second Instance is useful when Single Instance causes audio buzzing, instability, or when the core documentation recommends it.

In Batocera, this means:

Run-Ahead Frames: 1
Use Second Instance for Run-Ahead: On

For FBNeo, use Single Instance or Preemptive Frames.

For MAME/current, Second Instance is recommended.

For MAME 2003-Plus, Second Instance is required for Run-Ahead support, but there are known issues.

Always test per game. The correct Run-Ahead value is not universal.

Sources

Clone this wiki locally