Jump to content

Aperture - AI-Powered Recommendations for Emby


Recommended Posts

tcx4c70
Posted

Hi TheGru! Thank you so much for this wonderful project — it’s really impressive work. I’d love to contribute by fixing a few small bugs and possibly improving performance. Would you be open to contributions like that?

Also, I didn’t see a LICENSE file in the repository, just a mention of the MIT license in the README. Could you please confirm which license the project is released under? Is it MIT?

Killface69
Posted

  

2 hours ago, TheGru said:

I will be working on a backup/restore of the database to provide for easy migrations and not having to re-sync and rerun embeddings on large libraries in a future version.

I still had issues with the new version not connecting to Emby on my QNAP. I peaked into the docker file of Pihole and added some of the network settings to your docker file, making it work.
Here are my changes for your reference, server ip is set to ...134:

# [app] add
    networks:
      qnet-network:
        ipv4_address: 192.168.0.134

# [db] add
    networks:
      qnet-network:
        ipv4_address: 192.168.0.135
       
# bottom add
networks:
  qnet-network:
    driver_opts:
      iface: eth0
    driver: qnet
    ipam:
      driver: qnet
      options:
        iface: eth0
      config:
        - subnet: 192.168.0.0/24
          gateway: 192.168.0.1

 

TheGru
Posted
5 minutes ago, tcx4c70 said:

Hi TheGru! Thank you so much for this wonderful project — it’s really impressive work. I’d love to contribute by fixing a few small bugs and possibly improving performance. Would you be open to contributions like that?

Also, I didn’t see a LICENSE file in the repository, just a mention of the MIT license in the README. Could you please confirm which license the project is released under? Is it MIT?

I hadn't really thought about it. This has been 3 days in the making and I am just jamming. I've added a MIT license to the project. 

I have probably made 10,000 changes since you last pulled code, but feel free to contribute to the project.

TheGru
Posted
1 minute ago, Killface69 said:

  

I still had issues with the new version not connecting to Emby on my QNAP. I peaked into the docker file of Pihole and added some of the network settings to your docker file, making it work.
Here are my changes for your reference, server ip is set to ...134:

# [app] add
    networks:
      qnet-network:
        ipv4_address: 192.168.0.134

# [db] add
    networks:
      qnet-network:
        ipv4_address: 192.168.0.135
       
# bottom add
networks:
  qnet-network:
    driver_opts:
      iface: eth0
    driver: qnet
    ipam:
      driver: qnet
      options:
        iface: eth0
      config:
        - subnet: 192.168.0.0/24
          gateway: 192.168.0.1

 

I will add a specific QNAP docker compose file, for others to reference. Thank you for sharing!

TheGru
Posted

🎬 Aperture v0.2.5 Release Notes

Hey everyone! Big update with lots of improvements based on your feedback. Here's what's new:

🆕 Platform-Specific Docker Compose Files

We now have dedicated docker-compose files for different NAS platforms! No more guessing about paths and network settings.

Download for your platform:

  • Unraid - /mnt/user/ paths, ready to go
  • QNAP - Uses qnet driver with static IPs for proper network connectivity
  • Synology - /volume1/ paths, optional macvlan network config
  • Generic/Linux - For other environments

💾 Database Backup & Restore

New backup system to protect your configuration:

  • Automatic daily backups at 1 AM (configurable)
  • Restore from backup during initial setup or from Admin panel
  • Retention policy - configure how many backups to keep
  • Backups stored in /backups volume mount

⏰ Updated Default Schedules

Optimized the default job schedules for better performance:

Job Schedule
Database Backup Daily at 1 AM
Library Scan Daily at 2 AM
Embeddings Daily at 3 AM
AI Recommendations Weekly on Sunday at 4 AM
Top Picks Daily at 5 AM
Watch History Every 2 hours
Metadata Enrichment Every 6 hours

All schedules are now configurable via Admin → Jobs. The setup wizard's completion screen now shows these defaults.


🔧 Setup Wizard Improvements

  • Re-run individual jobs - Failed or want to re-run a specific job? Now you can!
  • Restored job history - If you go back to the sync step, your previous job results are preserved
  • Top Picks integration - Sync Top Picks job now appears in the wizard (if enabled)
  • Better progress tracking - Shows actual recommendation counts, not episode counts for series
  • Library creation summary - See exactly which libraries were created, including Top Picks

🐛 Bug Fixes

  • Fixed movie recommendations showing wrong count - Was showing 8 instead of 12 due to rank calculation bug
  • Fixed series showing episode count instead of series count - Now correctly shows "12 series" not "170 episodes"
  • Fixed library images not applying during setup - Bundled default images now work in Docker
  • Fixed Top Picks library creation errors - Corrected path handling for Emby API
  • Fixed symlinks with Sharp overlays - Ranked posters now apply correctly

📄 License

