Every ranking weight in X's algorithm, animated
X open-sourced the code that ranks the For You timeline. The weights below are
transcribed from home-mixer/params/param.rs, pinned to commit
a389166. Every row links to the
line it came from.
57s, sound on. The ledger on the right builds as the post collects each weight.
The weights
Ordered largest to smallest. 6 of the
28 ship configured to 0.0 and contribute nothing; they are kept
here so the list is complete rather than flattering.
| action | weight | param | param.rs |
|---|---|---|---|
| copy link | +20.0 | ShareViaCopyLinkWeight |
:326 |
| mutual reply boost | +15.0 | BidirectionalFollowReplyWeightBoost |
:285 |
| reply | +5.0 | ReplyWeight |
:283 |
| share via DM | +5.0 | ShareViaDmWeight |
:320 |
| quote | +5.0 | QuoteWeight |
:332 |
| follow author | +4.0 | FollowAuthorWeight |
:346 |
| share | +2.0 | ShareWeight |
:318 |
| repost | +1.0 | RetweetWeight |
:296 |
| like | +0.5 | FavoriteWeight |
:282 |
| click | +0.4 | ClickWeight |
:309 |
| open link | +0.2 | OpenLinkWeight |
:310 |
| photo expand | +0.05 | PhotoExpandWeight |
:298 |
| video open | +0.05 | VideoOpenWeight |
:304 |
| quoted click | +0.05 | QuotedClickWeight |
:334 |
| video quality view | +0.05 | VqvWeight |
:317 |
| unexplored | +0.02 | PostUnexploredWeight |
:352 |
| dwell time | +0.004 | ContDwellTimeWeight |
:376 |
| profile click | +0.0 | ProfileClickWeight |
:312 |
| quoted video quality viewnot in the film | +0.0 | QuotedVqvWeight |
:340 |
| dwellnot in the film | +0.0 | DwellWeight |
:331 |
| click dwell timenot in the film | +0.0 | ContClickDwellTimeWeight |
:382 |
| mutual dwell boostnot in the film | +0.0 | BidirectionalFollowDwellWeightBoost |
:291 |
| active secondsnot in the film | +0.0 | ContActiveSecs5mResidualNormWeight |
:418 |
| not dwelled | -0.02 | NotDwelledWeight |
:444 |
| block author | -31.2 | BlockAuthorWeight |
:431 |
| not interested | -43.2 | NotInterestedWeight |
:425 |
| mute author | -58.8 | MuteAuthorWeight |
:437 |
| report | -234.0 | ReportWeight |
:442 |
How this was checked
The film and this page read from one table. A script re-reads
param.rs and fails if any value, any numeric literal, or any line number
disagrees with it, so a number cannot drift here without the build breaking.
Public write-ups of this algorithm still quote the 2023 heavy-ranker weights. Those are three years stale. Check any claim, including this one, against the file rather than against a thread.
What this does not tell you
A weight is not a score. The ranker computes
Σ (weight × P(action)) per viewer, where each probability comes from
a model given that viewer's history. The same post therefore has a different score for
every person who sees it — there is no single number for a post, and this page does
not claim to produce one.
Some weights are conditional in ways the list cannot show. VqvWeight only
applies when a video runs past ten seconds and the viewer has fewer than 10,000 followers.
PostUnexploredWeight only applies to posts from accounts you already follow.
BidirectionalFollowReplyWeightBoost only applies to original posts — not
replies, not reposts — from accounts you mutually follow.
Two labels use X's product vocabulary rather than the identifier: like is
FavoriteWeight and repost is RetweetWeight. The code kept
the old names after the product renamed them.
The candidate-pool figure shown in the film is illustrative. It is not a constant in the repository, unlike every weight above.