Jump to content

Aperture - AI-Powered Recommendations for Emby


Recommended Posts

Jdiesel
Posted
4 minutes ago, TheGru said:

I could add a randomization job I suppose. Make it optional and you could define in the job scheduler how often it ran. I would need to implement a Fisher–Yates shuffle and map it to the current calendar in order to make it work but sure. Once I get all these bugs I created sorted out, i'll add it to the "roadmap"

This would depend on how the user has defined new content in the library settings, which happen to be global for all libraries.

 

Screenshot2026-01-198_58_50PM.png.0cba66349efa26ea0092ec6736eed426.png

TheGru
Posted

I may be able to get that value from the Emby api and make a determination on how to order accordingly

Jdiesel
Posted

Any plans for image generation? Nothing too crazy, generating library cover images based on the library name text. I changed my "Top Pick - Movies" to "Trending Movies" It would be cool if I didn't have to manually create a new cover image with the matching text. Could this be done with stable-diffusion?

 

I realize this is kind of a one and done type task but it would be neat to have the capability all in one spot. Aperture already made me upgrade my GPU from a 3060 12gb to a 3090 24gb this week....I want to make good use of it 😂 

  • Like 1
TheGru
Posted
4 minutes ago, Jdiesel said:

Any plans for image generation? Nothing too crazy, generating library cover images based on the library name text. I changed my "Top Pick - Movies" to "Trending Movies" It would be cool if I didn't have to manually create a new cover image with the matching text. Could this be done with stable-diffusion?

 

I realize this is kind of a one and done type task but it would be neat to have the capability all in one spot. Aperture already made me upgrade my GPU from a 3060 12gb to a 3090 24gb this week....I want to make good use of it 😂 

There are many ways to handle it but right now Canva or Photoshop is your friend. 

  • Haha 1
graytinc
Posted

I'm unable to select models for OpenAI from the drop-down menu...(No models Available)

TheGru
Posted
2 minutes ago, graytinc said:

I'm unable to select models for OpenAI from the drop-down menu...(No models Available)

Can you provide a screenshot and your browser console log?

Jdiesel
Posted

Can you consider relocating the AI scoring overlay to the bottom right or bottom left of the poster? For series with unwatched episodes the episode count blocks the overlay.

 

 

PXL_20260120_034847278.MP.jpg

graytinc
Posted

image.png.65d569c0ddc3949c31785680b1339f7d.png

content.js:63 Uncaught TypeError: crypto.randomUUID is not a function
    at content.js:63:1291
    at content.js:2526:559015
read.js:506 Uncaught TypeError: crypto.randomUUID is not a function
    at read.js:506:1291
    at read.js:2530:578371
