Jump to content

Aperture - AI-Powered Recommendations for Emby


Recommended Posts

TheGru
Posted
On 4/2/2026 at 10:32 AM, Iceburnmarko said:

Read through all the comments , first what an excellent plug-in…. One thing I was thinking, could it be possible to add “JustWatch api” into it.  Thinking to capture what ppl watched / like / hate outside of emby.

Unfortunately that api is very expensive

Posted

Aperture v0.7.1 Release Notes

This release introduces Movie Collection Gap Analysis — a new admin tool that compares TMDb movie collections against your library to surface missing titles — plus Seerr request options so you can pick your Radarr/Sonarr server, quality profile, and root folder before submitting a request.

Baseline: follows v0.7.0 (commit 6893d05). Commit range: 6893d05..94337ae (8 commits).


At a glance

Theme What shipped
Gap Analysis Admin page comparing TMDb collections to your library; background scan persists all parts with library + Seerr status; collection-level sort & filter; movie detail modal with in-app Seerr requests
TMDb Collection Cache Persistent tmdb_collection_cache table avoids repeated TMDb API calls for the same collection data
Seerr Request Options Choose Radarr/Sonarr server, root folder, quality profile, and language profile before submitting requests — wired into Discovery, Person Detail, Top Picks, My Requests, and Gap Analysis

Summary for users

  • Gap Analysis is available in left nav menu under Admin → Gap Analysis. Run a scan, and Aperture fetches every TMDb movie collection referenced by your library, then shows which titles you own, which are already in Seerr's pipeline, and which are still missing.
  • Sort collections by most missing, most complete, or name. Filter by minimum missing count with a slider to focus on the biggest gaps.
  • Click any poster to open a detail modal with backdrop, metadata, and a Request via Seerr button — no need to leave Aperture.
  • Request options dialog — when requesting through Seerr from anywhere in Aperture, you now pick the destination server, root folder, and quality profile. Bulk requests (select all missing in a collection, or multi-select across collections) go through the same flow.

🔍 Movie Collection Gap Analysis

What it is

For every movie in your library that belongs to a TMDb collection (e.g. The Dark Knight Collection, Alien Collection), Aperture fetches the full collection and checks which released parts you own, which are in Seerr (requested/processing/available), and which are missing. Collections where all missing parts are already covered by Seerr are hidden entirely.

How it works

  • Background scan (refresh-library-gaps job): fetches TMDb collection data (cached in tmdb_collection_cache), cross-references your library and Seerr, and persists every released part with in_library and seerr_status into gap_analysis_results.
  • Display path is pure SQL — zero Seerr or TMDb HTTP calls at page-load time. Fast even with hundreds of collections.
  • UI groups results into collapsible collection cards with a responsive MoviePoster grid. Status overlays show "In Library", "Requested", "Processing", etc.

Key features

  • Collection-level sort: Most missing, Most complete, Name A–Z.
  • Min-missing slider: hide collections with fewer than N missing titles.
  • Search: filter by title or collection name.
  • Bulk select + request: select individual posters or all missing in a collection, then request via Seerr with your chosen options.
  • Detail modal: click any poster to see the TMDb detail view with backdrop, cast, overview, and request button.

Technical summary

  • Core module: packages/core/src/gap-analysis/index.tsrunLibraryGapAnalysis, getGapCollectionSummaries, listGapResults, getGapCollectionParts (all pure SQL reads).
  • TMDb cache: packages/core/src/tmdb/collection-cache.tsupsertCollectionCache, getCachedCollectionDataBatch, fetchCollectionDataAndCache.
  • API routes: apps/api/src/routes/gap-analysis/index.tsGET /latest, GET /results, GET /collection-parts, POST /refresh, POST /request.
  • Job: refresh-library-gaps registered in jobConfig and wired in the executor.

🎛️ Seerr Request Options

When submitting a request through Seerr, a new RequestSeerrOptionsDialog lets you choose:

  • Server (Radarr or Sonarr instance)
  • Root folder
  • Quality profile
  • Language profile (Sonarr)

The dialog is wired into every request flow: Discovery cards/list items, Person Detail gap rows, Top Picks preview, My Requests, and Gap Analysis. The Seerr provider now exposes listRadarrServers, getRadarrServerDetails, listSonarrServers, getSonarrServerDetails, and batchGetMediaStatus.


🗄️ Database migrations

Run your usual migration command so these apply in order:

Migration Purpose
0106_gap_analysis.sql gap_analysis_runs and gap_analysis_results tables; source column on discovery_requests
0107_tmdb_collection_cache.sql tmdb_collection_cache table for persistent TMDb collection data
0108_gap_results_status.sql in_library and seerr_status columns on gap_analysis_results; wipes prior runs due to schema change

🚀 Update instructions

For Docker users

docker compose pull
docker compose up -d

Database migrations run on startup (or use your usual pnpm db:migrate / deployment process).

Operator checklist

  • Migrate the database — the three new migrations must apply before starting the updated API.
  • TMDb API key must be configured (Admin → Settings) for gap analysis to work.
  • Seerr must be configured and enabled for the request flow. Without Seerr, gap analysis still shows owned vs missing but the request buttons are disabled.
  • Run an analysis — go to Admin → Gap Analysis and click "Run analysis" to populate the initial snapshot. Re-run after syncing new movies.

📋 API quick reference

  • Gap Analysis: GET /api/admin/gap-analysis/latest, GET /api/admin/gap-analysis/results, GET /api/admin/gap-analysis/collection-parts, POST /api/admin/gap-analysis/refresh, POST /api/admin/gap-analysis/request.
  • Seerr services: GET /api/seerr/radarr, GET /api/seerr/radarr/:serverId, GET /api/seerr/sonarr, GET /api/seerr/sonarr/:serverId.
  • Batch status: POST /api/seerr/batch-status.

📋 Full changelog (commits since v0.7.0)

eef6397 feat(seerr): add Radarr/Sonarr request options and batch media status
abea84a feat(tmdb): add persistent collection cache and helper types
952acdb feat(core): add gap analysis engine with pre-computed Seerr status
2f55407 feat(api): add gap analysis REST routes and background job executor
03b275d feat(web): add Gap Analysis admin page with detail modal
12d4676 docs: add gap analysis section to admin guide and API reference
94337ae feat(web): replace row-level sort with collection sort and min-missing filter

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...