Skip to content

Discovery & search

Detailed app behavior for discovery & search.

  • TMDB + Trakt rows: trending, popular movies/TV, in theaters, airing this week, top rated, upcoming, most anticipated; all proxied through the backend so keys stay server-side (poster/backdrop images load straight from the TMDB CDN). Every discovery row except the headline keeps loading as you scroll toward its end: pages are deduplicated by TMDB id (TMDB re-ranks between requests, so adjacent pages overlap), a page the English-only filter emptied is skipped rather than ending the row, and a Trakt title TMDB does not know is dropped because there would be nothing to open. Every discovery row’s heading carries See all, which opens that feed as a full poster grid that keeps loading, with the same availability badges; the headline row’s grid continues whichever feed answered it. The Movies and TV tabs each carry a Browse by genre chip strip, and the grid’s Browse mode (the discover feed) adds a sort control (most popular, newest, oldest, top rated, title) and a filter sheet: genres, a release-year range, a minimum rating, an original language, streaming services in a region (the device’s own country, the US when it has none, changeable in the sheet), keywords (a title must carry every one), and studios (any of them). Keywords and studios are typed and picked from TMDB’s suggestions; a browse link carries their ids, so a shared link names them by number until reopened. An empty grid names the filters it applied, and an unreadable feed shows an error with retry, so absence and blindness never look alike.
  • Module-global search bar: the bar’s search domain follows the active discovery tab: on the Books discovery tab it searches the active Chaptarr library for both books and authors, on the Music discovery tab MusicBrainz for albums, EPs, singles, and artists, enriched from the selected Lidarr library: book and album results render immediately, with authors and artists loading independently below them: and on every other primary surface it is the debounced TMDB multi-search it has always been. An empty, unfocused bar’s placeholder names that context: a book and author search on Books, an album and artist search on Music, the title-and-person search it is on Movies, TV and Releases: and once typing replaces the placeholder, the bar’s prefix badge carries the cue instead: the active discovery tab’s own icon, the same one that tab carries in the drawer and the bottom dock. That badge’s AI sparkle appears only while the bar is actually in AI mode, so a plain title search on an AI-capable server is never marked as an AI one; module pages outside the discovery tabs keep the generic search icon. Secondary work screens hide it to avoid stacking global search above local filters. TMDB results carry requester-vocabulary availability chips (Available / Partial / Requested: never arr jargon), scoped to the user’s default library and kept fresh via WebSocket pings. TV results use the server’s corrected identity and mapped seasons; older servers retain the TMDB-id/title-and-year library match; book results carry their own per-format ownership chip instead (see Owned-aware search), and an author row says what your library holds by them in the same requester vocabulary: or says nothing at all when the record carries no count, rather than reporting a shelf of zero. An author you own opens their library page; an author you don’t own has no such page (that page lists library titles), so tapping them searches for their books instead, landing each one as a requestable row in the same overlay. Author rows resolve to your library by name, not by id: Chaptarr’s author lookup is a pure metadata search whose foreignAuthorId is derived by provider priority, so the same author can report hc: from a fresh search and gr: from your library record: the two ids genuinely cannot be matched. Two library authors sharing a name leave the row unopened and say so rather than guessing which record was meant. If the author lookup fails while the book lookup succeeds, the books still render and the overlay says authors could not be searched, so an unreadable author list never passes for an empty one; if the library’s author list itself cannot be read, every author reads as metadata-only rather than claiming a membership that could not be checked.
  • Search-to-AI hand-off: on the title-and-person search contexts (Movies, TV, Releases), a query that looks like a question (or returns nothing) lights up an AI affordance; everywhere the bar appears, including the Books discovery tab, a floating Ask AI pill that surfaces when you pause on a typed query switches explicitly: sticking until the field empties: and on Books it’s the only route into AI mode, since a book query never reaches the question/empty-result heuristic; sending opens the dedicated assistant with the prompt already in flight, and a question sent from the Books discovery tab also tells the assistant it came from Books, so a reading question is answered as one: the context rides along on the message the client sends, while the chat bubble still shows exactly what was typed.

View the maintained source for this page.