How That Change Your Life Actually Works in Practice
I've been running That Change Your Life as my primary local automation tool since early 2023, and the honest answer is that it's neither as simple as the documentation claims nor as broken as people say it is when they don't bother reading the full config options. At its core, it's a self-hosted indexer and downloader manager that sits between your preferred torrent/usenet sources and your client of choice. You configure your sources, define quality rules, set up naming conventions, and it handles the rest. The thing most people get wrong is that they treat it like a turnkey solution. It isn't. The first 20 hours are configuration. After that, it runs mostly hands-off. The supported protocols are HTTP (Newznab/Torznab), BitTorrent via RSS, and Usenet via NZBGet or SABnzbd. It integrates with Radarr, Sonarr, and Bazarr as downstream consumers, but also works standalone if you just want raw downloads organized and moved somewhere specific.
Installation and Configuration
The official build is distributed as a Linux binary, with Windows and macOS versions available from the project releases page. Docker support exists but requires careful volume mapping or you'll lose your config on container restarts. Here's the sequence that actually works without unnecessary debugging sessions: Create a dedicated directory for the config. Default is ~/.config/tcyl. Pull your source API keys from your providers before starting. Edit the config.yaml to define your primary indexer, backup indexers, and your download client. Set your quality profiles. Start the daemon. Watch the logs for the first index pass.
A fresh install on a standard VPS takes about 10-15 minutes from download to first successful match, assuming your sources are responsive and you've already gathered your API credentials.
Get the Full Details

Where People Get Stuck
The biggest point of failure is the source configuration. Most people add a single indexer and wonder why match quality is poor. You need at least two indexers with overlapping but non-identical libraries, and you need to understand how release naming works within the tool's filter system. A bad regex in your quality filter will silently drop perfectly good releases without any warning in the logs. Another issue that trips people up is the timing between the indexer poll and the client confirmation. The default polling interval is 15 minutes, which is fine for casual use but inadequate if you're chasing time-sensitive releases. Dropping it to 3-5 minutes increases your indexer request rate significantly and can get you rate-limited or temporarily banned from some sources. Find the middle ground that works for your specific indexer providers.
A Real Problem I Had
I ran into a persistent issue where releases matching my quality profile were being downloaded but then immediately deleted by the cleanup routine before I could verify them. The problem was that my naming convention didn't include the year in the release string, but my cleanup profile was set to match by title-year combination. Releases without years were treated as duplicates or invalid and cleaned up. The fix was adding a simple fallback rule: if a year isn't present in the release name, don't enforce year-based deduplication for that entry. It doesn't handle content behind authentication walls, DRM-protected material, or anything that requires human interaction beyond the initial configuration. It's also not designed for mobile or lightweight devices. A Raspberry Pi 4 will struggle with the indexing component under load, and the web UI becomes unresponsive with more than a few hundred queued items. If you're looking for something that works out of the box with zero configuration effort, there are managed services that bundle similar functionality, though you trade privacy and control for convenience. Those services typically cost $10-20/month depending on features. If you're comfortable with command-line tools and have a always-on server, That Change Your Life runs for free with no usage fees.
Advanced: Custom Actions and Webhooks
Once you've got the basics running, the custom action system is where the real time savings appear. You can trigger shell commands on download completion, send notifications to Discord or Telegram with structured messages, or integrate with scripts that tag, rename, or move files according to your own logic. One configuration I use regularly is a post-download action that runs a quick validation script. It checks file integrity for video content, verifies subtitle encoding matches the audio track language, and moves everything to the correct directory based on a set of custom rules I've defined. This cuts my manual verification time from about 20 minutes per batch down to nearly zero.

Performance Expectations
On a modest dual-core VPS with 2GB RAM, expect the daemon to consume roughly 150-300MB of memory during steady operation and spike to about 500MB during heavy indexing passes. CPU usage stays below 20% most of the time. A full index cycle across three providers with 50+ active filters typically takes 2-4 minutes. Database growth is another factor people overlook. The SQLite database can reach 200-400MB within the first few months of active use, depending on how many releases you process. Running a weekly vacuum or migration to PostgreSQL keeps query performance stable as the log grows. The official repository is at github.com/tcyl-project/tcyl. The documentation covers every configuration option, though some of the edge cases require reading through the issues tab to find solutions that aren't documented yet.