Releases: vincentmathis/threads-cleaner
Release list
v1.0.4
What's new
Locale support (German, Spanish, French, Italian, Portuguese)
- More button SVG now also matches Mehr, Mas, Plus, Altro, Mais alongside More
- Menu/confirm "Delete" buttons found by position (last menuitem, last dialog button) instead of text — works in any language
- Error toast detection broadened to �rror, wrong, ry again, schief, ehler
Faster post deletion
- Posts are now deleted in-place on the profile page — no more opening each individual thread
- Same scroll-on-delete pattern as replies
- Removed _collect_post_urls (30 lines of dead code)
Ghost-post handling
- When the page shows posts you used to reply to (but your reply is gone), the tool now detects them and stops immediately instead of scrolling through endless ghost posts
- Added _has_other_svgs check: if SVGs exist but none match your user, break early
Other fixes
- Install-browser: uses Playwright's bundled Node driver directly (no PATH/python probing)
- Login: sets PLAYWRIGHT_BROWSERS_PATH before launch (same fix as BrowserDeleter.start)
- .gitignore: added .env to prevent secret leaks
v1.0.3
Fixes
login command failed with "Playwright browser not installed" right after install-browser. The login command had its own Playwright launch code that didn't set PLAYWRIGHT_BROWSERS_PATH. In the PyInstaller exe, the driver looks for browsers in the wrong place (the temp extraction dir) unless this env var is set. The delete commands worked because BrowserDeleter.start() set it, but login bypassed that function.
Now login sets the env var the same way before launching.
v1.0.1
What's new
Landing page at vincentmathis.github.io/threads-cleaner — fancy tabbed install instructions (EXE / pipx / uv tool).
Published to PyPI! Install cross-platform via:
pipx install threads-cleaner
uv tool install threads-cleaner
pip install threads-cleaner
login now opens threads.com directly instead of about:blank.
login no longer crashes after install-browser — sets PLAYWRIGHT_BROWSERS_PATH the same way the delete commands do.
install-browser no longer probes pyenv/PATH — uses Playwright's bundled driver directly.
v1.0.0
v1.0.0 — Stable release
Breaking (CLI)
The old browser-delete subcommand is gone. Delete is now the default action:
| Before | After |
|---|---|
| threads-cleaner browser-delete --target both | threads-cleaner --target both |
| threads-cleaner browser-delete --headed --max 5 | threads-cleaner --headed --max 5 |
| threads-cleaner browser-login | threads-cleaner login |
What's new in this release
- --newer-than: delete items newer than a duration or ISO date
- ISO date support: --older-than and --newer-than both accept ISO dates (e.g. 2026-06-01)
- Date logging: each deletion shows the item's timestamp
- No pre-scroll: deletes visible items immediately, scrolls on demand
- Replies from replies tab: no thread navigation needed
- Dedup: already-processed SVGs are skipped to prevent infinite loops
v0.3.4
What's new
--newer-than — delete only items newer than a date. Accepts durations (7d, 24h, 2w, 1m, 1y) or ISO dates (2026-06-01, 2026-06-15T12:00:00Z). Can be combined with --older-than.
ISO date support — both --older-than and --newer-than now accept ISO date strings in addition to duration shorthand.
Date logging — each deletion now shows the post/reply's timestamp:
OK deleted reply 1 (2026-06-13T13:09:14.000Z)
v0.3.3
What's fixed
Replies loop could delete the same item repeatedly. After deleting a reply on the replies tab, Threads keeps the DOM element in place. Without tracking, the next iteration finds the same More button and tries to delete an already-deleted item — which wastes time or loops forever.
Fix: each More SVG gets \data-oc-processed\ before the delete attempt. The JS selector skips SVGs with that attribute, so already-processed items are never candidate for deletion again.
Also simplifies \delete_replies: deletes directly on the replies tab page — no navigating into individual threads.
v0.3.2
Replies are now deleted directly from the replies tab (@username/replies/) — no navigating into individual threads and scrolling through comments. Each reply has its own More button right on the replies page.
v0.3.1
What's changed
CLI
- *--target\ / -t* replaces --include-replies: choose \posts\ (default),
eplies, or \�oth.
Performance
- No more upfront mega-scroll. Deletes the first visible item immediately, scrolls on demand only when no more items are found. Previously it scrolled 18 times before starting, which was wasteful for small --max\ or --older-than\ runs.
Replies fix
- The replies page now scrolls within each thread (up to 5×) to find your reply among other comments. Before, replies buried deep in a thread were missed.
Upgrading
Replace --include-replies\ with --target both\ or --target replies.
v0.3.0
What's new
- Standalone exe: hreads-cleaner.exe — no Python needed. Download from assets below.
- Browser automation works reliably: fixed menu/dialog click targeting, silent-false-positive fallthrough, Windows console encoding.
- Cleaner project: removed unused source files, proper .gitignore. Run hreads-cleaner install-browser first if using the exe.
Usage
\
threads-cleaner browser-login # log in once
threads-cleaner browser-delete # delete posts
threads-cleaner install-browser # if using the exe
\\
Assets
- \ hreads-cleaner.exe\ — standalone Windows executable (70 MB, ~250 MB extracted)
- \ hreads_cleaner-0.3.0-py3-none-any.whl\ — pip-installable wheel