# Why Is AFR Disabled by Default in SmartTube? Hardware Compatibility and Stability Trade-offs

> Discover why SmartTube disables Auto-Frame-Rate (AFR) by default. Learn about hardware compatibility issues and stability trade-offs for a smoother viewing experience.

- Repository: [Yuriy L/SmartTube](https://github.com/yuliskov/SmartTube)
- Tags: deep-dive
- Published: 2026-09-14

---

**SmartTube ships with Auto-Frame-Rate (AFR) disabled by default because the feature is hardware-dependent, frequently causes instability on devices like the NVIDIA Shield, and provides only modest perceptible benefits for most users.**

SmartTube, the open-source Android TV YouTube client maintained by yuliskov, includes sophisticated display synchronization capabilities through its Auto-Frame-Rate (AFR) feature. However, unlike standard playback settings, AFR remains turned off in the default configuration to ensure reliable performance across the fragmented Android TV hardware ecosystem.

## Hardware-Dependent Limitations

According to the official README documentation in the SmartTube repository, AFR "does **not work well on every hardware**" and the developers explicitly state that *if you don't know what it does and don't want to test it yourself, you can safely keep it off*. This warning reflects the reality that frame-rate switching requires specific HDMI handshake support and display controller capabilities that vary dramatically between TV models and set-top boxes.

## Stability Risks on Premium Hardware

Enabling AFR can introduce severe playback instability rather than improvement on certain high-end devices. The NVIDIA Shield, for example, lacks proper HDR/AFR support in its firmware implementation, frequently causing graphical glitches, audio-video desynchronization, or complete playback failures when the feature is active. The [`AutoFrameRateController.java`](https://github.com/yuliskov/SmartTube/blob/main/AutoFrameRateController.java) file attempts to manage these transitions, but it cannot circumvent fundamental hardware or driver limitations present in specific chipsets.

## Minimal Perceptible Benefit

The visual improvement offered by matching video frame rates to display refresh rates is marginal for most viewing scenarios. While theoretically eliminating 3:2 pulldown judder on 24fps cinematic content, modern TVs typically compensate through advanced motion processing, making the difference barely noticeable to average viewers. Given the substantial risk of compatibility issues against minor smoothness gains, the developers prioritized a stable out-of-the-box experience.

## How to Enable AFR Manually

For users with compatible hardware, AFR can be activated through the settings UI or programmatically. The feature availability is controlled by the `PLAYER_BUTTON_AFR` flag defined in [`common/src/main/java/com/liskovsoft/smartyoutubetv2/common/prefs/PlayerTweaksData.java`](https://github.com/yuliskov/SmartTube/blob/main/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/prefs/PlayerTweaksData.java).

In [`PlayerSettingsPresenter.java`](https://github.com/yuliskov/SmartTube/blob/main/PlayerSettingsPresenter.java), the user-facing toggle is implemented as a `TwoStatePreferenceItem`:

```java
// In PlayerSettingsPresenter the AFR toggle is added:
new TwoStatePreferenceItem(
        context,
        R.string.auto_frame_rate,
        PlayerTweaksData.PLAYER_BUTTON_AFR);

```

Programmatic control is exposed through the `TvQuickActions` utility class:

```java
// Turn AFR on for a specific video format
TvQuickActions.sendStartAFR(context, videoFormat);

// Turn AFR off
TvQuickActions.sendStopAFR(context);

```

When enabled via `PlayerTweaksData`, the AFR action button appears in the playback controls through [`VideoPlayerGlue.java`](https://github.com/yuliskov/SmartTube/blob/main/VideoPlayerGlue.java):

```java
// VideoPlayerGlue adds the AFR action to the playback controls
if (mPlayerTweaksData.isPlayerButtonEnabled(PlayerTweaksData.PLAYER_BUTTON_AFR)) {
    putAction(new AFRAction(context));
}

```

The [`AFRAction.java`](https://github.com/yuliskov/SmartTube/blob/main/AFRAction.java) class handles the UI button behavior, while [`AutoFrameRateController.java`](https://github.com/yuliskov/SmartTube/blob/main/AutoFrameRateController.java) contains the core logic that applies frame rate changes and manages the associated edge cases.

## Summary

- **Hardware variability**: AFR requires specific display controller and HDMI handshake support that is not universal across Android TV devices.
- **Stability concerns**: Devices such as the NVIDIA Shield experience HDR and AFR conflicts, causing crashes or playback failures.
- **Marginal benefit**: The smoothness improvement is minimal for most content and viewing scenarios.
- **Opt-in design**: SmartTube maintains AFR as an optional feature in `PlayerTweaksData` rather than enabling it by default, ensuring reliable performance for the majority of users.

## Frequently Asked Questions

### What is AFR in SmartTube?

Auto-Frame-Rate (AFR) is a playback feature that dynamically switches your display's refresh rate to match the video's native frame rate, such as 24Hz for film content. According to the SmartTube source code, this is implemented in [`AutoFrameRateController.java`](https://github.com/yuliskov/SmartTube/blob/main/AutoFrameRateController.java) but defaults to off to prevent hardware compatibility issues.

### Can enabling AFR damage my TV or Android TV device?

No, enabling AFR cannot physically damage your hardware, but it can trigger software instability, HDMI handshake failures, or playback stuttering on incompatible devices. The SmartTube README explicitly recommends keeping AFR disabled unless you are willing to test compatibility with your specific hardware.

### How do I enable AFR if I want to test it on my device?

Navigate to the player settings and toggle the AFR option, which is controlled by `PlayerTweaksData.PLAYER_BUTTON_AFR` in [`PlayerSettingsPresenter.java`](https://github.com/yuliskov/SmartTube/blob/main/PlayerSettingsPresenter.java). If your device supports it properly, the `AFRAction` button will appear in the playback controls, allowing you to activate frame-rate switching for supported video formats.

### Does AFR improve video quality significantly compared to standard playback?

For most users, the improvement is subtle. While AFR theoretically eliminates judder by avoiding 3:2 pulldown on 24p content, modern televisions often handle frame conversion smoothly enough that the difference is barely perceptible, which is why SmartTube prioritizes stability over defaulting AFR on.