Credit: Patrick Campanale / How-To Geek Published Aug 16, 2026, 6:30 AM EDT Patrick Campanale has been in the tech space for well over a decade, specializing in PC/gaming news and reviews, as well as maker-focused products to build small businesses. With a start in technology back in 2010 surrounding the Palm/webOS ecosystem, Patrick spent his formative years developing mobile applications as well as blogging for various publications, eventually leading to starting his own website in 2014. After running a technology blog for a few years, he stepped out of that role and into the world of high-end custom PC manufacturing and building, with a focus on YouTube video production and overclocking. Then, six years ago, Patrick joined the 9to5Toys team as an editor/writer/reviewer with over 14,000 articles being published there there, ranging from deals and roundups to in-depth reviews on the latest technology, video games, 3D printers, and more. In his free time, Patrick loves to create projects from wood using various robots and methods, including leveraging the technologies of CNCs and lasers. If Patrick isn't working on a computer or playing video games, he's likely in his 2-car garage workshop creating something unique. In addition to all this, Patrick is also a youth pastor at his local church where he feels God has called him to serve, and he loves every minute of it. Sign in to your How-To Geek account I got tired of movie recommendation engines that I used never working right. They never actually captured why I liked a movie, or how to best recommend a new movie to me. So, that's when I decided to build my own with AI and my Plex watch history, and I wish I had done this sooner. Tautulli is the heart of my Plex history It tells me who watched what and when Credit: TautulliCredit: johnuberbacher/GitHub When I set out to build an AI agent that helped me find movies, I didn't want to reinvent the wheel. So, I turned to my trusty tool that I had already been running for years on my Plex server: Tautulli. I've written about Tautulli before, but if you've never heard of it, it's a simple Plex tracking tool that runs alongside Plex on your server. It integrates with Plex to keep a log of which user watched which title on what device and when it happened. Tautulli also offers more in-depth streaming analytics for better debugging. But, the biggest part of Tautulli that I use is the tracking portion. Tautulli tracks and reports any media watched, and what percentage of that media has been watched. Plus, Tautulli exposes an API that is reachable by tools like Codex, which is exactly how I use it. Building the integration with Codex was simple All I had to do was put the Tautulli API key in a file and away it went As with most Codex extensions or skills I build, I had Codex build the tool itself. I simply described what I wanted it to do, and asked it what it needed from me. Already knowing my homelab setup, Codex simply asked me to provide an API key for Tautulli for it to get started. Now, you should never paste an API key into Codex, Gemini, ChatGPT, Claude, or any other AI platform. While giving it access to the files on your computer is already risky, pasting an API key in plain text into the text box is even riskier. So, I took the API key and placed it in a folder on my computer that Codex has read access to and told it where the file was located. That's not much better than pasting it into the text box, I know, but it is still slightly better. From there, Codex was easily able to scaffold out the recommendation engine that I asked it to build. I can now ask Codex for movie recommendations and it knows my preferences Codex uses hard data to know what I do and don't like Credit: Patrick Campanale / How-To Geek With Codex having access to my Tautulli, I was able to have it start categorizing my watch history and separating my wife's watch history from mine, as well as the rest of my family. I started out by telling Codex some of the recent movies I had watched and what I would rate them, and any information about those movies I liked or disliked. I then gave it information about my standards for movies I watch, like content that would keep me from watching a movie (extremely strong language, certain types of graphic scenes), actors or actresses I really enjoy, and other baseline stuff. Then, I asked it for some movie recommendations. Codex then used my entire Tautulli watch history paired with what I fed it during the initial setup and recommended movies and told me why it recommended those movies. I started watching some of the movies it recommended, and gave it feedback on why a specific movie did or did not work, which helped further refine its recommendation engine. Now, a month or so after setting up the system, it's pretty rock solid. Occasionally Codex will get a recommendation wrong for me. It'll tell me a movie fits, and I'll watch it and either stop part-way through or finish it. The great thing is, since Codex has access to Tautulli, it can see just how far I made it into the movie. I then tell it why that movie wasn't a fit, it updates its recommendation engine, and we're onto the next one. One of my favorite parts about this recommendation engine I've built though is the way I have Codex set up for daily reviews. I have a daily "Morning Brief" scheduled task that runs every day at around 2AM. One of the things Codex does is store what media was consumed the day prior, and then I can give it my feedback on that media if I haven't already. This is an automated system that lets me, in plain words, tell something how much I did or didn't like something and then have media curated based on that. No other media recommendation system I've ever used has been this personal. Most recommendation engines out there are just based on whether you liked a movie or not, and how much you liked it. My Codex recommendation engine looks at why I liked or didn't like the movie, and makes recommendations based on that. As an example, I don't watch movies with nudity in them. So, if I watched movie A and loved it, and most recommendation engines would recommend movie B because it's relatively similar, but it has nudity in it, Codex knows not to recommend it to me. That is why I absolutely love my Codex recommendation engine. Here's the prompt to get your Codex (or Claude) started building your own recommendation engine: I want you to build a private, reusable movie recommendation system using Codex, my Plex viewing history, Tautulli, and my Obsidian vault. The goal is not merely to recommend movies similar to ones I watched. I want the system to understand why I liked or disliked something, remember my personal viewing standards, distinguish my activity from other Plex users, and improve as I provide feedback. My Obsidian vault is located at: [OBSIDIAN VAULT PATH] Use Obsidian as the durable source of truth for my preferences, ratings, viewing standards, and opinions. Do not rely solely on Codex’s conversation memory. Before building anything, inspect my vault structure and ask me for any information you still need. Create a media area in Obsidian containing: - A dashboard or hub for my media system - A human-readable viewing-preferences document - One note per movie or television series when a durable record is needed - A structured view of what I am watching, want to watch, have watched, liked, disliked, paused, or dropped - A document explaining how the Tautulli integration works - A folder-specific AGENTS.md file containing the permanent rules Codex should follow when working with my media library - A daily activity area for recording recently consumed media without storing raw API responses Keep imported viewing information separate from my personal opinions. Tautulli may update playback history, progress, completion, and last-watched information, but it must never overwrite my ratings, preferences, content standards, or written reactions. Create a secure local environment file with blank fields for: TAUTULLI_URL= TAUTULLI_API_KEY= PLEX_USERNAME= I will enter the credentials directly into that file. Never ask me to paste an API key into the conversation. Never print credentials in terminal output, store them in Obsidian, include them in documentation, or commit them to version control. Restrict the credential file so it is readable only by my local user account. Use read-only Tautulli API requests. Do not modify Plex, delete history, or perform any other write operations. Once connected to Tautulli: 1. Resolve the correct Plex user instead of assuming a numeric user ID. 2. Read my Plex libraries and viewing history. 3. Record which movies and shows I completed, partially watched, recently watched, or repeatedly watched. 4. Group television episodes under their respective series. 5. Use stable Plex, IMDb, TMDB, or TVDB identifiers when available. 6. Do not assume that playing or completing something means I liked it. 7. Do not treat a short or partial play as a completed movie. 8. Ask me why I stopped watching something instead of inventing a reason. 9. Preserve the percentage or episode where I stopped so that information can inform future questions. My Plex account may be shared with my spouse or other family members. Ask me which users, devices, titles, or viewing patterns belong to each person. Store viewer attribution separately using values such as me, spouse, together, family member, or unknown. Do not use another person’s viewing history to determine my preferences. When the available information cannot reliably identify the viewer, mark it as unknown instead of guessing. Interview me about my initial preferences, including: - Recent movies and shows I watched - How I would rate each one - What I specifically liked or disliked about them - Favorite genres, actors, actresses, directors, themes, and types of stories - Pacing, tone, or storytelling styles I enjoy - Movies or shows I stopped watching and why - Content I want excluded from recommendations - Content that should be reported as a caution but is not an automatic exclusion - Whether recommendations are for me, my spouse, or something we will watch together Store these answers in my Obsidian viewing-preferences document and update it whenever I provide new information. When I request a recommendation, consider: - What I say I am in the mood for - Titles I explicitly liked or loved - Why I liked those titles - Titles I disliked, paused, or abandoned - Why those titles did not work for me - My preferred genres, actors, themes, tone, pacing, and story elements - My firm content exclusions - Whether the recommendation is for me or another viewer - Whether I have already watched the candidate - Whether the candidate is available in my Plex library - How confident you are that the candidate fits Do not recommend something based on genre similarity alone. A movie can be similar to something I loved and still be a poor recommendation because of its content, tone, pacing, or another quality I have said I dislike. Research promising candidates before recommending them. If I have firm content exclusions, check detailed and credible sources rather than relying only on an age rating or genre label. Clearly distinguish confirmed information from uncertain or conflicting reports. Do not claim that a movie fits my standards when the available evidence is incomplete. For each recommendation, provide: - Title and release year - A concise explanation of why I might enjoy it - The movies, shows, or preferences it was matched against - Whether it is already available in Plex - Whether Tautulli indicates I have watched it - Any relevant content concerns - A confidence level Give me a short ranked list and finish with one clear first choice. Create a feedback loop so the system improves over time. When I watch a recommendation, ask me: - Whether I finished it - How I would rate it - What I liked - What I disliked - Whether any content made it a poor fit - Whether my response changes an existing preference or only applies to that title Preserve my answers in Obsidian. Do not automatically generalize one isolated reaction into a permanent rule unless I confirm that it represents a broader preference. Also create a daily media review workflow suitable for a scheduled Codex Morning Brief. It should: 1. Read the previous day’s Tautulli activity. 2. Separate activity by known viewer when possible. 3. Store a concise daily record in Obsidian. 4. Identify completed and partially watched titles. 5. Ask for my opinion when a title does not already have feedback. 6. Avoid repeatedly asking about activity that has already been reviewed. 7. Never treat unreviewed playback as proof that I liked something. Make all sync operations idempotent so running them more than once does not create duplicate notes or duplicate activity records. Do not store raw Tautulli API responses in my vault. Before creating files or importing a large amount of history, show me the proposed folder structure, note schema, integration boundaries, and daily workflow. Wait for my approval before performing a bulk import. My Codex journey got infinitely better when I integrated it with Obsidian While the foundation of this entire recommendation engine is technically Codex, it's really Obsidian. I run everything in Codex out of my Obsidian vault, with custom AGENTS.md files in each top-level folder. So, whenever I tell Codex a note about a movie or TV show, give it a rating, or anything else, it just stores the information in a document in Obsidian. This allows it to easily recall that information at a later time instead of having to rely on the memory function of Codex itself, which has always been hit or miss for me.
My Plex server now recommends movies better than Netflix, and here's exactly how I built it
Full Article
Original Source
Read the full article at Howtogeek →KhanList aggregates and links to publicly available news content. We do not host full articles from third-party sources. Always verify important information with original sources.