{"id":39884301,"url":"https://github.com/taylorwilsdon/reddacted","last_synced_at":"2026-01-18T14:35:22.208Z","repository":{"id":276887342,"uuid":"930627946","full_name":"taylorwilsdon/reddacted","owner":"taylorwilsdon","description":"reddacted lets you analyze \u0026 sanitize your online footprint using LLMs, PII detection \u0026 sentiment analysis to identify anything that might reveal personal info you may not want correlated with your anonymous profile","archived":false,"fork":false,"pushed_at":"2025-07-26T15:27:59.000Z","size":698,"stargazers_count":108,"open_issues_count":0,"forks_count":10,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-08-29T01:36:41.841Z","etag":null,"topics":["privacy-protection","privacy-tools","reddact","reddacted","reddit","reddit-api","security","security-auditing"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/taylorwilsdon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-02-11T00:07:50.000Z","updated_at":"2025-08-22T08:09:01.000Z","dependencies_parsed_at":null,"dependency_job_id":"675f154e-7e47-4bd4-82d9-edf81f7bee93","html_url":"https://github.com/taylorwilsdon/reddacted","commit_stats":null,"previous_names":["taylorwilsdon/reddacted"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/taylorwilsdon/reddacted","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taylorwilsdon%2Freddacted","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taylorwilsdon%2Freddacted/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taylorwilsdon%2Freddacted/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taylorwilsdon%2Freddacted/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/taylorwilsdon","download_url":"https://codeload.github.com/taylorwilsdon/reddacted/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taylorwilsdon%2Freddacted/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28537787,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T13:04:05.990Z","status":"ssl_error","status_checked_at":"2026-01-18T13:01:44.092Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["privacy-protection","privacy-tools","reddact","reddacted","reddit","reddit-api","security","security-auditing"],"created_at":"2026-01-18T14:35:22.121Z","updated_at":"2026-01-18T14:35:22.177Z","avatar_url":"https://github.com/taylorwilsdon.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🛡️ reddacted\n\n\u003cdiv align=\"center\"\u003e\n\n### AI-Powered Reddit Privacy Suite\n\n[![Privacy Shield](https://img.shields.io/badge/Privacy-100%25_Client--Side_Processing-success)](https://github.com/taylorwilsdon)\n[![AI Analysis](https://img.shields.io/badge/AI-PII_Detection-blueviolet)](https://github.com/taylorwilsdon/reddacted)\n![GitHub License](https://img.shields.io/github/license/taylorwilsdon/reddacted)\n![PyPI - Version](https://img.shields.io/pypi/v/reddacted)\n[![PyPI Downloads](https://static.pepy.tech/badge/reddacted)](https://pepy.tech/projects/reddacted)\n\n\u003cp\u003e\u003ci\u003eLocal LLM powered, highly performant privacy analysis leveraging AI, sentiment analysis \u0026 PII detection\u003cbr\u003eto provide insights into your true privacy with bulk remediation\u003c/i\u003e\u003c/p\u003e\n\n\u003cp\u003e\u003ci\u003eFor aging engineers who want to protect their future political careers\u003c/i\u003e 🏛️\u003c/p\u003e\n\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg width=\"800\" alt=\"reddacted demo\" src=\"https://github.com/user-attachments/assets/934113f1-4a38-4985-935c-b247688ccac8\"\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cvideo width=\"800\" src=\"https://github.com/user-attachments/assets/ef96ac1a-3b3b-4fb6-a912-1328b6a0d83a\"\u003e\u003c/video\u003e\n\n\u003c/div\u003e\n\n## ✨ Key Features\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e🛡️\u003cbr/\u003e\u003cb\u003ePII Detection\u003c/b\u003e\u003c/td\u003e\n    \u003ctd\u003eAnalyze the content of comments to identify anything that might reveal PII that you may not want correlated with your anonymous username\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e🤫\u003cbr/\u003e\u003cb\u003eSentiment Analysis\u003c/b\u003e\u003c/td\u003e\n    \u003ctd\u003eUnderstand the emotional tone of your Reddit history, combined with upvote/downvote counts \u0026 privacy risks to choose which posts to reddact\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e🔒\u003cbr/\u003e\u003cb\u003eZero-Trust Architecture\u003c/b\u003e\u003c/td\u003e\n    \u003ctd\u003eClient-side execution only, no data leaves your machine unless you choose to use a hosted API. Fully compatible with all OpenAI compatible endpoints\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e⚡\u003cbr/\u003e\u003cb\u003eSelf-Host Ready\u003c/b\u003e\u003c/td\u003e\n    \u003ctd\u003eUse any model via Ollama, llama.cpp, vLLM or other platform capable of exposing an OpenAI-compatible endpoint. LiteLLM works just dandy.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e📊\u003cbr/\u003e\u003cb\u003eSmart Cleanup\u003c/b\u003e\u003c/td\u003e\n    \u003ctd\u003ePreserve valuable contributions while removing risky content - clean up your online footprint without blowing away everything\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## 🔐 Can I trust this with my data?\n\n\u003cdiv align=\"center\"\u003e\n\u003cp\u003e\u003ci\u003eYou don't have to - read the code for yourself, only reddit is called\u003c/i\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n```bash\n# Run with local LLM - you'll be guided through configuration\nreddacted user yourusername\n```\n\n- ✅ Client-side execution only, no tracking or external calls\n- ✅ Session-based authentication if you choose - it is optional unless you want to delete\n- ✅ Keep your nonsense comments with lots of upvotes and good vibes without unintentionally doxing yourself\n- ✅ All configuration stored locally in `config.json`\n\n```bash\n# Quick analysis with custom limit\nreddacted user taylorwilsdon --limit 3\n```\n\n## 📋 Table of Contents\n\n- [Key Features](#-key-features)\n- [Can I trust this with my data?](#-can-i-trust-this-with-my-data)\n- [Installation](#-installation)\n- [Usage](#-usage)\n  - [Available Commands](#available-commands)\n  - [Common Arguments](#common-arguments)\n  - [LLM Configuration](#llm-configuration)\n- [How accurate is the PII detection?](#-how-accurate-is-the-pii-detection-really)\n- [FAQ](#-faq)\n- [Troubleshooting](#-troubleshooting)\n- [Authentication](#-authentication)\n- [Advanced Usage](#-advanced-usage)\n- [Development](#-development)\n- [Testing](#-testing)\n- [Common Exceptions](#-common-exceptions)\n- [Support \u0026 Community](#-support--community)\n\n## 📥 Installation\n\n```bash\n# Install from brew (recommended)\nbrew install taylorwilsdon/tap/reddacted\n\n# Install from PyPI (recommended)\npip install reddacted\n\n# Or install from source\ngit clone https://github.com/taylorwilsdon/reddacted.git\ncd reddacted\npip install -e \".[dev]\"  # Installs with development dependencies\n```\n\n## 🚀 Usage\n\nreddacted now features a guided configuration flow that makes setup easy. Simply run any command and you'll be prompted to configure your settings through an interactive interface:\n\n```bash\n# Most basic possible quick start - launches the guided configuration flow\nreddacted user spez\n\n# The guided flow will prompt you to:\n# - Choose between OpenAI or local LLM\n# - Enter your API key or local LLM URL\n# - Select your model from available options\n# - Configure authentication settings\n# - Set analysis preferences (limit, sort, time filter, etc.)\n# - Save your configuration for future use\n```\n\n### Configuration Options\n\nThe interactive configuration flow includes:\n\n- **LLM Settings**: Choose between OpenAI API or local LLM endpoint (like Ollama)\n- **Authentication**: Enable Reddit API authentication if needed\n- **Analysis Options**: Set comment limits, sort order, time filters\n- **Output Options**: Configure file output, PII filtering preferences\n- **Advanced Settings**: Text matching patterns, batch sizes for bulk operations\n\nYour configuration is automatically saved to `config.json` for reuse.\n\n### Example Commands\n\nOnce configured, you can run commands like:\n\n```bash\n# Analyze a user's recent comments (uses saved config)\nreddacted user spez\n\n# Analyze a specific subreddit post\nreddacted listing r/privacy abc123\n\n# Bulk comment management\nreddacted delete abc123,def456  # Delete comments\nreddacted update abc123,def456  # Replace with standard redaction message\n```\n\n### Override Configuration\n\nYou can still override saved settings with command-line arguments:\n\n```bash\n# Override the saved limit\nreddacted user spez --limit 50\n\n# Use a different model temporarily\nreddacted user spez --model \"gpt-4-turbo\"\n\n# Enable authentication for this run only\nreddacted user spez --enable-auth\n```\n\n### Available Commands\n\n| Command | Description |\n|---------|-------------|\n| `user` | Analyze a user's comment history |\n| `listing` | Analyze a specific post and its comments |\n| `delete` | Delete comments by their IDs |\n| `update` | Replace comment content with r/reddacted |\n\n### Common Arguments\n\n| Argument | Description |\n|----------|-------------|\n| `--limit N` | Maximum comments to analyze (default: 100, 0 for unlimited) |\n| `--sort` | Sort method: hot, new, controversial, top (default: new) |\n| `--time` | Time filter: all, day, hour, month, week, year (default: all) |\n| `--output-file` | Save detailed analysis to a file |\n| `--enable-auth` | Enable Reddit API authentication |\n| `--disable-pii` | Skip PII detection |\n| `--pii-only` | Show only comments containing PII |\n| `--text-match` | Search for comments containing specific text |\n| `--skip-text` | Skip comments containing specific text pattern |\n| `--batch-size` | Comments per batch for delete/update (default: 10) |\n| `--use-random-string` | Use random UUID instead of standard message when updating comments |\n\n### LLM Configuration\n\nThe guided configuration flow will help you set up your LLM preferences. You can choose between:\n\n1. **Local LLM** (Ollama, vLLM, etc.):\n   - Default endpoint: `http://localhost:11434`\n   - Automatically fetches available models\n   - No API key required\n\n2. **OpenAI API**:\n   - Enter your OpenAI API key\n   - Select from available OpenAI models\n   - Supports custom API base URLs\n\nConfiguration values are saved to `config.json` and can be overridden with command-line flags:\n\n| Flag | Description |\n|------|-------------|\n| `--local-llm URL` | Override local LLM endpoint |\n| `--openai-key KEY` | Override OpenAI API key |\n| `--model NAME` | Override model selection |\n\n\u003cdiv class=\"note\"\u003e\n\u003cb\u003eNote:\u003c/b\u003e Environment variables are also supported:\n\n```bash\nexport OPENAI_API_KEY=\"your-api-key\"\nexport REDDIT_USERNAME=\"your-username\"\nexport REDDIT_PASSWORD=\"your-password\"\nexport REDDIT_CLIENT_ID=\"your-client-id\"\nexport REDDIT_CLIENT_SECRET=\"your-client-secret\"\n```\n\nThese will be automatically loaded if present.\n\u003c/div\u003e\n\n## ❓ How accurate is the PII detection, really?\n\nSurprisingly good. Good enough that I run it against my own stuff in delete mode. It's basically a defense-in-depth approach combining these methods:\n\n\u003cdiv class=\"detection-methods\"\u003e\n  \u003cdiv class=\"method\"\u003e\n    \u003ch3\u003e📊 AI Detection\u003c/h3\u003e\n    \u003cp\u003eDoesn't need a crazy smart model, don't waste your money on r1 or o1.\u003c/p\u003e\n    \u003cul\u003e\n      \u003cli\u003eCheap \u0026 light models like qwen3:8b, gpt-4.1-nano, qwen2.5:7b, Mistral SSmall or gemma3:14b are all plenty\u003c/li\u003e\n      \u003cli\u003eDon't use something too dumb or it will be inconsistent, a 0.5b model will produce unreliable results\u003c/li\u003e\n      \u003cli\u003eWorks fine with cheap models like qwen2.5:3b (potato can run this) and gpt-4o-mini (~15¢ per million tokens), but gets better with 7b and up\u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/div\u003e\n  \n  \u003cdiv class=\"method\"\u003e\n    \u003ch3\u003e🔍 Pattern Matching\u003c/h3\u003e\n    \u003cp\u003e50+ regex rules for common PII formats does a first past sweep for the obvious stuff\u003c/p\u003e\n  \u003c/div\u003e\n  \n  \u003cdiv class=\"method\"\u003e\n    \u003ch3\u003e🧠 Context Analysis\u003c/h3\u003e\n    \u003cp\u003eAre you coming off as a dick? Perhaps that factors into your decision to clean up. Who could say, mine are all smiley faces.\u003c/p\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n## 💡 FAQ\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eQ: How does the AI handle false positives?\u003c/b\u003e\u003c/summary\u003e\n\u003cp\u003eAdjust confidence threshold (default 0.7) per risk tolerance. You're building a repo from source off some random dude's github - don't run this and just delete a bunch of stuff blindly, you're a smart person. Review your results, and if it is doing something crazy, please tell me.\u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eQ: What LLMs are supported?\u003c/b\u003e\u003c/summary\u003e\n\u003cp\u003e\u003cb\u003eLocal:\u003c/b\u003e any model via Ollama, vLLM or other platform capable of exposing an openai-compatible endpoint.\u003cbr\u003e\n\u003cb\u003eCloud:\u003c/b\u003e OpenAI-compatible endpoints\u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eQ: Is my data sent externally?\u003c/b\u003e\u003c/summary\u003e\n\u003cp\u003eIf you choose to use a hosted provider, yes - in cloud mode - local analysis stays fully private.\u003c/p\u003e\n\u003c/details\u003e\n\n## 🔧 Troubleshooting\n\nIf you get \"command not found\" after installation:\n\n1. Check Python scripts directory is in your PATH:\n\n```bash\n# Typical Linux/Mac location\nexport PATH=\"$HOME/.local/bin:$PATH\"\n\n# Typical Windows location\nset PATH=%APPDATA%\\Python\\Python311\\Scripts;%PATH%\n```\n\n2. Verify installation location:\n\n```bash\npip show reddacted\n```\n\n## 🔑 Authentication\n\nBefore running any commands that require authentication, you'll need to set up your Reddit API credentials:\n\n\u003cdiv class=\"auth-steps\"\u003e\n  \u003cdiv class=\"step\"\u003e\n    \u003ch3\u003eStep 1: Create a Reddit Account\u003c/h3\u003e\n    \u003cp\u003eIf you don't have one, sign up at \u003ca href=\"https://www.reddit.com/account/register/\"\u003ehttps://www.reddit.com/account/register/\u003c/a\u003e\u003c/p\u003e\n  \u003c/div\u003e\n  \n  \u003cdiv class=\"step\"\u003e\n    \u003ch3\u003eStep 2: Create a Reddit App\u003c/h3\u003e\n    \u003cul\u003e\n      \u003cli\u003eGo to \u003ca href=\"https://www.reddit.com/prefs/apps\"\u003ehttps://www.reddit.com/prefs/apps\u003c/a\u003e\u003c/li\u003e\n      \u003cli\u003eClick \"are you a developer? create an app...\" at the bottom\u003c/li\u003e\n      \u003cli\u003eChoose \"script\" as the application type\u003c/li\u003e\n      \u003cli\u003eSet \"reddacted\" as both the name and description\u003c/li\u003e\n      \u003cli\u003eUse \"http://localhost:8080\" as the redirect URI\u003c/li\u003e\n      \u003cli\u003eClick \"create app\"\u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/div\u003e\n  \n  \u003cdiv class=\"step\"\u003e\n    \u003ch3\u003eStep 3: Get Your Credentials\u003c/h3\u003e\n    \u003cp\u003eAfter creating the app, note down:\u003c/p\u003e\n    \u003cul\u003e\n      \u003cli\u003eClient ID: The string under \"personal use script\"\u003c/li\u003e\n      \u003cli\u003eClient Secret: The string labeled \"secret\"\u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/div\u003e\n  \n  \u003cdiv class=\"step\"\u003e\n    \u003ch3\u003eStep 4: Set Environment Variables\u003c/h3\u003e\n    \n```bash\nexport REDDIT_USERNAME=your-reddit-username\nexport REDDIT_PASSWORD=your-reddit-password\nexport REDDIT_CLIENT_ID=your-client-id\nexport REDDIT_CLIENT_SECRET=your-client-secret\n```\n  \u003c/div\u003e\n\u003c/div\u003e\n\nThese credentials are also automatically used if all environment variables are present, even without the `--enable-auth` flag.\n\n## 🧙‍♂️ Advanced Usage\n\n### Text Filtering\n\nYou can filter comments using these arguments:\n\n| Argument | Description |\n|----------|-------------|\n| `--text-match \"search phrase\"` | Only analyze comments containing specific text (requires authentication) |\n| `--skip-text \"skip phrase\"` | Skip comments containing specific text pattern |\n\nFor example:\n\n```bash\n# Only analyze comments containing \"python\"\nreddacted user spez --text-match \"python\"\n\n# Skip comments containing \"deleted\"\nreddacted user spez --skip-text \"deleted\"\n\n# Combine both filters\nreddacted user spez --text-match \"python\" --skip-text \"deleted\"\n```\n\n## 👨‍💻 Development\n\nThis project uses [UV](https://github.com/astral-sh/uv) for building and publishing. Here's how to set up your development environment:\n\n1. Create and activate a virtual environment:\n\n```bash\npython -m venv venv\nsource venv/bin/activate  # On Windows: venv\\Scripts\\activate\n```\n\n2. Install UV:\n\n```bash\npip install uv\n```\n\n3. Install in development mode with test dependencies:\n\n```bash\npip install -e \".[dev]\"\n```\n\n4. Build the package:\n\n```bash\nuv build --sdist --wheel\n```\n\n5. Create a new release:\n\n```bash\n./release.sh\n```\n\nThe release script will:\n- Build the package with UV\n- Create and push a git tag\n- Create a GitHub release\n- Update the Homebrew formula\n- Publish to PyPI (optional)\n\nThat's it! The package handles all other dependencies automatically, including NLTK data.\n\n## 🧪 Testing\n\nRun the test suite:\n\n```bash\npytest tests\n```\n\nWant to contribute? Great! Feel free to:\n- Open an Issue\n- Submit a Pull Request\n\n## ⚠️ Common Exceptions\n\n\u003cdiv class=\"exceptions\"\u003e\n  \u003cdiv class=\"exception\"\u003e\n    \u003ch3\u003etoo many requests\u003c/h3\u003e\n    \u003cp\u003eIf you're unauthenticated, reddit has relatively low rate limits for it's API. Either authenticate against your account, or just wait a sec and try again.\u003c/p\u003e\n  \u003c/div\u003e\n  \n  \u003cdiv class=\"exception\"\u003e\n    \u003ch3\u003ethe page you requested does not exist\u003c/h3\u003e\n    \u003cp\u003eSimply a 404, which means that the provided username does not point to a valid page.\u003c/p\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\u003e **Pro Tip**: Always review changes before executing deletions!\n\n## 🌐 Support \u0026 Community\n\n\u003cdiv align=\"center\"\u003e\n  \u003cp\u003eJoin our subreddit: \u003ca href=\"https://reddit.com/r/reddacted\"\u003er/reddacted\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaylorwilsdon%2Freddacted","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftaylorwilsdon%2Freddacted","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaylorwilsdon%2Freddacted/lists"}