Skip to main content

Ryot

@magistr/ryotv2026.10.25.10· MIT· 1d agoBEHAVIORS
01README

Import a film history into a self-hosted Ryot (https://github.com/IgnisDa/ryot) as one generic-JSON import job.

Methods:

  • import_films — a @jamesakeech/letterboxd exportSnapshot plus owned films (TMDB ids, e.g. from @magistr/film-library): watched/rated films get one undated seen entry, ratings become 0–100 (stars × 20), watchlist films go to the Watchlist collection, owned films to Owned. TMDB ids for Letterboxd films are scraped from their film pages (host curl) and cached. Guarded against re-import (Ryot would duplicate seen entries).
  • import_reports — Ryot's import job reports (progress, failed items)

The auth token is a sensitive globalArgument.

02Release Notes

2026.10.25.10

  • Repo-wide republish; no functional change.
03Behaviors1
@magistr/ryotv2026.10.25.10extensions/models/ryot.ts

Global Arguments

ArgumentTypeDescription
baseUrlstringRyot base URL, e.g. https://ryot.aopab.art
authTokenstringAuth token from Ryot Settings → Integrations → Generate auth token
fn import_films(owned?: array, ownedAsSeen?: boolean, dryRun?: boolean, force?: boolean)
Import a Letterboxd export snapshot plus owned films into Ryot as
ArgumentTypeDescription
owned?arrayOwned films with a TMDB movie id (e.g. from @magistr/film-library)
ownedAsSeen?boolean
dryRun?boolean
force?boolean
fn import_reports()
Fetch Ryot's import job reports (progress, success, failed items)

Resources

letterboxdMap(infinite)— Cache of Letterboxd URI → TMDB id, scraped from Letterboxd film
importResult(infinite)— What one import run sent to Ryot, and what it skipped
importReports(infinite)— Ryot's own import job reports (progress, failed items)
04Previous Versions9
2026.10.15.9MIT

2026.10.15.9

Changed

  • Repo-wide maintenance release: version bump to republish the current source. No schema change.
2026.10.15.8MIT

2026.10.15.8

Changed

  • Repo-wide maintenance release: version bump to republish the current source. No schema change.
2026.10.15.6MIT

2026.10.15.6

Changed

  • Repo-wide maintenance release: version bump to republish the current source. No schema change.
2026.10.15.5MIT

2026.10.15.5

Changed

  • Repo-wide maintenance release: version bump to republish the current source. No schema change.
2026.10.15.4MIT

2026.10.15.4

Changed

  • Repo-wide maintenance release: version bump to republish the current source. No schema change.
2026.10.15.3MIT

2026.10.15.3

Changed

  • Repo-wide maintenance release: version bump to republish the current source. No schema change.
2026.10.15.2MIT

2026.10.15.2

Changed

  • Repo-wide maintenance release: version bump to republish the current source. No schema change.
2026.10.15.1MIT

2026.10.15.1

Changed

  • Repo-wide maintenance release: version bump to republish the current source. No schema change.
2026.10.10.1MIT

2026.10.10.1

First release.

  • import_films builds one Ryot generic-JSON CompleteExport from a @jamesakeech/letterboxd export snapshot plus owned films, uploads it to /backend/upload and starts deployImportJob(source: GENERIC_JSON). Watched and rated films get one undated seen entry, ratings become 0–100 (stars × 20), watchlist films go to the Watchlist collection and owned films to Owned. A completed non-dry run blocks later runs unless force is set, because Ryot does not dedupe seen entries.
  • TMDB ids for Letterboxd films are read from each film page with the host curl and cached in letterboxd-tmdb-map.
  • import_reports stores Ryot's import job reports.

Fixed before release

  • Snapshot URIs are checked before they reach curl: only https URLs on letterboxd.com / boxd.it are fetched, and curl runs with --proto =https. A URI such as -o /path or --config=... was passed to curl as an option.
  • An upload response that is not a JSON array of strings is rejected. A bare string response was indexed to its first character and used as the path.
  • Non-JSON 200 responses from the upload and GraphQL endpoints fail with a clear message instead of a raw SyntaxError.
  • The Letterboxd retry loop no longer sleeps after the final attempt.
05Stats
A
100 / 100
Downloads
15
Archive size
9.3 KB
  • Has README or module doc2/2earned
  • README has a code example1/1earned
  • README is substantive1/1earned
  • Most symbols documented1/1earned
  • No slow types (deprecated)1/1earned
  • Dependencies pass trust audit2/2earned
  • Docs keep secrets in a vault1/1earned
  • Has description1/1earned
  • Platform support declared (or universal)2/2earned
  • License2/2earned
  • Verified public repository2/2earned
06Platforms
07Labels