Jump to content

Aperture - AI-Powered Recommendations for Emby


Recommended Posts

graytinc
Posted

@DaMoeksterMy structure is like this 

Architecture Overview

Server A – OpenMediaVault (Linux, Docker)

  • Runs Aperture inside a Docker container

  • Hosts the media storage and exposes it via SMB

  • The media share is bind-mounted into the Aperture container (e.g. /mnt)

  • Aperture generates STRM files inside /mnt/ApertureLibraries

Server B – Windows 10 (Emby)

  • Runs Emby Server natively

  • Accesses the same media via SMB at: \\10.10.10.X\shared\movies

  • Emby reads STRM files and resolves them correctly to source media


Working Behavior

  • STRM playback functions correctly

  • Emby can read/write to the SMB share

  • Aperture correctly scans media and creates necessary Dashboards etc

  • Path translation for media reading is correct


Failure Scenario

When running “Build Aperture Movie Libraries”, Aperture issues an Emby API request:

POST /Library/VirtualFolders paths=/mnt/ApertureLibraries/...

This request fails because:

  • /mnt/ApertureLibraries/... is a Linux container path

  • Emby runs on Windows and only understands Windows filesystem paths

  • Emby cannot resolve or create directories using Linux-style paths

  • Resulting in:

    2026-01-21 20:15:00.069 Info LibraryStructureService-0HNINOE5FF6UA:00000002: http/1.1 POST http://10.10.10.3:8096/Library/VirtualFolders?name=Shows Admin Watches&collectionType=tvshows&paths=/mnt/ApertureLibraries/aperture-watching/Admin_9dce44c8e806446d9a982217b0d229d8&refreshLibrary=true. Source Ip: host10, UserAgent: node 
    2026-01-21 20:15:00.070 Error LibraryStructureService-0HNINOE5FF6UA:00000002: Error processing request
    
DaMoekster
Posted (edited)

My guess (i'm no expert either, certainly now that there's openmediavault involved ;) ) is the following: 

Create two folders:
\\10.10.10.X\shared\ArpetureLibraries\
\\10.10
.10.X\shared\ArpetureBackups\

In the yml add:
- //10.10.10.x/shared/ArpetureLibraries:/aperture-libraries
- //10.10.10.x/shared/ArpetureBackups:/backups

During setup fill in  \\10.10.10.x\shared\ArpetureLibraries where it asks for the Apteture Library Path.

Please note I'm note sure about the mapping in the yml (forward or backward slashes etc) , I needed TheGru's help wiith that myself two weeks ago.

Edited by DaMoekster
graytinc
Posted

Thank you @DaMoekster

The required directories are already defined as bind mounts in the Docker Compose configuration, using the recommended path prefix. Aperture has read/write access to these locations; however, because Emby is running on Windows, Aperture passes Linux container paths when attempting to create libraries via the Emby API. Since these paths are not valid in a Windows environment, Emby fails to process the request and returns an error.

At this stage, it is unclear whether this issue can be fully resolved through adjustments to the Docker Compose (.yml) file alone, and guidance on the appropriate configuration would be appreciated.

PS: I am also evaluating a migration of Emby to Docker in order to simplify path consistency and improve overall integration.

 

 

DaMoekster
Posted (edited)

Okay, maybe I'm wrong but I had this exact discussion with TheGru two weeks ago.
I'm not tech savvy enough to explain clearly what I think is wrong in the way you approach the problem but if you tried my suggestion and it didn't work than somebody else has to chip in.
Good luck!

Edited by DaMoekster
  • Like 1
Brendon
Posted

Seem to be hitting the same issue as a lot of others

4:11:17 am🚀 Starting job: sync-movie-libraries
4:11:17 am📍 Step 1/2: Finding enabled users
4:11:17 am🔍 Finding enabled users...
4:11:17 am👥 Found 1 user(s) enabled for movies
4:11:17 am📍 Step 2/2: Processing STRM files
4:11:17 am📁 Processing STRM for Brendon...
4:11:17 am❌ Failed for Brendon: Emby API error: 400 Bad Request
4:11:17 am⚠️ Completed with issues: 0 succeeded, 0 skipped, 1 failed (0 total recommendations)
4:11:17 am✅ Job completed in 0.0s

