Watchlist Notes

approvedunreviewed

by Tony Herrera

Search for movies, TV shows, and anime, save each one as a note with its poster, and keep a library note with a table of everything you watch. TV shows and anime work without an API key.

↓ 26 downloadsUpdated 4d agoMIT

Watchlist Notes

Search for movies, TV shows, and anime, save each one as a note with its poster, and keep a library note with a table of everything you watch. TV shows and anime work without an API key.

Type a title, pick it from the results, and Watchlist Notes creates a note from your template, saves the poster in your vault, and lists the title in a library note with tables of your movies, TV shows, and anime.

Features

  • TV shows and anime without any setup: TV shows come from TVmaze and anime from MyAnimeList (through Tenrai, with Jikan as a backup), with no account or API key.
  • Movies with your own free key: add a TMDB or OMDb key to search movies. TMDB can also stand in for TV shows and anime.
  • Backup sources: if a service fails or finds nothing, Watchlist Notes can try the next one and tells you it did. A service that just failed is skipped for a while, so one that's down doesn't slow every search.
  • Posters saved in your vault: each poster is downloaded once into a posters folder, so your notes show it offline. Titles without a poster still get a note.
  • A library note with three tables: Movies, TV shows, and Anime, each with poster, title, year, director / creator / studio, genre, a link to the note, whether you've watched it (🟩 / πŸŸ₯), and whether you own it or where it streams. It's created the first time you add a title and never overwritten.
  • Watched status: one command marks the open note as watched or unwatched.
  • Anime titles your way: name anime notes by their English, romaji, or Japanese title. Every note keeps all three.
  • Notes from templates: a built-in template for each type, or your own, with the properties you choose.
  • Safe with existing notes: if a title already has a note, you choose to open it, create a copy, or cancel. A copy is named by its year, such as The Office (2001). Nothing is ever overwritten, renamed, or deleted.
  • Clear errors: you get a plain message when you're offline, nothing is found, a service is busy or down, or a key is wrong.

Requires Obsidian 1.13.0 or later. The library tables need the Dataview plugin.

Compared with other plugins

  • Library Notes (same author) does the same for books. The two plugins are separate and work side by side in one vault; their library tables look the same.
  • Media DB covers many more kinds of media (games, music, board games, and others) and lets you choose which APIs to search each time. Watchlist Notes focuses on movies, TV shows, and anime: it needs no key for TV shows and anime, falls back between sources automatically, always saves posters, keeps a library note with Dataview tables and a watched toggle, and never overwrites a note.

Installation

From Community plugins

  1. Open Settings β†’ Community plugins and turn off Restricted mode if it's on.
  2. Select Browse, search for Watchlist Notes, then select Install and Enable.
  3. For the library tables, also install and enable Dataview.

Manually

  1. Download main.js, manifest.json, and styles.css from the latest release.
  2. In your vault folder, create the folder .obsidian/plugins/watchlist-notes/ and copy the three files into it.
  3. Reload Obsidian, then enable Watchlist Notes in Settings β†’ Community plugins.

Usage

Select the clapperboard icon in the ribbon and choose Movie, TV show, or Anime, or open the command palette (Ctrl/Cmd+P) and run one of these commands:

CommandWhat it does
Watchlist Notes: Create movie noteSearch for a movie and create its note. Needs a TMDB or OMDb key.
Watchlist Notes: Create TV show noteSearch for a TV show and create its note.
Watchlist Notes: Create anime noteSearch for an anime series or film and create its note.
Watchlist Notes: Toggle watched statusMark the open note as watched or unwatched. Available when a note in your movies, TV shows, or anime folder is open.
Watchlist Notes: Regenerate library noteRebuild the library tables, or add them to a library note you made yourself. You confirm first.
Watchlist Notes: Refresh TMDB notesDownload the details and posters of notes from TMDB again. See TMDB's 6-month limit.

