Marquee
Turns one item in a media library into Plex-style rows of other items in that same library. Built for self-hosted media servers.
IN: "The Sopranos"
OUT:
Shows like The Sopranos Gomorrah, Boardwalk Empire, The Wire, ZeroZeroZero
More from Tim Van Patten Game of Thrones, Black Mirror, Boardwalk Empire
More with Edie Falco Nurse Jackie, Oz
Shot by Alik Sakharov Game of Thrones, House of Cards
Two halves, both required
A retriever decides what goes in the rows, by joining your library on shared cast, crew and franchise and by embedding similarity. A small fine-tuned model decides which rows are worth showing, their order, and what to call them.
The model never sees item ids — it answers with index references into candidates it was handed, so it cannot invent a title that isn't in your library.
Install
pip install marquee-ai
Plus Ollama to run the model.
Download
hf download KernelMedia/marquee-ai --local-dir marquee
cd marquee && ollama create marquee -f Modelfile
~2.8 GB: the model plus a catalog of ~122,000 films and shows with full cast and crew.
Run
marquee serve --library catalog.jsonl --port 8080
That is the whole setup.
curl -X POST localhost:8080/recommend \
-H 'Content-Type: application/json' \
-d '{"title": "The Sopranos", "row_size": 20}'
Or from the command line:
marquee recommend --library catalog.jsonl --seed "Blade Runner 2049" --row-size 20
marquee person --library catalog.jsonl --name "Roger Deakins"
API
POST /recommend {"seed_id": "myserver-04471", "row_size": 20}
GET /search?q=Scorsese # matches titles AND people
GET /person?name=Roger%20Deakins
GET /health
DELETE /cache # after a library rescan
/search and /person are pure index lookups — no model call, effectively instant.
Only /recommend uses the GPU.
Items carry an owned flag, so a UI can offer a Request button on anything not on the
server. Ambiguous titles return 409 with the candidates rather than guessing —
Godzilla matches three films. Narrow with year and media_type, or write
"Top Gun (1986)" directly.
Use it as a library
The HTTP API is optional. If your server is Python, skip it:
from marquee import Library
from marquee.contract import messages, parse, repair, expand_rows
lib = Library.load("lib.jsonl")
lib.build_embeddings(cache=Path("lib.emb.npz")) # once at startup
request = lib.build_request(seed_id, semantic_k=14, row_size=20)
raw = call_your_llm(messages(request)) # any OpenAI-compatible endpoint
rows = expand_rows(repair(parse(raw), request), request, 20)
Requirements
| VRAM | ~3.5 GB (Q4_K_M). Runs on a 4 GB card, or CPU. |
| RAM | ~2.2 GB for a 120k-title catalog |
| Latency | ~1 s per request on an RTX 3060; cached responses are instant |
Full setup and troubleshooting: SETUP.md
Data
You harvest TMDB yourself with your own free key; no catalog is distributed. TMDB is free for non-commercial use and requires attribution — commercial use needs a written agreement with them.
This product uses the TMDB API but is not endorsed or certified by TMDB.
Licence
Apache-2.0.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file marquee_ai-1.0.3.tar.gz.
File metadata
- Download URL: marquee_ai-1.0.3.tar.gz
- Upload date:
- Size: 31.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1b5857fa32c9e7f92a4b7866c72a0f2810d2d6ef2ee6069dc98aff757b3d0486
|
|
| MD5 |
79f347b31019450723785d8cf2624eb6
|
|
| BLAKE2b-256 |
cf8780d91a5eb7f22f62546294180c6d6618da8137e41230326dd4d6c7908a47
|
File details
Details for the file marquee_ai-1.0.3-py3-none-any.whl.
File metadata
- Download URL: marquee_ai-1.0.3-py3-none-any.whl
- Upload date:
- Size: 33.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
97a7e8eba593d2bee73e3b3076b6fbc3366775cb77b2dbe0a8f235775d7609e1
|
|
| MD5 |
f807dd4297db81c7e153394701a726d8
|
|
| BLAKE2b-256 |
badf839fb7254b6dcfc14f37ed8379ffb7014ead551490ea74012e1c75214855
|