Been at it for hours, tried multiple methods and getting nowhere, the libraries just will not build for Emby.

TheGru
Posted
10 minutes ago, Brendon said:

Seem to be hitting the same issue as a lot of others

4:11:17 am🚀 Starting job: sync-movie-libraries
4:11:17 am📍 Step 1/2: Finding enabled users
4:11:17 am🔍 Finding enabled users...
4:11:17 am👥 Found 1 user(s) enabled for movies
4:11:17 am📍 Step 2/2: Processing STRM files
4:11:17 am📁 Processing STRM for Brendon...
4:11:17 am❌ Failed for Brendon: Emby API error: 400 Bad Request
4:11:17 am⚠️ Completed with issues: 0 succeeded, 0 skipped, 1 failed (0 total recommendations)
4:11:17 am✅ Job completed in 0.0s

Been at it for hours, tried multiple methods and getting nowhere, the libraries just will not build for Emby.

You have a path problem.
If you want to describe your entire environment and provide the yml you are using for docker compose, I am sure it can be resolved.

Jdiesel
Posted (edited)

Does this have any implications for Aperture?

 

"Creating a home screen section based on a playlist, collection, genre or tag."

 

 

Edited by Jdiesel
  • Like 1
FlameRed
Posted

Another newbie question.

I found a new plugin called Ratings Sync

I am guessing Rating Sync is redundant for those of us that already use Aperture as they both would be pulling metadata from the same sources? 

Jdiesel
Posted

I noticed that Top List playlists aren't being generated. Manually created playlist do work and show up in Emby though.

Screenshot2026-01-245_12_52PM.thumb.png.f8ffa6fe9b0fb09566fb896218ba8823.png

 

Playlists seem to work good with the new Home Screen Editor.

Would it be possible to include playlists as an output option for AI Recommendations too?

Also would it be possible to add the options to specify between movies, TV series or both when manually creating a playlist? 

Screenshot2026-01-245_18_04PM.thumb.png.b2aa2e156168075c729251272c176b9b.png

TheGru
Posted
7 hours ago, Jdiesel said:

Does this have any implications for Aperture?

 

"Creating a home screen section based on a playlist, collection, genre or tag."

 

 

it will when I build against this newly release feature! But I am going to need a week, as I am tied up with a massive project

Jdiesel
Posted
1 minute ago, TheGru said:

it will when I build against this newly release feature! But I am going to need a week, as I am tied up with a massive project

I've been testing it with playlists and it works pretty good so far. In addition to user recommendation playlists, things that would be nice to haves:

Global playlists that can be shared/enabled across multiple users (playlist management)

Task to re-generate user/admin created playlists on a set interval

 

I didn't see anything in the Emby API that would allow a 3rd party app to create the home screen sections directly but having dynamic playlists should be a nice way to use the feature once it is manually setup.

 

Looking forward to seeing what you come up with.

 

 

  • Like 1
Brendon
Posted (edited)
7 hours ago, TheGru said:

You have a path problem.
If you want to describe your entire environment and provide the yml you are using for docker compose, I am sure it can be resolved.

Apologies it was 4.30am by the time I wrote that and gave up, there are only so many ways you can write folder paths before it becomes an exercise in frustration lol

Aperture Version: v0.6.4

Platform:

Server A – Running Windows Server 2019

  • Runs Emby

  • Hosts some media

Server B – Running Windows Server 2016

  • Slave device for HDD's only

Server C – Running Windows Server 2016

  • Slave device for HDD's only

Media Server:

  • Emby 4.9.3.0

 

Working Rig – Running Windows 11 Pro 25H2

  • Docker Desktop (4.57.0) running on a Windows 11 PC that has full read/write access to Emby drives. It has Tracearr and FlareSolvearr and Aperture running on it.

 

I can get Aperture up and running in Docker and talking to Emby no problem it reads all my media, does all the AI business but it will not POST the libraries to Emby.

