Jump to content

Aperture - AI-Powered Recommendations for Emby


Recommended Posts

beta666
Posted

@Luke

 

Dear Emby Team,

 

We would love to see more features that reflect what users are asking for, such as:

 

• Top 10 Movies

• Top 10 TV Series

• Better categorization by streaming services (Netflix, Prime Video, HBO Max, Disney+, etc.)

 

There are many great ideas in the community.

More open and flexible APIs would help developers build amazing things around Emby.

TheGru
Posted
14 minutes ago, TheGru said:

the issue is none of those have APIs that are publicly available and or free, and I rather not build in anything that relies on scraping, it becomes long term tech debt.

I think I can accomplish this using Mdblists.com and their API, you would need to get your own Key similar to Trakt, TMDb and OMDb integrations in Aperture

TheGru
Posted
21 minutes ago, beta666 said:

@Luke

 

Dear Emby Team,

 

We would love to see more features that reflect what users are asking for, such as:

 

• Top 10 Movies

• Top 10 TV Series

• Better categorization by streaming services (Netflix, Prime Video, HBO Max, Disney+, etc.)

 

There are many great ideas in the community.

More open and flexible APIs would help developers build amazing things around Emby.

Understand Emby has been built by seasoned developers over the course of years.

I am just vibe coding my way through features I have always wanted emby to include to solve my problems, and while I know others may benefit, these features may not be for everyone. I also have the luxury of doing it external to Emby, and have like 4 people currently using Aperture, so if I break something it's not a big deal. 

The devs read these forums and know what people want, it just comes down to priority and resources.

TheGru
Posted (edited)
10 hours ago, akacharos said:

@TheGru,this is just to bump , as my post was pending moderation for some reason and probably you missed it.

Oh I saw it alright, and built it and some other feedback in!

 

Aperture 0.3.3 Release Notes 🎉

MDBList Integration & API Error UX

Hey everyone! I'm excited to release v0.3.3 with some highly requested features, including full MDBList integration for external influence over TOP PICKS when you don't have many users or don't want to use their watch history, and a way to blend both data sets too, as well as a much-improved way to handle API errors to help anyone running in to issue with things like Open AI quotas or Rate limits with OMDb or MDBLists.


🚀 How to Update

Pull the latest image and restart your containers:

docker compose pull
docker compose up -d

Docker Compose Files:

Platform File
Standard docker-compose.yml
Production docker-compose.prod.yml
Synology docker-compose.synology.yml
QNAP docker-compose.qnap.yml
Unraid docker-compose.unraid.yml

New to Aperture? Check out the Getting Started Guide on GitHub.


🌐 MDBList Integration

You can now connect your MDBList.com account to Aperture! This opens up several new capabilities:

