Sort your Bluesky followers into lists by community.
leiden-algorithm bluesky atproto python
README.md

Prism #

Prism uses the Leiden algorithm to discover community clusters within your Bluesky follows, then creates curation lists for each.

Communities are discovered by weighing follows (one-way and mutual), plus the last 90 days of replies, quotes, and reposts. It's a good way to keep track of subsets of the accounts you follow when algorithmic feeds drown them out.

Get started #

You need Python 3.11 or newer and uv. On NixOS, run nix develop first.

uv sync --locked
uv run prism run --actor YOUR_HANDLE --dry-run

Open the report path that Prism prints. Add --lists 12 if you want to aim for a different number of lists.

Publish #

Do a dry run first, then set BSKY_APP_PASSWORD in your environment or .env and run:

uv run prism run --actor YOUR_HANDLE

If a run stops, pick it back up with uv run prism resume. Saved pages and publication progress are reused.

Recluster saved data #

uv run prism recluster SNAPSHOT --lists 12
uv run prism recluster reports/SNAPSHOT/snapshot.json.gz --settings experiment.json

This stays offline and writes a new report.

Each online run writes a readable result.json with the 50 strongest connections in each group and a compressed snapshot.json.gz with the full reclustering input. Completed SQLite run records keep collection data but discard the copied clustering result and publication plan.

Check the code #

uv run ruff check src
uv run ruff format --check src
uv run ty check src
uv build

Run uv run prism --help for the rest of the options.