Eyeris

Eyeris

Docker app from Vonhex's Repository

Overview

Self-hosted photo manager for NAS and local libraries. Eyeris scans your photos, generates thumbnails, and gives you a fast searchable gallery — all on your own hardware. AI-powered image descriptions and tagging are offloaded to a connected A-Eye instance; Eyeris imports the results automatically. No cloud, no subscriptions, no local LLM required. Features include: A-Eye integration for AI descriptions and tags, EXIF and GPS metadata, duplicate and blurry photo detection, album organisation, SearXNG web image search, and a real-time dashboard.

Eyeris

Latest Release Docker License

Self-hosted AI photo manager. Your Pictures. Fast. Easy. Simple.

[!WARNING] Eyeris is designed for use on a trusted local network only. It has no brute-force protection on the login endpoint, no multi-user access control, and image URLs embed session tokens that appear in server logs. Do not expose it directly to the internet. If you need remote access, use a VPN or put it behind Cloudflare Access — not a plain public tunnel.


How do I install it?

Who it's for Method Guide
Unraid users Manual install via template — see the wiki Unraid →
Everyone else (Linux / Windows / macOS with Docker) Run ./docker-start.sh Docker →
Developers Run ./start.sh — Python + Node directly, no Docker Dev →

Not sure? Use the Docker path. It works on any OS and handles everything automatically.


Quick Start (Docker)

# 1. Clone the repo
git clone https://github.com/vonhex/Eyeris.git
cd Eyeris

# 2. Run the start script — it will create .env and tell you what to fill in
chmod +x docker-start.sh
./docker-start.sh

# 3. Edit .env with your NAS credentials (SMB_HOST, SMB_USERNAME, etc.)
nano .env

# 4. Run again — pulls the image and starts the container
./docker-start.sh

Open http://localhost:8000 — default username is eyeris, password is set on first run.


Features

Gallery & Browsing

  • Infinite-scroll gallery with thumbnails, favorites, and multi-select bulk actions
  • Filter by tag, category, album, folder, camera, location, date range, GPS, or quality issue
  • Sort by date taken, date added, filename, or random
  • Video support (MP4, MKV, MOV, AVI, WebM and more) with thumbnail preview
  • Untagged view shows both images and videos with no tags yet

Image Viewer

  • Desktop: mouse-wheel zoom (up to 8×), click-drag to pan, double-click to toggle zoom, keyboard ← → to navigate
  • Mobile: full-screen view, pinch-to-zoom, horizontal swipe to navigate between images, swipe-up bottom sheet to reveal metadata and editing controls
  • Scroll-to-top button appears site-wide when scrolling long pages

AI Analysis

  • SigLIP zero-shot tag classification against ~300 candidates — runs locally on GPU during scan
  • YOLOv8 + FaceNet face detection and bounding-box metadata per image
  • XMP sidecar ingestion: tags and descriptions written by external tools are read automatically during scan

A-Eye Integration

  • Connect to a self-hosted A-Eye instance from the Settings page
  • Send untagged images and videos to A-Eye for AI analysis with one click from the Dashboard
  • Video thumbnails are sent automatically when a video has no tags
  • Tags and descriptions written by A-Eye are auto-imported every 5 minutes — no manual re-import needed
  • Supports HTTP Basic Auth for protected A-Eye instances
  • A-Eye URL, username, and password persist across container updates

Metadata & EXIF

  • Date taken, GPS location with OpenStreetMap link, reverse-geocoded city/country
  • Camera make/model, lens model, aperture, shutter speed, ISO, focal length

Organisation

  • Tag editor per image + bulk tag editor across selections
  • Category and album assignment
  • Duplicate detection via perceptual hash

System

  • Two-phase async scan pipeline with live progress bar
  • File-watcher for near-real-time new image detection
  • Settings page with runtime .env editing — all settings survive container recreation
  • Dashboard shows accurate untagged counts for both images and videos

Screenshots

Gallery & Search

Gallery

AI Tag Cloud

Tags

System Dashboard

Dashboard

Blurry Photo Detection

Blurry


License

PolyForm Noncommercial License 1.0.0 — free to use and modify, not for commercial use or resale. For commercial licensing contact lucashjantzen@gmail.com.

