Open format

Watchlog

wlog/1.0 application/wlog+json

A neutral, durable format to take your shows and movies wherever you want.

Your watches, your ratings, your reviews: they are your data. Watchlog is a simple, readable, documented file that lets you take them out of one service and replay them in another, losing nothing on the way. We designed it to be open on purpose: any tracking app can write and read it.

What makes it smart

Ids everyone understands

Every work carries its external ids (TMDB, IMDb, TheTVDB, plus MyAnimeList / AniList / Kitsu for anime), never an internal number. So any service can resolve the right show or movie.

A real log, even a fuzzy one

Watches are a dated list. A rewatch is simply one more view; "I watched it but I don't remember when" is a null date. Nothing is invented, nothing is lost.

Ratings that keep their scale

A rating carries its value AND its scale: a 4 out of 5 and an 8 out of 10 coexist without distortion. Each consumer normalizes its own way.

Extensible without breaking

Service-specific richness (emotions, per-episode ratings…) lives in an `extensions` space under that service's name. Another reader politely ignores it: the core stays universal.

Simple, cleanly dated

Plain JSON, versioned at the top of the file, with ISO 8601 (UTC) dates. No exotic tooling, it opens in any editor.

What it looks like

A header object (version, generator, profile), a list of works, a list of lists. Here is one item boiled down to the essentials:

{
  "format": "wlog/1.0",
  "generator": { "name": "Seenr", "url": "https://seenr.app" },
  "profile": { "handle": "kevin", "locale": "fr" },
  "items": [
    {
      "type": "show",
      "ids": { "tmdb": 1429, "imdb": "tt1355642", "mal": 5114, "anilist": 5114 },
      "title": "Fullmetal Alchemist: Brotherhood",
      "year": 2009,
      "status": "completed",
      "favorite": true,
      "tags": ["anime", "shonen"],
      "rating": { "value": 10, "scale": 10, "rated_at": "2021-02-01T20:00:00Z" },
      "watches": [
        { "season": 1, "episode": 1, "watched_at": "2021-01-05T21:00:00Z" }
      ],
      "season_ratings":  [ { "season": 1, "value": 9,  "scale": 10 } ],
      "episode_ratings": [ { "season": 1, "episode": 5, "value": 10, "scale": 10 } ],
      "extensions": { "seenr": { "emotions": ["😭"] } }
    }
  ],
  "lists": []
}

The spec

Version
wlog/1.0
Media type
application/wlog+json

For services that want to adopt it

Watchlog is free to use. Everything you need to implement it is here:

  • The JSON schema, to validate a file automatically.
  • A complete example, annotated by the schema.
  • Seenr is a reference implementation: it exports AND imports Watchlog.

Try it right now

Seenr speaks Watchlog fluently. Grab your library as a file, or replay one here.

Watchlog is an open format, published to be reused. The media type is not yet registered with IANA; the version is authoritative.

New version available

A Seenr update was just released. Reload to get it.