- Python 96.8%
- Shell 3.2%
| .gitignore | Added to gitignore | |
| add_horror.py | Readme and horror | |
| hys.py | Added debug flag | |
| icon.png | Icon v2 | |
| ihs.py | Too many gitignored files. | |
| list.toml | More list | |
| patch_term_image.fish | Yar | |
| README.md | Tweaked readme | |
| sample.json | have seen | |
| screenshot.png | Screenshot | |
| term_image_ghostty.patch | Yar | |
| wsis.py | Readme and horror | |
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 storedhys.py- prompts for new titles and updates the TOML fileihs.py- shows stats about the answers in the TOML filewsis.py- suggests things to watch based on the answes in the TOML filesample.json- just an example JSON response from the IMDB APIadd_horror.py- a one-time script I used for backfilling thehorrorattribute; 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: eithertrueorfalsetitle: the title of the movie or showyear: the year it was releasedtype: the value from the IMDB API - one ofmovie,tvMovie,tvSeries,tvMiniSeries
Note that, as a personal project, this tracks some things that I in particular care about, via optional attributes:
want_to:trueif I have interest in seeing the titleseems_familiar:trueif I'm not confident in the answer I gave asseen, i.e. the title seems familiar to me- Note: for the moment this is a manually added attribute
anime:trueif the title is an anime, because I'm interested in tracking thathorror:trueif 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 giveny/Y: yes, I have seen itw/W: want to see it (i.e.want_tois set totrue); impliesnh/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.fishcan be used to apply a patch for support in the meantime
There are actually also hidden prompt options:
?: an alias forh(help)c/C: clears the screen and reasks the questiona/A: an additional value that is used to mark a title as animeya/YAmarks it as a seen animena/NAmarks it as an unseen animewa/WAmarks 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