I have tried Apeture folders on the core Emby server (A) as well as the first slave machine (B), neither will even write, i have tried a local folder on the windows 11 machine and it wrote files but weirdly it wrote them a level back to the folder i had designated (going to retest that one today) but still it did not post libraries to Emby.

YML file is attached, folder structure in it is the last ones i tried using the latest posts on this thread.

docker-compose.windows.yml

Edited by Brendon
TheGru
Posted
7 minutes ago, Brendon said:

Apologies it was 4.30am by the time I wrote that and gave up, there are only so many ways you can write folder paths before it becomes an exercise in frustration lol

Aperture Version: v0.6.4

Platform:

Server A – Running Windows Server 2019

  • Runs Emby

  • Hosts some media

Server B – Running Windows Server 2016

  • Slave device for HDD's only

Server C – Running Windows Server 2016

  • Slave device for HDD's only

Media Server:

  • Emby 4.9.3.0

 

Working Rig – Running Windows 11 Pro 25H2

  • Docker Desktop (4.57.0) running on a Windows 11 PC that has full read/write access to Emby drives. It has Tracearr and FlareSolvearr and Aperture running on it.

 

I can get Aperture up and running in Docker and talking to Emby no problem it reads all my media, does all the AI business but it will not POST the libraries to Emby.

I have tried Apeture folders on the core Emby server (A) as well as the first slave machine (B), neither will even write, i have tried a local folder on the windows 11 machine and it wrote files but weirdly it wrote them a level back to the folder i had designated (going to retest that one today) but still it did not post libraries to Emby.

YML file is attached, folder structure in it is the last ones i tried using the latest posts on this thread.

docker-compose.windows.yml 11.81 kB · 0 downloads

are you certain your Emby API key is set correctly?

Brendon
Posted
1 minute ago, TheGru said:

are you certain your Emby API key is set correctly?

Yes it is, I just deleted Aperture from docker and about to try and do a full re-install, I will delete that key and create a new one just in case.

TheGru
Posted
2 minutes ago, Brendon said:

Yes it is, I just deleted Aperture from docker and about to try and do a full re-install, I will delete that key and create a new one just in case.

this folder exists and is accessible on your network?

//192.168.0.101/Emby/Aperture

Brendon
Posted
1 minute ago, TheGru said:

this folder exists and is accessible on your network?

//192.168.0.101/Emby/Aperture

It did until i removed it just now.

FYI i have also tried using //SERVER-NAME/Emby/Aperture (which is how i usually address the folders) did not work either.

TheGru
Posted

when you rebuild if it fails again can you check the docker logs and send them to me in a PM? they are more detailed

camaban
Posted

Hey, just wanted to say I tried it. 

Beyond a corrupted database on emby's side that was generating 400 errors it was brilliant.

I also need to create a second and more specific mount for the strm files.

It did recommend Mr. Pickles because of Scoobie Do watching, but I couldn't fault its logic.

Same with drawn together because of Animaniacs.

And my daughter is only allowed to watch up to M, so she can't see it.

TheGru
Posted
3 hours ago, camaban said:

Hey, just wanted to say I tried it. 

Beyond a corrupted database on emby's side that was generating 400 errors it was brilliant.

I also need to create a second and more specific mount for the strm files.

It did recommend Mr. Pickles because of Scoobie Do watching, but I couldn't fault its logic.

Same with drawn together because of Animaniacs.

And my daughter is only allowed to watch up to M, so she can't see it.

Aperture wasn't the cause of Emby DB corruption was it? I am not sure how it could be.

Posted

@TheGruIf a user makes a request on aperture, it shows up as if the admin made the request. Is there a workaround? To show which user made the request?

TheGru
Posted
5 hours ago, Raichi said:

@TheGruIf a user makes a request on aperture, it shows up as if the admin made the request. Is there a workaround? To show which user made the request?

Not that I could easily solve for relative to the jellyseer api. It doesn’t support oAuth. 

  • Thanks 1
camaban
Posted
On 1/26/2026 at 2:48 AM, TheGru said:

Aperture wasn't the cause of Emby DB corruption was it? I am not sure how it could be.