Added official MIT LICENSE file to the repository.


🙏 Community Contributors

Big thanks to everyone who helped make this release possible:

  • Killface69 - Docker configuration for QNAP
  • DaMoekster - Tons of testing and bug reporting

Your feedback and contributions make Aperture better for everyone! 🎉


🔄 How to Update

# Pull the latest image
docker-compose -f docker-compose.[your-platform].yml pull

# Restart
docker-compose -f docker-compose.[your-platform].yml up -d

📋 Full Changelog

View all commits on GitHub


Questions or issues? Drop them below! 👇

TheGru
Posted

Massive performance improvements writing to the DB, syncing movies and series is about 100X faster. Release coming soon!

TheGru
Posted

Aperture v0.2.6 Release Notes

🚀 Major Performance Improvements

Sync Jobs (Movies & Series) - Up to 10x Faster

  • Parallel API fetching: Now fetches 4 pages simultaneously from your media server
  • Larger page sizes: Increased from 50-100 to 500-1000 items per request
  • Bulk database operations: Replaced individual INSERT/UPDATE queries with bulk SQL using PostgreSQL's unnest() - reducing thousands of queries to just a few
  • Pre-loaded duplicate checking: O(1) lookups instead of database queries for each item

Watch History Sync - Dramatically Faster

  • Bulk INSERT/UPDATE operations for movie and series watch history
  • Bulk DELETE operations for removed items
  • Pre-loaded ID mappings for instant lookups

Recommendations Generation - Faster Storage

  • Bulk INSERT for recommendation candidates (was ~100+ individual queries)
  • Bulk INSERT for recommendation evidence using efficient LATERAL joins
  • Bulk UPDATE for AI explanations

Metadata Enrichment - Parallel Processing

  • TMDb and OMDb API calls now run in parallel for each item
  • Process multiple items concurrently (5 at a time)
  • TMDb rate limit increased to 40 req/sec (from 20)

🐛 Critical Bug Fix

Watched Content Now Properly Excluded from Recommendations

Root Cause Fixed: Series recommendations were incorrectly including watched series because the pipeline only checked recent watch history (limited by recentWatchLimit), not ALL watched series.

  • Series pipeline now queries all watched series IDs for filtering
  • Movie pipeline now explicitly filters by media_type = 'movie'
  • Both movies and series recommendations now correctly exclude watched content by default

✨ New Features

OMDb Paid Tier Support

  • New toggle in Settings > Integrations > OMDb for paid subscriptions
  • Paid tier enables 40 requests/sec (vs 10 req/sec for free tier)
  • Faster metadata enrichment for users with paid OMDb API keys

Incremental "Shows You Watch" Library Updates

  • Library files are now only written when content actually changes
  • Stable dateadded timestamps prevent unnecessary media server rescans
  • Tracks added/unchanged/deleted series counts
  • Only triggers library refresh when changes are detected

User Preference: Include Watched Content

  • New toggle moved to User Settings > Preferences tab
  • Choose whether recommendations include content you've already watched
  • Default: exclude watched (recommend new content only)

🎨 UI Improvements

Sidebar Branding

  • Updated logo to match setup wizard style
  • Open Sans font for consistent branding
  • Replaced user avatar at bottom with version number display

Progress Bar Fix

  • Sync job progress bars no longer reset during execution
  • Smooth 0-100% progression during the processing phase

📊 Performance Summary

Operation Before After Improvement
Sync 12,000 movies ~5 min ~30 sec 10x faster
Watch history sync Individual queries Bulk operations 100x fewer queries
Store recommendations ~100 queries 2-3 queries 50x fewer queries
Enrichment (parallel) Sequential 5 concurrent 5x faster

 

Platform-Specific Docker Compose Files

We now have dedicated docker-compose files for different NAS platforms! No more guessing about paths and network settings.

Download for your platform:

  • Unraid - /mnt/user/ paths, ready to go
  • QNAP - Uses qnet driver with static IPs for proper network connectivity
  • Synology - /volume1/ paths, optional macvlan network config
  • Generic/Linux - For other environments

 

TheGru
Posted

Aperture 0.2.7 Release Notes

Hey everyone! 🎬

I've got a solid maintenance-focused release today with a brand new feature and several important bug fixes.

✨ New Feature: Missing Poster Repair Tool

Ever notice some of your library items are missing poster artwork? This release introduces a new Poster Repair tool under Settings → Maintenance that helps you fix them.

How it works:

  • Scan your Emby/Jellyfin library to find movies and series with missing poster images
  • Review the results — see which items are missing posters and whether they have a TMDB ID (required for repair)
  • Select the items you want to fix
  • Repair — Aperture fetches the poster from TMDB and uploads it directly to your media server

The whole process streams images through memory (TMDB → Aperture → Emby/Jellyfin) with no local storage. Progress tracking shows real-time updates with a live logs panel so you can see exactly what's happening. Be advised just because you have a TMDB id for your content does not mean TMDB has a poster for it!

