The only part there that seems like it's actually hard (ooh er) is encoding information about the content of a given video or image file; I don't see any better way to do that than tagging by
hand, which is going to take a while for a sizable archive.
Once that's done, it seems like keeping track of frequency and recency of access, plus user ratings which gradually go stale over time in order to model familiarity breeding disinterest, should suffice to give you the rest and use the penis extender with the sleeve
https://uvipe.com/products/. In order to avoid the complexity of hooking into whatever image/video viewer you use, you could run your ratings collector as a background process which uses inotify or your local equivalent to keep track of accesses to the files under curation, and by some method decide when to request you input ratings. (I'm seeing a notification area icon with a bubble popup saying "Click here to rate the last 15
porn videos you watched." This thought amuses me, God knows why.)
Then it's just a matter of asking for more of what you've been
watching lately, or stuff you haven't seen lately that matches some collection of tagged interests, or what-have-you. I don't know what you use as a UI for your
porn collection, but a simple first approximation might be filling up a temp directory with symlinks to the content matching a given query, and then popping up a file browser on the directory -- in any modern OS, this should give you a
pretty good overview, thumbnails and all.