Definitely not. That was a pre existing problem this just happened to expose 

  • Like 1
camaban
Posted

Couple of things that did come up:

The weighting towards things that have been explicitly liked rather than just watched through (and rewatched) is extremely heavy. Maybe a weighting that depends on how much people actually use favourite. More favourites = higher weighting, less than 10 favourites= disregard them because the person barely uses them. Something like that.

Otherwise you get into that expanded universe trope where any random drink the main character enjoys or card game it plays once is a galaxy wide cultural obsession that makes its way into everything.

Going through my daughter's recommendations, everything was listed as because she liked Enola Holmes and Harry Potter. 

The explanation for why Pulp fiction was chosen for her because she enjoyed Enola Holmes was. .. humorous. 

And it's probably worth looking at what the person can watch. She couldn't see ones like that anyway because of content restrictions, but would be useful

Not recycling recommendations. They're generally up for a week, after which the person's either watched it or isn't going to. If something isn't watched, either adjust the rankings to lower them to reflect the lack of interest or hide explicitly exclude it for a random amount of runs (4-10)

EG I've got about 1500 series and 4k movies. There's plenty of scope for the recommendations to change between runs. It's mostly the same stuff each time though.

Make recently released part of the algorithm. Fresher = more likely to recommend.

Maybe a list of everything for new users that lets them quickly cycle through and thumbs up/down stuff in bulk. Very good, good, bad, very bad and blank for no opinion.

camaban
Posted

 

AI edit of what I’d written above (it was ~5am, just waking up).

Also, just to be clear (because the AI flagged it and it definitely wasn’t my intention):

Quote

The explanation for why Pulp Fiction was chosen for her because she enjoyed Enola Holmes was… humorous

That wasn’t meant as snark. It was genuinely funny. I love how LLMs will find a way to justify whatever they’re told.

I’m working on a code review tool at work, and the prompting side has been… an experience.

For context: last night I spent a few hours going through and spamming “like” on the things I actually want included in the signal, plus marking the stuff I’d watched on Plex as watched in Emby. That improved things a lot. The only downside now is waiting for that huge burst of “watched” events to age out so it can be weighted appropriately.

Then this morning I spent another hour or two setting ratings on various titles (including 1-star ratings for things I only have because it’s a shared library with a friend of dubious taste). Big improvement again.

Anyway, the more coherent redo of the above:

Explicit likes/favourites weighting: If favourites are used as a strong positive signal, it may overweight sparse explicit feedback. Consider scaling the “favourite/like” signal by how much a user actually uses it (e.g., favourite-rate), and/or treating rewatches as a stronger implicit preference signal.

Respect profile restrictions: Filter candidates to only items the user profile can actually see (parental controls / rating limits), so picks aren’t wasted and explanations don’t reference inaccessible titles.

Reduce repeat surfacing: Add exposure tracking + cooldowns. If a title has been recommended multiple runs without being played, apply a penalty or hide it for N runs/days to keep the list moving (large libraries have plenty of variety).

Add a recency factor: Consider an optional “freshness” weight (newly released and/or newly added to library) to bias toward newer content when desired.

Cold-start onboarding: Optional “taste seeding” flow for new users (bulk rate titles) to establish preferences quickly.

Since you already ingest Emby heart ratings, a lightweight onboarding could just be a bulk ‘Rate/Review signals’ page that shows all rated + unrated titles with fast inline heart controls and filters (unrated, watched-but-unrated, frequently recommended-but-ignored). No new data model needed, just less clicking.

Add a per-profile Blacklist / Never recommend action that hard-excludes titles from future runs (with a manage/undo list). This is different from 1-star/dislike, which should remain a soft negative

 

  • Like 1
akacharos
Posted

A little UI discrepancy: While all persons exist as entities, they are not hyperlinks on movie details.
Eg.  All persons are simple text
image.thumb.png.d21f28aab3c62c51e55bb22ddfa2de7a.png

While they exist under /person/[Person Name] url (eg. /person/David Lynch)
image.thumb.png.6e7133bb5debed944764e26cc64d13ef.png

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