[{"data":1,"prerenderedAt":1461},["ShallowReactive",2],{"navigation_docs_en":3,"-en-serveex-cloud-immich-":377,"-en-serveex-cloud-immich--surround":1456},[4,16,94,262,271,332],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":15},"About","i-noto-star","\u002Fen\u002Fabout","en\u002F1.about",[10],{"title":11,"path":12,"stem":13,"icon":14},"Welcome","\u002Fen\u002Fabout\u002Fwelcome","en\u002F1.about\u002F1.welcome","i-lucide-home",false,{"title":17,"icon":18,"path":19,"stem":20,"children":21,"page":15},"General","i-noto-open-book","\u002Fen\u002Fgeneral","en\u002F2.general",[22,26,44,58,76],{"title":17,"path":23,"stem":24,"icon":25},"\u002Fen\u002Fgeneral\u002Fsummary","en\u002F2.general\u002F1.summary","i-lucide-bookmark",{"title":27,"icon":28,"path":29,"stem":30,"children":31,"page":15},"Networking","i-lucide-network","\u002Fen\u002Fgeneral\u002Fnetworking","en\u002F2.general\u002F2.networking",[32,36,40],{"title":33,"path":34,"stem":35},"NAT & DHCP","\u002Fen\u002Fgeneral\u002Fnetworking\u002Fnat","en\u002F2.general\u002F2.networking\u002F1.nat",{"title":37,"path":38,"stem":39},"DNS Zone","\u002Fen\u002Fgeneral\u002Fnetworking\u002Fdns","en\u002F2.general\u002F2.networking\u002F2.dns",{"title":41,"path":42,"stem":43},"Samba","\u002Fen\u002Fgeneral\u002Fnetworking\u002Fsamba","en\u002F2.general\u002F2.networking\u002F3.samba",{"title":45,"icon":46,"path":47,"stem":48,"children":49,"page":15},"Storage","i-lucide-hard-drive","\u002Fen\u002Fgeneral\u002Fstorage","en\u002F2.general\u002F3.storage",[50,54],{"title":51,"path":52,"stem":53},"RAID","\u002Fen\u002Fgeneral\u002Fstorage\u002Fraid","en\u002F2.general\u002F3.storage\u002F1.raid",{"title":55,"path":56,"stem":57},"ZFS","\u002Fen\u002Fgeneral\u002Fstorage\u002Fzfs","en\u002F2.general\u002F3.storage\u002F2.zfs",{"title":59,"icon":60,"path":61,"stem":62,"children":63,"page":15},"Hardware","i-lucide-server","\u002Fen\u002Fgeneral\u002Fhardware","en\u002F2.general\u002F4.hardware",[64,68,72],{"title":65,"path":66,"stem":67},"The Basics","\u002Fen\u002Fgeneral\u002Fhardware\u002Fbasics","en\u002F2.general\u002F4.hardware\u002F1.basics",{"title":69,"path":70,"stem":71},"Network","\u002Fen\u002Fgeneral\u002Fhardware\u002Fnetwork","en\u002F2.general\u002F4.hardware\u002F2.network",{"title":73,"path":74,"stem":75},"The ProloNAS","\u002Fen\u002Fgeneral\u002Fhardware\u002Fprolonas","en\u002F2.general\u002F4.hardware\u002F3.prolonas",{"title":77,"icon":78,"path":79,"stem":80,"children":81,"page":15},"Linux tips for dummies","i-lucide-terminal","\u002Fen\u002Fgeneral\u002Flinux","en\u002F2.general\u002F5.linux",[82,86,90],{"title":83,"path":84,"stem":85},"Command line basics","\u002Fen\u002Fgeneral\u002Flinux\u002Fcli-basics","en\u002F2.general\u002F5.linux\u002F1.cli-basics",{"title":87,"path":88,"stem":89},"Folders and partitions","\u002Fen\u002Fgeneral\u002Flinux\u002Ffilesystem","en\u002F2.general\u002F5.linux\u002F2.filesystem",{"title":91,"path":92,"stem":93},"Handy CLI tools","\u002Fen\u002Fgeneral\u002Flinux\u002Fhandy-tools","en\u002F2.general\u002F5.linux\u002F3.handy-tools",{"title":95,"icon":96,"path":97,"stem":98,"children":99,"page":15},"Serveex","i-noto-microscope","\u002Fen\u002Fserveex","en\u002F3.serveex",[100,104,126,144,170,188,202,216,234,248],{"title":101,"path":102,"stem":103,"icon":25},"Introduction","\u002Fen\u002Fserveex\u002Fintroduction","en\u002F3.serveex\u002F1.introduction",{"title":105,"icon":106,"path":107,"stem":108,"children":109,"page":15},"Server core","i-lucide-server-cog","\u002Fen\u002Fserveex\u002Fcore","en\u002F3.serveex\u002F2.core",[110,114,118,122],{"title":111,"path":112,"stem":113},"Debian 13","\u002Fen\u002Fserveex\u002Fcore\u002Finstallation","en\u002F3.serveex\u002F2.core\u002F1.installation",{"title":115,"path":116,"stem":117},"Docker","\u002Fen\u002Fserveex\u002Fcore\u002Fdocker","en\u002F3.serveex\u002F2.core\u002F2.docker",{"title":119,"path":120,"stem":121},"Wireguard","\u002Fen\u002Fserveex\u002Fcore\u002Fwireguard","en\u002F3.serveex\u002F2.core\u002F3.wireguard",{"title":123,"path":124,"stem":125},"SWAG","\u002Fen\u002Fserveex\u002Fcore\u002Fswag","en\u002F3.serveex\u002F2.core\u002F4.swag",{"title":127,"icon":128,"path":129,"stem":130,"children":131,"page":15},"Security","i-lucide-shield","\u002Fen\u002Fserveex\u002Fsecurity","en\u002F3.serveex\u002F3.security",[132,136,140],{"title":133,"path":134,"stem":135},"Cloudflare Zero Trust","\u002Fen\u002Fserveex\u002Fsecurity\u002Fcloudflare","en\u002F3.serveex\u002F3.security\u002F2.cloudflare",{"title":137,"path":138,"stem":139},"TinyAuth","\u002Fen\u002Fserveex\u002Fsecurity\u002Ftinyauth","en\u002F3.serveex\u002F3.security\u002F3.tinyauth",{"title":141,"path":142,"stem":143},"Pocket ID","\u002Fen\u002Fserveex\u002Fsecurity\u002Fpocket-id","en\u002F3.serveex\u002F3.security\u002F4.pocket-id",{"title":145,"icon":146,"path":147,"stem":148,"children":149,"page":15},"Monitoring","i-lucide-chart-no-axes-column","\u002Fen\u002Fserveex\u002Fmonitoring","en\u002F3.serveex\u002F4.monitoring",[150,154,158,162,166],{"title":151,"path":152,"stem":153},"Uptime-Kuma","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fuptime-kuma","en\u002F3.serveex\u002F4.monitoring\u002F1.uptime-kuma",{"title":155,"path":156,"stem":157},"Dozzle","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fdozzle","en\u002F3.serveex\u002F4.monitoring\u002F2.dozzle",{"title":159,"path":160,"stem":161},"Speedtest Tracker","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fspeedtest-tracker","en\u002F3.serveex\u002F4.monitoring\u002F3.speedtest-tracker",{"title":163,"path":164,"stem":165},"Beszel","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fbeszel","en\u002F3.serveex\u002F4.monitoring\u002F4.beszel",{"title":167,"path":168,"stem":169},"UpSnap","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fupsnap","en\u002F3.serveex\u002F4.monitoring\u002F5.upsnap",{"title":171,"icon":172,"path":173,"stem":174,"children":175,"page":15},"Media & Seedbox","i-lucide-list-video","\u002Fen\u002Fserveex\u002Fmedia","en\u002F3.serveex\u002F5.media",[176,180,184],{"title":177,"path":178,"stem":179},"Jellyfin","\u002Fen\u002Fserveex\u002Fmedia\u002Fjellyfin","en\u002F3.serveex\u002F5.media\u002F1.jellyfin",{"title":181,"path":182,"stem":183},"Qbittorrent","\u002Fen\u002Fserveex\u002Fmedia\u002Fqbittorrent","en\u002F3.serveex\u002F5.media\u002F2.qbittorrent",{"title":185,"path":186,"stem":187},"Automation","\u002Fen\u002Fserveex\u002Fmedia\u002Fservarr","en\u002F3.serveex\u002F5.media\u002F3.servarr",{"title":189,"icon":190,"path":191,"stem":192,"children":193,"page":15},"Cloud Drive & Photos","i-lucide-cloud-upload","\u002Fen\u002Fserveex\u002Fcloud","en\u002F3.serveex\u002F6.cloud",[194,198],{"title":195,"path":196,"stem":197},"Immich","\u002Fen\u002Fserveex\u002Fcloud\u002Fimmich","en\u002F3.serveex\u002F6.cloud\u002F1.immich",{"title":199,"path":200,"stem":201},"Nextcloud","\u002Fen\u002Fserveex\u002Fcloud\u002Fnextcloud","en\u002F3.serveex\u002F6.cloud\u002F2.nextcloud",{"title":203,"icon":204,"path":205,"stem":206,"children":207,"page":15},"File & share","i-lucide-folder-tree","\u002Fen\u002Fserveex\u002Ffiles","en\u002F3.serveex\u002F7.files",[208,212],{"title":209,"path":210,"stem":211},"File Browser Quantum","\u002Fen\u002Fserveex\u002Ffiles\u002Ffile-browser-quantum","en\u002F3.serveex\u002F7.files\u002F1.file-browser-quantum",{"title":213,"path":214,"stem":215},"Pingvin","\u002Fen\u002Fserveex\u002Ffiles\u002Fpingvin","en\u002F3.serveex\u002F7.files\u002F2.pingvin",{"title":217,"icon":218,"path":219,"stem":220,"children":221,"page":15},"Developpement","i-lucide-code-xml","\u002Fen\u002Fserveex\u002Fdevelopment","en\u002F3.serveex\u002F8.development",[222,226,230],{"title":223,"path":224,"stem":225},"Code-Server","\u002Fen\u002Fserveex\u002Fdevelopment\u002Fcode-server","en\u002F3.serveex\u002F8.development\u002F1.code-server",{"title":227,"path":228,"stem":229},"Forgejo","\u002Fen\u002Fserveex\u002Fdevelopment\u002Fforgejo","en\u002F3.serveex\u002F8.development\u002F2.forgejo",{"title":231,"path":232,"stem":233},"IT Tools","\u002Fen\u002Fserveex\u002Fdevelopment\u002Fit-tools","en\u002F3.serveex\u002F8.development\u002F3.it-tools",{"title":235,"icon":236,"path":237,"stem":238,"children":239,"page":15},"Useful Apps","i-lucide-award","\u002Fen\u002Fserveex\u002Fapps","en\u002F3.serveex\u002F9.apps",[240,244],{"title":241,"path":242,"stem":243},"Adguard Home","\u002Fen\u002Fserveex\u002Fapps\u002Fadguard","en\u002F3.serveex\u002F9.apps\u002F1.adguard",{"title":245,"path":246,"stem":247},"Vaultwarden","\u002Fen\u002Fserveex\u002Fapps\u002Fvaultwarden","en\u002F3.serveex\u002F9.apps\u002F2.vaultwarden",{"title":249,"icon":250,"path":251,"stem":252,"children":253,"page":15},"Advanced","i-lucide-flask-conical","\u002Fen\u002Fserveex\u002Fadvanced","en\u002F3.serveex\u002F91.advanced",[254,258],{"title":255,"path":256,"stem":257},"Authentik","\u002Fen\u002Fserveex\u002Fadvanced\u002Fauthentik","en\u002F3.serveex\u002F91.advanced\u002F1.authentik",{"title":259,"path":260,"stem":261},"Arcane","\u002Fen\u002Fserveex\u002Fadvanced\u002Farcane","en\u002F3.serveex\u002F91.advanced\u002F2.arcane",{"title":263,"icon":264,"path":265,"stem":266,"children":267,"page":15},"Stockeex","i-noto-computer-disk","\u002Fen\u002Fstockeex","en\u002F4.stockeex",[268],{"title":101,"path":269,"stem":270,"icon":25},"\u002Fen\u002Fstockeex\u002Fintroduction","en\u002F4.stockeex\u002F1.introduction",{"title":272,"icon":273,"path":274,"stem":275,"children":276,"page":15},"My nonsense","i-noto-test-tube","\u002Fen\u002Fnonsense","en\u002F5.nonsense",[277,280,302],{"title":272,"path":278,"stem":279,"icon":25},"\u002Fen\u002Fnonsense\u002Fsummary","en\u002F5.nonsense\u002F1.summary",{"title":281,"icon":282,"path":283,"stem":284,"children":285,"page":15},"Python","i-lucide-file-code-2","\u002Fen\u002Fnonsense\u002Fpython","en\u002F5.nonsense\u002F2.python",[286,290,294,298],{"title":287,"path":288,"stem":289},"Nvidia Stock Bot","\u002Fen\u002Fnonsense\u002Fpython\u002Fnvidia-stock-bot","en\u002F5.nonsense\u002F2.python\u002F1.nvidia-stock-bot",{"title":291,"path":292,"stem":293},"Adguard CIDRE","\u002Fen\u002Fnonsense\u002Fpython\u002Fadguard-cidre","en\u002F5.nonsense\u002F2.python\u002F2.adguard-cidre",{"title":295,"path":296,"stem":297},"Lumeex","\u002Fen\u002Fnonsense\u002Fpython\u002Flumeex","en\u002F5.nonsense\u002F2.python\u002F3.lumeex",{"title":299,"path":300,"stem":301},"Instameex","\u002Fen\u002Fnonsense\u002Fpython\u002Finstameex","en\u002F5.nonsense\u002F2.python\u002F4.instameex",{"title":303,"icon":304,"path":305,"stem":306,"children":307,"page":15},"Bash","i-lucide-file-terminal","\u002Fen\u002Fnonsense\u002Fbash","en\u002F5.nonsense\u002F3.bash",[308,312,316,320,324,328],{"title":309,"path":310,"stem":311},"Servarr corrector","\u002Fen\u002Fnonsense\u002Fbash\u002Fservarr-duplicates","en\u002F5.nonsense\u002F3.bash\u002F1.servarr-duplicates",{"title":313,"path":314,"stem":315},"LUKS Backup","\u002Fen\u002Fnonsense\u002Fbash\u002Fluks-backup","en\u002F5.nonsense\u002F3.bash\u002F2.luks-backup",{"title":317,"path":318,"stem":319},"Socat Proxy","\u002Fen\u002Fnonsense\u002Fbash\u002Fsocat-proxy","en\u002F5.nonsense\u002F3.bash\u002F3.socat-proxy",{"title":321,"path":322,"stem":323},"HotDisk","\u002Fen\u002Fnonsense\u002Fbash\u002Fhotdisk","en\u002F5.nonsense\u002F3.bash\u002F4.hotdisk",{"title":325,"path":326,"stem":327},"Backrest Docker Stop","\u002Fen\u002Fnonsense\u002Fbash\u002Fbackrest-docker-stop","en\u002F5.nonsense\u002F3.bash\u002F5.backrest-docker-stop",{"title":329,"path":330,"stem":331},"rm Confirmation Guard","\u002Fen\u002Fnonsense\u002Fbash\u002Frm-confirmation","en\u002F5.nonsense\u002F3.bash\u002F6.rm-confirmation",{"title":333,"icon":334,"path":335,"stem":336,"children":337,"page":15},"Recycled","i-noto-recycling-symbol","\u002Fen\u002Frecycled","en\u002F6.recycled",[338,341,355],{"title":333,"path":339,"stem":340,"icon":25},"\u002Fen\u002Frecycled\u002Fsummary","en\u002F6.recycled\u002F1.summary",{"title":342,"icon":343,"path":344,"stem":345,"children":346,"page":15},"Deprecated","i-lucide-trash-2","\u002Fen\u002Frecycled\u002Fdeprecated","en\u002F6.recycled\u002F2.deprecated",[347,351],{"title":348,"path":349,"stem":350},"Wireguard 14","\u002Fen\u002Frecycled\u002Fdeprecated\u002Fwireguard-14","en\u002F6.recycled\u002F2.deprecated\u002F1.wireguard-14",{"title":352,"path":353,"stem":354},"File Browser","\u002Fen\u002Frecycled\u002Fdeprecated\u002Ffile-browser","en\u002F6.recycled\u002F2.deprecated\u002F2.file-browser",{"title":356,"icon":357,"path":358,"stem":359,"children":360,"page":15},"Alternatives","i-lucide-arrow-left-right","\u002Fen\u002Frecycled\u002Falternatives","en\u002F6.recycled\u002F3.alternatives",[361,365,369,373],{"title":362,"path":363,"stem":364},"Plex","\u002Fen\u002Frecycled\u002Falternatives\u002Fplex","en\u002F6.recycled\u002F3.alternatives\u002F1.plex",{"title":366,"path":367,"stem":368},"Qbittorrent for Plex","\u002Fen\u002Frecycled\u002Falternatives\u002Fqbittorrent-for-plex","en\u002F6.recycled\u002F3.alternatives\u002F2.qbittorrent for plex",{"title":370,"path":371,"stem":372},"Servarr for Plex","\u002Fen\u002Frecycled\u002Falternatives\u002Fservarr-for-plex","en\u002F6.recycled\u002F3.alternatives\u002F3.servarr for plex",{"title":374,"path":375,"stem":376},"Gitea","\u002Fen\u002Frecycled\u002Falternatives\u002Fgitea","en\u002F6.recycled\u002F3.alternatives\u002F4.gitea",{"id":378,"title":195,"body":379,"contributors":1448,"description":1450,"extension":1451,"hideCopyPage":15,"hideHeader":15,"hideToc":15,"links":1452,"meta":1453,"navigation":799,"path":196,"seo":1454,"stem":197,"__hash__":1455},"docs_en\u002Fen\u002F3.serveex\u002F6.cloud\u002F1.immich.md",{"type":380,"value":381,"toc":1431},"minimark",[382,390,400,407,412,416,520,524,527,571,1278,1292,1296,1299,1385,1427],[383,384],"ellipsis",{"blur":385,"left":386,"top":387,"width":388,"z-index":389},"140px","0px","10rem","40rem","60",[391,392,393,399],"p",{},[394,395,195],"a",{"href":396,"rel":397},"https:\u002F\u002Fimmich.app\u002Fdocs\u002Foverview\u002Fintroduction",[398],"nofollow"," is a self-hosted photo and video management solution that replaces cloud services like Google Photos or iCloud. It offers powerful features like face recognition and geolocation.",[391,401,402],{},[403,404],"img",{"alt":405,"src":406},"Picture","\u002Fimg\u002Fserveex\u002Fimmich.png",[408,409,411],"h2",{"id":410},"installation","Installation",[413,414],"file-tree",{":tree":415},"{\"\u002F\":[{\"srv\":[{\"docker\":[{\"immich\":[\"library\u002F\",\"compose.yaml\",\".env\"]}]}]}]}",[417,418,420,425,447,455,459,472,491,510,516],"steps",{"level":419},"3",[421,422,424],"h3",{"id":423},"deploy-the-stack","Deploy the stack",[391,426,427,428,432,433,436,437,440,441,446],{},"Open Dockge, click on ",[429,430,431],"code",{},"compose",", name the stack ",[429,434,435],{},"immich",", then copy and paste the latest ",[429,438,439],{},"docker-compose.yml"," ",[394,442,445],{"href":443,"rel":444},"https:\u002F\u002Fgithub.com\u002Fimmich-app\u002Fimmich\u002Fblob\u002Fmain\u002Fdocker\u002Fdocker-compose.yml",[398],"published here",".",[448,449,450,454],"warning",{},[451,452,453],"strong",{},"Warning",": Do not add the Watchtower label to the Immich stack. Immich evolves rapidly, and automatic updates may break your installation.",[421,456,458],{"id":457},"set-your-environment-variables","Set your environment variables",[391,460,461,462,465,466,471],{},"Configure the ",[429,463,464],{},".env"," file by copying the latest version ",[394,467,470],{"href":468,"rel":469},"https:\u002F\u002Fgithub.com\u002Fimmich-app\u002Fimmich\u002Fblob\u002Fmain\u002Fdocker\u002Fexample.env",[398],"from here"," and follow the comments in the file.",[473,474,476,477,479,480,490],"note",{"to":475},"\u002Fgeneral\u002Fnetworking\u002Fsamba\u002F","If you're using a NAS or a network-shared drive via ",[451,478,41],{}," to store your data, replace the value of ",[429,481,485],{"className":482,"language":483,"style":484},"language-properties shiki shiki-themes github-dark material-theme github-dark","properties","",[486,487,489],"span",{"class":488},"slcoZ","UPLOAD_LOCATION"," with the path to your shared folder.",[492,493,494,495,498,499,504,505,446],"tip",{"icon":484},"✨ ",[451,496,497],{},"Tip:"," If your CPU\u002FiGPU\u002FGPU supports it, Immich can use hardware acceleration for video playback and image recognition. This can triple performance. Learn more about ",[394,500,503],{"href":501,"rel":502},"https:\u002F\u002Fimmich.app\u002Fdocs\u002Ffeatures\u002Fhardware-transcoding\u002F",[398],"Transcoding"," and ",[394,506,509],{"href":507,"rel":508},"https:\u002F\u002Fimmich.app\u002Fdocs\u002Ffeatures\u002Fml-hardware-acceleration",[398],"Machine Learning",[391,511,512,513,446],{},"Deploy the container. You can connect and follow the setup instructions at ",[429,514,515],{},"http:\u002F\u002Fyourserverip:2283",[421,517,519],{"id":518},"done","Done !",[408,521,523],{"id":522},"exposing-immich-with-swag","Exposing Immich with SWAG",[391,525,526],{},"The main benefit of this setup is being able to access Immich remotely on all your devices. We'll expose Immich using SWAG.",[473,528,529,530,533,536,538,539,542,543,546,547,550,551,555,556,559,560,563,564,566,567,446],{"icon":484},"📋 ",[451,531,532],{},"Before you begin:",[534,535],"br",{},[534,537],{},"\nWe assume that you have a subdomain ",[429,540,541],{},"immich.yourdomain.com"," with a ",[429,544,545],{},"CNAME"," pointing to ",[429,548,549],{},"yourdomain.com"," in your ",[394,552,554],{"href":553},"\u002Fgeneral\u002Fnetworking\u002Fdns","DNS zone",". Also, unless you're using ",[394,557,133],{"href":558},"\u002Fserveex\u002Fsecurity\u002Fcloudflare",", make sure port ",[429,561,562],{},"443"," on your router is forwarded to port ",[429,565,562],{}," on your server via ",[394,568,570],{"href":569},"\u002Fgeneral\u002Fnetworking\u002Fnat","NAT rules",[417,572,573,577,580,728,739,742,746,752,761,780,783,1259,1275],{"level":419},[421,574,576],{"id":575},"add-immichs-network-to-swag","Add Immich's network to SWAG",[391,578,579],{},"In Dockge, open the SWAG stack and edit the compose file to add Immich's network:",[581,582,587],"pre",{"className":583,"code":584,"filename":585,"language":586,"meta":484,"style":484},"language-yaml shiki shiki-themes github-dark material-theme github-dark","---\nservices:\n  swag:\n     container_name: # ...\n      # ... \n     networks:            # Connects the container to the custom network \n      # ...           \n      - immich            # Network name defined in the stack\n    \nnetworks:                 # Defines the custom network\n  # ...\n  immich:                 # Network name defined in the stack\n    name: immich_default  # Actual external network name\n    external: true        # Indicates it's an external network\n","compose.yaml","yaml",[429,588,589,597,608,616,629,635,646,652,665,671,682,688,699,713],{"__ignoreMap":484},[486,590,593],{"class":591,"line":592},"line",1,[486,594,596],{"class":595},"sEgDM","---\n",[486,598,600,604],{"class":591,"line":599},2,[486,601,603],{"class":602},"sRuoG","services",[486,605,607],{"class":606},"s8jd1",":\n",[486,609,611,614],{"class":591,"line":610},3,[486,612,613],{"class":602},"  swag",[486,615,607],{"class":606},[486,617,619,622,625],{"class":591,"line":618},4,[486,620,621],{"class":602},"     container_name",[486,623,624],{"class":606},":",[486,626,628],{"class":627},"sDvJj"," # ...\n",[486,630,632],{"class":591,"line":631},5,[486,633,634],{"class":627},"      # ... \n",[486,636,638,641,643],{"class":591,"line":637},6,[486,639,640],{"class":602},"     networks",[486,642,624],{"class":606},[486,644,645],{"class":627},"            # Connects the container to the custom network \n",[486,647,649],{"class":591,"line":648},7,[486,650,651],{"class":627},"      # ...           \n",[486,653,655,658,662],{"class":591,"line":654},8,[486,656,657],{"class":606},"      -",[486,659,661],{"class":660},"s11XM"," immich",[486,663,664],{"class":627},"            # Network name defined in the stack\n",[486,666,668],{"class":591,"line":667},9,[486,669,670],{"class":488},"    \n",[486,672,674,677,679],{"class":591,"line":673},10,[486,675,676],{"class":602},"networks",[486,678,624],{"class":606},[486,680,681],{"class":627},"                 # Defines the custom network\n",[486,683,685],{"class":591,"line":684},11,[486,686,687],{"class":627},"  # ...\n",[486,689,691,694,696],{"class":591,"line":690},12,[486,692,693],{"class":602},"  immich",[486,695,624],{"class":606},[486,697,698],{"class":627},"                 # Network name defined in the stack\n",[486,700,702,705,707,710],{"class":591,"line":701},13,[486,703,704],{"class":602},"    name",[486,706,624],{"class":606},[486,708,709],{"class":660}," immich_default",[486,711,712],{"class":627},"  # Actual external network name\n",[486,714,716,719,721,725],{"class":591,"line":715},14,[486,717,718],{"class":602},"    external",[486,720,624],{"class":606},[486,722,724],{"class":723},"s08Ry"," true",[486,726,727],{"class":627},"        # Indicates it's an external network\n",[473,729,730,731,734,735,446],{},"We're assuming Immich's network is named ",[429,732,733],{},"immich_default",". You can check connectivity by visiting the SWAG dashboard at ",[394,736,737],{"href":737,"rel":738},"http:\u002F\u002Fyourserverip:81",[398],[391,740,741],{},"Restart the stack by clicking \"deploy\" and wait for SWAG to fully initialize.",[421,743,745],{"id":744},"create-the-subdomainconf-file","Create the subdomain.conf file",[391,747,748,749,446],{},"In the SWAG folders, create a file named ",[429,750,751],{},"immich.subdomain.conf",[492,753,494,755,757,758,760],{"icon":484,"to":754},"\u002Fserveex\u002Ffiles\u002Ffile-browser-quantum",[451,756,497],{}," You can use ",[451,759,209],{}," to navigate and edit your files instead of using terminal commands.",[581,762,767],{"className":763,"code":764,"filename":765,"language":766,"meta":484,"style":484},"language-bash shiki shiki-themes github-dark material-theme github-dark","sudo nano \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig\u002Fnginx\u002Fproxy-confs\u002Fimmich.subdomain.conf\n","Terminal","bash",[429,768,769],{"__ignoreMap":484},[486,770,771,774,777],{"class":591,"line":592},[486,772,773],{"class":595},"sudo",[486,775,776],{"class":660}," nano",[486,778,779],{"class":660}," \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig\u002Fnginx\u002Fproxy-confs\u002Fimmich.subdomain.conf\n",[391,781,782],{},"Then paste the following configuration:",[581,784,788],{"className":785,"code":786,"filename":751,"language":787,"meta":484,"style":484},"language-nginx shiki shiki-themes github-dark material-theme github-dark","## Version 2023\u002F12\u002F19\n\nserver {\n    listen 443 ssl;\n    listen [::]:443 ssl;\n\n    server_name immich.*;\n\n    include \u002Fconfig\u002Fnginx\u002Fssl.conf;\n\n    client_max_body_size 0;\n\n    #if ($lan-ip = yes) { set $geo-whitelist yes; }\n    #if ($geo-whitelist = no) { return 404; }\n    if ($geo-blacklist = no) { return 404; }\n\n    # enable for ldap auth (requires ldap-location.conf in the location block)\n    #include \u002Fconfig\u002Fnginx\u002Fldap-server.conf;\n\n    # enable for Authelia (requires authelia-location.conf in the location block)\n    #include \u002Fconfig\u002Fnginx\u002Fauthelia-server.conf;\n\n    # enable for Authentik (requires authentik-location.conf in the location block)\n    #include \u002Fconfig\u002Fnginx\u002Fauthentik-server.conf;\n\n    location \u002F {\n        # enable the next two lines for http auth\n        #auth_basic \"Restricted\";\n        #auth_basic_user_file \u002Fconfig\u002Fnginx\u002F.htpasswd;\n\n        # enable for ldap auth (requires ldap-server.conf in the server block)\n        #include \u002Fconfig\u002Fnginx\u002Fldap-location.conf;\n\n        # enable for Authelia (requires authelia-server.conf in the server block)\n        #include \u002Fconfig\u002Fnginx\u002Fauthelia-location.conf;\n\n        # enable for Authentik (requires authentik-server.conf in the server block)\n        #include \u002Fconfig\u002Fnginx\u002Fauthentik-location.conf;\n\n        include \u002Fconfig\u002Fnginx\u002Fproxy.conf;\n        include \u002Fconfig\u002Fnginx\u002Fresolver.conf;\n        set $upstream_app immich_server;\n        set $upstream_port 3001;\n        set $upstream_proto http;\n        proxy_pass $upstream_proto:\u002F\u002F$upstream_app:$upstream_port;\n    }\n\n    location ~ (\u002Fimmich)?\u002Fapi {\n        include \u002Fconfig\u002Fnginx\u002Fproxy.conf;\n        include \u002Fconfig\u002Fnginx\u002Fresolver.conf;\n        set $upstream_app immich_server;\n        set $upstream_port 3001;\n        set $upstream_proto http;\n        proxy_pass $upstream_proto:\u002F\u002F$upstream_app:$upstream_port;\n    }\n}\n","nginx",[429,789,790,795,801,810,825,834,838,848,852,862,866,876,880,885,890,925,930,936,942,947,953,959,964,970,976,981,993,999,1005,1011,1016,1022,1028,1033,1039,1045,1050,1056,1062,1067,1078,1088,1101,1116,1128,1151,1157,1162,1176,1185,1194,1205,1218,1229,1248,1253],{"__ignoreMap":484},[486,791,792],{"class":591,"line":592},[486,793,794],{"class":627},"## Version 2023\u002F12\u002F19\n",[486,796,797],{"class":591,"line":599},[486,798,800],{"emptyLinePlaceholder":799},true,"\n",[486,802,803,807],{"class":591,"line":610},[486,804,806],{"class":805},"sAoO4","server",[486,808,809],{"class":488}," {\n",[486,811,812,816,819,822],{"class":591,"line":618},[486,813,815],{"class":814},"sJPTy","    listen ",[486,817,562],{"class":818},"swwWl",[486,820,821],{"class":488}," ssl",[486,823,824],{"class":606},";\n",[486,826,827,829,832],{"class":591,"line":631},[486,828,815],{"class":814},[486,830,831],{"class":488},"[::]:443 ssl",[486,833,824],{"class":606},[486,835,836],{"class":591,"line":637},[486,837,800],{"emptyLinePlaceholder":799},[486,839,840,843,846],{"class":591,"line":648},[486,841,842],{"class":814},"    server_name ",[486,844,845],{"class":488},"immich.*",[486,847,824],{"class":606},[486,849,850],{"class":591,"line":654},[486,851,800],{"emptyLinePlaceholder":799},[486,853,854,857,860],{"class":591,"line":667},[486,855,856],{"class":814},"    include ",[486,858,859],{"class":488},"\u002Fconfig\u002Fnginx\u002Fssl.conf",[486,861,824],{"class":606},[486,863,864],{"class":591,"line":673},[486,865,800],{"emptyLinePlaceholder":799},[486,867,868,871,874],{"class":591,"line":684},[486,869,870],{"class":814},"    client_max_body_size ",[486,872,873],{"class":818},"0",[486,875,824],{"class":606},[486,877,878],{"class":591,"line":690},[486,879,800],{"emptyLinePlaceholder":799},[486,881,882],{"class":591,"line":701},[486,883,884],{"class":627},"    #if ($lan-ip = yes) { set $geo-whitelist yes; }\n",[486,886,887],{"class":591,"line":715},[486,888,889],{"class":627},"    #if ($geo-whitelist = no) { return 404; }\n",[486,891,893,897,900,903,906,909,912,916,919,922],{"class":591,"line":892},15,[486,894,896],{"class":895},"sJLGa","    if",[486,898,899],{"class":488}," (",[486,901,902],{"class":606},"$",[486,904,905],{"class":488},"geo-blacklist ",[486,907,908],{"class":814},"= ",[486,910,911],{"class":488},"no) ",[486,913,915],{"class":914},"sSoIa","{ ",[486,917,918],{"class":895},"return",[486,920,921],{"class":818}," 404",[486,923,924],{"class":914},"; }\n",[486,926,928],{"class":591,"line":927},16,[486,929,800],{"emptyLinePlaceholder":799},[486,931,933],{"class":591,"line":932},17,[486,934,935],{"class":627},"    # enable for ldap auth (requires ldap-location.conf in the location block)\n",[486,937,939],{"class":591,"line":938},18,[486,940,941],{"class":627},"    #include \u002Fconfig\u002Fnginx\u002Fldap-server.conf;\n",[486,943,945],{"class":591,"line":944},19,[486,946,800],{"emptyLinePlaceholder":799},[486,948,950],{"class":591,"line":949},20,[486,951,952],{"class":627},"    # enable for Authelia (requires authelia-location.conf in the location block)\n",[486,954,956],{"class":591,"line":955},21,[486,957,958],{"class":627},"    #include \u002Fconfig\u002Fnginx\u002Fauthelia-server.conf;\n",[486,960,962],{"class":591,"line":961},22,[486,963,800],{"emptyLinePlaceholder":799},[486,965,967],{"class":591,"line":966},23,[486,968,969],{"class":627},"    # enable for Authentik (requires authentik-location.conf in the location block)\n",[486,971,973],{"class":591,"line":972},24,[486,974,975],{"class":627},"    #include \u002Fconfig\u002Fnginx\u002Fauthentik-server.conf;\n",[486,977,979],{"class":591,"line":978},25,[486,980,800],{"emptyLinePlaceholder":799},[486,982,984,987,990],{"class":591,"line":983},26,[486,985,986],{"class":805},"    location",[486,988,989],{"class":595}," \u002F ",[486,991,992],{"class":488},"{\n",[486,994,996],{"class":591,"line":995},27,[486,997,998],{"class":627},"        # enable the next two lines for http auth\n",[486,1000,1002],{"class":591,"line":1001},28,[486,1003,1004],{"class":627},"        #auth_basic \"Restricted\";\n",[486,1006,1008],{"class":591,"line":1007},29,[486,1009,1010],{"class":627},"        #auth_basic_user_file \u002Fconfig\u002Fnginx\u002F.htpasswd;\n",[486,1012,1014],{"class":591,"line":1013},30,[486,1015,800],{"emptyLinePlaceholder":799},[486,1017,1019],{"class":591,"line":1018},31,[486,1020,1021],{"class":627},"        # enable for ldap auth (requires ldap-server.conf in the server block)\n",[486,1023,1025],{"class":591,"line":1024},32,[486,1026,1027],{"class":627},"        #include \u002Fconfig\u002Fnginx\u002Fldap-location.conf;\n",[486,1029,1031],{"class":591,"line":1030},33,[486,1032,800],{"emptyLinePlaceholder":799},[486,1034,1036],{"class":591,"line":1035},34,[486,1037,1038],{"class":627},"        # enable for Authelia (requires authelia-server.conf in the server block)\n",[486,1040,1042],{"class":591,"line":1041},35,[486,1043,1044],{"class":627},"        #include \u002Fconfig\u002Fnginx\u002Fauthelia-location.conf;\n",[486,1046,1048],{"class":591,"line":1047},36,[486,1049,800],{"emptyLinePlaceholder":799},[486,1051,1053],{"class":591,"line":1052},37,[486,1054,1055],{"class":627},"        # enable for Authentik (requires authentik-server.conf in the server block)\n",[486,1057,1059],{"class":591,"line":1058},38,[486,1060,1061],{"class":627},"        #include \u002Fconfig\u002Fnginx\u002Fauthentik-location.conf;\n",[486,1063,1065],{"class":591,"line":1064},39,[486,1066,800],{"emptyLinePlaceholder":799},[486,1068,1070,1073,1076],{"class":591,"line":1069},40,[486,1071,1072],{"class":814},"        include ",[486,1074,1075],{"class":488},"\u002Fconfig\u002Fnginx\u002Fproxy.conf",[486,1077,824],{"class":606},[486,1079,1081,1083,1086],{"class":591,"line":1080},41,[486,1082,1072],{"class":814},[486,1084,1085],{"class":488},"\u002Fconfig\u002Fnginx\u002Fresolver.conf",[486,1087,824],{"class":606},[486,1089,1091,1094,1096,1099],{"class":591,"line":1090},42,[486,1092,1093],{"class":814},"        set ",[486,1095,902],{"class":606},[486,1097,1098],{"class":488},"upstream_app immich_server",[486,1100,824],{"class":606},[486,1102,1104,1106,1108,1111,1114],{"class":591,"line":1103},43,[486,1105,1093],{"class":814},[486,1107,902],{"class":606},[486,1109,1110],{"class":488},"upstream_port ",[486,1112,1113],{"class":818},"3001",[486,1115,824],{"class":606},[486,1117,1119,1121,1123,1126],{"class":591,"line":1118},44,[486,1120,1093],{"class":814},[486,1122,902],{"class":606},[486,1124,1125],{"class":488},"upstream_proto http",[486,1127,824],{"class":606},[486,1129,1131,1134,1136,1139,1141,1144,1146,1149],{"class":591,"line":1130},45,[486,1132,1133],{"class":814},"        proxy_pass ",[486,1135,902],{"class":606},[486,1137,1138],{"class":488},"upstream_proto:\u002F\u002F",[486,1140,902],{"class":606},[486,1142,1143],{"class":488},"upstream_app:",[486,1145,902],{"class":606},[486,1147,1148],{"class":488},"upstream_port",[486,1150,824],{"class":606},[486,1152,1154],{"class":591,"line":1153},46,[486,1155,1156],{"class":488},"    }\n",[486,1158,1160],{"class":591,"line":1159},47,[486,1161,800],{"emptyLinePlaceholder":799},[486,1163,1165,1167,1170,1174],{"class":591,"line":1164},48,[486,1166,986],{"class":805},[486,1168,1169],{"class":814}," ~",[486,1171,1173],{"class":1172},"sxjBU"," (\u002Fimmich)?\u002Fapi ",[486,1175,992],{"class":488},[486,1177,1179,1181,1183],{"class":591,"line":1178},49,[486,1180,1072],{"class":814},[486,1182,1075],{"class":488},[486,1184,824],{"class":606},[486,1186,1188,1190,1192],{"class":591,"line":1187},50,[486,1189,1072],{"class":814},[486,1191,1085],{"class":488},[486,1193,824],{"class":606},[486,1195,1197,1199,1201,1203],{"class":591,"line":1196},51,[486,1198,1093],{"class":814},[486,1200,902],{"class":606},[486,1202,1098],{"class":488},[486,1204,824],{"class":606},[486,1206,1208,1210,1212,1214,1216],{"class":591,"line":1207},52,[486,1209,1093],{"class":814},[486,1211,902],{"class":606},[486,1213,1110],{"class":488},[486,1215,1113],{"class":818},[486,1217,824],{"class":606},[486,1219,1221,1223,1225,1227],{"class":591,"line":1220},53,[486,1222,1093],{"class":814},[486,1224,902],{"class":606},[486,1226,1125],{"class":488},[486,1228,824],{"class":606},[486,1230,1232,1234,1236,1238,1240,1242,1244,1246],{"class":591,"line":1231},54,[486,1233,1133],{"class":814},[486,1235,902],{"class":606},[486,1237,1138],{"class":488},[486,1239,902],{"class":606},[486,1241,1143],{"class":488},[486,1243,902],{"class":606},[486,1245,1148],{"class":488},[486,1247,824],{"class":606},[486,1249,1251],{"class":591,"line":1250},55,[486,1252,1156],{"class":488},[486,1254,1256],{"class":591,"line":1255},56,[486,1257,1258],{"class":488},"}\n",[391,1260,1261,1262,1266,1267,1270,1271,1274],{},"Press ",[1263,1264],"kbd",{"value":1265},"Ctrl+O",", then ",[1263,1268],{"value":1269},"Enter"," to save, and ",[1263,1272],{"value":1273},"Ctrl+X"," to exit.",[421,1276,519],{"id":1277},"done-1",[391,1279,1280,1281,989,1286,1291],{},"That's it! Immich is now accessible from the internet. Don’t forget to install the ",[394,1282,1285],{"href":1283,"rel":1284},"https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Fimmich\u002Fid1613945652",[398],"iOS",[394,1287,1290],{"href":1288,"rel":1289},"https:\u002F\u002Fplay.google.com\u002Fstore\u002Fapps\u002Fdetails?id=app.alextran.immich",[398],"Android"," apps to sync your devices.",[408,1293,1295],{"id":1294},"protecting-immich-with-pocket-id","Protecting Immich with Pocket ID",[391,1297,1298],{},"Immich supports OIDC natively, so you can require a Pocket ID login before letting anyone into your photos, instead of (or alongside) the app's own accounts.",[417,1300,1301,1305,1315,1323,1326,1330,1338,1382],{"level":419},[421,1302,1304],{"id":1303},"register-immich-as-an-oidc-client","Register Immich as an OIDC client",[391,1306,1307,1311,1312,1314],{},[394,1308,1310],{"href":1309},"\u002Fserveex\u002Fsecurity\u002Fpocket-id#registering-an-oidc-client","Register an OIDC client in Pocket ID"," named ",[429,1313,435],{},", with these three callback URLs:",[581,1316,1321],{"className":1317,"code":1319,"language":1320,"meta":484},[1318],"language-text","https:\u002F\u002Fimmich.yourdomain.com\u002Fauth\u002Flogin\nhttps:\u002F\u002Fimmich.yourdomain.com\u002Fuser-settings\napp.immich:\u002F\u002F\u002Foauth-callback\n","text",[429,1322,1319],{"__ignoreMap":484},[391,1324,1325],{},"The third URL is what lets the mobile app log in too.",[421,1327,1329],{"id":1328},"enable-oauth-in-immich","Enable OAuth in Immich",[391,1331,1332,1333,1337],{},"In Immich, go to ",[1334,1335,1336],"em",{},"Administration > Settings > Authentication Settings > OAuth",", enable it, and fill in:",[1339,1340,1341,1354],"table",{},[1342,1343,1344],"thead",{},[1345,1346,1347,1351],"tr",{},[1348,1349,1350],"th",{},"Field",[1348,1352,1353],{},"Value",[1355,1356,1357,1366,1374],"tbody",{},[1345,1358,1359,1363],{},[1360,1361,1362],"td",{},"Issuer URL",[1360,1364,1365],{},"Pocket ID's OIDC discovery URL",[1345,1367,1368,1371],{},[1360,1369,1370],{},"Client ID",[1360,1372,1373],{},"The client ID copied from Pocket ID",[1345,1375,1376,1379],{},[1360,1377,1378],{},"Client Secret",[1360,1380,1381],{},"The client secret copied from Pocket ID",[421,1383,519],{"id":1384},"done-2",[492,1386,1388,1394],{"icon":484,"to":1387},"\u002Fserveex\u002Fadvanced\u002Fauthentik",[391,1389,1390,1391,1393],{},"✨ You can use ",[451,1392,255],{}," instead of Pocket ID:",[1395,1396,1397,1408,1420],"ol",{},[1398,1399,1400,1401,1403,1404,1407],"li",{},"In Authentik, create an application and an OAuth2\u002FOpenID Connect provider named ",[429,1402,435],{},", with the same three redirect URIs as above (type ",[429,1405,1406],{},"Strict",").",[1398,1409,1410,1411,1413,1414,1416,1417,446],{},"Note the provider's ",[451,1412,1370],{},", ",[451,1415,1378],{},", and ",[451,1418,1419],{},"Slug",[1398,1421,1422,1423,1426],{},"In Immich's OAuth settings, set the Issuer URL to ",[429,1424,1425],{},"https:\u002F\u002Fauthentik.yourdomain.com\u002Fapplication\u002Fo\u002F\u003Cslug>\u002F",", then fill in the Client ID and Client Secret.",[1428,1429,1430],"style",{},"html pre.shiki code .slcoZ, html code.shiki .slcoZ{--shiki-light:#E1E4E8;--shiki-default:#EEFFFF;--shiki-dark:#E1E4E8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sEgDM, html code.shiki .sEgDM{--shiki-light:#B392F0;--shiki-default:#FFCB6B;--shiki-dark:#B392F0}html pre.shiki code .sRuoG, html code.shiki .sRuoG{--shiki-light:#85E89D;--shiki-default:#F07178;--shiki-dark:#85E89D}html pre.shiki code .s8jd1, html code.shiki .s8jd1{--shiki-light:#E1E4E8;--shiki-default:#89DDFF;--shiki-dark:#E1E4E8}html pre.shiki code .sDvJj, html code.shiki .sDvJj{--shiki-light:#6A737D;--shiki-light-font-style:inherit;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .s11XM, html code.shiki .s11XM{--shiki-light:#9ECBFF;--shiki-default:#C3E88D;--shiki-dark:#9ECBFF}html pre.shiki code .s08Ry, html code.shiki .s08Ry{--shiki-light:#79B8FF;--shiki-default:#FF9CAC;--shiki-dark:#79B8FF}html pre.shiki code .sAoO4, html code.shiki .sAoO4{--shiki-light:#F97583;--shiki-default:#C792EA;--shiki-dark:#F97583}html pre.shiki code .sJPTy, html code.shiki .sJPTy{--shiki-light:#F97583;--shiki-default:#89DDFF;--shiki-dark:#F97583}html pre.shiki code .swwWl, html code.shiki .swwWl{--shiki-light:#79B8FF;--shiki-default:#F78C6C;--shiki-dark:#79B8FF}html pre.shiki code .sJLGa, html code.shiki .sJLGa{--shiki-light:#F97583;--shiki-light-font-style:inherit;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .sSoIa, html code.shiki .sSoIa{--shiki-light:#E1E4E8;--shiki-default:#F07178;--shiki-dark:#E1E4E8}html pre.shiki code .sxjBU, html code.shiki .sxjBU{--shiki-light:#DBEDFF;--shiki-default:#C3E88D;--shiki-dark:#DBEDFF}",{"title":484,"searchDepth":599,"depth":599,"links":1432},[1433,1438,1443],{"id":410,"depth":599,"text":411,"children":1434},[1435,1436,1437],{"id":423,"depth":610,"text":424},{"id":457,"depth":610,"text":458},{"id":518,"depth":610,"text":519},{"id":522,"depth":599,"text":523,"children":1439},[1440,1441,1442],{"id":575,"depth":610,"text":576},{"id":744,"depth":610,"text":745},{"id":1277,"depth":610,"text":519},{"id":1294,"depth":599,"text":1295,"children":1444},[1445,1446,1447],{"id":1303,"depth":610,"text":1304},{"id":1328,"depth":610,"text":1329},{"id":1384,"depth":610,"text":519},[1449],"Djeex","Install Immich, a self-hosted alternative to Google Photos and iCloud with face recognition, geolocation, and multi-device sync.","md",null,{},{"title":195,"description":1450},"axEZr1hM9dFz-6rkjVrj1D13hqlGXWC5h3_K2oYNFag",[1457,1459],{"title":185,"path":186,"stem":187,"description":1458,"children":-1},"Automate media downloads with the Servarr stack, Radarr, Sonarr, Bazarr, Prowlarr, and Seerr, for movies and TV shows.",{"title":199,"path":200,"stem":201,"description":1460,"children":-1},"Install Nextcloud to self-host your files, photos, and calendar, a privacy-friendly alternative to Google Drive, OneDrive, and iCloud.",1788645847728]