Paste a Bluesky handle (crawls its mutuals) or a
list link (bsky.app/profile/…/lists/…, crawls its
members). cloutgraph reads who in that group liked whom, weights each
directed liker → author edge by
pointwise mutual information (so one hyperactive liker or one
universally-liked account can't dominate on raw counts), runs
HITS on the weighted graph, and ranks the group by
network clout — the geometric mean of authority score and hub
score.
reads Bluesky's public AppView + each account's own PDS, all in your browser — no login.
| # | who | clout | hub | auth | likes in-pool (given / recv) |
|---|
com.atproto.repo.listRecords,
collection app.bsky.feed.like — up to 300 recent likes
per member) and keeps only the likes aimed at another pool member,
giving a directed count c(i,j) = how many times
i liked something by j. Each edge is then
re-weighted by PPMI:
max(0, log(c(i,j)·T / (rowSum(i)·colSum(j)))), T being
the total in-pool likes — so an edge only carries weight if the
pair like each other more than their individual activity levels
would predict by chance. HITS then runs ~100 power-iteration
rounds on that weighted graph (authority ← incoming hub·weight,
hub ← outgoing authority·weight, L2-normalized each round), and
clout is sqrt(hub × authority) per person,
scaled 0–100 against the pool's own top scorer. The graph is capped
at 50 pool members and 300 likes each to keep the crawl bounded —
big mutual sets or lists get truncated to the first 50 found. Any
pool member whose weaker side — min(likes given,
likes received) within the pool — is under 5 is too small a
sample for PMI/HITS and tends to swing scores to extremes rather
than reflect real standing. Nobody gets swapped automatically
though: hit the "swap out low-activity members" button once
results are in, and it'll drop whoever's currently under that
threshold for the next candidate waiting in line, recompute, and
re-rank. It only checks the pool as it stands when you click it, so
if a freshly swapped-in replacement also turns out to be
low-activity, click it again to clean that up too.