cat-dev-null/have-u-seen
1
0
Fork
You've already forked have-u-seen
0
A set of scripts for tracking what shows and movies I've watched
  • Python 96.8%
  • Shell 3.2%
2026年05月31日 21:27:25 -06:00
.gitignore Added to gitignore 2026年05月31日 20:40:29 -06:00
add_horror.py Readme and horror 2026年03月11日 00:20:48 -06:00
hys.py Added debug flag 2026年05月31日 20:19:58 -06:00
icon.png Icon v2 2026年05月31日 20:31:26 -06:00
ihs.py Too many gitignored files. 2026年02月20日 03:26:45 -07:00
list.toml More list 2026年05月31日 21:27:25 -06:00
patch_term_image.fish Yar 2026年02月18日 20:00:42 -07:00
README.md Tweaked readme 2026年05月31日 20:37:37 -06:00
sample.json have seen 2026年02月18日 18:54:42 -07:00
screenshot.png Screenshot 2026年03月11日 00:29:28 -06:00
term_image_ghostty.patch Yar 2026年02月18日 20:00:42 -07:00
wsis.py Readme and horror 2026年03月11日 00:20:48 -06:00

have u seen?

This is a set of Python scripts used to track whether or not I've seen a movie or show. Other people might find it fun but it's definitely a pet project for me.

It fulfills a different purpose than sites like Letterboxd or Trakt in that instead of tracking watched dates and, for shows, what episodes I've seen, it merely trackes a yes/no on whether or not I've seen a given title at all.

It pulls titles from IMDB and prompts a simple question: have you seen it? (Though the answer can be a bit more than a simple "y/n"; explained further.)

Screenshot

Below is a screenshot that shows off the image shown when answering the prompt with h (only supported by some terminals)

Usage

The project consists of these files:

  • list.toml - TOML file where answers are stored
  • hys.py - prompts for new titles and updates the TOML file
  • ihs.py - shows stats about the answers in the TOML file
  • wsis.py - suggests things to watch based on the answes in the TOML file
  • sample.json - just an example JSON response from the IMDB API
  • add_horror.py - a one-time script I used for backfilling the horror attribute; keeping around in case it proves useful again

list.toml

Past answers are appended to a TOML file, keyed by the IMDB ID,to avoid asking the same title multiple times. Recording each answer, not just the ones that are "yes", also gives the opportunity to show some neat data.

The standard attributes for an entry are:

  • seen: either true or false
  • title: the title of the movie or show
  • year: the year it was released
  • type: the value from the IMDB API - one of movie, tvMovie, tvSeries, tvMiniSeries

Note that, as a personal project, this tracks some things that I in particular care about, via optional attributes:

  • want_to: true if I have interest in seeing the title
  • seems_familiar: true if I'm not confident in the answer I gave as seen, i.e. the title seems familiar to me
    • Note: for the moment this is a manually added attribute
  • anime: true if the title is an anime, because I'm interested in tracking that
  • horror: true if the title is a horror movie or show, because I'm interested in tracking that
    • Note: this is set by the "genre" received by the API, but may be overridden manually

hys.py

The main have you seen? script. Run to start asking for new titles.

Before the first prompt, it outputs the same summary statistics that ihs.py displays - the counts of types, the number of titles seen, and the total number of titles reviewed.

The prompt will be look something like:

Have you seen 'Psycho Saiyaan' (2026, Series)? (y/N/w/h)

The 4 prompt options given are:

  • n/N: no, I have not seen it; default answer if no input is given
  • y/Y: yes, I have seen it
  • w/W: want to see it (i.e. want_to is set to true); implies n
  • h/H: help prints more information about the title
    • Plot
    • IMDB URL - useful for Ctrl+Clicking (for terminals that support it)
    • Image
      • the actual image will be displayed in the terminal for those that support it, like kitty and ghostty; otherwise a pixelated thumbnail will be shown
      • Note: The library used to render images does not yet support ghostty until this PR is merged;patch_term_image.fish can be used to apply a patch for support in the meantime

There are actually also hidden prompt options:

  • ?: an alias for h (help)
  • c/C: clears the screen and reasks the question
  • a/A: an additional value that is used to mark a title as anime
    • ya/YA marks it as a seen anime
    • na/NA marks it as an unseen anime
    • wa/WA marks it as an unseen want-to-see anime

ihs.py

I have seen; displays statistics about the contents of list.toml

For example:

tvSeries: 191
movie: 507
tvSeriesAnime: 14
tvMiniSeries: 12
movieAnime: 4
tvMovie: 2
tvMiniSeriesAnime: 1
Total: 712
REVIEWED: 7227

wsis.py

What should I see; pulls items from list.toml that have seen = false and chooses a random one, displaying its IMDB link.

Can either pass in "show" or "movie" to narrow the suggestion to that, and can also optionally pass in "anime" and/or "horror".

./wsis.py # Recommends from entire list of unseen titles
./wsis.py show # Recommends an unseen show
./wsis.py anime # Recommends an unseen anime title of any type
./wsis.py movie horror # Recommends an unseen horror movie

Example output:

Wanna see 3 anime titles
You should watch the series 'Chainsaw Man' (2022)!
https://www.imdb.com/title/tt13616990