ahmed-esa153 downloadsDashboard, episode tracker, and watchlist for TV series and movie notes.
An Obsidian plugin: a TrackSeries-style dashboard for TV series (episode checklists, air-date awareness, automatic status) and movies (watchlist grid, ratings, favourites) — reading and writing plain Markdown notes, never owning your data.
Series dashboard — filters, stats, "Next Up" spotlight, poster grid, recently watched feed
![]()
Movies dashboard — filters, stats, favourites, streaming-provider badges on posters
![]()
Series
Movies
Both sections
Both sections search and fetch metadata from the free
TMDb API — you'll need your own
key. TMDb was chosen over OMDb specifically because it indexes translated
titles, so searching in a non-English language (e.g. Arabic) actually finds
results — OMDb only matches a title's single primary (usually English)
listing. Notes still store an IMDb URL in source_url for portability; the
plugin resolves that to TMDb's internal id automatically whenever it needs
to fetch data (via TMDb's find endpoint, cached permanently once resolved).
Also listed on the Obsidian community plugin directory.
Media/Series, Media/Movies).The dashboard only picks up notes under the configured series folder
(default Media/Series/) whose frontmatter includes type: series — any
note missing that field is silently skipped.
---
type: series
title: Example Show
status: watching
rating: 4
favourite: false
total_seasons: 2
source: manual
source_url: https://www.imdb.com/title/tt0000000/
tags: [Drama]
date_added: 2026-09-13
date_completed: ""
mood: ""
image: https://example.com/poster.jpg
---
## Season 1
- [x] E1 — Pilot (watched: 2026-09-13)
- [ ] E2 — Second Episode
## Season 2
- [ ] E1 — Season Opener
## Notes
type (required) — must be exactly series.status — one of want-to-watch / watching / up-to-date / finished
/ abandoned. The first four are auto-managed from watch state; only
abandoned is a pure manual choice the plugin never overwrites.rating — 0–5 or null.source_url — an IMDb title URL. When present, its IMDb id is resolved to
a TMDb id (cached) and used to fetch season/episode air dates and series
metadata from TMDb.image — poster URL, must be an absolute URL.favourite — true/false, toggleable in the detail view.date_completed — auto-stamped when status reaches finished, cleared if
it moves away; editable in the detail view ("Completed on") to correct or
backdate it.mood — a short curated "how did this make you feel" tag, editable in the
detail view: Feel-Good / Uplifting / Intense / Suspenseful / Sad
/ Relaxing / Thought-Provoking / Dark, or empty for unset.## Season N heading; episodes are Markdown
task items directly under it, - [ ] E<number> — <title>. Checking a box
in the plugin's detail view stamps (watched: YYYY-MM-DD) onto the line
and rewrites that exact line in the note — nothing else in the file is
touched.## Notes heading (anywhere in the body) holds freeform text, editable
from the detail view.Notes under the configured movies folder (default Media/Movies/) with
type: movie frontmatter:
---
type: movie
title: "Example Movie"
status: want-to-watch
source: manual
source_url: ""
genre: ["Action", "Drama"]
language: ""
favourite: false
rating: null
tags: ["Action", "Drama"]
date_added: 2026-09-13
date_completed: ""
mood: ""
image: ""
---
# Example Movie
status — one of want-to-watch / watching / watched. Setting it to
watched from the detail view stamps date_completed; editable there
("Completed on") to correct or backdate it.favourite, rating (0–5 or null), genre/tags — same
conventions as series.mood — same short curated tag as series (see above), editable in the
detail view.npm run dev starts esbuild in watch mode — re-copy main.js into the
vault's plugin folder after each change (or symlink it) and reload Obsidian
(Cmd+P → "Reload app without saving") to see changes.
npm test runs the unit test suite (vitest). npm run build type-checks
(tsc -noEmit) before bundling. npm run lint runs the same
eslint-plugin-obsidianmd
rules community.obsidian.md's plugin review checks, so issues surface
locally before a push instead of on the review page. All three must pass
before a commit.
MIT — see LICENSE.