Immich: Difference between revisions
Cleanup config |
Updated the immich hardware acceleration docs to reflect the changes in https://github.com/NixOS/nixpkgs/pull/376339 |
||
(6 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
[https://immich.app Immich] is | [https://immich.app Immich] is a self-hosted photo and video management solution. | ||
== Installation == | |||
To install Immich, add the following to your NixOS configuration: | |||
{{file|/etc/nixos/configuration.nix|nix|3=services.immich.enable = true; | {{file|/etc/nixos/configuration.nix|nix|3=services.immich.enable = true; | ||
}} | services.immich.port = 2283;}} | ||
More options are available: {{nixos:option|services.immich.}} | |||
== Tips and Tricks == | |||
=== Hardware Accelerated Transcoding | === Enabling Hardware Accelerated Video Transcoding === | ||
Add the Immich user to the <code>render</code> and <code>video</code> groups, override the <code>PrivateDevices</code> service config setting to allow the service to access <code>/dev/dri/</code> and enable [[Accelerated Video Playback]] on your system:{{file|/etc/nixos/configuration.nix|nix|3=# `null` will give access to all devices. | |||
# You may want to restrict this by using something like `[ "/dev/dri/renderD128" ]` | |||
services.immich.accelerationDevices = null; | |||
hardware.graphics = { | |||
# ... | |||
# See: https://wiki.nixos.org/wiki/Accelerated_Video_Playback | |||
} | }; | ||
= | users.users.immich.extraGroups = [ "video" "render" ]; }} | ||
=== Using Immich behind Nginx === | |||
This is a typical [[Nginx]] configuration for Immich: | |||
{{file|/etc/nixos/configuration.nix|nix|3=services.nginx.virtualHosts."immich.example.com" = { | {{file|/etc/nixos/configuration.nix|nix|3=services.nginx.virtualHosts."immich.example.com" = { | ||
enableACME = true; | enableACME = true; | ||
Line 28: | Line 30: | ||
proxyPass = "http://[::1]:${toString config.services.immich.port}"; | proxyPass = "http://[::1]:${toString config.services.immich.port}"; | ||
proxyWebsockets = true; | proxyWebsockets = true; | ||
recommendedProxySettings = true; | |||
extraConfig = '' | |||
client_max_body_size 50000M; | |||
proxy_read_timeout 600s; | |||
proxy_send_timeout 600s; | |||
send_timeout 600s; | |||
''; | |||
}; | }; | ||
}; | }; | ||
}} | }} | ||
[[Category:Server]] | [[Category:Server]] | ||
[[Category:Web Applications]] | [[Category:Web Applications]] |
Latest revision as of 07:33, 5 February 2025
Immich is a self-hosted photo and video management solution.
Installation
To install Immich, add the following to your NixOS configuration:

/etc/nixos/configuration.nix
services.immich.enable = true;
services.immich.port = 2283;
More options are available: services.immich.
Tips and Tricks
Enabling Hardware Accelerated Video Transcoding
Add the Immich user to the render
and video
groups, override the PrivateDevices
service config setting to allow the service to access /dev/dri/
and enable Accelerated Video Playback on your system:

/etc/nixos/configuration.nix
# `null` will give access to all devices.
# You may want to restrict this by using something like `[ "/dev/dri/renderD128" ]`
services.immich.accelerationDevices = null;
hardware.graphics = {
# ...
# See: https://wiki.nixos.org/wiki/Accelerated_Video_Playback
};
users.users.immich.extraGroups = [ "video" "render" ];
Using Immich behind Nginx
This is a typical Nginx configuration for Immich:

/etc/nixos/configuration.nix
services.nginx.virtualHosts."immich.example.com" = {
enableACME = true;
forceSSL = true;
locations."/" = {
proxyPass = "http://[::1]:${toString config.services.immich.port}";
proxyWebsockets = true;
recommendedProxySettings = true;
extraConfig = ''
client_max_body_size 50000M;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
send_timeout 600s;
'';
};
};