Overview
The For You feed is the endless-scroll shape you already know from your phone, pointed at the folder of videos and GIFs you curated yourself. Nothing is downloaded and nothing is streamed in. It only ever plays files you put in your assets folder and left active.
It opens in its own window, separate from the main panel, and it holds a browser engine (WebView2) rather than the usual WPF surface. That is why it looks and feels like an app rather than a tab.
20-40 Second Cuts
Random windows sliced out of your own videos
Two to Four at Once
Duo, trio, or an irregular mosaic quilt
It Watches Back
Sections you linger on come round more often
Patreon Feature
The feed needs an active subscription at any paid tier. Without one the card is still there and still clickable, but pressing it opens the account popup instead of the feed.
Opening the Feed
There are two ways in, and they run the same code:
- The For You card in the Exclusives spotlight
- The For You chip on the dashboard's premium rail
Neither one switches tabs. The feed is a window, not a tab, so whatever you were looking at stays where it was.
Every launch shows an intro card with a DIVE IN button before anything plays. This is deliberate and it is not skippable. Until you press it, no page has been built, no video or image element exists, and nothing can make a sound. It is also the click that earns the feed the right to autoplay with audio.
Clips Start With Sound
The intro card says so, and it means it. Press M the moment you land if you are not alone, or turn the speaker off in the corner. The mute state is remembered between sessions.
If the feed opens to a film-reel icon and an empty state, you have no eligible content. Only active videos and GIFs are used, so curate the pool in the Assets tab and reopen.
What It Plays
Your active videos and, if you leave the toggle on, your animated GIFs. Nothing else. Stills are not part of the feed.
Videos are cut rather than played end to end:
- Every video is divided into addressable sections on a 30 second grid - one section starts every 30 seconds of its timeline
- Each time a clip is drawn, it gets a random window between 20 and 40 seconds long
- A video 50 seconds or shorter skips the grid entirely and plays whole
- GIFs are drawn as a single unit and loop
Landscape clips (noticeably wider than tall) are the ones that stack two-up. Near-square material is excluded from stacking by design, so a portrait-heavy library will look different from a widescreen one.
The feed will not show you three clips from the same video back to back. There is a short cooldown and a scoring penalty on repeats from a file you just saw.
Layouts
| Layout | What it does |
|---|---|
| Duo | Two clips stacked. The default, and the calmest. |
| Trio | Three at once. More to track, more that goes unwatched. |
| Mosaic | An irregular quilt of two to four tiles that can re-compose itself on a timer without you touching anything. |
Mosaic is the only layout with the auto-change timer. Leave Auto-change mosaic on and the quilt reshuffles every few seconds; turn it off and it holds until you swipe. The interval runs from 3 to 60 seconds and defaults to 10.
Why 3 Seconds Is The Floor
Every re-composition mounts and releases up to four media elements. Anything faster than three seconds churns video decoders hard enough to hurt, so the slider will not go lower.
Controls
| Input | Does |
|---|---|
| Scroll wheel, or ↓ / Page Down | Next page of clips |
| ↑ / Page Up | Previous page |
| Drag a single tile | Swaps just that tile for a new clip. Each tile keeps its own back-history, up to 20 deep. |
| M | Mute and unmute |
| Esc | On the intro card, closes the window. In ghost mode, drops ghost mode. Otherwise the panic key handles it. |
| ⚙ (top left) | Feed options |
| ⟳ (top right) | Auto-advance: scroll on by itself when a clip's window ends |
| 🔊 / ▮▮ (top right) | Mute, and fullscreen |
Auto-advance is off by default, which means a page loops forever until you move it. Turn it on and the feed walks itself forward, hands free.
A small pink heart appears over the feed now and then. Tapping it is the attention check, and it pays.
Feed Options
The gear in the top left corner opens everything below. Changes save as you make them.
| Setting | Default | Description |
|---|---|---|
| Layout | Duo | Duo, Trio or Mosaic. |
| Include GIFs | On | Mix animated GIFs from your images library into the feed. |
| Auto-change mosaic | On | The mosaic re-composes on a timer. Off means it holds until swiped. |
| Change every | 10s | 3 to 60 seconds between mosaic re-compositions. |
| Highlight audible tile | On | A soft pink ring on the clip you are actually hearing, pulsing with its audio level. |
| Eye control (webcam) | Off | Blink to swap a tile. Turns the camera on, so it is off until you say otherwise. |
| Gaze picks the tile | Off | A blink swaps the tile you are looking at rather than a random one. Needs calibration. |
| Ghost opacity | 100% | How see-through the feed is once ghost mode is on. Goes as low as 1%. |
| Ghost mode | Off | Turns the feed into a see-through overlay your mouse passes through. |
Ghost Mode
Ghost mode makes the feed a translucent overlay that sits over everything else and lets your mouse pass straight through it. You keep working, or reading, or whatever you were doing, and the feed keeps running over the top of it.
When it engages, a notice sits on screen for seven seconds telling you exactly how to get out. Read it the first time.
You Cannot Click A Ghost
That is the whole point of it - clicks go to whatever is behind. At 1% opacity you may not be able to see the feed at all. Neither of those traps you: one press of Esc or the panic key brings the real, fully opaque window straight back, whatever the opacity slider says.
Two corner buttons stay clickable while ghosted: the gear and the speaker. Tweaking a setting or killing the audio does not cost you ghost mode.
The panic ladder
While the feed is open, the panic key works in two rungs:
- First press drops ghost mode and hands the window back
- Second press closes the feed
If the feed was never ghosted, the first press closes it outright. A reflexive double tap right after rung one is swallowed on purpose, so a panicky EscEsc does not take the whole thing down when you only meant to grab the window.
Ghost mode always starts off. It is never restored from your last session, so a relaunch can never come up as something you cannot grab.
Eye Control
Off by default, because turning it on turns your webcam on. With it enabled:
- A blink swaps one tile for a new clip
- Holding your eyes closed for two seconds changes the whole page
Turn on Gaze picks the tile as well and the blink swaps whichever tile you were looking at instead of a random one. That needs eye tracking calibration first - the options panel has a Calibrate button that walks you through following dots around the screen.
It Stays On Your Machine
Gaze and blink detection run locally, the same as the rest of the webcam features. See webcam_gaze.txt for the full picture, including what happens if you decline the permission prompt.
If the camera is unavailable, busy, or you decline permission, eye control turns itself off and says why in the options panel rather than failing silently.
How It Learns
This is the part that makes it a feed rather than a shuffle. The app keeps one small record per section of each video - not per file, per 30 second section - holding how many times it played, how long you stayed, and a rolling retention score between 0 and 1.
- Dwell is wall-clock time while a clip is on screen and actually playing, accumulated across stalls
- Dwell is capped at twice the clip length, so camping on a loop cannot inflate a section's score
- The score is a rolling average that leans on recent behaviour rather than ancient history
- A section you have never seen starts optimistic, so new material gets a fair first showing
Selection weight combines three things: a flat floor every section gets, a boost proportional to the retention score, and an exploration bonus that decays as a section racks up plays. In practice a section you keep watching comes round about four times as often as one you always skip past, while genuinely new material still surfaces.
Skipping Is Instruction
Swiping a tile away the second it appears is not a neutral act. It is a low dwell reading against that exact section, and the feed will show it to you less. If you want the feed to drift somewhere, the fastest way to steer it is simply to stay on what you like.
The store holds up to 5,000 sections and evicts the least recently seen beyond that. It is written to disk on a short delay, so a burst of swiping costs one write rather than fifty.
XP & Progression
| Event | XP | Notes |
|---|---|---|
| FYP clip viewed | 5 XP | Capped at 12 paying clips a minute |
| FYP attention hit | 15 XP | Tapping the pink heart when it appears |
The rate cap is a safety rail rather than a target. Twelve clips a minute is faster than the feed can actually produce distinct slices, so watching normally will never bump into it. See progression.log for how this sits against everything else that pays.
What Stands Down
While the feed is open, the app stops competing with itself. Video-class features stand down:
- The mandatory video trigger
- Bubble Count
- The companion's autonomous web video pushes
Everything else carries on over the top of the feed. Flashes, subliminals and lock cards all still fire while you scroll, which is rather the point of leaving them on.
Its Own Browser Profile
The feed keeps a browser profile separate from Down the Rabbit Hole and the Loom, so opening it never disturbs their state.
Files & Troubleshooting
Two files live in your user data folder:
| File | Holds |
|---|---|
fyp_stats.json |
The retention record: plays, dwell, and score per section. |
fyp_meta.json |
Learned duration and dimensions per file, plus a note of anything that failed to decode. |
Deleting fyp_stats.json resets what the feed has learned about you and starts it fresh. Nothing else is lost.
A tile shows a warning instead of playing
The feed prints the filename and says it could not load rather than sitting on silent black. That almost always means the browser engine cannot decode that particular file - HEVC is the usual culprit, and it will play perfectly well in the main panel's player, which uses a different decoder. Re-encode it, or leave it out of the pool.
Failures are also written to the log, so if you send a bug report the offending files come with it.
The feed opened empty
No active videos, and no active GIFs, or GIFs turned off with videos absent. Curate in the Assets tab. The empty state offers a one-press shortcut to switch GIFs back on if that is all that is missing.
It Is Built Not To End
There is no natural stopping point in this one. No timer, no session length, no run that finishes. If you want a boundary you have to bring it yourself - use the scheduler to bound when it can be open, or set yourself a limit before you press DIVE IN rather than after.
Conditioning Control Panel