🐛 Bug Fixes

Fixed: Job Progress Percentages Exceeding 100%

Some users were seeing bizarre progress percentages like 7500% in the activity log. This was caused by a mismatch between what was being counted vs. what was being tracked.

The issue affected these background jobs:

  • Sync Movie Libraries
  • Sync Series Libraries
  • Generate Movie Recommendations
  • Generate Series Recommendations

All of these now correctly track user progress and display accurate percentages while still showing total counts in the status text.

Fixed: Stale Poster Images After Media Server Updates

When you update poster artwork in Emby or Jellyfin, Aperture should pick up the change on the next sync. However, we weren't explicitly requesting the ImageTags and BackdropImageTags fields from the API, which meant the image hash tags might not be included in responses.

This caused Aperture to keep referencing old cached images even after you changed them in your media server. Now we explicitly request these fields for both movies and series across Emby and Jellyfin.

🎨 UI Changes

Maintenance moved to top-level tab — The Maintenance section has been promoted from a sub-tab under Setup to its own top-level tab in Settings for better visibility.


Upgrading

Pull the latest image and restart:

docker pull ghcr.io/dgruhin-hrizn/aperture:latest
docker-compose up -d

No database migrations in this release.


As always, let me know if you run into any issues! 🙏

Screenshot 2026-01-11 at 9.34.26 AM.png

TheGru
Posted

Aperture 0.2.8

Security Fix

This release addresses a security issue where API keys and other sensitive data were being logged in plain text. If you're running Aperture in a shared environment or forwarding logs to external services, I recommend updating promptly.

What's Changed

  • Sensitive values like media server API keys, OpenAI API keys, TMDb/OMDb API keys, and Trakt credentials are now automatically redacted in all log output
  • Added defense-in-depth protection at the logger level to catch any accidental logging of sensitive fields

Log Output Before:

{"key":"media_server_api_key","value":"e3e3b408148445fb8ed809e67b3c09c3","msg":"System setting updated"}

Log Output After:

{"key":"media_server_api_key","value":"[REDACTED]","msg":"System setting updated"}

Upgrade

Pull the latest image and restart:

docker compose pull && docker compose up -d
Posted

This sounds like something that is really up my avenue and could be the reason that I swap from Plex to Emby finally 

 

2 questions though:

 

1. Do the recommendations show up on the homescreen or is it just within the library view? 

 

2. Is it possible to get this running on a different server to the Emby server? For example a VPS external to my Emby server? The VPS would be using a reverse proxy such as Traefik. 

  • Like 1
TheGru
Posted (edited)
3 hours ago, Mrfoxx said:

This sounds like something that is really up my avenue and could be the reason that I swap from Plex to Emby finally 

 

2 questions though:

 

1. Do the recommendations show up on the homescreen or is it just within the library view? 

 

2. Is it possible to get this running on a different server to the Emby server? For example a VPS external to my Emby server? The VPS would be using a reverse proxy such as Traefik. 

1. Yes on the Home Screen. There are some screenshots on previous posts. 
 

2. I have no idea, but as long as both machines can see the same media shares I don’t see why not as Aperture must be able to write files to a location Emby can access directly. Unfortunately that level of configuration is beyond what I am looking to support at this time. 
 

VPS Deployment - How It Actually Works

The Two Separate Problems

Problem 1: Aperture ↔ Emby Communication (API)

VPS (Aperture)  ──── HTTP API ────►  Home (Emby)
                    ✅ Works fine

Aperture calls Emby's API to sync libraries, get metadata, trigger scans. This works over the internet with just a URL and API key.

Problem 2: STRM File Delivery + Playback

VPS creates STRM files → ??? → Emby reads them → Emby plays content

This is where it gets tricky.


What's Inside a STRM File

/mnt/Media/Movies/Inception (2010)/Inception.mkv

It's just a text file with a path. When Emby "plays" this item, it reads the path and streams that file to your client.


The Two Requirements for VPS

1. Emby must READ the STRM files

Aperture writes to /aperture-libraries/ on the VPS. Emby needs to see those files somehow.

Solutions:

  • Mount shared storage (NFS/SMB) on both VPS and Emby's machine
  • Rsync/Syncthing to copy files from VPS → Emby's machine
  • Store on cloud storage both can access

2. Emby must ACCESS the paths inside STRMs

The path /mnt/Media/Movies/... must exist on Emby's machine.

This is already true if Emby is on your home server with your media. The paths Aperture writes come from Emby's own database.


Minimal VPS Setup

image.png.275d2b2eacb90f980b29b5f7426121cc.png


Docker Compose Clarification

The VPS docker-compose you showed is correct, but needs this note:

