As you probably know, I watch a lot of movies and I log all of them on Letterboxd. Unfortunately, Letterboxd (and any other online service) can get to shit at any moment, without warning. Therefore, I like to log my activity in my Obsidian vault as well. I have a nice Movie folder where I store a note for each movie, the dates when I watched it, a rating, a review, and more. You know, the usual stuff.
The advantage of this system is that I have (and I will have) all my history and reviews as local files. If Letterboxd kicks the bucket, I lose nothing. Moreover, it is my data and I can do whatever I want with it. For instance, it is very handy when I need to get images and data for my ChangeLog article via fancy automation.
On the other hand, this double-system has a lot of friction. For years, the process was this:
- Review the movie on Letterboxd
- Create the note in Obsidian (via Templater)
- Download the poster image
- Resize and convert the poster image to AVIF
- Download the movie backdrop (a thing annoying enough that I wrote a ViolentMonkey script for that)
- Copy the review and the movie summary
- Compile the note frontmatter
- Add the viewed date
It is not terrible, but as someone who fights with friction all the time, I would have avoided all that. It is a miracle that I kept doing this for two years and more than 200 movies.
Fortunately, we live in 2026, and all these AI harnesses are pretty good at automating multi-step processes. So, with a lot of delay, I made a Claude Skill (but it works for other harnesses too) that replaces all those steps with 1 click and 5-6 seconds of work.
The Skill
What it does. When I want to import a Letterboxd review in Obsidian I can just call the \letterboxd-import command followed by a Letterboxd diary URL and the hungry ghost in a jar will do the rest: it pulls my star rating and written review, fetches the film’s title, year, director, and synopsis from its main page, grabs the poster and backdrop images straight from Letterboxd’s CDN, converts the poster to AVIF and resizes it, and drops a properly formatted note into the vault. Sometimes, custom posters and custom backdrops cannot be downloaded by the agent (because they are loaded via JavaScript), so I just drop the links into the agent interface and it will happily replace them in my note.
The result looks like this:
| |
The skill can be downloaded here (note that it must be adapted to your vault location and schema).
Why a skill and not a script?
I know the question. The logic underneath is mostly curl and regex, and it is not crazy to imagine a script that does all this. There are some aspects though that make the flexibility of a skill more desirable:
- First, the date watched field is loaded via JS and it requires some shenanigans to get. A skill knows how to do that without a problem.
- Second, as I said, custom posters and custom backdrops are hard to get via
curl. A skill allows me to just tell the machine “replace X with this” and move on. - The skill is more fault tolerant. The structure of the Letterboxd page can change and the skill knows what to do by looking at the page.
Still, I think it would be possible to make a script handling all these edge cases. But I did this to avoid friction, and it was not worth adding another mini-project to my todo list for this. :D


