Bifrost is a custom LED controller for the AYN Thor handheld (and might work for other handhelds).
It provides a collection of LED animations that can run in the background, including:
- Ambient
- Audio Reactive
- Ambi Aurora (a mix of Ambient + Audio Reactive)
- Classic animations: Breath, Rainbow, Pulse, and more
Bifrost aims to bring a vibrant, customizable lighting experience to the
AYN Thor while keeping performance and battery consumption in mind.
⚠️ Important: For animations to work, Bifrost must stay alive in the background.
Closing the app or restricting notification (and screen recording for Ambient) activity will stop LED updates.
Uses Android's screen recording API to sample the screen's left and right average colors.
For performance, Bifrost captures the screen in 2×1 pixels and reads the RGB values directly from the buffer.
- Custom color sampler to eliminate pillarboxing/letterboxing and favor more vivid colors (useful for older content)
- Single color mode to calculate one shared color for both sticks
- Saturation boost slider for more intense colors
- Hex color input for precise color selection
When choosing the custom color sampler, Bifrost captures the screen using a low-resolution 32-pixel grid, allowing more advanced color analysis while remaining lightweight:
- Favors saturated colors to improve vibrancy
- Helps eliminate pillarboxing and letterboxing
Analyzes live audio levels (using the screen recording permission) to drive LED intensity.
- Redesigned reactivity system using a single unified reactivity slider
- Improved responsiveness and smoother audio-driven animations
Combines Ambient color sampling with Audio Reactive intensity for a hybrid effect.
- Improved color calculation
- Supports custom sampling, single color mode, and saturation boost
- Save multiple animation presets with their own settings
- Automatically loads the last selected preset on app launch
- Easy organization and quick switching
Bifrost offers multiple performance-level modes.
The Ragnarok profile updates the Thor LED controller as fast as possible, which may cause latency or even crashes.
Recent updates introduce several new capabilities.
- Auto-start on boot so Bifrost resumes automatically after device reboot.
- If auto-start is skipped because MediaProjection permission is required, Bifrost shows a notification to reopen the app and request the permission.
- Profiles can be assigned to specific apps
- Bifrost automatically switches profiles depending on the foreground application
- Optional fallback preset when no mapped app is in the foreground
- First-use popup to explain app mode behavior
- Immediate app-profile resolution when app mode is enabled
- Separate left/right LED control
- Each stick can run different colors or animations
Improved LED feedback while charging:
- Breathing lights while charging
- Charging speed indication
- Flash notification when charging completes
A new animation that changes LED colors based on CPU temperature readings.
- Export presets as a versioned JSON bundle
- Import presets in Replace or Add mode
- Preset metadata, artwork references, and app-profile flags are preserved
- Preset artwork editor supports:
- Built-in icons
- Custom emoji
- Uploaded custom images
- Assigned app icons
- Rename presets directly from the update flow
- Long-press delete to remove all presets with confirmation
- Horizontal preset presentation with smoother cover-flow and snap behavior
- Per-preset custom colors for Battery Indicator: low / mid / high
- Per-preset custom colors for CPU Temperature: cool / warm / hot
- Long-press color swatches to reset to defaults
- Toggle for persistent foreground notification
- Improved switch visuals and general UX polish
- Better app-mode fallback handling: if app mode is on and no fallback preset is selected, Bifrost keeps the service active but does not apply an animation until a mapped/fallback preset can be resolved
Bifrost can be installed in two different ways:
- Download the latest APK from the GitHub releases page.
- Open your Downloads folder.
- Tap the APK file to start the installation.
- If Android asks to allow installation from unknown sources, accept the permission.
- Complete the installation.
If you use Obtainium, you can automatically receive updates:
-
Open the Obtainium app
https://github.com/ImranR98/Obtainium -
Add a new app using this source: https://github.com/Pollux-MoonBench/Bifrost/releases/
-
Follow the Obtainium installation process.
To enable Ambient, Audio Reactive, and Ambi Aurora modes, Bifrost requires:
Used exclusively to sample:
- Screen colors (Ambient)
- Audio intensity (Audio Reactive)
Bifrost does not save or transmit screen contents — sampling happens locally and is reduced to minimal pixel data for efficiency.
Bifrost has been tested and confirmed to work on the following devices:
- Thor
- Odin 2 Portal Pro
- Pocket Mini V2
- Pocket 5
Bifrost is now out of beta, but still actively evolving.
While overall stability has improved, unexpected behavior may still occur on some devices.
- Random crashes under certain conditions
- Granting notification permission at launch may cause the LED toggle switch to appear disabled even though animations continue running
- On the Retroid Pocket Mini, only the left stick turns on in Ambient mode.
This issue can be solved using the custom color sampler mode.
Thanks to r/hupo224 for helping investigate this issue.
Huge thanks to KuriGohan-Kamehameha for the massive work and new features added to the project, including major functionality improvements and system integrations.
Project:
https://github.com/KuriGohan-Kamehameha
If you enjoy Bifrost and want to support development, you can buy me a coffee here:
👉 https://ko-fi.com/pollux_moonbench
Thank you! ❤️
This project is licensed under GPLv3.
You are free to use, study, modify, and redistribute the app under the terms of the GPLv3 license.
This app is provided for free in this repository and cannot be sold to you.