Repository navigation
BFI is now Fósforo. This release combines the working screen-wide CRT/BFI engine with a redesigned native interface. It is intended primarily for testing on the Retroid Pocket Nova running Android 13.
Added
- Screen-wide CRT and VHS shaders alongside BFI. Run either effect on its own or combine them, with touch passing through the overlay on the tested Android 13 device.
- Shader selection and parameter overrides for individual apps, with Use global shader to return to inherited settings. Existing per-app BFI patterns remain available from the same app-details menu.
- A curated five-shader public bundle: CRT Lottes, Newpixie CRT, zfast CRT Composite, CRT Geom, and VHS and CRT Godot (CC0 core, without the font/timecode overlay).
- Optional direct download of the complete Libretro Slang source library, organized into its original categories. Presets retain all shader stages, includes and textures.
- Favourite shaders, bundled/favourite indicators, compatibility reports, local Slang/ZIP imports and an option to remove downloaded/imported shaders while keeping the bundle.
- Multi-step BFI patterns such as
V1-B1 - V2-B1, with individual frame tiles and easier pair editing/removal.
Changed
- New Fósforo name, purple CRT television icon and Jersey 15 headings. Violet structure and phosphor-yellow selected controls follow the system's light/dark setting.
- Slowly moving perspective-grid background, native translucent cards/bars, shared control shapes and outlines, and improved scroll fades, spacing and scrollbar gutters.
- Landscape columns and a portrait flow with a separate shader-parameters view. Shader categories remain fixed above the scrolling list for more predictable controller navigation.
- Shader thumbnails open the existing bouncing-ball test.
- Autosaved shader parameters and scoped defaults, with in-app controller prompts and shortcuts.
- Unified application/round icon and matching monochrome notification/Quick Settings artwork. Start/Stop buttons now include a power symbol.
Fixed and removed
-
Remove the old first-use acknowledgement wall. Start now goes directly to the missing setup requirements.
-
Fix permission setup in either order: returning from accessibility or notifications shows the remaining requirement. BFI and CRT cannot start unless both are enabled on Android 13+, and capture consent is requested only afterward.
-
Granting permissions never starts output automatically. Notification denial and setup cancellation leave effects off and allow setup to be resumed.
-
Preserve complete source paths and dependencies when loading downloaded presets instead of flattening the library.
-
Correct strict GLES numeric conversions affecting NTSC shader chains, and distinguish standalone Mattias sources from imported presets with the same shader ID.
-
Keep parameter value labels from resizing sliders during edits; improve thumbnail containment and frame-pattern summary sizing.
-
Remove the visible No CRT shader choice; use the Shader switch to disable filtering.
-
Remove the ineffective Resume after unlock control. This release does not promise automatic wake resumption.
Requirements and limitations
- Android 13+ for CRT and touch-through output, plus compatible OpenGL ES 3.1 and firmware. Android 8–12L retains legacy BFI only and may block touches under the overlay.
- BFI needs a reported refresh rate of at least 100 Hz; 120 Hz is the tested configuration. BFI causes flashing and reduces brightness.
- Accessibility hosts the output; it does not read accessibility UI trees or inject gestures. CRT additionally requires Android screen-capture consent. Frames stay in memory: normal operation does not record video or upload pixels.
- Locking ends CRT capture, and restarting it requires consent again. Rotating with CRT active ends the session. Capture exclusion uses a private Android API; other devices and firmware are unverified.
- Not all RetroArch/Slang features are supported. Compatibility checks do not guarantee visual correctness or performance. Secure content may appear black; full-screen processing adds latency and resource use.
- Beam simulation is not included.
Installation and verification
Download fosforo-1.0.apk and optionally verify it against SHA256SUMS.txt.
Validation completed for this build:
- Assembly, Android lint and 154 unit tests pass.
- An isolated fresh-install copy on the Nova reproduced the old accessibility-first failure and passes after the fix. Both grant orders, notification denial, cancel/retry, no automatic activation and actual BFI Start/Stop were checked.
- CRT was blocked while notifications were missing. After both permissions and explicit capture consent, combined CRT/BFI reached RUNNING and Stop closed capture. Shell-only checks avoided UIAutomator disconnecting accessibility during capture consent.
- The final five bundled shaders passed native-resolution offscreen GPU probes on the Nova; this is not a sustained gameplay or optical timing test.
- Native per-app tests confirmed independent shader/parameter saves, unchanged global settings and removal of a temporary override through Use global shader.
- The APK was installed on the Nova. The new icon was verified in Android App info; launcher-specific caching and every permission screen were not separately verified.
APK SHA-256:
7351502ff8791916440696f81b2dfdf7c7b4c175796bdad42b36f81473b985b0
Credits and distribution status
App code and original assets: MIT, copyright 2026 PakoVM. Jersey 15: The Soft Type Project Authors, SIL Open Font License 1.1. Third-party shaders keep their respective source notices and licenses.
The public bundle excludes Mattias CRT, Hyllian Rainbow, Geom Deluxe and NTSC VHS because redistribution terms for their exact sources or dependency chains could not be confirmed. The VHS/Godot preset retains only its unchanged CC0 effect pass; the separate font/OSD pass is omitted. Download/import support remains available, and private imports are preserved. See the licensing research and third-party notices in the source/APK.