sail.qar.lol

A shared cache, in front of the slow part

Qar looks a lot of things up. What a title is called, what it looks like, what it is about, what else is worth browsing, which subtitles fit the copy you have. Every install doing that from scratch means the same handful of answers being fetched over and over, and a new install sitting there looking unfinished while it catches up.

Sail is a small cache we run in front of that. It fetches an answer once, keeps it, and hands it to everyone who asks afterwards. Nothing else: it stores no media, and it is not in the path of anything you download. For you it means a fresh install is quick from the first minute. Upstream it means one request instead of a thousand identical ones.

What it does with your data

It does not know who you are.

An install registers itself and gets a random token. There is no account, no email and no password, and nothing to sign in to. What Sail stores against that token is how much of today's allowance it has spent.

Lookups are shared, which is the whole point.

Asking about a title is the same question no matter who asks it, so the answer is cached once and served to everyone after you. That is what makes the cache worth having — and why your lookups are indistinguishable from anyone else's.

It caches, and that is all it does.

Sail fetches public information about titles, holds the answer for a while, and passes it on. It does not host anything, it does not store media, and nothing you download goes anywhere near it.

Recommendations send titles, and only titles.

The one request where your library crosses the wire. Sail receives a list of names, years and whether you watched them — no file paths, nothing about your machine — uses it to work out suggestions, and does not store it.

A subtitle lookup says less than you would expect.

Subtitles are found by a fingerprint taken from the file itself, not by its name. So what crosses the wire is a number and a byte count — nothing that says what you are watching. Everyone with the same copy asks the same question, which is what lets one answer serve all of them.

Downloads have nothing to do with Sail.

Sail answers questions about titles. It does not see, touch, proxy or know about anything you download; that happens on your machine, over your VPN.

The API

Qar talks to this for you. It is written down because a service sitting between your install and the answers it needs should be legible, and because you may want to point something else at it.

POST/v1/instances

Registers an install and hands back a token. No email, no account.

GET/v1/metadata/title/{imdbId}

The full record for a title — description, cast, ratings, episode listings.

GET/v1/metadata/search?q=

Title search, for when you have a name and not an id.

GET/v1/discover/catalogue

The browsable catalogue that fills Discover.

POST/v1/recommendations

Suggestions worked out from a list of titles you already have.

GET/v1/subtitles/search?hash=

Subtitles that fit one exact file, found by the file’s own fingerprint.

GET/v1/subtitles/file/{id}

The subtitle itself, decoded and ready to play.

GET/v1/capabilities

What Sail can answer right now. No token needed.

Everything but /v1/capabilities takes the token as a bearer. Each install gets a daily allowance per category, returned in X-Quota-Remaining.

It is the same program either way

Sail runs the same lookup code a self-hosted Qar runs — one shared package, used by both. There is no feature that exists only if you go through us. Turning it off changes where the answers come from and nothing else, and if you would rather run the cache yourself, that is written down too.

Go fully self-hosted