api/setup/detect-paths:1  Failed to load resource: the server responded with a status of 400 (Bad Request)
api/setup/ai/embeddings:1  Failed to load resource: the server responded with a status of 400 (Bad Request)
api/setup/ai/chat:1  Failed to load resource: the server responded with a status of 400 (Bad Request)
api/setup/ai/exploration:1  Failed to load resource: the server responded with a status of 400 (Bad Request)
api/setup/ai/textGeneration:1  Failed to load resource: the server responded with a status of 400 (Bad Request)
api/setup/ai/providers?function=embeddings:1  Failed to load resource: the server responded with a status of 400 (Bad Request)
api/setup/ai/models?provider=openai&function=embeddings:1  Failed to load resource: the server responded with a status of 400 (Bad Request)
api/setup/ai/providers?function=chat:1  Failed to load resource: the server responded with a status of 400 (Bad Request)
api/setup/ai/models?provider=openai&function=textGeneration:1  Failed to load resource: the server responded with a status of 400 (Bad Request)
api/setup/ai/providers?function=exploration:1  Failed to load resource: the server responded with a status of 400 (Bad Request)
api/setup/ai/models?provider=openai&function=exploration:1  Failed to load resource: the server responded with a status of 400 (Bad Request)
api/setup/ai/models?provider=openai&function=chat:1  Failed to load resource: the server responded with a status of 400 (Bad Request)
api/setup/ai/providers?function=textGeneration:1  Failed to load resource: the server responded with a status of 400 (Bad Request)
api/setup/ai/models?provider=openai-compatible&function=textGeneration:1  Failed to load resource: the server responded with a status of 400 (Bad Request)
setup:1 Uncaught (in promise) Error: Could not establish connection. Receiving end does not exist.
setup:1 Uncaught (in promise) Error: Could not establish connection. Receiving end does not exist.
setup:1 Uncaught (in promise) Error: Could not establish connection. Receiving end does not exist.
AIFunctionCard.tsx:266  GET http://10.10.10.20:3456/api/setup/ai/models?provider=deepseek&function=textGeneration 400 (Bad Request)
(anonymous) @ AIFunctionCard.tsx:266
$v @ react-dom.production.min.js:243
gp @ react-dom.production.min.js:285
EX @ react-dom.production.min.js:282
zd @ react-dom.production.min.js:280
Lz @ react-dom.production.min.js:272
Iu @ react-dom.production.min.js:127
(anonymous) @ react-dom.production.min.js:266
AIFunctionCard.tsx:266  GET http://10.10.10.20:3456/api/setup/ai/models?provider=openai&function=textGeneration 400 (Bad Request)
(anonymous) @ AIFunctionCard.tsx:266
$v @ react-dom.production.min.js:243
gp @ react-dom.production.min.js:285
EX @ react-dom.production.min.js:282
zd @ react-dom.production.min.js:280
Lz @ react-dom.production.min.js:272
Iu @ react-dom.production.min.js:127
(anonymous) @ react-dom.production.min.js:266
 

TheGru
Posted
11 minutes ago, Jdiesel said:

Can you consider relocating the AI scoring overlay to the bottom right or bottom left of the poster? For series with unwatched episodes the episode count blocks the overlay.

 

 

PXL_20260120_034847278.MP.jpg

yeah for sure, it's on my todo list

TheGru
Posted
10 minutes ago, TheGru said:

yeah for sure, it's on my todo list

I moved it to the bottom right for now and am pushing a build. I will provide admins with a setting to select the position of both this overlay and the rank overlay when I get a chance

TheGru
Posted

Aperture v0.6.2 Release Notes

This is a quick patch release that fixes an issue with the setup wizard.


🎨 Improvements

Match Percentage Overlay Moved to Bottom Right

The match percentage overlay on recommendation posters has been moved from the top right corner to the bottom right corner for better visual balance.


🐛 Bug Fixes

Fixed: "No models Available" in Setup Wizard

Users were unable to select AI models (including OpenAI) in the setup wizard dropdown, seeing "No models Available" instead. This was caused by outdated schema enum values in the setup API endpoints that didn't match what the frontend sends.

The admin settings page was unaffected because it uses different endpoints with the correct schema values.

Fixed: Additional Setup Wizard Schema Mismatches

Fixed three additional setup wizard endpoints that had the same schema mismatch issue:

  • Get AI function config (GET /api/setup/ai/:function)
  • Test AI provider (POST /api/setup/ai/test)
  • Update AI function config (PATCH /api/setup/ai/:function)

🚀 Update Instructions

For Docker Users

# Pull the latest image
docker compose pull

# Restart with new version
docker compose up -d

TeamB
Posted
10 hours ago, ebr said:

I would consult with @TeamB I believe he attempted that very thing with PlaybackReporting and found it not worth it.

@TheGru
it was not PlaybackReporting, it was the ChapterAPI intro detection plugin. The idea was people could share their detected intros Audio CromaPrint detections so other could just use them from a global library but I was never able to get anyone interested, there were a few users that helped out and we ended up with a few series with AudioCroma prints in the DB but it was not enough to take off and I ended up pulling the pin.

  • Thanks 1
TheGru
Posted

For anyone on 0.6.2 do another pull. I fixed a minor bug that was causing Top Pick movies to show up Recently Released home row alongside the original file. It’s fixed now. 
 

I also added prepended rank to sort title metadata so even on default title sort the ranked order is preserved if you open the library.  If this isn’t a desired feature I’ll turn it in to an option. 
 

I haven’t done it for AI Series recommendations yet so you can see what the difference looks like. 

graytinc
Posted

