From 9d35cc7c6811e5c3ba355049dd4f1db8873a3b49 Mon Sep 17 00:00:00 2001 From: Mattias Thall Date: Wed, 27 May 2026 01:17:04 +0200 Subject: [PATCH] Increase recommendation density in For You feed to ~25% 1 discovery card per 3 followed videos (was 1 per 5). Lower-ranked discovery cards also get shuffled so the same channels don't always appear at fixed positions. Co-Authored-By: Claude Sonnet 4.6 --- backend/routers/videos.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/backend/routers/videos.py b/backend/routers/videos.py index 8e9ef03..fbf2f6a 100644 --- a/backend/routers/videos.py +++ b/backend/routers/videos.py @@ -395,8 +395,8 @@ def home_feed( for item in top ] - # Inject discovery cards on every page: 1 every 5 followed cards. - disc_per_page = max(limit // 5, 1) + # Inject discovery cards: 1 every 3 followed cards (~25% recommendations). + disc_per_page = max(limit // 3, 1) disc_offset = (offset // limit) * disc_per_page if limit > 0 else 0 disc_rows = db.execute( @@ -426,17 +426,23 @@ def home_feed( {"user_id": current_user.id, "disc_limit": disc_per_page, "disc_offset": disc_offset}, ).mappings().all() + import random as _rand + disc_list = [dict(r) for r in disc_rows] + # Shuffle top-tier recs so the same channel doesn't always appear first + if len(disc_list) > 3: + top, rest = disc_list[:3], disc_list[3:] + _rand.shuffle(rest) + disc_list = top + rest disc = [ - VideoDetail(**{k: v for k, v in dict(r).items()}, - is_recommended=True, is_watched=False, is_downloaded=False) - for r in disc_rows + VideoDetail(**r, is_recommended=True, is_watched=False, is_downloaded=False) + for r in disc_list ] - # Interleave: one discovery card every 5 followed cards + # Interleave: one discovery card every 3 followed cards result: list[VideoDetail] = [] disc_iter = iter(disc) for i, v in enumerate(followed): - if i > 0 and i % 5 == 0: + if i > 0 and i % 3 == 0: rec = next(disc_iter, None) if rec: result.append(rec)