Top Picks from Internet Popularity

  • Choose between Local (your Emby users' watch history), MDBList (curated internet lists), or Hybrid (blend of both) as your Top Picks source
  • Search and select from thousands of public MDBList lists like "Top Watched Movies of the Week"
  • Great for smaller households where local watch data might not represent broader popularity

Metadata Enrichment

  • New Letterboxd ratings displayed on movie/series detail pages 📽️
  • MDBList aggregated scores
  • Streaming availability - see where content is also available to stream (Netflix, Prime, etc.) in an "Also Available On" section
  • Additional keywords from MDBList

Setup
Head to Settings → Integrations to add your MDBList API key. Free tier users get 1,000 requests/day. Toggle the "Supporter Tier" option if you have a paid MDBList subscription for higher rate limits.

image.thumb.png.e8b0e703a2f41c237c8378371b5565c9.png

image.thumb.png.223e34600e4b5afeb4ab868dd3ff9d44.png

image.thumb.png.03135c24209802c8928c4022557e8e66.png


⚠️ API Error Alerts

This one's for everyone who's been confused by cryptic error messages! I've completely overhauled how API errors are displayed:

User-Friendly Error Messages

  • Clear explanations of what went wrong (rate limits, billing issues, invalid API keys)
  • Color-coded by severity:

    🔴 Red - Action required (auth/API key issues)

    🟡 Amber - May need attention (rate limits, account limits)

    🔵 Blue - Informational (service outages, will auto-retry)

Actionable Guidance

  • Direct links to fix issues (e.g., OpenAI billing page, API key settings)
  • Reset time display for rate limits ("resets in 3 hours")
  • Dismissible alerts so you can acknowledge and move on

Covers All Integrations

  • OpenAI
  • TMDb
  • Trakt
  • OMDb
  • MDBList

Check the Settings → Integrations tab to see any active API issues.


🎬 Enhanced Detail Pages

Movie and series detail pages now show:

  • Letterboxd rating badge (when available)
  • Streaming providers section showing where else you can watch
  • Languages & Countries extracted from OMDb

image.thumb.png.458eec2f4c3c52297fe2f4d79054f4d1.png


📋 Other Changes

  • New enrich-mdblist job for fetching MDBList metadata (manual trigger in Jobs page)
  • OMDB now extracts spoken languages and production countries
  • Database migration adds support for all new enrichment fields

image.thumb.png.3ab040cf754ed3ec45c6616953e4f507.png


🔄 Post-Update Steps

After updating, the database migration (0067_mdblist_integration.sql) will run automatically on startup.

To populate the new metadata fields:

  • Configure your MDBList API key in Settings → Integrations
  • Run the Enrich MDBList job from the Jobs page

image.png.7e79f6523a5ab652e8a1f597b3f8cf26.png


🙏 Thanks

Thank to you everyone who has messaged here or privately to add features or who have found bugs and who have contributed code directly to the project.

Keep the feedback coming!

 

Edited by TheGru
  • Like 1
TheGru
Posted

Aperture v0.3.4 Release Notes

Hey everyone! 👋

This is a focused update that fixes a frustrating issue several of you have reported with metadata enrichment. Here's what's new:


🔄 Crash-Resilient Metadata Enrichment

The Problem: If your container restarted (or crashed) while metadata enrichment was running, you'd end up in a "limbo state" where:

  • The job thought it was finished
  • Running enrichment again would say "All items enriched - nothing to do"
  • But you could clearly see items that weren't enriched yet
  • There was no way to recover without manually poking the database

This happened because the job progress was only tracked in memory. If the process died, that state was lost, but items that had been enriched were marked as complete in the database—so the job couldn't tell the difference between "finished" and "interrupted."

The Fix: I've added persistent run tracking that survives restarts:

  • A new enrichment_runs table stores the expected vs. actual progress
  • Progress is saved to the database after every batch (not just at the end)
  • On startup, any "running" jobs are automatically detected and marked as "interrupted"
  • The Jobs page now shows a warning banner when an interrupted run is detected

What you'll see:

When Aperture detects an incomplete enrichment run, you'll see an alert like:

⚠️ Metadata Enrichment Interrupted
A previous enrichment run was interrupted (possibly due to a container restart). 847 movies and 124 series still need enrichment. (253 movies and 31 series were completed before interruption.)
Click Resume to continue enrichment, or Dismiss to clear this warning.

  • Resume clears the interrupted state and immediately starts enrichment (it will pick up where it left off)
  • Dismiss just clears the warning if you want to deal with it later

Technical Details

For those curious about the implementation:

  • New migration 0069_enrichment_runs.sql creates the tracking table
  • detectInterruptedEnrichmentRuns() is called on API startup
  • Progress is persisted every batch (100 items) during enrichment
  • Two new API endpoints: GET /api/jobs/enrichment/status and POST /api/jobs/enrichment/clear-interrupted

Upgrade Notes

After updating to v:

  • If you were stuck in a limbo state, you should now see the warning banner on the Jobs page
  • Click Resume to finish your enrichment

Full Changelog

New Features

  • Add persistent enrichment run tracking with enrichment_runs table
  • Detect interrupted enrichment runs on application startup
  • Add warning banner in Jobs UI for interrupted enrichment runs
  • Add Resume and Dismiss actions for interrupted runs

Bug Fixes

  • Fix enrichment "limbo state" where container restart left job unrecoverable
  • Fix inability to resume enrichment after unexpected shutdown

Technical

  • New migration 0069_enrichment_runs.sql
  • New useEnrichmentStatus hook for frontend
  • New API endpoints for enrichment status management

If you've been stuck with incomplete enrichment, this update should get you unstuck. Let me know if you run into any issues! 🍿

 

How to Update

Pull the latest image and restart your containers:

docker compose pull
docker compose up -d

Docker Compose Files:

Platform File
Standard docker-compose.yml
Production docker-compose.prod.yml
Synology docker-compose.synology.yml
QNAP docker-compose.qnap.yml
Unraid docker-compose.unraid.yml

New to Aperture? Check out the Getting Started Guide on GitHub.

GoldSpacer
Posted

I tried the mdblist for top picks and ran into a couple issues: 

1. It looks like it's not pulling any series or movies from mdb list for top picks. I verified I have multiple movies and shows on the lists I selected but when set to mdblist it just says 0 movies and shows found. If I select the hybrid option, it just does movies based on local user watch history. I ran the mdblist enrichment job as well.

2. Aperture is having issues making the libraries for me. When I manually create them it's able to give access to users it looks like though.

10:41:29 PM🚀 Starting job: refresh-top-picks
10:41:29 PM📍 Step 1/8: Checking configuration
10:41:29 PM⚙️ Configuration loaded: 30 day window, 10 movies, 10 series
10:41:29 PM📊 Weights: Viewers 0.5, Plays 0.3, Completion 0.2
10:41:29 PM🎬 Movies outputs: Library
10:41:29 PM📺 Series outputs: Library
10:41:29 PM📍 Step 2/8: Calculating top movies
10:41:29 PM🎬 Calculating top movies based on watch history...
10:41:29 PM🎬 Found 0 popular movies
10:41:29 PM📍 Step 3/8: Calculating top series
10:41:29 PM📺 Calculating top series based on watch history...
10:41:29 PM📺 Found 0 popular series
10:41:29 PM📍 Step 4/8: Writing library files
10:41:29 PM📁 Writing Top Picks Movies library files...
10:41:29 PM✅ Written 0 movie files to /aperture-libraries/top-picks-movies
10:41:29 PM📍 Step 5/8: Writing series library files
10:41:29 PM📁 Writing Top Picks Series library files...
10:41:29 PM✅ Written 0 series to /aperture-libraries/top-picks-series
10:41:29 PM📍 Step 6/8: Managing libraries and triggering refresh
10:41:29 PM🔧 Checking Movies library "Top Picks - Movies"...
10:41:29 PM❌ Failed to ensure Movies library: Emby API error: 400 Bad Request
10:41:29 PM🔧 Checking Series library "Top Picks - Series"...
10:41:29 PM❌ Failed to ensure Series library: Emby API error: 400 Bad Request
10:41:29 PM⚠️ Movies library "Top Picks - Movies" not found in media server
10:41:29 PM⚠️ Series library "Top Picks - Series" not found in media server
10:41:29 PM🔄 Triggering library refresh...
10:41:29 PM📍 Step 7/8: Creating collections and playlists
10:41:29 PM⏭️ Skipping collections and playlists (all disabled)
10:41:29 PM🎬 Top Picks files created (0 movies, 0 series) but library creation failed: Movies library: Emby API error: 400 Bad Request; Series library: Emby API error: 400 Bad Request
10:41:29 PM❌ Job failed: Library creation failed: Movies library: Emby API error: 400 Bad Request; Series library: Emby API error: 400 Bad Request

 

TheGru
Posted
6 hours ago, GoldSpacer said:

I tried the mdblist for top picks and ran into a couple issues: 

1. It looks like it's not pulling any series or movies from mdb list for top picks. I verified I have multiple movies and shows on the lists I selected but when set to mdblist it just says 0 movies and shows found. If I select the hybrid option, it just does movies based on local user watch history. I ran the mdblist enrichment job as well.

2. Aperture is having issues making the libraries for me. When I manually create them it's able to give access to users it looks like though.

10:41:29 PM Starting job: refresh-top-picks
10:41:29 PM Step 1/8: Checking configuration
10:41:29 PM Configuration loaded: 30 day window, 10 movies, 10 series
10:41:29 PM Weights: Viewers 0.5, Plays 0.3, Completion 0.2
10:41:29 PM Movies outputs: Library
10:41:29 PM Series outputs: Library
10:41:29 PM Step 2/8: Calculating top movies
10:41:29 PM Calculating top movies based on watch history...
10:41:29 PM Found 0 popular movies
10:41:29 PM Step 3/8: Calculating top series
10:41:29 PM Calculating top series based on watch history...
10:41:29 PM Found 0 popular series
10:41:29 PM Step 4/8: Writing library files
10:41:29 PM Writing Top Picks Movies library files...
10:41:29 PM Written 0 movie files to /aperture-libraries/top-picks-movies
10:41:29 PM Step 5/8: Writing series library files
10:41:29 PM Writing Top Picks Series library files...
10:41:29 PM Written 0 series to /aperture-libraries/top-picks-series
10:41:29 PM Step 6/8: Managing libraries and triggering refresh
10:41:29 PM Checking Movies library "Top Picks - Movies"...
10:41:29 PM Failed to ensure Movies library: Emby API error: 400 Bad Request
10:41:29 PM Checking Series library "Top Picks - Series"...
10:41:29 PM Failed to ensure Series library: Emby API error: 400 Bad Request
10:41:29 PM Movies library "Top Picks - Movies" not found in media server
10:41:29 PM Series library "Top Picks - Series" not found in media server
10:41:29 PM Triggering library refresh...
10:41:29 PM Step 7/8: Creating collections and playlists
10:41:29 PM Skipping collections and playlists (all disabled)
10:41:29 PM Top Picks files created (0 movies, 0 series) but library creation failed: Movies library: Emby API error: 400 Bad Request; Series library: Emby API error: 400 Bad Request
10:41:29 PM Job failed: Library creation failed: Movies library: Emby API error: 400 Bad Request; Series library: Emby API error: 400 Bad Request

 

So i just ran the top picks job on my system and did not run in to any issues. This one sounds like a write permission issue. I am not sure what your setup looks like but user:root is needed to be able to write, at least in my Unraid configuration.

image.png.e1534a3fc1beb0a16a98d6a9649236ae.png

7:42:52 AM🚀 Starting job: refresh-top-picks  
7:42:52 AM📍 Step 1/8: Checking configuration  
7:42:52 AM⚙️ Configuration loaded: 30 day window, 10 movies, 10 series  
7:42:52 AM📊 Weights: Viewers 0.5, Plays 0.3, Completion 0.2  
7:42:52 AM🎬 Movies outputs: Library  
7:42:52 AM📺 Series outputs: Library  
7:42:52 AM📍 Step 2/8: Calculating top movies  
7:42:52 AM🎬 Calculating top movies based on watch history...  
7:42:52 AM🎬 Found 10 popular movies  
7:42:52 AM 1: Now You See Me: Now You Don't (2025) - 5 viewers  
7:42:52 AM 2: Elf (2003) - 3 viewers  
7:42:52 AM 3: Predator: Badlands (2025) - 3 viewers  
7:42:52 AM ... and 7 more  
7:42:52 AM📍 Step 3/8: Calculating top series  
7:42:52 AM📺 Calculating top series based on watch history...  
7:42:54 AM📺 Found 10 popular series  
7:42:54 AM 1: Family Guy (1999) - 5 viewers  
7:42:54 AM 2: Landman (2024) - 10 viewers  
7:42:54 AM 3: Stranger Things (2016) - 8 viewers  
7:42:54 AM ... and 7 more  
7:42:54 AM📍 Step 4/8: Writing library files  
7:42:54 AM📁 Writing Top Picks Movies library files...  
7:42:55 AM✅ Written 10 movie files to /aperture-libraries/top-picks-movies  
7:42:55 AM📍 Step 5/8: Writing series library files  
7:42:55 AM📁 Writing Top Picks Series library files...  
7:42:56 AM✅ Written 10 series to /aperture-libraries/top-picks-series  
7:42:56 AM📍 Step 6/8: Managing libraries and triggering refresh  
7:42:56 AM🔧 Checking Movies library "Top Picks - Movies"...  
7:42:56 AM✅ Movies library "Top Picks - Movies" already exists  
7:42:56 AM🔧 Checking Series library "Top Picks - Series"...  
7:42:56 AM✅ Series library "Top Picks - Series" already exists  
7:42:56 AM🖼️ Movies library image synced  
7:42:56 AM🖼️ Series library image synced  
7:42:56 AM👥 Granting access to all users...  
7:42:56 AM✅ Permissions updated: 0 users granted access  
7:42:56 AM ℹ️ 40 users already had access  
7:42:56 AM🔄 Triggering library refresh...  
7:42:56 AM🔄 Movies library refresh triggered, waiting for scan...  
7:42:56 AM🔄 Series library refresh triggered, waiting for scan...  
7:42:56 AM📍 Step 7/8: Creating collections and playlists  
7:42:56 AM⏭️ Skipping collections and playlists (all disabled)  
7:42:56 AM✅ Job completed in 4.0s

I will try and debug the MDBlist system, that was a rapid fire build last night before bed, so thanks for the feedback.

tcx4c70
Posted
1 hour ago, TheGru said:

So i just ran the top picks job on my system and did not run in to any issues. This one sounds like a write permission issue. I am not sure what your setup looks like but user:root is needed to be able to write, at least in my Unraid configuration.

image.png.e1534a3fc1beb0a16a98d6a9649236ae.png

7:42:52 AM Starting job: refresh-top-picks  
7:42:52 AM Step 1/8: Checking configuration  
7:42:52 AM Configuration loaded: 30 day window, 10 movies, 10 series  
7:42:52 AM Weights: Viewers 0.5, Plays 0.3, Completion 0.2  
7:42:52 AM Movies outputs: Library  
7:42:52 AM Series outputs: Library  
7:42:52 AM Step 2/8: Calculating top movies  
7:42:52 AM Calculating top movies based on watch history...  
7:42:52 AM Found 10 popular movies  
7:42:52 AM 1: Now You See Me: Now You Don't (2025) - 5 viewers  
7:42:52 AM 2: Elf (2003) - 3 viewers  
7:42:52 AM 3: Predator: Badlands (2025) - 3 viewers  
7:42:52 AM ... and 7 more  
7:42:52 AM Step 3/8: Calculating top series  
7:42:52 AM Calculating top series based on watch history...  
7:42:54 AM Found 10 popular series  
7:42:54 AM 1: Family Guy (1999) - 5 viewers  
7:42:54 AM 2: Landman (2024) - 10 viewers  
7:42:54 AM 3: Stranger Things (2016) - 8 viewers  
7:42:54 AM ... and 7 more  
7:42:54 AM Step 4/8: Writing library files  
7:42:54 AM Writing Top Picks Movies library files...  
7:42:55 AM Written 10 movie files to /aperture-libraries/top-picks-movies  
7:42:55 AM Step 5/8: Writing series library files  
7:42:55 AM Writing Top Picks Series library files...  
7:42:56 AM Written 10 series to /aperture-libraries/top-picks-series  
7:42:56 AM Step 6/8: Managing libraries and triggering refresh  
7:42:56 AM Checking Movies library "Top Picks - Movies"...  
7:42:56 AM Movies library "Top Picks - Movies" already exists  
7:42:56 AM Checking Series library "Top Picks - Series"...  
7:42:56 AM Series library "Top Picks - Series" already exists  
7:42:56 AM Movies library image synced  
7:42:56 AM Series library image synced  
7:42:56 AM Granting access to all users...  
7:42:56 AM Permissions updated: 0 users granted access  
7:42:56 AM  40 users already had access  
7:42:56 AM Triggering library refresh...  
7:42:56 AM Movies library refresh triggered, waiting for scan...  
7:42:56 AM Series library refresh triggered, waiting for scan...  
7:42:56 AM Step 7/8: Creating collections and playlists  
7:42:56 AM Skipping collections and playlists (all disabled)  
7:42:56 AM Job completed in 4.0s

I will try and debug the MDBlist system, that was a rapid fire build last night before bed, so thanks for the feedback.

I guess the aperture-libraries fold is not `/mnt/ApertureLibraries/top-picks-series` in GoldSpacer's machine just like mine.

2026-01-1322_26_12.thumb.png.42431a330513ecc33f34391d648f792e.png

 

From the code, it will read `media_server_libraries_path` (default: `/mnt/ApertureLibraries/`) from DB then send it to emby as path prefix of libraries. There is a setup api endpoint `/api/setup/output-config` but I don't find any caller from frontend.

TheGru
Posted (edited)
10 minutes ago, tcx4c70 said:

I guess the aperture-libraries fold is not `/mnt/ApertureLibraries/top-picks-series` in GoldSpacer's machine just like mine.

2026-01-1322_26_12.thumb.png.42431a330513ecc33f34391d648f792e.png

 

From the code, it will read `media_server_libraries_path` (default: `/mnt/ApertureLibraries/`) from DB then send it to emby as path prefix of libraries. There is a setup api endpoint `/api/setup/output-config` but I don't find any caller from frontend.

Ok I think I get it now. Working up a potential fix. This should in theory solve many problems. It works on my end because the fallback defaults match my specific environment file locations.

Edited by TheGru
TheGru
Posted

Re: "The specified path does not exist" error

Thanks for reporting this @tcx4c70 - you've identified a gap in the setup process!

What's happening:

When Aperture creates libraries (AI Recommendations, Top Picks, etc.), it writes files to /aperture-libraries/ inside the Aperture container, then tells Emby to create a library pointing to a path like /mnt/ApertureLibraries/top-picks-series.

The problem is that /mnt/ApertureLibraries/ is a hardcoded default. If your Emby container has the aperture-libraries volume mounted at a different path (like /data/ApertureLibraries/ or /volume1/aperture/), Emby can't find it and throws "The specified path does not exist".

The fix (coming in the next release):

I'm adding a File Locations configuration step:

  • In the Setup Wizard - A new step will ask:

    "Where does your media server see Aperture's libraries?" (e.g., /mnt/ApertureLibraries/)

    "Where does your media server see your media files?" (e.g., /mnt/)

  • In Admin Settings - Under Setup → Media Server, a new "File Locations" section will let you update these paths anytime.

How to find the right values:

Open any movie in Emby, go to Media Info, and look at the file path. If it shows /data/Movies/SomeMovie/file.mkv, your media server path prefix is /data/. Your Aperture libraries path would then be wherever you mounted the aperture-libraries volume that Emby can see - something like /data/ApertureLibraries/.

Workaround until the update:

If you need this working now, you can set it directly in the database:

INSERT INTO system_settings (key, value) 
VALUES ('media_server_libraries_path', '/your/actual/path/')
ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value;

I'll post here when the update is released.

  • Like 1
tcx4c70
Posted
16 minutes ago, tcx4c70 said:

I guess the aperture-libraries fold is not `/mnt/ApertureLibraries/top-picks-series` in GoldSpacer's machine just like mine.

2026-01-1322_26_12.thumb.png.42431a330513ecc33f34391d648f792e.png

 

From the code, it will read `media_server_libraries_path` (default: `/mnt/ApertureLibraries/`) from DB then send it to emby as path prefix of libraries. There is a setup api endpoint `/api/setup/output-config` but I don't find any caller from frontend.

After I update the setting manually by running sql cmd and update the permission of the folder for emby user, the task runs successfully.

image.thumb.png.b2f96fc406744bb0ef80c5807f572f53.png

image.thumb.png.0f5f93154092bbade1a20914897151e2.png

TheGru
Posted
4 minutes ago, tcx4c70 said:

After I update the setting manually by running sql cmd and update the permission of the folder for emby user, the task runs successfully.

image.thumb.png.b2f96fc406744bb0ef80c5807f572f53.png

image.thumb.png.0f5f93154092bbade1a20914897151e2.png

Sweet! my fix is going to try and auto-detect the correct paths to make this as easy as possible. Standby!

GoldSpacer
Posted

These are the volumes for my Aperture container: 

      - /mnt/media/ApertureLibraries:/aperture-libraries
      - /mnt/media/Backup:/backups
      - /mnt/media:/media:ro
      - /mnt/unas8pro/media:/media2:ro

/media is where the movies are and /media2 is where the shows are. /aperture-libraries is located within /media as well.

Emby has these:

      - /mnt/media:/media
      - /mnt/unas8pro/media:/media2
      - /mnt/media/ApertureLibraries:/aperture-libraries (this was missing so I added this and tested but it didn't work either)

For the libraries in Emby, I have subfolders /media/movies and /media2/shows. Let me know if I need to change something on my end with the volume mounts.

tcx4c70
Posted
7 minutes ago, GoldSpacer said:

These are the volumes for my Aperture container: 

      - /mnt/media/ApertureLibraries:/aperture-libraries
      - /mnt/media/Backup:/backups
      - /mnt/media:/media:ro
      - /mnt/unas8pro/media:/media2:ro

/media is where the movies are and /media2 is where the shows are. /aperture-libraries is located within /media as well.

Emby has these:

      - /mnt/media:/media
      - /mnt/unas8pro/media:/media2
      - /mnt/media/ApertureLibraries:/aperture-libraries (this was missing so I added this and tested but it didn't work either)

For the libraries in Emby, I have subfolders /media/movies and /media2/shows. Let me know if I need to change something on my end with the volume mounts.

1. mount `/mnt/media/ApertureLibraries` to `/mnt/ApertureLibraries` on Emby's docker compose `- /mnt/media/ApertureLibraries:/mnt/ApertureLibraries`

2. check the user in emby container (I guess it's emby?) has the permission to read the dir `/mnt/ApertureLibraries`

tcx4c70
Posted
2 minutes ago, tcx4c70 said:

1. mount `/mnt/media/ApertureLibraries` to `/mnt/ApertureLibraries` on Emby's docker compose `- /mnt/media/ApertureLibraries:/mnt/ApertureLibraries`

2. check the user in emby container (I guess it's emby?) has the permission to read the dir `/mnt/ApertureLibraries`

If the user ids of aperture (1001) and emby are not equal. I think a easy way to fix it is:

1. map the user id of apperture and emby to the same user on host (e.g. user id 100 on host):

  a. aperture docker compose: `user: 1001:100`

  b. emby docker compose: `user: <emby_user_id>:100`

2. manually fix the permission of existing data via chown: `chown -R 100 <dirs_mount_to_aperture_and_emby>`

TheGru
Posted
12 minutes ago, tcx4c70 said:

If the user ids of aperture (1001) and emby are not equal. I think a easy way to fix it is:

1. map the user id of apperture and emby to the same user on host (e.g. user id 100 on host):

  a. aperture docker compose: `user: 1001:100`

  b. emby docker compose: `user: <emby_user_id>:100`

2. manually fix the permission of existing data via chown: `chown -R 100 <dirs_mount_to_aperture_and_emby>`

@tcx4c70 Good points on permissions!

For permissions:

The key is that both Aperture and your media server containers need to be able to read/write the shared ApertureLibraries folder. The easiest way to ensure this:

  • Match the user/group IDs between your Aperture and Emby/Jellyfin containers
  • Or run both as the same user
  • Or ensure the shared folder has permissions that both users can access

How you configure this depends on your setup (Unraid, Synology, standard Docker, etc.) - just make sure whatever user Aperture runs as can write to the folder, and whatever user your media server runs as can read from it.

The official docker-compose runs Aperture as root to sidestep these issues, but if you're running as a specific user, just match it with your media server's user.

TheGru
Posted

Aperture v0.3.6 Release Notes

This release focuses on making setup easier with auto-detection of file paths and significant enhancements to Top Picks configuration.

🆕 File Locations Configuration with Auto-Detection

This addresses the "path does not exist" errors some users encountered when their Docker volume mounts didn't match Aperture's defaults.

Setup Wizard:

  • New "Paths" step that appears after library selection
  • Auto-Detect Paths button that automatically figures out your configuration by comparing how your media server sees files vs how Aperture sees them
  • Shows detected mapping with sample file paths so you can verify it's correct
  • Manual configuration available if auto-detection doesn't work
  • Skip option if your paths already match defaults (/mnt/ApertureLibraries/, /mnt/)

Admin Settings:

  • New "File Locations" section under Setup → Media Server tab
  • Same auto-detection capability for updating paths after initial setup

image.thumb.png.06eddeb28040893c3f5fd9dcf3bb2bd2.png

🎯 Top Picks Enhancements

Separate Settings for Movies & Series:

  • Configure movies and series independently with their own:

    Data source (Local watch history, MDBList, or Hybrid)

    Minimum unique viewers threshold (for local mode)

    Time window (for local mode)

    Output limits or "use all matches"

    MDBList sort preference

Live Preview:

  • See how many items qualify as you adjust settings
  • Smart recommendations for minimum viewers to target reasonable list sizes
  • Warnings when local lists would be too large (suggests using MDBList instead)

MDBList Sorting:

  • Choose how MDBList items are ranked: MDBList Score, IMDb Rating, TMDb Popularity, Rotten Tomatoes, Metacritic, etc.

Library Match Preview:

  • When using MDBList, see exactly how many items from the list match your library
  • Expandable list shows which titles are missing from your collection

UI Improvements:

  • Movies and Series settings now display side-by-side on larger screens
  • Output configuration cards also side-by-side
  • Cleaner dropdown styling throughout

🐛 Bug Fixes

  • MDBList enrichment - Fixed bulk update failing with COALESCE types text and text[] cannot be matched error
  • Studio logos - Fixed enrichment job that could run forever in certain conditions (thanks @tcx4c70!)
  • Series links - Fixed wrong Emby server link on series pages (thanks @tcx4c70!)
  • MDBList API - Handle new response format from MDBList API (movies/shows arrays instead of flat items)

📦 Update Instructions

docker-compose pull
docker-compose up -d

If you're experiencing path issues, visit Settings → Setup → Media Server and use the new "Auto-Detect Paths" button, or re-run the setup wizard to configure your file locations.

GoldSpacer
Posted (edited)

I changed the emby volume to /mnt/ApertureLibraries and updated to the latest docker and I am now making libraries and pulling the mdblists and getting results for the Top Picks. 

It looks like the sorting may not be working for Top Picks, I created a mdblists based on Rotten Tomatoes popular movies and shows and when sorted by IMDB popular these are the top results. 

image.thumb.png.28a7635d183a512b5ba89c72c9d87026.png

In Emby it shows as:image.thumb.png.0dc5f7ad68ee3f5e412efd1b0a4e9ed5.png

When switching the direction of the popularity filter in mdblist it matches more up with what Emby shows. Is there a way to change the sort direction to see if that fixes this?

Also, for the new Media Server Path Prefix, is there going to be any issue with my shows being on a different path (/media2/) as it only allows one prefix?

 

 

Edited by GoldSpacer
TheGru
Posted (edited)
26 minutes ago, GoldSpacer said:

I changed the emby volume to /mnt/ApertureLibraries and updated to the latest docker and I am now making libraries and pulling the mdblists and getting results for the Top Picks. 

It looks like the sorting may not be working for Top Picks, I created a mdblists based on Rotten Tomatoes popular movies and shows and when sorted by IMDB popular these are the top results. 

image.thumb.png.28a7635d183a512b5ba89c72c9d87026.png

In Emby it shows as:image.thumb.png.0dc5f7ad68ee3f5e412efd1b0a4e9ed5.png

When switching the direction of the popularity filter in mdblist it matches more up with what Emby shows. Is there a way to change the sort direction to see if that fixes this?

Also, for the new Media Server Path Prefix, is there going to be any issue with my shows being on a different path (/media2/) as it only allows one prefix?

 

 

shows being on a different path should not matter, the media paths are picked up by way of the Emby API. Aperture just needs one writable path that your emby can also see to build its folder structure in, and which is used by Aperture automatic library creation through the Emby API.

I will look in to the sorting. 

Edited by TheGru
  • Like 1
TheGru
Posted
28 minutes ago, GoldSpacer said:

I changed the emby volume to /mnt/ApertureLibraries and updated to the latest docker and I am now making libraries and pulling the mdblists and getting results for the Top Picks. 

It looks like the sorting may not be working for Top Picks, I created a mdblists based on Rotten Tomatoes popular movies and shows and when sorted by IMDB popular these are the top results. 

image.thumb.png.28a7635d183a512b5ba89c72c9d87026.png

In Emby it shows as:image.thumb.png.0dc5f7ad68ee3f5e412efd1b0a4e9ed5.png

When switching the direction of the popularity filter in mdblist it matches more up with what Emby shows. Is there a way to change the sort direction to see if that fixes this?

Also, for the new Media Server Path Prefix, is there going to be any issue with my shows being on a different path (/media2/) as it only allows one prefix?

 

 

 

Just trying to replicate, you have the sort set to IMDb Popularity? I have been using MDBList Score which is the Big Green number and it gets sorted Descending from highest value.(that's the default sort order)

image.png.75d7b19a0cefd399b472088b2c5d4f68.png

GoldSpacer
Posted

Yeah, I'm using IMDb Popularity, in mdblist it goes from 1 being the top result down to 100 being the bottom.

TheGru
Posted
1 minute ago, GoldSpacer said:

Yeah, I'm using IMDb Popularity, in mdblist it goes from 1 being the top result down to 100 being the bottom.

I am testing now, looks like a bug, trying to fix it between actual work....

TheGru
Posted
10 minutes ago, TheGru said:

I am testing now, looks like a bug, trying to fix it between actual work....

I found the issue:

The MDBList API does return items in the correct sorted order in the response - we just need to use the array position as the rank, not the item.rank field I assumed was updated based on the sort but no, it is not.

TheGru
Posted (edited)

Input list, sorted by IMDb popular. 

image.thumb.png.92d6bab3b72fab8a3ff50a1cdbc45231.png

Aperture output using imdb popular sort, less the movies I do not have in my library = 

image.thumb.png.48dd0614eeab42f61f18a20104ac5f6a.png

And in Emby

image.thumb.png.08f14f9a51c7c0259709bad76fd59318.png


I believe it works properly now and will roll a build.

Edited by TheGru
TheGru
Posted

Aperture v0.3.7 Release Notes

Hey everyone! 👋

This is a quick patch release that fixes some annoying issues with MDBList Top Picks sorting and API error alerts. Here's what's new:


🔧 MDBList Top Picks Sorting Fix

The Problem: When you selected a sort option like "IMDb Popular" for your Top Picks, the results were completely wrong—you'd get random movies instead of the most popular ones.

What was happening:

  • The MDBList API was returning items in the correct sorted order in the JSON response
  • But each item also has a rank field that represents its original position in the list, NOT its sorted position
  • We were incorrectly using item.rank instead of the array index
  • Also, for popularity metrics (where lower number = more popular), we were using the wrong sort direction

The Fix:

  • Now correctly uses the array position as the sorted rank, ignoring the misleading item.rank field
  • Automatically detects sort type and uses the correct order:

    Popularity sorts (imdbpopular, tmdbpopular😞 Uses ascending order (rank #1 is more popular than #100)

    Rating sorts (imdbrating, rtomatoes, metacritic, etc.): Uses descending order (10/10 is better than 1/10)

Result: Your Top Picks will now correctly match what you see on the MDBList website when sorted by the same option! 🎯


🔔 Auto-Dismiss Service Outage Alerts

The Problem: When an external API (MDBList, TMDb, OMDb, OpenAI) had a temporary outage (500/502/503/504 error), Aperture would show a "Service Unavailable" alert. But even after the service recovered, the alert would persist forever until you manually dismissed it.

The Fix: Outage alerts now auto-dismiss when a successful connection is detected:

  • Testing your API connection in Settings will clear any stale outage alerts
  • Only affects "outage" type errors (temporary server issues)
  • Auth errors and rate limit warnings still require manual acknowledgment (since those need user action)

What this means: No more zombie alerts for services that are working fine! 👻


Full Changelog

Bug Fixes

  • Fix MDBList Top Picks sorting: Use array position as sorted rank, not item.rank (which is original list position)
  • Fix sort order for popularity metrics: Use ascending order for imdbpopular/tmdbpopular (lower = more popular)
  • Auto-dismiss outage errors: Clear "Service Unavailable" alerts when connection test succeeds

Technical

  • Add dismissOutageErrors() function to clear outage-type errors by provider
  • Update testMDBListConnection, testTMDbConnection, testOMDbConnection, testOpenAIConnection to auto-dismiss outage errors
  • Add debug logging to show sorted vs original list positions in MDBList responses

If you've been frustrated with MDBList sorting not working correctly, this update should fix it! Let me know if you run into any issues. 🍿

Update Instructions
docker-compose pull
docker-compose up -d

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...