This is a patch release. If you are already on v1.8.0 or later, this update installs normally with no data loss.
If you are updating from v1.7.x or earlier, see the v1.8.0 release notes for migration instructions.
What's New
New Features
- Notification Preferences: New screen in Settings to individually toggle new-video alerts, download notifications, screen time reminders, app updates, and general notifications. All types enabled by default. Includes a shortcut to jump directly to Android's per-channel system notification settings.
- Sleep Timer: Available in both the music and video players. Set a countdown to automatically pause playback using preset durations or a custom time entry. Works during background playback and picture-in-picture. Optional "close app" mode stops all playback services and finishes the activity when the timer fires, preserving battery life overnight.
- "Don't Show This Channel" Quick Action: Tap the menu on any video card and select "Don't show this channel" under the Algorithm section to permanently filter that channel from your recommendations. The block is persisted to your profile and fully reversible from Settings → Content Preferences → Blocked.
Recommendation Engine (V9.1 — "Anti-Repetition")
This release includes a major update to Flow's on-device recommendation engine focused on eliminating repetitive feeds and improving performance on low-end hardware.
Performance
- Pre-compiled Regex: Eliminates thousands of regex object allocations per ranking cycle, reducing CPU overhead significantly on budget devices.
- Non-blocking Export: Brain state is now copied under lock, then serialized and written to disk after the lock is released. Exporting your profile no longer freezes recommendations.
- IDF Dead Weight Pruning: Words that decay to zero frequency are now removed from memory instead of persisting as zombie entries consuming RAM indefinitely.
New Ranking Signals
- Impression Fatigue: Videos shown in previous feed loads but not clicked now receive exponentially decaying score penalties — seen once: ×0.85, seen 3+ times: ×0.30, seen 5+ times: ×0.05. Impression counts clear when you click a video or reset the session. Not persisted across app restarts so relaunching the app always feels fresh.
- Already-Watched Penalty: Fully watched videos are nearly invisible in future feeds (×0.02), half-watched videos receive a heavy penalty (×0.30), and briefly sampled videos get a mild penalty (×0.70). Music exception: tracks under 8 minutes are exempt so you can replay songs freely. Watch progress is persisted across app restarts.
- Engagement Rate Floor (Clickbait Filter): Videos older than 24 hours with over 50K views but less than 1% like-to-view ratio receive a ×0.2 penalty, acting as a proxy for YouTube's hidden dislike count. A time guard prevents false positives on newly uploaded videos that haven't accumulated likes yet.
Algorithm Fixes
- Fixed crash (NPE) in description chapter detection when video description is null.
- Onboarding warmup boost is now applied after session fatigue as an additive bonus, preventing your preferred topics from vanishing during early sessions.
- Channel score recovery from "Not Interested" — floor raised from 0.05 to 0.20, reducing the number of positive interactions needed to recover a channel from ~45 to ~14.
- Lemmatization now runs before stop-word filtering so both "compilation" and "compilations" are consistently handled instead of one slipping through.
- Exploration queries now cross-reference your blocked topics to prevent suggesting categories you've explicitly rejected.
- IDF weights are now persisted and computed only from videos you've interacted with, not from all ranking candidates, ensuring consistent weighting across sessions.
- Feature cache invalidation is now deterministic — an IDF snapshot is taken once per ranking call to prevent mid-rank score drift.
Bug Fixes
- Duration badge now hidden entirely when duration is zero and the video isn't live (was showing "0:00").
- Live streams now show a red LIVE badge instead of a duration.
- Fixed shorts routing condition triggering on regular videos with durations between 1–120 seconds instead of only on actual Shorts.
- Fixed downloaded videos having all-underscore filenames for non-Latin titles (Arabic, Chinese, etc.) — the filename sanitizer now uses Unicode-aware character classes so original title characters are preserved.
- Fixed the bottom navigation home button doing nothing when pressed from the search screen — home navigation now uses
popBackStackinstead ofnavigate(), avoiding alaunchSingleTop+restoreStateedge case that silently no-ops when the search screen sits above home on the back stack. - Fixed search result playlists being unclickable — tapping a playlist in search results now opens the playlist detail screen. Video and channel results were already functional but playlists had an empty click handler wired to nowhere.
- Fixed sleep timer "close app" mode not stopping playback — closing the app now explicitly stops the music and video foreground services before finishing the activity, preventing audio from continuing in the background after the app exits.
- Fixed subscription notifications arriving in large batches — the check worker now collects all new videos across all channels and dispatches a single grouped notification. One new video shows a full notification with thumbnail; two or more shows a single InboxStyle notification listing all channels and titles so the notification shade no longer floods with 10–20 simultaneous alerts.
System Requirements
- Android 8.0 (API 26) or higher
- 2 GB RAM recommended
Full Changelog: v1.8.2...v1.8.5