Requirements

Optional but recommended: a running A-Eye instance for AI image descriptions and tagging. Optional: MariaDB for large libraries (SQLite used by default).

Related apps

Details

Repository
ghcr.io/vonhex/eyeris:latest
Last Updated2026-10-16
First Seen2026-05-04

Runtime arguments

Web UI
http://[IP]:[PORT:8000]/
Network
bridge
Shell
bash
Privileged
false

Template configuration

Web UI PortPorttcp

Port for the Eyeris web interface and API.

Target
8000
Default
8000
Value
8000
Photo DirectoryPathrw

Your photo library — local folder or SMB/NFS mount point.

Target
/data/images
Default
/mnt/user/Pictures/
Value
/mnt/user/Pictures/
ThumbnailsPathrw

Where Eyeris stores generated thumbnails and face crop cache.

Target
/data/thumbnails
Default
/mnt/user/appdata/eyeris/thumbnails/
Value
/mnt/user/appdata/eyeris/thumbnails/
DatabasePathrw

SQLite database storage. Ignored if DB_HOST is set.

Target
/data/db
Default
/mnt/user/appdata/eyeris/db/
Value
/mnt/user/appdata/eyeris/db/
Config file (.env)Pathrw

Persistent config file — Eyeris reads and writes settings here. Create an empty file at this path before first run.

Target
/app/.env
Default
/mnt/user/appdata/eyeris/eyeris.env
Value
/mnt/user/appdata/eyeris/eyeris.env
NAS HostVariable

IP or hostname of your NAS. Leave empty if photos are already accessible via the Photo Directory path above.

Target
SMB_HOST
NAS UsernameVariable

SMB/CIFS username for your NAS.

Target
SMB_USERNAME
NAS PasswordVariable

SMB/CIFS password for your NAS.

Target
SMB_PASSWORD
NAS SharesVariable

Comma-separated share names to scan, e.g. photos,media,camera-uploads

Target
SMB_SHARES
A-Eye URLVariable

URL of your A-Eye instance, e.g. http://192.168.1.100:7171. Connect A-Eye to enable AI image descriptions and automatic tagging.

Target
AEYE_URL
A-Eye UsernameVariable

Username for HTTP Basic Auth on your A-Eye instance. Leave empty if A-Eye is unauthenticated.

Target
AEYE_USER
A-Eye PasswordVariable

Password for HTTP Basic Auth on your A-Eye instance.

Target
AEYE_PASS
SearXNG URLVariable

URL of a SearXNG instance for the web image search feature (optional).

Target
SEARXNG_URL
Scan WorkersVariable

Number of parallel scan workers. Raise to 3-4 on fast systems; lower if your system struggles.

Target
SCAN_CONCURRENCY
Default
2
Value
2
Scan Interval (minutes)Variable

How often Eyeris rescans for new photos.

Target
SCAN_INTERVAL_MINUTES
Default
60
Value
60
Scan Schedule EnabledVariable

Set to true to restrict scanning to a time window (e.g. overnight only).

Target
SCAN_SCHEDULE_ENABLED
Default
false
Value
false
Scan Schedule StartVariable

Start of the allowed scan window (24-hour HH:MM). Only used when SCAN_SCHEDULE_ENABLED=true.

Target
SCAN_SCHEDULE_START
Default
22:00
Value
22:00
Scan Schedule EndVariable

End of the allowed scan window (24-hour HH:MM). An end time before the start time crosses midnight.

Target
SCAN_SCHEDULE_END
Default
06:00
Value
06:00
MariaDB HostVariable

MariaDB host IP or hostname. Leave empty to use the built-in SQLite database (recommended for most users).

Target
DB_HOST
MariaDB PortVariable

MariaDB port.

Target
DB_PORT
Default
3306
Value
3306
MariaDB UserVariable

MariaDB username.

Target
DB_USER
Default
root
Value
root
MariaDB PasswordVariable

MariaDB password.

Target
DB_PASSWORD
MariaDB DatabaseVariable

MariaDB database name.

Target
DB_NAME
Default
image_catalog
Value
image_catalog