All apps · 0 apps
Aperture
Docker app from grtgbln's Repository
Overview
Readme
View on GitHubAperture
Aperture — AI-powered media recommendations for Emby & Jellyfin.
Aperture creates personalized recommendation libraries for your media server users using OpenAI embeddings and pgvector similarity search. Recommendations appear as virtual libraries in your media server's home screen, with support for both movies and TV series.
Quick Start
1. Download the docker-compose file for your platform
| Platform | File | Download |
|---|---|---|
| Unraid | docker-compose.unraid.yml |
Download |
| QNAP | docker-compose.qnap.yml |
Download |
| Synology | docker-compose.synology.yml |
Download |
| Windows | docker-compose.windows.yml |
Download ¹ |
| Linux/Other | docker-compose.prod.yml |
Download |
¹ Windows Users: For Docker Desktop with Emby/Jellyfin running natively on Windows, see the complete setup guide.
2. Configure the file
Edit the docker-compose file and set:
APP_BASE_URL— Your server's IP address (e.g.,http://192.168.1.100:3456)SESSION_SECRET— A random string (32+ characters)- Volume paths — Adjust to match your media folder locations
3. Create required folders
# Example for Unraid - adjust paths for your platform
mkdir -p /mnt/user/Media/ApertureLibraries
mkdir -p /mnt/user/appdata/aperture/backups
4. Start Aperture
docker-compose -f docker-compose.[your-platform].yml up -d
5. Complete the Setup Wizard
Open http://YOUR_SERVER_IP:3456 and follow the 11-step guided setup:
- Restore (Optional) — Restore from an existing backup if migrating
- Media Server — Connect to your Emby/Jellyfin server
- Source Libraries — Select which libraries to analyze
- File Locations — Configure path mappings for symlinks/STRM
- AI Recommendations — Configure library naming and cover images
- Validate — Verify output configuration and paths
- Users — Select which users receive recommendations
- Top Picks (Optional) — Configure global trending libraries
- AI / LLM — Enter your OpenAI API key (or configure Ollama/other providers)
- Initial Jobs — Run first-time sync with real-time progress
- Complete — Review summary and next steps
6. Log in
Use your Emby/Jellyfin admin credentials to access Aperture.
Updating
docker-compose -f docker-compose.[your-platform].yml pull
docker-compose -f docker-compose.[your-platform].yml up -d
Features
AI Recommendations
- Personalized Libraries — Creates dedicated "AI Picks" libraries for each user
- OpenAI Embeddings — Semantic vectors for all your media
- pgvector Similarity — Lightning-fast vector similarity search
- Configurable Algorithm — Tune weights for similarity, novelty, rating, and diversity
Media Support
- Movies — Full movie library sync with metadata, ratings, and watch history
- TV Series — Complete series and episode tracking with per-show recommendations
- Watch History — Automatic sync of viewing history including play counts and favorites
Rating System
- 10-Heart Ratings — Rate content from 1-10 hearts (Trakt.tv compatible)
- Rate from Any Poster — Click the heart icon on any poster
- Trakt.tv Sync — Bidirectional sync of ratings with Trakt
Personalization
- AI Taste Profiles — Natural language descriptions of user preferences
- Match Scores — Personalized percentage scores showing recommendation fit
- Recommendation Insights — Detailed breakdown of why each title was recommended
Top Picks (Global)
- Popularity-Based Content — Trending content across all users
- Multiple Output Modes — Libraries, Collections, and/or Playlists
- Rank Badges — Gold, silver, bronze badges for top 3 on posters
Symlinks & Artwork
- Full Artwork Preservation — Symlinks banner.jpg, clearlogo.png, landscape.jpg, and more
- Smart Subtitle Handling — Subtitles are symlinked and renamed to match video files
- Custom NFOs — Aperture generates NFOs with AI explanations while preserving original artwork
Backup & Restore
- Automatic Daily Backups — Database backed up at 1 AM (configurable)
- Restore During Setup — Restore from backup when setting up a new instance
- Admin Panel Restore — Restore from the Admin → Settings → System tab
- Configurable Retention — Set how many backups to keep
Admin Features
- Setup Wizard — Guided first-time configuration
- Job Management — Real-time progress, scheduling, and history
- Configurable Schedules — All job schedules adjustable via Admin → Jobs
- User Management — Per-user recommendation settings
- Cost Estimator — Built-in OpenAI API cost estimation
Default Job Schedules
All schedules are configurable in Admin → Jobs.
| Job | Default 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 |
Documentation
| Guide | Description |
|---|---|
| Admin Guide | Setup walkthrough, job management, algorithm tuning |
| User Guide | Features for end users, ratings, channels |
| Configuration | Volume setup, reverse proxy, Trakt integration |
| API Reference | Complete API endpoint documentation |
| Architecture | Technical overview, recommendation pipeline, database schema |
| Development | Local dev setup, scripts, contribution guidelines |
Tech Stack
- Backend: Fastify, TypeScript, PostgreSQL, pgvector
- Frontend: React, Vite, MUI, React Router
- AI: OpenAI Embeddings & GPT models
- Infrastructure: Docker, pnpm workspaces
License
Install Aperture on Unraid in a few clicks.
Find Aperture in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.
Requirements
Requires separate Jellyin/Emby media servers and pgvector database instances.
Related apps
Explore more like this
Explore allDetails
ghcr.io/dgruhin-hrizn/aperture:latestRuntime arguments
- Web UI
http://[IP]:[PORT:3456]/- Network
bridge- Privileged
- false
- Extra Params
--user 099:100
Template configuration
Container Port: 3456
- Target
- 3456
- Default
- 3456
- Value
- 3456
Database connection URL
- Target
- DATABASE_URL
- Default
- postgresql://aperture:password@IP_ADDRESS:5432/aperture
- Value
- postgresql://aperture:password@IP_ADDRESS:5432/aperture
Base URL for accessing the application
- Target
- APP_BASE_URL
- Default
- http://IP_ADDRESS:3456
- Value
- http://IP_ADDRESS:3456
Secret key, at least 32 characters
- Target
- SESSION_SECRET
Path where Aperture libraries will be stored. Should be inside your existing media server's library path.
- Target
- /aperture-libraries
Path to the root of your media library.
- Target
- /media
Path where backups will be stored
- Target
- /backups
- Default
- /mnt/user/appdata/aperture/backups
- Value
- /mnt/user/appdata/aperture/backups
Whether to run database migrations on container start
- Target
- RUN_MIGRATIONS_ON_START
- Default
- true|false
Set the Node environment. Not recommended to change.
- Target
- NODE_ENV
- Default
- production
- Value
- production
Internal port the application listens on. Not recommended to change.
- Target
- PORT
- Default
- 3456
- Value
- 3456