selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

Pictaria Server logo

Self-host Pictaria Server

v1.2.1

AI photo intelligence and curation for Immich libraries

ReleaseOpen SourceAGPL-3.0
Updated6 days ago
LanguageJavaScript
Setup difficultyModerate
Stars
196
Port
4080 (HTTP web UI and API)
Requires
Immich
Docker
ghcr.io/pictaria-ai/pictaria-server
Install with Docker Compose
Insights page with collection statistics and expanded photo timelineCurate page with stacks of related photos and suggested keepersSmart Albums page with scheduled rule-based Immich albumsFrame Metrics page with display ledger and most-shown photos

What is Pictaria Server?

Pictaria Server is a self-hosted web application that connects to your Immich photo library to provide deep insights, AI-powered enrichment, and curation tools. It runs as a single Node.js process (Docker or bare metal) with zero npm dependencies. Key capabilities include: Insights for collection statistics and timeline exploration; Enrich for AI photo classification using local models (Ollama, LM Studio, llama.cpp) or cloud providers (OpenAI, OpenRouter, Venice); Curate for human review of photo stacks with AI-assisted keeper suggestions; Smart Albums that keep real Immich albums synchronized to saved search rules; Frame Remote for live control of Pictaria Frame devices; Voice features for photo Q&A and text-to-speech; and Activity logging for audit trails. All configuration is managed through a web UI with runtime changes, no restart required. The server uses SQLite for local state and requires an Immich 2.0+ instance. Licensed under AGPL-3.0-only.

Should you self-host Pictaria Server?

Pictaria Server scores 48/100 on selfhost.directory (how scoring works) and ranks #25 of 41 in Photo Management. It has 196 GitHub stars.

It shipped 5 stable releases in the past year. The latest, v1.2.1, came out on 12 September 2026. New versions land roughly every 3 days.

Setup is moderate: expect some configuration beyond a single command. An official Docker image is available. It is AGPL-3.0-licensed and written mostly in JavaScript.

Its closest alternative on selfhost.directory is Ente (81/100, 29 693 stars). It scores higher overall, so compare the two before you pick. See Pictaria Server vs Ente side by side.

Features

  • Activity Log
  • AI Enrichment
  • Ambient Display
  • Automatic Backups
  • Frame Metrics
  • Frame Remote
  • Human Curation
  • Insights
  • Runtime Settings
  • Smart Albums
  • Voice assistant

Pictaria Server README

How to install Pictaria Server

Install Pictaria Server with Docker Compose

