Skip to content

Library Browsing

Librariarr provides a rich browsing experience for movies, series, and music with extensive filtering, multiple view modes, and detailed metadata panels.

The Search library field in the sidebar (or ⌘K / Ctrl+K from anywhere) opens a quick title search across your entire library. Results are grouped into Movies, Series, Artists, and Albums; selecting one jumps straight to its detail page. For filter-based queries and bulk actions, the palette links to the Query workspace.

The global search palette with results grouped into movies, series, artists, and albums

Browse all movies with poster artwork, metadata, and quality information.

Series are grouped by show identity, not just by title. Drill down into:

  • Seasons — View seasons within a series with episode counts
  • Episodes — Individual episodes with per-episode metadata and quality info

Each of these pages also carries a watch history section listing the individual plays for whatever you are looking at.

Two different shows that happen to share a title — The Office (UK) and The Office (US), or the 1978 and 2004 Battlestar Galactica — appear as separate rows, each with its own seasons, episodes, and watch history. Shows are matched by their series-level TVDB id (TMDB as a fallback, and the show title only when neither id is present), so the same show that exists on more than one server still shows up as a single merged row.

Music is organized by artist. Browse artists, albums, and individual tracks with audio format, quality, and duration details.

Toggle between two view modes:

Mode Description
Table Detailed rows with columns for title, year, resolution, codec, audio, file size, play count, and more. Columns are resizable via drag-to-resize.
Grid Poster cards in a responsive grid. Three size options: Small, Medium, Large .

Both views use smooth scrolling, so libraries of any size load and render without pagination. On desktop, the toolbar — search, sort, view controls, and filters — stays pinned to the top of the page while you scroll; on mobile it scrolls with the page to leave more room for content.

Movie library in card view with poster artwork, quality color strips, and alphabet navigation

