Curated uBlock Origin filter lists that mute political, current-events, war, and AI noise on social media.
You edit a clean, tiered word list (words/*.yml); a script wraps those words
in site templates (sources/*.yml) and produces the subscribable filter lists
in dist/. Words are decoupled from sites, so a site can be re-targeted without
touching the vocabulary, and the vocabulary grows without touching site selectors.
Dashboard → Filter lists → scroll to Import… → paste a raw link below →
Apply changes. You can stack several (e.g. us + cl). All files live in
dist/.
Tiers are exclusive slices: each <region>-N list holds only that tier. The
master (cl.txt / us.txt) is all tiers combined — subscribe to it to block
everything, or stack individual tiers (e.g. cl-1 + cl-2) for an in-between
strictness.
Site rules (whole-subreddit blocks, DOM/URL rules) are not region-specific — they're a separate list, independent of tier and region. Stack it with any region's word list for full coverage, or skip it to keep only word-based hiding.
https://raw.githubusercontent.com/benja-opazo/ublock-politics/main/dist/subreddits.txthttps://raw.githubusercontent.com/benja-opazo/ublock-politics/main/dist/cl.txthttps://raw.githubusercontent.com/benja-opazo/ublock-politics/main/dist/cl-1.txthttps://raw.githubusercontent.com/benja-opazo/ublock-politics/main/dist/cl-2.txthttps://raw.githubusercontent.com/benja-opazo/ublock-politics/main/dist/cl-3.txthttps://raw.githubusercontent.com/benja-opazo/ublock-politics/main/dist/cl-4.txthttps://raw.githubusercontent.com/benja-opazo/ublock-politics/main/dist/us.txthttps://raw.githubusercontent.com/benja-opazo/ublock-politics/main/dist/us-1.txthttps://raw.githubusercontent.com/benja-opazo/ublock-politics/main/dist/us-2.txthttps://raw.githubusercontent.com/benja-opazo/ublock-politics/main/dist/us-3.txthttps://raw.githubusercontent.com/benja-opazo/ublock-politics/main/dist/us-4.txtTier meaning:
boric, Trump).carabineros, MAGA).Elmo, LGBT).Historical, and the
case-sensitive US / PC).Some tier-4 terms are matched case-sensitively (all-caps only) so US blocks
"US" but not the pronoun "us".
Requires uv.
uv sync # create .venv, install deps
uv run python scripts/validate.py # lint the YAML data
uv run python scripts/generate.py # rebuild dist/ from words + sources
uv run python scripts/generate.py --check # CI: fail if dist/ is stale
dist/ is generated — never edit it by hand. Edit the YAML and regenerate.
words/<region>.yml vocabulary: categories of terms, each with a tier (edit this)
sources/<site>.yml per-site filter template using the {TERMS} placeholder
site-rules/<site>.yml raw site-specific filters (subreddits, memes), tier-tagged
scripts/generate.py words × sources × tier -> dist/<region>*.txt
site-rules × sources -> dist/subreddits.txt
scripts/validate.py lints tiers, regex, duplicates, templates
dist/ generated, subscribable lists
.claude/skills/curate-words.claude/skills/site-filters.claude/skills/update-methodology5 commits
Python
100.0%
Curated uBlock Origin filter lists that mute political, current-events, war, and AI noise on social media.
You edit a clean, tiered word list (words/*.yml); a script wraps those words
in site templates (sources/*.yml) and produces the subscribable filter lists
in dist/. Words are decoupled from sites, so a site can be re-targeted without
touching the vocabulary, and the vocabulary grows without touching site selectors.
Dashboard → Filter lists → scroll to Import… → paste a raw link below →
Apply changes. You can stack several (e.g. us + cl). All files live in
dist/.
Tiers are exclusive slices: each <region>-N list holds only that tier. The
master (cl.txt / us.txt) is all tiers combined — subscribe to it to block
everything, or stack individual tiers (e.g. cl-1 + cl-2) for an in-between
strictness.
Site rules (whole-subreddit blocks, DOM/URL rules) are not region-specific — they're a separate list, independent of tier and region. Stack it with any region's word list for full coverage, or skip it to keep only word-based hiding.
https://raw.githubusercontent.com/benja-opazo/ublock-politics/main/dist/subreddits.txthttps://raw.githubusercontent.com/benja-opazo/ublock-politics/main/dist/cl.txthttps://raw.githubusercontent.com/benja-opazo/ublock-politics/main/dist/cl-1.txthttps://raw.githubusercontent.com/benja-opazo/ublock-politics/main/dist/cl-2.txthttps://raw.githubusercontent.com/benja-opazo/ublock-politics/main/dist/cl-3.txthttps://raw.githubusercontent.com/benja-opazo/ublock-politics/main/dist/cl-4.txthttps://raw.githubusercontent.com/benja-opazo/ublock-politics/main/dist/us.txthttps://raw.githubusercontent.com/benja-opazo/ublock-politics/main/dist/us-1.txthttps://raw.githubusercontent.com/benja-opazo/ublock-politics/main/dist/us-2.txthttps://raw.githubusercontent.com/benja-opazo/ublock-politics/main/dist/us-3.txthttps://raw.githubusercontent.com/benja-opazo/ublock-politics/main/dist/us-4.txtTier meaning:
boric, Trump).carabineros, MAGA).Elmo, LGBT).Historical, and the
case-sensitive US / PC).Some tier-4 terms are matched case-sensitively (all-caps only) so US blocks
"US" but not the pronoun "us".
Requires uv.
uv sync # create .venv, install deps
uv run python scripts/validate.py # lint the YAML data
uv run python scripts/generate.py # rebuild dist/ from words + sources
uv run python scripts/generate.py --check # CI: fail if dist/ is stale
dist/ is generated — never edit it by hand. Edit the YAML and regenerate.
words/<region>.yml vocabulary: categories of terms, each with a tier (edit this)
sources/<site>.yml per-site filter template using the {TERMS} placeholder
site-rules/<site>.yml raw site-specific filters (subreddits, memes), tier-tagged
scripts/generate.py words × sources × tier -> dist/<region>*.txt
site-rules × sources -> dist/subreddits.txt
scripts/validate.py lints tiers, regex, duplicates, templates
dist/ generated, subscribable lists
.claude/skills/curate-words.claude/skills/site-filters.claude/skills/update-methodology5 commits
Python
100.0%