Docker and Docker Compose installed
Environment variables
IMMICH_BASE_URL, IMMICH_API_KEY, APP_PASSWORD, ALLOW_INSECURE_OPEN, SESSION_COOKIE_SECURE, BROWSER_ALLOWED_HOSTS, TRUSTED_PROXY_IPS, BACKUP_DIR, BACKUP_ENABLED, BACKUP_INTERVAL_HOURS, BACKUP_KEEP, ENRICH_ENABLED, ENRICH_SCHEDULE_ENABLED, ENRICH_SCHEDULE_TIME, ENRICH_SCHEDULE_TIME_ZONE, ENRICH_SCHEDULE_PHOTO_BUDGET, ENRICH_HISTORY_RUNS, ENRICH_HISTORY_LOGS, CAPTION_WRITEBACK, ENRICH_EMBEDDINGS_ENABLED, IMMICH_ML_URL, ENRICH_EMBEDDINGS_MODEL, IMAGE_SOURCE, INFERENCE_HOST_LABEL, MAX_FAILURES_PER_ASSET, PROMPT_VERSION, CURATE_BURST_GROUPING, CURATE_EMBEDDING_STACKS, REFEREE_GROUP_BUDGET_MB, OPENAI_API_KEY, DEFAULT_PROVIDER, CURATE_REFEREE_ENABLED, CURATE_STACK_REFEREE_ENABLED, CURATE_STACK_REFEREE_SCOPE, CURATE_KEEPER_REFEREE_ENABLED, CURATE_REFEREE_PROVIDER, CURATE_REFEREE_MODEL, TTS_PROVIDER, STT_PROVIDER, OPENAI_TTS_MODEL, OPENAI_TTS_VOICE, OPENAI_TTS_SPEED, OPENAI_TTS_FORMAT, OPENAI_TTS_INSTRUCTIONS, ELEVENLABS_API_KEY, ELEVENLABS_VOICE_ID, ELEVENLABS_TTS_MODEL, ELEVENLABS_OUTPUT_FORMAT, ELEVENLABS_REQUEST_TIMEOUT_MS, VOICE_PROSE_PROVIDER, VOICE_INTERESTING_MODEL, VOICE_ASK_MODEL, VOICE_PROSE_TIMEOUT_MS, OPENAI_INTERESTING_MODEL, OPENAI_INTERESTING_IMAGE_DETAIL, OPENAI_INTERESTING_MAX_OUTPUT_TOKENS, OPENAI_ASK_MODEL, OPENAI_ASK_MAX_OUTPUT_TOKENS, OPENAI_REQUEST_TIMEOUT_MS, VENICE_API_KEY, VENICE_MODEL, VENICE_BASE_URL, OPENROUTER_API_KEY, OPENROUTER_MODEL, OPENROUTER_BASE_URL, OPENAI_MODEL, OLLAMA_API_KEY, OLLAMA_MODEL, OLLAMA_BASE_URL, OLLAMA_LOCAL_API_KEY, OLLAMA_LOCAL_MODEL, OLLAMA_LOCAL_BASE_URL, LMSTUDIO_MODEL, LMSTUDIO_BASE_URL, LMSTUDIO_API_KEY, LMSTUDIO_MAX_TOKENS, LMSTUDIO_TEMPERATURE, OPENAI_COMPATIBLE_BASE_URL, OPENAI_COMPATIBLE_MODEL, OPENAI_COMPATIBLE_API_KEY, GEOCODING_PROVIDER, GEOAPIFY_API_KEY, GEOCODING_TIMEOUT_MS, GEOCODING_COORDINATE_PRECISION

PICTARIA_RELEASE=v1.2.1 mkdir pictaria-server && cd pictaria-server curl -fsSLO "https://raw.githubusercontent.com/pictaria-ai/pictaria-server/${PICTARIA_RELEASE}/docker-compose.yml" curl -fsSL -o .env "https://raw.githubusercontent.com/pictaria-ai/pictaria-server/${PICTARIA_RELEASE}/.env.example" chmod 600 .env

edit .env: set IMMICH_BASE_URL, IMMICH_API_KEY, and a non-empty APP_PASSWORD

docker compose config --images docker compose pull docker compose up -d

Production installs should select an explicit reviewed release. The source tag and matching versioned GHCR image keep the deployment inputs aligned.