Adding a title

  1. Choose the type from the ribbon menu, or run its command. If you have text selected in a note, it's used as the search text.
  2. Type the title and press Enter. If you've set up more than one source for that type, choose one with the buttons at the top.
  3. Choose the title from the list. It shows posters, years, and details such as the network or studio, and you can type to filter it.
  4. The note is created in that type's folder and opened, with the poster saved in your posters folder.

If a note with that name already exists (small differences such as capital letters or ’ vs ' don't count), you're asked whether to Open existing, Create copy, or Cancel. The window shows the existing note's year, and a copy is named by its year, such as Dune (2021), so a remake doesn't look like a sequel.

Search tips

  • A year in parentheses puts that year's results first: The Office (2005). Only in parentheses, because a number can be part of a title (Blade Runner 2049).
  • An IMDb ID (tt0903747) or IMDb link finds that movie or TV show directly, without a list.
  • A MyAnimeList link (https://myanimelist.net/anime/5114/…) finds that anime directly.
  • Anime can be searched by English or romaji title.

Which source?

TypeSources, in orderWithout a key
MoviesTMDB, OMDbExplains that a key is needed and how to get one
TV showsTVmaze, TMDB, OMDbTVmaze
AnimeTenrai, Jikan, TMDBTenrai and Jikan

The first source you've set up is the default; you can change it in the settings or with the buttons in the search window. With Try the next source if the default one fails or finds nothing on, the next source is tried when one fails or finds nothing, and the results list says so, such as "20 results from Tenrai (instead of Jikan)". Each note's source property says which service it came from.

Tips

  • Assign hotkeys in Settings β†’ Hotkeys by searching for "Watchlist Notes".
  • To hide the ribbon icon, right-click the ribbon and turn it off. The commands keep working.
  • To change what notes contain, select Create editable templates in the settings and edit the files in Templates/.

Folder structure

Watchlist Notes keeps everything in one library folder, which can be inside another folder (such as Synced Notes/Watch Library):

Watch Library/
β”œβ”€β”€ Watch Library MOC.md   ← the library note, with tables of your movies, TV shows, and anime
β”œβ”€β”€ Movies/                ← one note per movie
β”œβ”€β”€ TV Shows/              ← one note per TV show
β”œβ”€β”€ Anime/                 ← one note per anime series or film (the format property says which)
└── Posters/               ← poster images

All six names are settings. Missing folders are created the first time you add a title. Existing folders and notes are never renamed, moved, or deleted. Notes in subfolders you make yourself, such as Movies/Favorites/, still show in the tables.

Posters are named after the title, its year, and the source's ID, such as Inception (2010) - tmdb-movie-27205.jpg or Severance (2022) - tvmaze-44933.jpg, so two titles never share a poster.

The library note and Dataview

The library note has three tables:

TableColumns
MoviesPoster, Title, Year, Director, Genre, Note, Watched, Owned, Streaming
TV showsPoster, Title, Year, Creator, Genre, Note, Watched, Owned, Streaming
AnimePoster, Title, Year, Format, Studio, Genre, Note, Watched, Owned, Streaming

Owned and Streaming are for you to fill in: set owned to 🟩, πŸŸ₯, or N/A (for example, whether you have it on disc or as a digital copy), and streaming to where you can watch it, such as Netflix.

The tables are Dataview queries, so Dataview must be installed and enabled for them to show. Watchlist Notes doesn't install it for you; if it's missing or turned off, you get a notice explaining what to do, and the settings show its status.

The library note is created with cssclasses: watchlist-notes-moc, which makes that note use the full width of the window so the tables fit. To keep the normal width, remove that class from the note's properties.

The generated Movies table, with the default folders (the TV shows and Anime tables differ only in their folder and middle columns):

```dataview
TABLE WITHOUT ID
  choice(localCover, embed(link(regexreplace(string(localCover), "^!?\[\[|\|.*$|\]\]$|^/", ""), "80")), "") AS Poster,
  default(title, file.name) AS Title,
  year AS Year,
  director AS Director,
  genre AS Genre,
  file.link AS Note,
  choice(watched, "🟩", "πŸŸ₯") AS Watched,
  owned AS Owned,
  streaming AS Streaming
FROM "Watch Library/Movies"
SORT default(title, file.name) ASC
```

The Anime table's Title column follows the Anime title setting, for example default(englishTitle, default(title, file.name)) AS Title. The poster column shows posters stored as a link ("[[Posters/Dune.jpg]]", what Watchlist Notes writes), an embed ("![[Posters/Dune.jpg]]"), or a plain path. If a poster file is missing, the cell is left empty.

Regenerating

Regenerate library note rebuilds the tables from your current settings. It always asks first, and only changes the tables:

  • In a library note that Watchlist Notes created, it replaces the part between its %% watchlist-notes:start %% and %% watchlist-notes:end %% markers.
  • In a library note you made yourself that has one Dataview table, you can Replace that table or Add at the end.
  • Otherwise, the tables are added at the end.

Your properties and any other text stay as they are. Run it after changing a folder or the Anime title setting. If your library note's name differs from the setting only in capital letters, Watchlist Notes uses your note instead of creating a second one.

Settings

SettingDefaultDescription
Library folderWatch LibraryHolds the library note and the other folders. Can be inside another folder.
Movies folderMoviesInside the library folder. One note per movie.
TV shows folderTV ShowsInside the library folder. One note per TV show.
Anime folderAnimeInside the library folder. One note per anime series or film.
Posters folderPostersInside the library folder. Posters are saved here.
Open note after creating itOnOpens the new note in the current tab.

Movies, TV shows, anime, and posters each need their own folder; one can't be the same as, or inside, another.

Library note

SettingDefaultDescription
Library note nameWatch Library MOCThe overview note in the library folder.
DataviewShows whether Dataview is installed and enabled.
Regenerate library noteSame as the command.

Templates

SettingDefaultDescription
Movie template, TV show template, Anime template(empty)A note to use as the template for that type. Leave empty to use the built-in template.
Create editable templatesSaves the built-in templates to Templates/Movie note.md, Templates/TV show note.md, and Templates/Anime note.md (existing files aren't overwritten) and selects them.

Sources

SettingDefaultDescription
Movie / TV show / Anime: default sourceTMDB / TVmaze / TenraiWhere searches go first. Shown once a source for that type is set up.
Try the next source if the default one fails or finds nothingOnUses your other sources for that type, in order. A source that just failed is skipped for 10 minutes.
Hide adult titlesOnLeaves titles rated for adults out of search results. A MyAnimeList link always finds its anime.
Anime titleEnglishWhich title names anime notes and the anime table: English, Romaji, or Japanese. English and Japanese fall back to romaji.
Check sourcesMakes one small request to Tenrai, Jikan, or TVmaze to check that it can be reached.

TMDB

SettingDefaultDescription
Read Access Token or API keyYour TMDB key. It's kept in Obsidian's keychain, not in the plugin's settings file.
Check TMDB keyMakes one small request to TMDB with your key. Shown once a key is set.
Refresh TMDB notesShows how many notes from TMDB are due for a refresh, and refreshes them.
Preferred languageenTwo-letter code for TMDB's titles and descriptions. Leave empty for TMDB's default.

OMDb

SettingDefaultDescription
API keyYour OMDb key, kept in Obsidian's keychain.
Check OMDb keyMakes one small request to OMDb with your key. Shown once a key is set.

Credits lists the services the information comes from, with TMDB's logo and notice.

Getting a TMDB key

TMDB is free for non-commercial use:

  1. Create an account at themoviedb.org. TMDB recommends doing the next steps on a computer; the registration isn't designed for phones.
  2. In your account settings, select API and follow the steps to request an API key, agreeing to TMDB's API terms of use.
  3. Copy the API Read Access Token (the long one). The shorter API Key works too, but the token is better: Watchlist Notes sends it in a request header, while the API key has to be part of each web address.
  4. In Obsidian, open Settings β†’ Watchlist Notes β†’ TMDB β†’ Read Access Token or API key, and add it.
  5. Select Check TMDB key.

Getting an OMDb key

  1. Go to omdbapi.com/apikey.aspx, choose FREE! (1,000 daily limit), and enter your email address.
  2. OMDb emails you the key; follow the instructions in the email. It can take up to an hour, especially with Yahoo and Microsoft addresses.
  3. In Obsidian, open Settings β†’ Watchlist Notes β†’ OMDb β†’ API key, add the key, and select Check OMDb key.

A free key allows 1,000 requests a day; if you reach it, Watchlist Notes says so and you can use TMDB instead.

TMDB's 6-month limit

TMDB's API terms of use don't allow keeping information from TMDB for more than six months. A note made from TMDB, and its poster, keep that information, so Watchlist Notes helps you keep it fresh:

  • A note from TMDB is due five months after its last update (its sourceUpdated property, or created if it has none).
  • When notes are due, a notice says so once per session, and Settings β†’ Watchlist Notes β†’ TMDB shows how many.
  • Refresh TMDB notes asks first, then downloads each note's details and poster again. It replaces the poster file and updates the TMDB properties the note has (such as year, director, cast, genre, score, and description), and sets sourceUpdated. The note's name and title, watched, rating, your other properties, and your text don't change. Nothing is deleted.

Nothing happens on its own. If you stop using TMDB, its terms ask you to delete what came from it; you can find those notes by their source: TMDB property. Notes from TVmaze, MyAnimeList, and OMDb aren't affected.

Templates

A template is a normal note containing {{variables}}. When a note is created, each variable is replaced with information about the title. Variables Watchlist Notes doesn't recognize are left as they are, so syntax from other template plugins keeps working.

When a variable is the whole value of a property, such as cast: {{cast}}, Watchlist Notes formats it so the properties stay valid: lists become list properties, numbers stay numbers, and text is quoted when needed. Don't add your own quotes around these variables.

VariableMoviesTV showsAnimeContents
{{title}}βœ“βœ“βœ“Title; for anime, the one chosen in Anime title
{{year}}βœ“βœ“βœ“Year of release or first air date
{{genre}}βœ“βœ“βœ“Genres (a list property), with the same names across sources, such as Science fiction
{{description}}βœ“βœ“βœ“Description
{{score}}βœ“βœ“βœ“The source's average score, 0–10
{{cast}}βœ“βœ“Up to five cast members (a list property)
{{originalTitle}}βœ“Title in the original language, when it differs
{{releaseDate}}βœ“Release date, such as 2010-07-15
{{director}}βœ“Directors (a list property)
{{runtime}}βœ“βœ“βœ“Minutes (per episode for TV shows and anime)
{{firstAired}}, {{lastAired}}βœ“βœ“First and last air dates
{{status}}βœ“βœ“As the source says it, such as Running or Finished Airing
{{episodes}}βœ“βœ“Number of episodes
{{creator}}βœ“Creators (a list property)
{{network}}βœ“Network or streaming service
{{seasons}}βœ“Number of seasons
{{englishTitle}}, {{romajiTitle}}, {{japaneseTitle}}βœ“The three titles
{{format}}βœ“TV, Movie, OVA, ONA, Special, or TV Special
{{studio}}βœ“Studios (a list property)
{{ageRating}}βœ“Such as PG-13 - Teens 13 or older
{{season}}βœ“Such as Fall 2023
{{imdbId}}βœ“βœ“IMDb ID, when the source knows it
{{mediaType}}βœ“βœ“βœ“Movie, TV show, or Anime
{{coverUrl}}βœ“βœ“βœ“Web address of the poster
{{localCover}}βœ“βœ“βœ“Link to the saved poster, such as [[Watch Library/Posters/Inception (2010) - tmdb-movie-27205.jpg]]; empty when there's no poster
{{localCoverPath}}βœ“βœ“βœ“Path of the saved poster, without the link brackets
{{source}}, {{sourceUrl}}βœ“βœ“βœ“Where the information came from, and the title's page there
{{libraryLink}}βœ“βœ“βœ“Link to the library note, such as [[Watch Library MOC]]
{{date}}, {{time}}βœ“βœ“βœ“When the note was created (YYYY-MM-DD, HH:mm)
{{date:FORMAT}}, {{time:FORMAT}}βœ“βœ“βœ“Same, in a Moment.js format

Not every source provides every field; an unavailable field is left empty.

Built-in templates

The movie template:

---
tags:
  - 🎬Movie
title: {{title}}
originalTitle: {{originalTitle}}
year: {{year}}
releaseDate: {{releaseDate}}
director: {{director}}
cast: {{cast}}
genre: {{genre}}
runtime: {{runtime}}
score: {{score}}
description: {{description}}
cover: {{coverUrl}}
localCover: {{localCover}}
watched: false
rating: N/A
owned: N/A
streaming: N/A
source: {{source}}
sourceUrl: {{sourceUrl}}
created: {{date:YYYY-MM-DD HH:mm:ss}}
link:
  - {{libraryLink}}
---
# Summary:

# Notes:

# Quotes:

The TV show template has tags: πŸ“ΊTVShow, title, year, firstAired, lastAired, status, creator, network, seasons, episodes, cast, genre, score, description, cover, and localCover, followed by the same properties from watched on. The anime template has tags: 🎌Anime, title, englishTitle, romajiTitle, japaneseTitle, format, year, episodes, status, firstAired, lastAired, studio, genre, score, description, cover, and localCover, followed by the same properties. Create editable templates saves all three so you can read and change them.

localCover is stored as a link, so Obsidian updates it if you rename or move the image. watched is the property that Toggle watched status changes and the tables show. rating is for your own rating. link points back to the library note.

Network use and privacy

Watchlist Notes needs an internet connection to search. It sends only what you type in the search window to the services below, the TMDB IDs of notes you refresh to TMDB, and your keys to the services that need them. Its requests identify Watchlist Notes with a link to this repository; the poster thumbnails in the results list are loaded by Obsidian like any image.

ServiceUsed forAccount needed
Tenrai (api.tenrai.org)Searching anime (default anime source)No
Jikan (api.jikan.moe)Searching anime when Tenrai can't be used, or when you choose itNo
MyAnimeList's image service (cdn.myanimelist.net)Anime postersNo
TVmaze (api.tvmaze.com, images from static.tvmaze.com)Searching TV shows (default TV source), and their postersNo
TMDB (api.themoviedb.org, images from image.tmdb.org)Searching movies, and TV shows and anime when you choose it or as a backup; refreshing notes from TMDBYes. A free TMDB account and key. Use is subject to TMDB's API terms.
OMDb (www.omdbapi.com, posters from m.media-amazon.com)Searching movies and TV shows, when you add a keyYes. A free OMDb key (by email).

Adding a title sends a few requests: one or two searches, one for the details (none for anime from Tenrai or Jikan, whose search results are complete), and one for the poster. Requests to each service are spaced out within its published limits (for example, two a second for TVmaze and Tenrai, one a second for Jikan), and a busy service is asked again after a short wait, as the services ask. Searches on TVmaze, Tenrai, and Jikan are remembered for 30 minutes (until Obsidian closes), so repeating one doesn't ask again.

Keys are kept in Obsidian's keychain, not in the plugin's settings file. TMDB's Read Access Token is sent in a request header. OMDb's key, and TMDB's older API key, can only be sent as part of the web address; Watchlist Notes never writes request addresses or keys to the developer console.

Watchlist Notes has no telemetry or analytics, and it doesn't read or send your notes. Each service may log requests under its own policies.

Content and licensing

  • TMDB: This product uses TMDB and the TMDB APIs but is not endorsed, certified, or otherwise approved by TMDB. Use of TMDB is free for non-commercial use under TMDB's API terms, which also limit keeping TMDB data to six months (see TMDB's 6-month limit).
  • TV show information from TVmaze is licensed CC BY-SA. Each note links back to the show's page on TVmaze in sourceUrl.
  • Anime information from MyAnimeList comes through Tenrai and Jikan, unofficial services that are not affiliated with MyAnimeList. Each note links to the anime's MyAnimeList page.
  • Information from OMDb is licensed CC BY-NC 4.0. OMDb is not endorsed by or affiliated with IMDb.
  • Posters belong to their rights holders. Watchlist Notes saves a copy for use in your own notes.

Troubleshooting

MessageWhat to do
Movie search needs a keyAdd a free TMDB or OMDb key; see Getting a TMDB key. TV shows and anime don't need one.
You appear to be offlineCheck your internet connection. TV show and anime searches from the last 30 minutes still work.
No … found for "…"Try fewer words, the IMDb ID, or for anime the romaji title or the MyAnimeList link.
… has received too many requestsWait a few minutes, or turn on Try the next source… in the settings.
… is having problems / took too long to respondThe service is down or slow. Try again later, or choose another source in the search window.
Tenrai (or Jikan) can't reach MyAnimeList right nowMyAnimeList itself is unavailable to that service. Try the other one, or TMDB.
… has no poster for "…"The note was created without a poster; add an image yourself if you like.
TMDB rejected the keyCheck the key in Settings β†’ Watchlist Notes β†’ TMDB. Use the API Read Access Token or the API key from your TMDB account.
OMDb rejected the keyCheck the key in Settings β†’ Watchlist Notes β†’ OMDb, and that you followed the instructions in OMDb's email.
Your OMDb key has used up today's 1,000 requestsTry again tomorrow, or use TMDB.
… notes from TMDB are due for a refreshRun Refresh TMDB notes; see TMDB's 6-month limit.
The tables in "Watch Library MOC" need the Dataview pluginInstall Dataview from Community plugins and enable it.
Template "…" was not foundThe template file was moved or deleted. Choose it again in the settings.
"…" is a file, not a folderA file has the name of one of the library folders. Rename it or choose another folder.

Development

npm install
npm run dev         # rebuild on every change
npm run build       # type-check and production build
npm run lint        # Obsidian's official ESLint rules
npm test            # offline test suite
npm run test:record # make real requests and save new recordings for the tests

If a test-vault/ folder exists in the project, npm run dev copies main.js, manifest.json, and styles.css into test-vault/.obsidian/plugins/watchlist-notes/ after every build. Open test-vault/ as a vault to try changes without touching your real notes; the Hot Reload plugin reloads the plugin automatically. test-vault/ is gitignored.

The code is organized by job: src/core/ (network, files, templates, posters), src/sources/ (one module per service, behind the MediaSource interface in src/sources/types.ts), src/media/ (creating a note and the built-in templates), src/library/ (the library note, watched status, and refreshing notes from TMDB), and src/ui/ (windows). The tests in tests/ run the real code with stand-ins for Obsidian (tests/support/). Answers from TVmaze and Tenrai are recorded from the live services (tests/fixtures/http/); TMDB and OMDb tests use hand-written answers in each service's documented format (tests/support/stand-ins.ts), because TMDB's terms don't allow keeping its data, and the recording tool refuses those services.

Releasing

  1. Run npm version patch (or minor / major). This updates package.json, manifest.json, and versions.json, commits, and creates a tag such as 1.0.1 (no v prefix).
  2. Run git push --follow-tags.
  3. The Release Obsidian plugin workflow builds the plugin and creates a draft GitHub release with main.js, manifest.json, and styles.css. Review it on GitHub, then publish it.

Credits

TMDB

This product uses TMDB and the TMDB APIs but is not endorsed, certified, or otherwise approved by TMDB.

License

MIT. The TMDB logo in assets/tmdb-logo.svg is a trademark of TMDB, used for attribution as TMDB's terms require; it isn't covered by the MIT license.

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.