There is a significant improvement.... well done, however I am getting a timeout error when syn large Library ( tv shows).

Screenshot_20260120-070504.png

TheGru
Posted

At this point I believe I have solved all the regressions. 

TheGru
Posted
Just now, graytinc said:

There is a significant improvement.... well done, however I am getting a timeout error when syn large Library ( tv shows).

Screenshot_20260120-070504.png

Man and I thought my 101K was a ton! I’ll see what the values are set to but any chance you can provide the docker log?

TheGru
Posted

Did the syn job ever complete? I get a pause and then it blows through all the episodes

graytinc
Posted

No it's not completing....

TheGru
Posted
2 minutes ago, graytinc said:

No it's not completing....

ok i am making some changes to try and handle extremely large libraries

 

graytinc
Posted

7:04:05 AM🚀 Starting job: sync-series

7:04:05 AM📍 Step 1/4: Connecting to media server

7:04:05 AM🔌 Connecting to EMBY server...

7:04:05 AM📡 Server URL: http://10.10.10.3:8096

7:04:05 AM⚡ Performance: 500 series/page, 1000 episodes/page, 4 parallel

7:04:05 AM📚 Syncing from 1 selected TV library/libraries

7:04:05 AM📍 Step 2/4: Fetching counts

7:04:05 AM📋 Querying media server for TV libraries...

7:04:07 AMLibrary 2685894: 7704 series, 211234 episodes

7:04:07 AM📺 Found 7704 series and 211234 episodes

7:04:07 AM🔍 Loading existing series and episodes from database...

7:04:07 AM📊 Found 7228 existing series, 0 existing episodes in database

7:04:07 AM📍 Step 3/4: Processing series

7:04:07 AM📂 Fetching 7704 series from library 2685894...

7:04:09 AM✅ Fetched 7704 series, now processing...

7:04:14 AM📊 Series sync: 0 new, 7684 updated (7704 total)

7:04:14 AM📍 Step 4/4: Processing episodes

7:04:14 AM📺 Syncing episodes...

7:04:14 AM📂 Fetching 211234 episodes from library 2685894...