How to configure Pictaria Server

  • ALLOW_INSECURE_OPENfalseDangerous explicit opt-in to run without authentication

    Dangerous explicit opt-in to run without authentication

    values: true|false

  • APP_PASSWORDProtects the API and web UI (env-only). Blank or missing refuses startup unless ALLOW_INSECURE_OPEN=true.

    Protects the API and web UI (env-only). Blank or missing refuses startup unless ALLOW_INSECURE_OPEN=true.

  • BACKUP_DIRBackup destination directory

    Backup destination directory

  • BACKUP_ENABLEDtrueEnable automatic backups

    Enable automatic backups

    values: true|false

  • BACKUP_INTERVAL_HOURS24Backup interval in hours

    Backup interval in hours

  • BACKUP_KEEP7Number of backups to keep

    Number of backups to keep

  • BROWSER_ALLOWED_HOSTSPublic custom domain(s) allowed to serve the browser UI and issue session cookies

    Public custom domain(s) allowed to serve the browser UI and issue session cookies

  • CAPTION_WRITEBACKfalseCopy AI captions into Immich descriptions

    Copy AI captions into Immich descriptions

    values: true|false

  • CURATE_BURST_GROUPINGtrueEnable burst grouping for curation

    Enable burst grouping for curation

    values: true|false

  • CURATE_EMBEDDING_STACKStrueEnable embedding-based stacks

    Enable embedding-based stacks

    values: true|false

  • CURATE_REFEREE_ENABLEDEnable AI referee for curation

    Enable AI referee for curation

    values: true|false

  • CURATE_STACK_REFEREE_ENABLEDEnable stack referee for curation

    Enable stack referee for curation

    values: true|false

  • CURATE_STACK_REFEREE_SCOPEuncertainStack referee scope

    Stack referee scope

    values: uncertain|all

  • DEFAULT_PROVIDERcloud_openaiInitial/infrastructure fallback for Enrich

    Initial/infrastructure fallback for Enrich

    values: cloud_openai|local_lmstudio|local_ollama|openai_compatible|openrouter|cloud_ollama|venice

  • ELEVENLABS_API_KEYElevenLabs API key

    ElevenLabs API key

  • ELEVENLABS_OUTPUT_FORMATElevenLabs output format

    ElevenLabs output format

  • ELEVENLABS_REQUEST_TIMEOUT_MSElevenLabs request timeout in ms

    ElevenLabs request timeout in ms

  • ELEVENLABS_TTS_MODELElevenLabs TTS model

    ElevenLabs TTS model

  • ELEVENLABS_VOICE_IDElevenLabs voice ID

    ElevenLabs voice ID

  • ENRICH_EMBEDDINGS_ENABLEDfalseEnable image embeddings via Immich ML

    Enable image embeddings via Immich ML

    values: true|false

  • ENRICH_EMBEDDINGS_MODELViT-B-32__openaiEmbeddings model identifier

    Embeddings model identifier

  • ENRICH_ENABLEDfalseEnable AI enrichment

    Enable AI enrichment

    values: true|false

  • ENRICH_SCHEDULE_ENABLEDfalseEnable scheduled enrichment runs

    Enable scheduled enrichment runs

    values: true|false

  • ENRICH_SCHEDULE_PHOTO_BUDGET100Maximum photos per scheduled enrichment run

    Maximum photos per scheduled enrichment run

  • ENRICH_SCHEDULE_TIME03:00Time of day for scheduled enrichment

    Time of day for scheduled enrichment

  • ENRICH_SCHEDULE_TIME_ZONEUTCTime zone for scheduled enrichment

    Time zone for scheduled enrichment

  • GEOAPIFY_API_KEYGeoapify API key

    Geoapify API key

  • GEOCODING_COORDINATE_PRECISIONGeocoding coordinate precision

    Geocoding coordinate precision

  • GEOCODING_PROVIDERReverse geocoding provider

    Reverse geocoding provider

    values: geoapify

  • GEOCODING_TIMEOUT_MSGeocoding timeout in ms

    Geocoding timeout in ms

  • HOST0.0.0.0Listen address

    Listen address

  • IMAGE_SOURCEpreviewImmich rendition sent to the model

    Immich rendition sent to the model

    values: preview|thumbnail|original

  • IMMICH_API_KEYAn Immich API key for your account

    An Immich API key for your account

  • IMMICH_BASE_URLServer-reachable Immich address over HTTP or HTTPS

    Server-reachable Immich address over HTTP or HTTPS

  • IMMICH_ML_URLImmich's machine-learning container URL

    Immich's machine-learning container URL

  • INFERENCE_HOST_LABELOptional operator-authored label for comparing inference machines

    Optional operator-authored label for comparing inference machines

  • LMSTUDIO_API_KEYLM Studio API key

    LM Studio API key

  • LMSTUDIO_BASE_URLhttp://127.0.0.1:1234/v1LM Studio base URL

    LM Studio base URL

  • LMSTUDIO_MAX_TOKENSLM Studio max tokens

    LM Studio max tokens

  • LMSTUDIO_MODELLM Studio model identifier

    LM Studio model identifier

  • LMSTUDIO_TEMPERATURELM Studio temperature

    LM Studio temperature

  • MAX_FAILURES_PER_ASSET2Maximum failures per asset before giving up

    Maximum failures per asset before giving up

  • OLLAMA_API_KEYOllama API key (for cloud Ollama)

    Ollama API key (for cloud Ollama)

  • OLLAMA_BASE_URLOllama base URL

    Ollama base URL

  • OLLAMA_LOCAL_API_KEYOllama local API key

    Ollama local API key

  • OLLAMA_LOCAL_BASE_URLOllama local base URL

    Ollama local base URL

  • OLLAMA_LOCAL_MODELOllama local model

    Ollama local model

  • OLLAMA_MODELOllama model identifier

    Ollama model identifier

  • OPENAI_API_KEYOpenAI API key for cloud enrichment

    OpenAI API key for cloud enrichment

  • OPENAI_ASK_MAX_OUTPUT_TOKENSOpenAI ask max output tokens

    OpenAI ask max output tokens

  • OPENAI_ASK_MODELOpenAI ask model

    OpenAI ask model

  • OPENAI_COMPATIBLE_API_KEYOpenAI-compatible API key

    OpenAI-compatible API key

  • OPENAI_COMPATIBLE_BASE_URLOpenAI-compatible base URL

    OpenAI-compatible base URL

  • OPENAI_COMPATIBLE_MODELOpenAI-compatible model

    OpenAI-compatible model

  • OPENAI_INTERESTING_IMAGE_DETAILOpenAI interesting image detail

    OpenAI interesting image detail

  • OPENAI_INTERESTING_MAX_OUTPUT_TOKENSOpenAI interesting max output tokens

    OpenAI interesting max output tokens

  • OPENAI_INTERESTING_MODELOpenAI interesting model

    OpenAI interesting model

  • OPENAI_REQUEST_TIMEOUT_MSOpenAI request timeout in ms

    OpenAI request timeout in ms

  • OPENAI_TTS_FORMATOpenAI TTS format

    OpenAI TTS format

  • OPENAI_TTS_INSTRUCTIONSOpenAI TTS instructions

    OpenAI TTS instructions

  • OPENAI_TTS_MODELOpenAI TTS model

    OpenAI TTS model

  • OPENAI_TTS_SPEEDOpenAI TTS speed

    OpenAI TTS speed

  • OPENAI_TTS_VOICEOpenAI TTS voice

    OpenAI TTS voice

  • OPENROUTER_API_KEYOpenRouter API key

    OpenRouter API key

  • OPENROUTER_MODELOpenRouter model identifier

    OpenRouter model identifier

  • PORT4080Listen port

    Listen port

  • PROMPT_VERSIONv2Prompt version

    Prompt version

  • REFEREE_GROUP_BUDGET_MB96Referee group budget in MB

    Referee group budget in MB

  • SESSION_COOKIE_SECUREfalseAdds the Secure attribute to the browser session cookie

    Adds the Secure attribute to the browser session cookie

    values: true|false

  • TRUSTED_PROXY_IPSComma-separated exact IPs or CIDRs for reverse proxies allowed to supply X-Forwarded-For

    Comma-separated exact IPs or CIDRs for reverse proxies allowed to supply X-Forwarded-For

  • TTS_PROVIDERText-to-speech provider

    Text-to-speech provider

    values: openai|elevenlabs

  • VENICE_API_KEYVenice API key

    Venice API key

  • VENICE_MODELVenice model identifier

    Venice model identifier

  • VOICE_ASK_MODELVoice ask model

    Voice ask model

  • VOICE_INTERESTING_MODELVoice interesting model

    Voice interesting model

  • VOICE_PROSE_PROVIDERVoice prose provider

    Voice prose provider

  • VOICE_PROSE_TIMEOUT_MSVoice prose timeout in ms

    Voice prose timeout in ms

  • WEATHER_DEFAULT_LOCATIONDefault weather place (any city name or US zip)

    Default weather place (any city name or US zip)

Pictaria Server releases & version history

More in Photo Management

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…