CCP dial logoConditioning Control Panel v6.7.4 OK
field_manual / premium.dir / gentle

For You Feed

An endless feed cut from your own library. The app slices your active videos into random 20-40 second windows, puts two to four of them on screen at once, and quietly learns which sections hold you longest. It never runs out.

Overview

For You feed key art - a spiral of tiled clips
Key art for the feed. What you actually see is your own library, tiled.

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.