volumes:
  - ./aperture-libraries:/aperture-libraries
  # ⚠️ This directory must be shared with your Emby server
  # Options: NFS mount, rsync cron job, Syncthing, etc.

What Definitely WON'T Work

  • VPS with purely local storage and no file sharing to Emby
  • Expecting Emby to somehow "pull" libraries from VPS over HTTP
  • STRM files with streaming URLs (authentication doesn't work)

TL;DR

Aperture on VPS works if:

  • ✅ Emby is reachable via API (URL + API key)
  • ✅ STRM files are shared to Emby (NFS, rsync, etc.)
  • ✅ Emby has local access to your media files (which it already does)
Edited by TheGru
Updated to attempt to explain a remote VPS configuration
akacharos
Posted

Hi TheGru!

I am happy to see this momentum in the project 🔥

A suggestion regarding metadata enrichment: I checked packages/core/src/enrichment/index.ts about the imported data from omdb.
Is it possible to add Language and Country?   Maybe I am a minority here with a lot of non-english movies , but I think having these information both for relevance and user prompt would help a lot.
 

Example output for api call omdbapi.com/?apikey=<apikey>&i=tt0120669&plot=short

{"Title":"Fear and Loathing in Las Vegas","Year":"1998","Rated":"R","Released":"22 May 1998","Runtime":"118 min","Genre":"Adventure, Comedy, Drama","Director":"Terry Gilliam","Writer":"Hunter S. Thompson, Terry Gilliam, Tony Grisoni","Actors":"Johnny Depp, Benicio Del Toro, Tobey Maguire","Plot":"An oddball journalist and his psychopathic lawyer travel to Las Vegas for a series of psychedelic escapades.","Language":"English","Country":"United States","Awards":"1 win & 3 nominations total","Poster":"[https://m.media-amazon.com/images/M/MV5BNjFkNjdiZjUtNzUzNy00NWM5LWFlNDUtNTRiYmJiZWNiYjkwXkEyXkFqcGc@.\_V1_SX300.jpg","Ratings":\[{"Source":"Internet](https://m.media-amazon.com/images/M/MV5BNjFkNjdiZjUtNzUzNy00NWM5LWFlNDUtNTRiYmJiZWNiYjkwXkEyXkFqcGc@.%5C_V1_SX300.jpg%22,%22Ratings%22:%5C%5B%7B%22Source%22:%22Internet) Movie Database","Value":"7.5/10"},{"Source":"Rotten Tomatoes","Value":"51%"},{"Source":"Metacritic","Value":"41/100"}],"Metascore":"41","imdbRating":"7.5","imdbVotes":"316,089","imdbID":"tt0120669","Type":"movie","DVD":"N/A","BoxOffice":"$10,680,275","Production":"N/A","Website":"N/A","Response":"True"}

TheGru
Posted

Aperture v0.3.1

Release Date: January 11, 2026


Bug Fixes

Embeddings: Studio Data Parsing

Fixed a critical bug where studio names in movie and series embeddings were being rendered as [object Object] instead of actual names like "A24" or "Marvel Studios".

Background: Migration 0048_studio_jsonb.sql changed the studios column from a text array to JSONB objects (with id and name fields) to support studio image lookups. The embeddings code wasn't updated to handle this new format.

Impact: Any embeddings generated after the schema change would have corrupted studio information, potentially degrading recommendation quality for users who rely on studio preferences.

Fix: The embeddings generation now properly parses JSONB studio data and extracts the name field.

Thanks to @tcx4c70 for this contribution!


STRM Files: Playback Compatibility

Fixed "No compatible streams available" playback errors in STRM libraries.

Problem: STRM files were using streaming URLs that require authentication, but media players opening STRM files don't have access to the session credentials.

Solution: STRM files now contain the original file path (e.g., /mnt/Media/Movies/Film.mkv) instead of streaming URLs. This works when the media server has filesystem access to the original media files.

Note: This requires your Emby/Jellyfin server to have access to the same storage paths. If running in Docker, ensure the media paths are mounted identically.


Upgrade Notes

  • No database migrations required
  • Existing embeddings with corrupted studio data will be regenerated on the next embeddings job run
  • STRM files will be updated automatically on the next sync job

Full Changelog

  • fix(embeddings): Studios in embeddings are always object
  • fix(strm): Use original file paths instead of streaming URLs
  • chore: Bump version to 0.3.1
  • Like 1
horstepipe
Posted

wondering, can a strm file point to a strm file? I am already using them for regular media playback.

BR

TheGru
Posted
6 hours ago, horstepipe said:

wondering, can a strm file point to a strm file? I am already using them for regular media playback.

BR

No idea. I don’t see why not but you’d have to try. 

  • Agree 1
TheGru
Posted

Aperture v0.3.2 Release Notes

Hey everyone! 👋

I've got a substantial update that improves the browsing experience, adds some visual polish, and includes a nice community contribution. Here's what's new:

📦 Docker Compose Files

Quick Start:

# Download your preferred compose file

# Start Aperture
docker compose up -d

# View logs
docker compose logs -f

Updating to v0.3.2:

docker compose pull
docker compose up -d

🎨 Rotating Fanart Headers

Person and Studio detail pages now feature rotating backdrop images from their associated movies and TV series!

  • Smooth crossfade transitions between images
  • Shuffled on load for variety
  • Dark gradient overlay ensures text remains readable
  • Images preload before transitioning for seamless playback

This makes browsing actor filmographies and studio catalogs feel much more cinematic.


🏢 Studio & Network Logo Enrichment

A new background job fetches high-quality logos from TMDB for your studios and networks:

  • New Job: enrich-studio-logos (runs daily at 5:30 AM by default)
  • Downloads and stores logos locally for fast loading
  • Logos now display on Studio/Network detail pages
  • Falls back to Emby/Jellyfin images if no TMDB match found

Run the job manually from the Jobs page to enrich your existing studios immediately.


🖼️ Media Image Proxy (Mixed Content Fix)

The Problem: If you're accessing Aperture through a reverse proxy with HTTPS (like most of us do), you've probably seen broken images or mixed content warnings. This happened because Aperture was loading images directly from your Emby/Jellyfin server over HTTP.

The Fix: All media server images now route through Aperture's new image proxy endpoint (/api/media/images/*). This means:

  • No more mixed content warnings when using HTTPS
  • Images load correctly even when accessing externally
  • Aggressive caching (24h cache, 7-day stale-while-revalidate) for performance
  • Automatic fallback to a placeholder when images fail to load

This applies to posters, backdrops, actor thumbnails, and all other media server images across the entire app.


🎬 Person & Studio Detail Pages

You can now click on actors, directors, studios, and networks throughout the app to see dedicated detail pages!

Person Detail Pages (/person/:name)

  • Rotating fanart header from their filmography
  • Profile image and name
  • Carousel of movies they appear in
  • Carousel of series they appear in (with "add to watching" button)
  • Works for actors AND directors

Studio Detail Pages (/studio/:name)

  • Rotating fanart header from their content
  • Studio/network logo (from TMDB when available)
  • Carousel of their movies
  • Carousel of their series (with "add to watching" button)
  • Works for production studios AND TV networks

Where you can click:

  • Watch Stats page: Actors, Directors, Studios, Networks are all now clickable
  • More click-through navigation coming in future updates

📱 Mobile Responsive Fixes

Fixed horizontal scrolling issues on mobile devices (tested on iPhone 15):

  • Main Layout: Added overflow-x: hidden and maxWidth: 100% to prevent content overflow
  • Page Headers: Added flexWrap to headers on Recommendations, Top Picks pages so buttons wrap properly
  • Movies Filters: Filter controls now stack vertically on mobile instead of overflowing
  • Quick Stats Bar: Now displays as a 2x2 grid on mobile instead of a horizontal scroll
  • Settings Tabs: Main tabs now scroll horizontally on mobile (7 tabs don't fit on small screens)
  • Poster Grids: Responsive poster sizing ensures even spacing at all breakpoints (no more gutter issues)

The app should now feel much better on phones and tablets.


⚡ Performance: Embeddings Bulk Insertion

Community Contribution by @tcx4c70 (PR #18)

The embedding generation jobs now use bulk insertion when writing to the vector database, resulting in approximately 10x faster embedding insertion. This significantly speeds up the initial setup and any re-generation of movie/series embeddings.

Thanks Adam for the contribution! 🙏


Full Changelog

New Features

  • Add rotating fanart backdrop headers to Person and Studio detail pages
  • Add studio/network logo enrichment job (enrich-studio-logos)
  • Display TMDB logos on Studio/Network detail pages
  • Add media image proxy endpoint for mixed content prevention
  • Add Person detail page with filmography carousels
  • Add Studio detail page with content carousels
  • Make Watch Stats actors/directors/studios/networks clickable
  • Add "watching" toggle button to series on Person/Studio detail pages

Bug Fixes

  • Fix mixed content warnings when accessing Aperture via HTTPS reverse proxy
  • Fix horizontal scroll on mobile devices
  • Fix responsive poster sizing for even grid spacing on mobile
  • Fix React hooks error on detail pages (useMemo before early returns)
  • Fix backdrop crossfade to use double-buffer approach for seamless transitions
  • Apply image proxy to all remaining direct Emby/Jellyfin image URLs

Performance

  • 10x faster embedding insertion via bulk insert (thanks @tcx4c70!)

Technical

  • New /api/discover/person/:name endpoint with backdrop URLs
  • New /api/discover/studio/:name endpoint with backdrop URLs
  • New RotatingBackdrop component with preloading and crossfade
  • Added enrich-studio-logos to job scheduler defaults
  • Added useProxiedImageUrl hook and getProxiedImageUrl utility
  • Responsive breakpoints added to multiple components

As always, let me know if you run into any issues. Happy watching! 🍿

akacharos
Posted
18 hours ago, akacharos said:

Hi TheGru!

I am happy to see this momentum in the project 🔥

A suggestion regarding metadata enrichment: I checked packages/core/src/enrichment/index.ts about the imported data from omdb.
Is it possible to add Language and Country?   Maybe I am a minority here with a lot of non-english movies , but I think having these information both for relevance and user prompt would help a lot.
 

Example output for api call omdbapi.com/?apikey=<apikey>&i=tt0120669&plot=short

{"Title":"Fear and Loathing in Las Vegas","Year":"1998","Rated":"R","Released":"22 May 1998","Runtime":"118 min","Genre":"Adventure, Comedy, Drama","Director":"Terry Gilliam","Writer":"Hunter S. Thompson, Terry Gilliam, Tony Grisoni","Actors":"Johnny Depp, Benicio Del Toro, Tobey Maguire","Plot":"An oddball journalist and his psychopathic lawyer travel to Las Vegas for a series of psychedelic escapades.","Language":"English","Country":"United States","Awards":"1 win & 3 nominations total","Poster":"[https://m.media-amazon.com/images/M/MV5BNjFkNjdiZjUtNzUzNy00NWM5LWFlNDUtNTRiYmJiZWNiYjkwXkEyXkFqcGc@.\_V1_SX300.jpg","Ratings":\[{"Source":"Internet](https://m.media-amazon.com/images/M/MV5BNjFkNjdiZjUtNzUzNy00NWM5LWFlNDUtNTRiYmJiZWNiYjkwXkEyXkFqcGc@.%5C_V1_SX300.jpg%22,%22Ratings%22:%5C%5B%7B%22Source%22:%22Internet) Movie Database","Value":"7.5/10"},{"Source":"Rotten Tomatoes","Value":"51%"},{"Source":"Metacritic","Value":"41/100"}],"Metascore":"41","imdbRating":"7.5","imdbVotes":"316,089","imdbID":"tt0120669","Type":"movie","DVD":"N/A","BoxOffice":"$10,680,275","Production":"N/A","Website":"N/A","Response":"True"}

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

beta666
Posted
Vor 1 Stunde sagte TheGru:

Aperture v0.3.2 Versionshinweise

Hallo zusammen!👋

Ich habe ein wesentliches Update, das das Surferlebnis verbessert, etwas visuelleschliff verleiht und einen schönen Community-Beitrag enthält. Hier ist, was neu ist:

📦Docker-Dateien erstellen

Schnellstart:

# Download your preferred compose file

# Start Aperture
docker compose up -d

# View logs
docker compose logs -f

Aktualisierung auf v0.3.2:

docker compose pull
docker compose up -d

🎨Rotierende Fanart-Header

Personen- und Studio-Detailseiten enthalten jetzt rotierende Hintergrundbilder aus den dazugehörigen Filmen und Fernsehserien!

  • Sanfte Crossfade-Übergänge zwischen Bildern
  • Auf Last für Abwechslung gemischt
  • Dunkles Farbverlaufs-Overlay sorgt dafür, dass der Text lesbar bleibt
  • Bilder vor dem Übergang vor dem Übergang für eine nahtlose Wiedergabe

Dadurch fühlen sich das Durchsuchen von Filmografien und Studiokatalogen von Schauspielern viel filmischer an.


🏢Studio- und Netzwerklogo-Anreicherung

Ein neuer Hintergrundjob holt hochwertige Logos von TMDB für Ihre Studios und Netzwerke:

  • New Job: enrich-studio-logos (runs daily at 5:30 AM by default)
  • Lädt und speichert Logos lokal für schnelles Laden
  • Logos werden jetzt auf Studio/Netzwerk-Detailseiten angezeigt
  • Fällt zurück auf Emby/Jellyfin-Bilder, wenn kein TMDB-Match gefunden wird

Führen Sie den Auftrag manuell über die Jobs-Seite aus, um Ihre bestehenden Studios sofort zu bereichern.


🖼️Medienbild-Proxy (Fix für gemischte Inhalte)

Das Problem: Wenn Sie über einen Reverse-Proxy mit HTTPS auf Aperture zugreifen (wie die meisten von uns), haben Sie wahrscheinlich defekte Bilder oder Warnungen mit gemischten Inhalten gesehen. Dies geschah, weil Aperture Bilder direkt von Ihrem Emby/Jellyfin-Server über HTTP lud.

Die Lösung: Alle Medienserver-Images werden jetzt über den neuen Image-Proxy-Endpunkt von Aperture (/api/media/images/*) geleitet. Das bedeutet:

  • Keine Warnungen mit gemischtem Inhalt mehr bei Verwendung von HTTPS
  • Bilder werden auch beim externen Zugriff korrekt geladen
  • Aggressives Caching (24 Stunden Cache, 7-Tage-Staung-während-Revalidierung) für Leistung
  • Automatischer Fallback zu einem Platzhalter, wenn Bilder nicht geladen werden

Dies gilt für Poster, Kulissen, Miniaturansichten von Schauspielern und alle anderen Medienserver-Bilder in der gesamten App.


🎬Personen- und Studio-Detailseiten

Sie können jetzt in der App auf Schauspieler, Regisseure, Studios und Netzwerke klicken, um spezielle Detailseiten anzuzeigen!

Personendetailseiten (/person/:name)

  • Rotierende Fanart-Header aus ihrer Filmografie
  • Profilbild und Name
  • Karussell von Filmen, in denen sie erscheinen
  • Karussell der Serien, in der sie erscheinen (mit "Zum Ansehen hinzufügen"-Schaltfläche)
  • Werke für Schauspieler UND Regisseure

Studio-Detailseiten (/studio/:name)

  • Drehen von Fanart-Headern aus ihrem Inhalt
  • Studio-/Netzwerklogo (von TMDB, wenn verfügbar)
  • Karussell ihrer Filme
  • Karussell ihrer Serie (mit "Zum Ansehen hinzufügen"-Taste)
  • Arbeitet für Produktionsstudios UND TV-Netzwerke

Wo Sie klicken können:

  • Statistikseite ansehen: Schauspieler, Regisseure, Studios, Netzwerke sind jetzt alle anklickbar
  • Weitere Klick-Durchfahrt in zukünftigen Updates

📱Mobile Responsive Fixes

Probleme mit dem horizontalen Scrollen auf Mobilgeräten behoben (auf dem iPhone 15 getestet):

  • Main Layout: Added overflow-x: hidden and maxWidth: 100% to prevent content overflow
  • Page Headers: Added flexWrap to headers on Recommendations, Top Picks pages so buttons wrap properly
  • Filme Filter: Filtersteuerungen stapeln sich jetzt vertikal auf Mobilgeräten, anstatt sie zu überlaufen
  • Schnellstatistikleiste: Jetzt als 2x2-Raster auf Mobilgeräten anstelle einer horizontalen Bildlaufanzeige angezeigt
  • Einstellungen Registerkarten: Haupt-Tabs scrollen jetzt horizontal auf Mobilgeräten (7 Registerkarten passen nicht auf kleine Bildschirme)
  • Postergitter: Die reaktionsschnelle Poster-Sizing sorgt für einen gleichen Abstand an allen Haltepunkten (keine Probleme mehr mit der Dachrinne)

Die App sollte sich jetzt auf Telefonen und Tablets viel besser anfühlen.


⚡Leistung: Einbettungen Masseneinfügung

Beitrag der Gemeinschaft von @tcx4c70 (PR #18)

Die Einbettungs-Generierungsaufträge verwenden jetzt beim Schreiben in die Vektordatenbank eine Masseneinfügung, was zu einer etwa 10-mal schnelleren Einbettungseinfügung führt. Dies beschleunigt die anfängliche Einrichtung und jede Neuerzeugung von Film-/Serien-Einbettungen erheblich.

Danke Adam für den Beitrag!🙏


Vollständiges Änderungsprotokoll

Neue Funktionen

  • Fügen Sie rotierende Fanart-Hintergrund-Header zu Personen- und Studio-Detailseiten hinzu
  • Job zur Bereicherung von Studio-/Netzwerklogos hinzufügen (enrich-studio-logos)
  • TMDB-Logos auf Studio-/Netzwerk-Detailseiten anzeigen
  • Hinzufügen von Medien-Image-Proxy-Endpunkt zur Verhinderung von gemischten Inhalten
  • Personendetailseite mit Filmografie-Karussells hinzufügen
  • Studio-Detailseite mit Inhaltskarussells hinzufügen
  • Watch-Statistiken Schauspieler/Regisseure/Studios/Netzwerke anklickbar machen
  • Fügen Sie den Schalter "Watching" zu Serien auf den Personen-/Studio-Detailseiten hinzu

Fehlerbehebungen

  • Beheben Sie gemischte Inhaltswarnungen beim Zugriff auf Aperture über HTTPS-Rückwärtsproxy
  • Horizontales Scrollen auf mobilen Geräten beheben
  • Beheben Sie die responsive Poster-Sizierung für einen gleichen Rasterabstand auf Mobilgeräten
  • React-Hooks-Fehler auf Detailseiten beheben (Memo vor frühen Rücksendungen verwenden)
  • Fix backdrop crossfade, um einen Double-Puffer-Ansatz für nahtlose Übergänge zu verwenden
  • Bild-Proxy auf alle verbleibenden direkten Emby/Jellyfin-Bild-URLs anwenden

Leistung

  • 10x schnelleres Einbetten über Bulk-Einsatz (danke @tcx4c70!)

Technisch

  • Neuer /api/discover/person/:name-Endpunkt mit Hintergrund-URLs
  • New /api/discover/studio/:name endpoint with backdrop URLs
  • Neue RotatingBackdrop-Komponente mit Vorladen und Crossfade
  • Added enrich-studio-logos to job scheduler defaults
  • useProxiedImageUrl-Hook und getProxiedImageUrl-Dienstprogramm hinzugefügt
  • Responsive Breakpoints zu mehreren Komponenten hinzugefügt

Lassen Sie es mich wie immer wissen, wenn Sie auf irgendwelche Probleme stoßen. Viel Spaß beim Anschauen!🍿

image.png.ca796b765ddc114ca3c8f555e150a26e.png

???

TheGru
Posted (edited)
29 minutes ago, beta666 said:

image.png.ca796b765ddc114ca3c8f555e150a26e.png

???

That specific 429 message is almost always insufficient_quota — meaning the user’s account/key has no available spend/quota.

 

Common causes:

 

  • They don’t have billing enabled / no payment method
  • Free trial credits expired
  • They set a hard spend limit (sometimes defaulting to $0)
  • They hit their monthly cap
  • They’re using a key from the wrong org/project that has no billing attached

 

 

This is different from a rate-limit 429. Rate limit errors are about request volume. This one is about billing/quota.

 

 

Log in to your OpenAI Platform account and check:

 

  1. Billing enabled + payment method exists
  2. Usage Limits / Hard limit isn’t set too low (or $0)
  3. Org/project for the API key actually has billing
  4. If they just changed billing, try generating a new API key

 

In the app I’m adding:

 

  • Better error handling to detect this case and show “Your key has no available quota/billing”
  • A “Key Health Check” request on key entry so it fails fast with guidance
  • Lower default concurrency (I batch things — totally fine for Tier 5, but not for new accounts)

 

 

 

TL;DR

 

 

If someone uses their own API key and gets this error, their OpenAI account doesn’t currently have quota/billing available. The fix is in their OpenAI billing/limits setup — not in the app.

Edited by TheGru
TheGru
Posted (edited)

Deleted

Edited by TheGru
  • Like 1
GoldSpacer
Posted

Hey, I am LOVING Aperture. How feasible would it be for the Top Picks to have an option to be based on popular picks via the internet rather than based on other emby users? I only have 3 total with vastly different tastes. 

Another idea if Aperture is able to create and remove libraries and assign them to users access, would be to make libraries combined with the playlist AI creation feature. Maybe have a configurable number of genres or playlists that would show as libraries. It's more a workaround until Emby adds the more customizable home screen, but with AI helping to make the playlists and libraries. 

TheGru
Posted
17 minutes ago, GoldSpacer said:

Hey, I am LOVING Aperture. How feasible would it be for the Top Picks to have an option to be based on popular picks via the internet rather than based on other emby users? I only have 3 total with vastly different tastes. 

Another idea if Aperture is able to create and remove libraries and assign them to users access, would be to make libraries combined with the playlist AI creation feature. Maybe have a configurable number of genres or playlists that would show as libraries. It's more a workaround until Emby adds the more customizable home screen, but with AI helping to make the playlists and libraries. 

Great suggestion for external top picks sourcing. I’d have to decide what source or sources to make available as a setting. Any ideas?

 

I think I understand your second question but for clarity can you provide a specific example?

beta666
Posted
3 minutes ago, TheGru said:

Great suggestion for external top picks sourcing. I’d have to decide what source or sources to make available as a setting. Any ideas?

 

I think I understand your second question but for clarity can you provide a specific example?

The best streaming providers (Netflix) (Prime) (Hbo Max) and so on.

The new stalling of 2026 films and series

GoldSpacer
Posted (edited)

I'm not sure providers, maybe give the option on imdb, rotten tomatoes, or others, or a combination of them.

For #2, I was thinking various playlists like holiday themed, super hero, top rated of some streaming service, or top recently viewed of some streaming service, top recently viewed of some genre, which could be made into libraries. Maybe a configurable number, so if there were 30 playlists, pick 10 of the 30 with the option to pin specific ones, like holiday ones, and make them libraries for all users.

Edited by GoldSpacer
added context
TheGru
Posted
2 minutes ago, GoldSpacer said:

I'm not sure providers, maybe give the option on imdb, rotten tomatoes, or others, or a combination of them.

For #2, I was thinking various playlists like holiday themed, super hero, top rated of some streaming service, or top recently viewed of some streaming service, top recently viewed of some genre, which could be made into libraries. Maybe a configurable number, so if there were 30 playlists, pick 10 of the 30 with the option to pin specific ones, like holiday ones.

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.

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