A clickable alphabet bar (A–Z plus # for non-alphabetic titles) lets you jump directly to a letter. The bar highlights which letters have matching items.

Over 30 filters are available. Filters can be combined — multiple active filters apply with AND logic.

Filter Type Example
Resolution Multi-select 4K, 1080P, 720P, 480P, SD
Video Codec Multi-select (contains) H.264, H.265, AV1
Dynamic Range Multi-select (exact) SDR, HDR10, HDR10+, Dolby Vision, HLG
Video Bit Depth Multi-select 8-bit, 10-bit
Video Frame Rate Multi-select (exact) 23.976fps, 24fps, 30fps, 60fps
Aspect Ratio Multi-select (exact) 16:9, 4:3, 2.39:1
Scan Type Multi-select (exact) progressive, interlaced
Video Profile Multi-select (contains) Baseline, Main, High
Filter Type Example
Audio Codec Multi-select (contains) AAC, AC3, EAC3, FLAC
Audio Profile Multi-select (exact) Dolby Atmos, Dolby TrueHD, DTS-HD MA, DTS:X
Audio Channels Multi-select 2.0, 5.1, 7.1
Audio Sampling Rate Multi-select 44100, 48000
Filter Type Example
Container Multi-select (contains) MP4, MKV, AVI
File Size Range (GB) 1 GB – 50 GB
Duration Range (minutes) 90 – 180 min
Year Conditions with AND/OR logic ≥ 2020 AND ≤ 2024
Content Rating Multi-select (exact) G, PG, PG-13, R
Studio Multi-select (contains)
Genre Multi-select (exact) Must match all selected genres
Filter Type Example
Search Text (title/summary) Free text search
Play Count Range 0 – 10 plays
Last Played Date range Before/after specific dates
Added Date Date range When item was added to library

When multiple values are selected within a single filter (e.g., Resolution: 4K and 1080P), they’re combined with OR logic — items matching either value are shown. When multiple different filters are active, they combine with AND logic.

Sort by any of these fields in ascending or descending order:

  • Title
  • Year
  • Rating
  • File Size
  • Play Count
  • Last Played
  • Date Added

Click any item to open a slide-out detail panel showing:

  • Poster and artwork
  • Summary/description
  • Full metadata: title, year, ratings (critic, audience, user), directors, writers, cast, studio, genres, countries
  • Video details: codec, resolution, bit depth, profile, frame rate, color info, aspect ratio, scan type
  • Audio details: codec, channels, profile, bit rate, sampling rate, languages (for each audio stream)
  • Subtitle streams: language, format, forced/default flags
  • File info: size, container, path, duration, optimized for streaming flag
  • Stream list: All video, audio, and subtitle streams with detailed info

Depending on configuration:

  • Open in Plex/Jellyfin/Emby — Direct link to the item on your server
  • View in Radarr/Sonarr — Link to the item in your *arr instance (requires integration)

When browsing with multiple servers connected:

  • Items are deduplicated by default — only the preferred copy is shown
  • An indicator shows which servers have each item
  • Use the server dropdown in the navigation to filter by a specific server

View detailed, per-play watch history across all your media servers. Each row represents an individual play event, showing who watched what, when, and on which device.

Every detail page shows its own watch history, so you can see who has been watching something without leaving it for the main history page:

Page Shows
Series Every play of every episode in the series, newest first — with the user, the date and time, and which episode
Season The same, narrowed to episodes in that season
Episode Every play of that one episode — the episode it belongs to, the user, the date and time, and the device — shown as the Watch History card beside the file and playback details
Movie Every play of that film — the user, the date and time, and the device — as its Watch History card
Track Every play of that track, as its Listen History card
Detail side panel The same per-play list for whichever item you opened from a library or lifecycle list, without leaving the list

Every user on the server is included — not just the account Librariarr connects with. Plays are read from the server’s full, per-user history, so anyone in your household who watched an episode appears by name.

On the series and season pages every row names the episode that was played and links to it; on an episode’s own page the name is plain text since you are already there. On a movie or track page the rows omit the title entirely — every play is of the thing you are looking at — and lead with the user instead. Each row also names the device or platform where available. Every one of these lists shows five plays per page, so a heavily-watched item stays one card rather than a long scroll. The controls beneath it step a page at a time, jump to the first or last page, and take a page number typed straight into the box — the same controls the main history page uses.

When a show exists on more than one server, plays from every server are listed and each row is tagged with its server name. A play is a real event on the copy that was actually played, so nothing is hidden by deduplication. The series is matched the same way the library groups shows — by series identity (its TVDB/TMDB id, falling back to the title) — so a server that spells the title differently still contributes its plays, and two different shows that share a title never blend their history.

Movie and track pages — and the detail side panel opened from any library or lifecycle list — previously showed a per-user total read live from the server, with no dates and no playback detail; they now show the same per-play list everything else does. These sections read the same stored watch history as the main history page, so they fill in after a watch-history sync (see below). The same per-server limits apply: on Jellyfin and Emby only the most recent play of an item carries a timestamp, so repeat plays are listed as Unknown date and sorted to the bottom. A server whose watch-history source is Tracearr has no such limit, and its rows additionally show how far through the play got, which player was used, and whether it was transcoded.

Watch history data is synced from your media servers in two ways:

  • Automatic — During each scheduled library sync, detailed play events are fetched and stored
  • On-demand — Click the Refresh button on the history page to sync immediately
  • Real-time — With real-time sync on, a play finishing on Plex triggers a refresh that fetches only the plays since the last one stored and appends them, so a finished episode costs one small request rather than a re-import of the whole history. Jellyfin and Emby cannot filter their history by date, so their real-time refresh re-reads the full set like the scheduled sync does.

The Refresh button streams live progress rather than spinning, with a phase for each server it is syncing. How that phase reads depends on the server’s watch-history source: a native server shows a true percentage, because the server hands over its whole history in one response and the total is therefore known before the first row is written, while a Tracearr server shows a running count of plays imported instead — its history API is paginated by cursor and reports no total at any point, so Librariarr shows what it has actually imported rather than inventing a percentage. Leaving the page ends the sync early; a Tracearr import resumes from where it stopped on the next run.

Every server reads its plays from one of two sources, chosen per server under Settings → Media Servers → Watch history source:

Aspect Native server history (default) Tracearr
Where plays come from The server’s own history API A Tracearr instance monitoring that server
Per-play timestamps Plex only — Jellyfin and Emby report the most recent play of an item and nothing before it Every play, on all three server types
Sync behaviour Full refresh on the scheduled sync and on Refresh — existing records are replaced with the server’s current data; the real-time refresh after a play on Plex appends only the new plays Incremental — new and changed plays are appended, resuming from a watermark
Extra detail per play Device and platform (Plex only) Completion %, direct play vs. transcode, player, product, resolution, bitrate, source and stream codecs, subtitle decision
Partial plays Not reported at all Stored and shown, flagged as unwatched

The native source needs no setup and is what a server uses until you map it. Using Tracearr instead needs a Tracearr instance and the per-server source switch; switching in either direction clears that server’s stored history once — the two sources produce incompatible rows — and the next sync repopulates it.

What the native source can report differs by server type:

Data Plex Jellyfin Emby
Username Yes Yes Yes
Watched date Yes (per play) First play only First play only
Device name Yes No No
Platform Yes No No
Play count (per item) Yes Yes Yes

The Play Count and Last Played fields shown on media items in the library views are built from two sources:

  • The server’s native item metadata, read during library sync. This is scoped to the account Librariarr connects with — on Plex it is that account’s own views across every server it has access to, so a brand-new Plex server may show play counts from plays that happened elsewhere under the same account.
  • The Watch History table, which covers plays by every user on the server. After each watch-history sync, these plays are rolled back into Play Count and Last Played.

The two are combined by taking the higher play count and the more recent date, so a play by anyone in your household is reflected — never overwritten by the connected account’s older view. This matters for lifecycle rules: criteria such as Last Played and Series Last Played read these fields, so a series someone else is actively watching will not look untouched.

  • Watch History records — individual play events fetched from the server’s session history. Only includes plays that actually occurred on that specific server.

Partial plays do not count. A server’s native history has no notion of one, but Tracearr reports how far through each play got and marks it watched only once it crosses its completion threshold (85% by default). Plays short of that are stored and listed in the watch-history views, but they are excluded from Play Count and never advance Last Played — someone sampling four minutes of a film is not a viewing, and because both fields only ever move forward, letting one through would mark the item recently watched for good and quietly disarm every rule that reads it. An item with plays in its history but a Play Count of zero was started and never finished.

The history table supports column visibility controls with columns grouped into categories:

Category Columns
Core Title, Type, Year, Server
Playback User, Watched At
Video Resolution, HDR, Video Codec
Audio Audio Codec
File Duration, Size
Device Device Name, Platform (Plex only)
Stream Transcode, Completion, Player, Stream Resolution

The Stream columns default to hidden. They are only populated for a server whose watch-history source is Tracearr, so on a native-history setup they would be an empty block of columns — turn them on from the column controls once a server is linked. Stream Resolution is what was actually delivered to the client and is a separate column from Resolution, which is the file’s own; the two disagree on any transcoded play.

Filter Description
Search Filter by media title
Server Filter by media server
Type Toggle Movie, Series, Music
Users Multi-select by username
Platforms Multi-select by platform (Plex only)

Click any row to open the detail side panel with full metadata for that media item.