7:05:59 AM❌ Job failed: Connection to Emby timed out after 30 seconds. Please check that your media server URL (http://10.10.10.3:8096) is accessible from the Aperture container.

7:05:59 AM❌ Job failed: Connection to Emby timed out after 30 seconds. Please check that your media server URL (http://10.10.10.3:8096) is accessible 

TheGru
Posted

Aperture v0.6.3 Release Notes

This release brings major improvements to series library scanning reliability, especially for users with very large libraries (100K+ episodes). I've also fixed several issues with NFO metadata generation and added real-time job status updates to the Discovery page.


🚀 Major Improvements

Reliable Scanning for Very Large Series Libraries - @graytinclet me know if this resolved it!

Users with massive TV libraries (200K+ episodes) were experiencing scan failures due to memory exhaustion and timeouts. This release completely overhauls the series sync process:

  • Streaming Batch Processing: Episodes are now fetched and processed in chunks of 1,000 instead of loading all episodes into memory at once. This keeps memory usage constant regardless of library size.
  • Increased API Timeout: The timeout for Emby/Jellyfin API requests has been doubled from 30 seconds to 60 seconds, giving slow media servers more time to respond.
  • Accurate Progress Tracking: Fixed multiple issues where episode counts weren't being accumulated correctly across multiple libraries.
  • Proper Insert vs Update Counting: The sync now accurately reports which episodes were truly new vs updated, using PostgreSQL's xmax system column to distinguish real inserts from upsert updates.

Discovery Page Real-Time Job Status

The Discovery page now shows real-time progress when the discovery suggestions job is running:

  • Animated banner displays current step and progress percentage
  • Auto-refreshes the grid when the job completes
  • Refresh button is disabled while the job is running

🐛 Bug Fixes

Fixed: Duplicates in Emby's "Recently Released" Home Rows

Aperture-generated libraries (Top Picks, AI Recommendations) were appearing as duplicates alongside original files in Emby's "Recently Released" home screen rows. NFO files now:

  • Set lockdata=true to prevent Emby from overwriting metadata
  • Remove premiered and releasedate tags that were causing the duplicates

Fixed: AI Recommendations Not Sorting by Rank

Movies and series in AI recommendation STRM libraries now sort correctly by recommendation rank using rank-prefixed sort titles (e.g., "01 - Movie Title").

Fixed: Episodes with Null Season/Episode Numbers Causing Sync Failures

Some media servers return bonus content, extras, or special features with null episode numbers. These now get filtered out during sync instead of causing database constraint violations.

Fixed: Episode Counts Not Matching Total

The "Episodes Added" + "Episodes Updated" counts now correctly sum to the total episodes processed. Previously, deduplicated episodes (multiple versions of the same episode) weren't being counted.

Fixed: Episodes Incorrectly Showing as "New" on Every Scan

When Emby/Jellyfin regenerates item IDs, episodes were incorrectly reported as "new" on every sync. The sync now detects existing episodes by both provider_item_id AND the series + season + episode composite key.


🚀 Update Instructions

For Docker Users

# Pull the latest image
docker compose pull

# Restart with new version
docker compose up -d
graytinc
Posted

Thank you @TheGru. Everything seems to be working perfectly. I am exploring further, and I will update you if any issues arise.

  • Thanks 1
graytinc
Posted

3:00:01 AM🔧 Checking Series library "Top Picks - Series"...
3:00:01 AM❌ Failed to ensure Series library: Emby API error: 400 Bad Request
3:00:01 AM⚠️ Movies library "Top Picks - Movies" not found in media server
3:00:01 AM⚠️ Series library "Top Picks - Series" not found in media server
3:00:01 AM🔄 Triggering library refresh...
3:00:01 AM📍 Step 7/8: Waiting for library scan to complete
3:00:01 AM📍 Step 7/8: Creating collections and playlists
3:00:01 AM📦 Creating collections and playlists from Top Picks library items...
3:00:01 AM🎬 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
3:00:01 AM❌ Job failed: Library creation failed: Movies library: Emby API error: 400 Bad Request; Series library: Emby API error: 400 Bad Request

image.png.672eb3f7c12df456486d365c805db763.png

TheGru
Posted
1 minute ago, graytinc said:

3:00:01 AM🔧 Checking Series library "Top Picks - Series"...
3:00:01 AM❌ Failed to ensure Series library: Emby API error: 400 Bad Request
3:00:01 AM⚠️ Movies library "Top Picks - Movies" not found in media server
3:00:01 AM⚠️ Series library "Top Picks - Series" not found in media server
3:00:01 AM🔄 Triggering library refresh...
3:00:01 AM📍 Step 7/8: Waiting for library scan to complete
3:00:01 AM📍 Step 7/8: Creating collections and playlists
3:00:01 AM📦 Creating collections and playlists from Top Picks library items...
3:00:01 AM🎬 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
3:00:01 AM❌ Job failed: Library creation failed: Movies library: Emby API error: 400 Bad Request; Series library: Emby API error: 400 Bad Request

image.png.672eb3f7c12df456486d365c805db763.png

Interesting, that one hasn't happened in a long time...

TheGru
Posted
35 minutes ago, graytinc said:

3:00:01 AM🔧 Checking Series library "Top Picks - Series"...
3:00:01 AM❌ Failed to ensure Series library: Emby API error: 400 Bad Request
3:00:01 AM⚠️ Movies library "Top Picks - Movies" not found in media server
3:00:01 AM⚠️ Series library "Top Picks - Series" not found in media server
3:00:01 AM🔄 Triggering library refresh...
3:00:01 AM📍 Step 7/8: Waiting for library scan to complete
3:00:01 AM📍 Step 7/8: Creating collections and playlists
3:00:01 AM📦 Creating collections and playlists from Top Picks library items...
3:00:01 AM🎬 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
3:00:01 AM❌ Job failed: Library creation failed: Movies library: Emby API error: 400 Bad Request; Series library: Emby API error: 400 Bad Request

image.png.672eb3f7c12df456486d365c805db763.png

Are you able to run the Movie job and does it work?

 image.png.2736ec4b0bedc35c05ff4e5c7b7beb81.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...