immich/skills/immich-layer/SKILL.md
Immich photo management server on port 2283 with PostgreSQL and Redis. Use when working with Immich, photo management, or media library services.
npx skillsauth add overthinkos/overthink-plugins immich-layerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
| Property | Value |
|----------|-------|
| Dependencies | supervisord, nodejs, postgresql, redis, ffmpeg |
| Ports | 2283 |
| Volumes | library -> ~/.immich/library, cache -> ~/.immich/cache, import -> ~/.immich/import, external -> ~/.immich/external |
| Service | immich-db-init (oneshot, priority 15), immich-server (priority 30) |
| Route | immich.localhost:2283 |
| Install files | task: |
| Variable | Value |
|----------|-------|
| IMMICH_VERSION | v2.7.5 |
| IMMICH_HOST / IMMICH_PORT | 0.0.0.0 / 2283 |
| IMMICH_MEDIA_LOCATION | ~/.immich/library |
| IMMICH_MACHINE_LEARNING_ENABLED | false |
| DB_HOSTNAME / DB_DATABASE_NAME | 127.0.0.1 / immich |
| DB_USERNAME / DB_PASSWORD | immich / immich |
| REDIS_HOSTNAME / REDIS_PORT | 127.0.0.1 / 6379 |
| NODE_ENV | production |
The candy is multi-distro — image libraries are declared per distro:
vips, vips-devel, perl-Image-ExifTool, libheif, LibRaw, gcc-c++, make, unziplibvips (no separate -devel split — headers ship in the same package), libheif, libraw, perl-image-exiftool, gcc (includes g++), make, unzipNote: FFmpeg is provided via the ffmpeg dependency candy rather than installed directly.
The root-phase tasks download Immich source, builds the server, web UI, and core plugin:
pnpm install --frozen-lockfile && pnpm --filter immich build && pnpm --filter immich deploy --prod /opt/immich/serverpnpm --filter @immich/sdk --filter immich-web buildextism-js (v1.6.0) and binaryen (v124), then pnpm run build in plugins/ to compile TypeScript → WASM (plugin.wasm). Build tools are cleaned up after compilation./docker-entrypoint-initdb.d/01-immich-extensions.sql creates vector, vchord CASCADE, and earthdistance CASCADE extensions (runs during first initdb only)/usr/local/bin/immich-db-migrate.sh runs on every container start via the immich-db-init supervisord service. Waits for PostgreSQL, then idempotently ensures vector, earthdistance, and vchord (if available) extensions exist. Handles both fresh installs and upgrades of existing databases./usr/local/bin/immich-server-start.sh waits for PostgreSQL to be ready before starting the Node.js process. Eliminates the crash-restart loop that previously occurred when supervisord started immich-server before PostgreSQL finished recovery.All pnpm commands use npm_config_cache=/tmp/npm-root-cache to avoid creating root-owned files in the container user's ~/.cache directory.
| Name | Env Vars |
|------|----------|
| db-password | DB_PASSWORD, POSTGRES_PASSWORD |
# charly.yml
immich:
candy:
- immich
/charly-immich:immich/charly-immich:immich-ml/charly-infrastructure:supervisord -- process manager dependency/charly-coder:nodejs -- Node.js runtime dependency (provides pnpm for the Immich build)/charly-infrastructure:postgresql -- database dependency/charly-infrastructure:redis -- cache dependency/charly-selkies:ffmpeg -- FFmpeg multimedia (nonfree codecs) — required dependency/charly-infrastructure:vectorchord -- VectorChord extension (migration script creates it if available)/charly-immich:immich-ml -- optional ML backendUse when the user asks about:
immich.localhost route/charly-image:layer — candy authoring reference (charly.yml schema, task verbs, service declarations)/charly-check:check — declarative testing (check: block, charly check box, charly check live)tools
Use when authoring or modifying a charly PLUGIN — a candy with a `plugin:` block that contributes Providers (verbs/kinds/deploy-targets/steps/builders/commands), its own CUE schema, builtin (compiled-in) or external (out-of-tree git repo). Covers the unified Provider model, the per-plugin CUE-schema contract (single source → Go params for dev + schema-over-Describe RPC for runtime), the SDK, and the loader.
tools
The CUE data-validation / configuration CLI (cue), pinned to v0.16.1. Use when working with the cue candy, installing the cue binary into a box or onto a target:local dev host, or running the offline schema-vendoring pipeline that feeds charly's egress validation.
tools
CUE EGRESS validation — validating (and, where it adds value, generating) the config files charly WRITES to a system BEFORE the bytes hit disk. MUST be invoked before working on charly/egress.go, the vendored schemas under candy/plugin-egress/egress-schemas/vendor/, the ValidateEgress / registerVendoredEgressKind path, the offline `task cue:vendor` pipeline, or adding an egress schema for any written artifact (cloud-init, k8s manifests, traefik routes, runtime config, install ledger, systemd/quadlet units, ssh_config, libvirt XML).
tools
Kubernetes cluster-probe declarative check verb — the `kube:` check verb (nodes, pods, ingress, storage class, addon health, apply/delete, and arbitrary resource GETs) served out-of-process by the candy/plugin-kube plugin (vendored client-go; no external kubectl required).