mirror of
https://github.com/funkypenguin/geek-cookbook/
synced 2025-12-13 09:46:23 +00:00
Add Immich review
Signed-off-by: David Young <davidy@funkypenguin.co.nz>
This commit is contained in:
@@ -8,6 +8,10 @@
|
|||||||
"MD024":
|
"MD024":
|
||||||
"siblings_only": true
|
"siblings_only": true
|
||||||
|
|
||||||
|
# We use different page yaml titles to markdown TOC level #1 heading, on purpose, for SEO
|
||||||
|
"MD025":
|
||||||
|
"front_matter_title": ""
|
||||||
|
|
||||||
# Allow trailing punctuation in headings
|
# Allow trailing punctuation in headings
|
||||||
"MD026": false
|
"MD026": false
|
||||||
|
|
||||||
@@ -16,3 +20,5 @@
|
|||||||
"MD038": false
|
"MD038": false
|
||||||
"MD046": false
|
"MD046": false
|
||||||
|
|
||||||
|
# We need inline HTML to embed YouTube videos
|
||||||
|
"MD033": false
|
||||||
@@ -16,6 +16,7 @@
|
|||||||
[github_sponsor]: https://github.com/sponsors/funkypenguin
|
[github_sponsor]: https://github.com/sponsors/funkypenguin
|
||||||
[headphones]: /recipes/autopirate/headphones/
|
[headphones]: /recipes/autopirate/headphones/
|
||||||
[homeassistant]: /recipes/homeassistant/
|
[homeassistant]: /recipes/homeassistant/
|
||||||
|
[immich]: /recipes/immich/
|
||||||
[jackett]: /recipes/autopirate/jackett/
|
[jackett]: /recipes/autopirate/jackett/
|
||||||
[jellyfin]: /recipes/jellyfin/
|
[jellyfin]: /recipes/jellyfin/
|
||||||
[kavita]: /recipes/kavita/
|
[kavita]: /recipes/kavita/
|
||||||
@@ -42,6 +43,7 @@
|
|||||||
[prowlarr]: /recipes/autopirate/prowlarr/
|
[prowlarr]: /recipes/autopirate/prowlarr/
|
||||||
[radarr]: /recipes/autopirate/radarr/
|
[radarr]: /recipes/autopirate/radarr/
|
||||||
[readarr]: /recipes/autopirate/readarr/
|
[readarr]: /recipes/autopirate/readarr/
|
||||||
|
[review/immich]: /review/immich/
|
||||||
[rss-bridge]: /recipes/rss-bridge/
|
[rss-bridge]: /recipes/rss-bridge/
|
||||||
[rtorrent]: /recipes/autopirate/rtorrent/
|
[rtorrent]: /recipes/autopirate/rtorrent/
|
||||||
[sabnzbd]: /recipes/autopirate/sabnzbd/
|
[sabnzbd]: /recipes/autopirate/sabnzbd/
|
||||||
|
|||||||
36
_snippets/review-footer.md
Normal file
36
_snippets/review-footer.md
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
## Chef's notes 📓
|
||||||
|
|
||||||
|
///Footnotes Go Here///
|
||||||
|
|
||||||
|
### Tip your waiter (sponsor) 👏
|
||||||
|
|
||||||
|
Did you receive excellent service? Want to compliment the chef? (_..and support development of current and future recipes!_) Sponsor me on [Github][github_sponsor] / [Patreon][patreon], or see the [contribute](/community/contribute/) page for more (_free or paid)_ ways to say thank you! 👏
|
||||||
|
|
||||||
|
### Employ your chef (engage) 🤝
|
||||||
|
|
||||||
|
Is this too much of a geeky PITA? Do you just want results, stat? [I do this for a living](https://www.funkypenguin.co.nz/about/) - I'm a full-time Kubernetes contractor, providing consulting and engineering expertise to businesses needing short-term, short-notice support in the cloud-native space, including AWS/Azure/GKE, Kubernetes, CI/CD and automation.
|
||||||
|
|
||||||
|
Learn more about working with me [here](https://www.funkypenguin.co.nz/work-with-me/).
|
||||||
|
|
||||||
|
### Flirt with waiter (subscribe) 💌
|
||||||
|
|
||||||
|
Want to know now when this recipe gets updated, or when future recipes are added? Subscribe to the [RSS feed](https://mastodon.social/@geekcookbook_changes.rss), or leave your email address below, and we'll keep you updated.
|
||||||
|
|
||||||
|
<div class="rm-area-subscribe-to-recipe"></div>
|
||||||
|
|
||||||
|
## Your comments? 💬
|
||||||
|
|
||||||
|
<div id='discourse-comments'></div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
DiscourseEmbed = { discourseUrl: 'https://forum.funkypenguin.co.nz/',
|
||||||
|
discourseEmbedUrl: window.location.protocol + '//' + window.location.hostname + window.location.pathname };
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
|
||||||
|
d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
|
||||||
|
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
--8<-- "common-links.md"
|
||||||
@@ -23,7 +23,7 @@ This is the role of Traefik Forward Auth.
|
|||||||
When employing Traefik Forward Auth as "[middleware](https://doc.traefik.io/traefik/middlewares/forwardauth/)", the forward-auth process sits in the middle of this transaction - traefik receives the incoming request, "checks in" with the auth server to determine whether or not further authentication is required. If the user is authenticated, the auth server returns a 200 response code, and Traefik is authorized to forward the request to the backend. If not, traefik passes the auth server response back to the user - this process will usually direct the user to an authentication provider (*[Google][tfa-google], [Keycloak][tfa-keycloak], and [Dex][tfa-dex-static] are common examples*), so that they can perform a login.
|
When employing Traefik Forward Auth as "[middleware](https://doc.traefik.io/traefik/middlewares/forwardauth/)", the forward-auth process sits in the middle of this transaction - traefik receives the incoming request, "checks in" with the auth server to determine whether or not further authentication is required. If the user is authenticated, the auth server returns a 200 response code, and Traefik is authorized to forward the request to the backend. If not, traefik passes the auth server response back to the user - this process will usually direct the user to an authentication provider (*[Google][tfa-google], [Keycloak][tfa-keycloak], and [Dex][tfa-dex-static] are common examples*), so that they can perform a login.
|
||||||
|
|
||||||
Illustrated below:
|
Illustrated below:
|
||||||
{ loading=lazy }
|
{ loading=lazy }
|
||||||
|
|
||||||
The advantage under this design is additional security. If I'm deploying a web app which I expect only an authenticated user to require access to (*unlike something intended to be accessed publically, like [Linx][linx]*), I'll pass the request through Traefik Forward Auth. The overhead is negligible, and the additional layer of security is well-worth it.
|
The advantage under this design is additional security. If I'm deploying a web app which I expect only an authenticated user to require access to (*unlike something intended to be accessed publically, like [Linx][linx]*), I'll pass the request through Traefik Forward Auth. The overhead is negligible, and the additional layer of security is well-worth it.
|
||||||
|
|
||||||
|
|||||||
BIN
manuscript/images/reviews/immich-mobile-browse-photos.jpeg
Normal file
BIN
manuscript/images/reviews/immich-mobile-browse-photos.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 126 KiB |
BIN
manuscript/images/reviews/immich-mobile-save-photos.png
Normal file
BIN
manuscript/images/reviews/immich-mobile-save-photos.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 570 KiB |
BIN
manuscript/images/reviews/immich-mobile-search-photos.jpeg
Normal file
BIN
manuscript/images/reviews/immich-mobile-search-photos.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 376 KiB |
BIN
manuscript/images/reviews/immich-mobile.gif
Normal file
BIN
manuscript/images/reviews/immich-mobile.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.5 MiB |
BIN
manuscript/images/reviews/immich-web.jpg
Normal file
BIN
manuscript/images/reviews/immich-web.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 206 KiB |
@@ -129,7 +129,7 @@ I regularly donate to / sponsor the following projects. **Join me** in supportin
|
|||||||
|
|
||||||
| Project | Donate via..
|
| Project | Donate via..
|
||||||
| ------------- |-------------|
|
| ------------- |-------------|
|
||||||
| [Komga](/recipes/komga/) | [GitHub Sponsors](https://github.com/sponsors/gotson)
|
| [Immich](/review/immich/) | [GitHub Sponsors](https://github.com/sponsors/alextran1502)
|
||||||
| [Material for MKDocs](https://squidfunk.github.io/mkdocs-material/) | [GitHub Sponsors](https://github.com/sponsors/squidfunk)
|
| [Material for MKDocs](https://squidfunk.github.io/mkdocs-material/) | [GitHub Sponsors](https://github.com/sponsors/squidfunk)
|
||||||
| [Calibre](https://calibre-ebook.com/) | [Credit Card](https://calibre-ebook.com/donate) / [Patreon](https://www.patreon.com/kovidgoyal) / [LibrePay](https://liberapay.com/kovidgoyal/donate)
|
| [Calibre](https://calibre-ebook.com/) | [Credit Card](https://calibre-ebook.com/donate) / [Patreon](https://www.patreon.com/kovidgoyal) / [LibrePay](https://liberapay.com/kovidgoyal/donate)
|
||||||
| [LinuxServer.io](https://www.linuxserver.io) | [PayPal](https://www.linuxserver.io/donate)
|
| [LinuxServer.io](https://www.linuxserver.io) | [PayPal](https://www.linuxserver.io/donate)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ description: Unlike competing ingresses (*cough* nginx *cough*), the beautiful T
|
|||||||
|
|
||||||
One of the advantages [Traefik](/kubernetes/ingress/traefik/) offers over [Nginx](/kubernetes/ingress/nginx/), is a native dashboard available in the open-source version (*Nginx+, the commercially-supported version, also includes a dashboard*).
|
One of the advantages [Traefik](/kubernetes/ingress/traefik/) offers over [Nginx](/kubernetes/ingress/nginx/), is a native dashboard available in the open-source version (*Nginx+, the commercially-supported version, also includes a dashboard*).
|
||||||
|
|
||||||
{ loading=lazy }
|
{ loading=lazy }
|
||||||
|
|
||||||
!!! summary "Ingredients"
|
!!! summary "Ingredients"
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ Traefik natively includes some features which Nginx lacks:
|
|||||||
* [x] An elegant "middleware" implementation allowing certain requests to pass through additional layers of authentication
|
* [x] An elegant "middleware" implementation allowing certain requests to pass through additional layers of authentication
|
||||||
* [x] A beautiful dashboard
|
* [x] A beautiful dashboard
|
||||||
|
|
||||||
{ loading=lazy }
|
{ loading=lazy }
|
||||||
|
|
||||||
!!! summary "Ingredients"
|
!!! summary "Ingredients"
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
[Headphones](https://github.com/rembo10/headphones) is an automated music downloader for NZB and Torrent, written in Python. It supports [SABnzbd][sabnzbd], [NZBget][nzbget], Transmission, µTorrent, Deluge and Blackhole.
|
[Headphones](https://github.com/rembo10/headphones) is an automated music downloader for NZB and Torrent, written in Python. It supports [SABnzbd][sabnzbd], [NZBget][nzbget], Transmission, µTorrent, Deluge and Blackhole.
|
||||||
|
|
||||||
{ loading=lazy }
|
{ loading=lazy }
|
||||||
|
|
||||||
## Inclusion into AutoPirate
|
## Inclusion into AutoPirate
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ Once the cutting edge of the "internet" (_pre-world-wide-web and mosiac days_),
|
|||||||
|
|
||||||
A good starter for the usenet scene is <https://www.reddit.com/r/usenet/>. Because it's so damn complicated, a host of automated tools exist to automate the process of finding, downloading, and managing content. The tools included in this recipe are as per the following example:
|
A good starter for the usenet scene is <https://www.reddit.com/r/usenet/>. Because it's so damn complicated, a host of automated tools exist to automate the process of finding, downloading, and managing content. The tools included in this recipe are as per the following example:
|
||||||
|
|
||||||
{ loading=lazy }
|
{ loading=lazy }
|
||||||
|
|
||||||
This recipe presents a method to combine these tools into a single swarm deployment, and make them available securely.
|
This recipe presents a method to combine these tools into a single swarm deployment, and make them available securely.
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ description: Jackett works as a proxy server, standardizing your apps' (Radarr /
|
|||||||
|
|
||||||
This allows for getting recent uploads (like RSS) and performing searches. Jackett is a single repository of maintained indexer scraping & translation logic - removing the burden from other apps.
|
This allows for getting recent uploads (like RSS) and performing searches. Jackett is a single repository of maintained indexer scraping & translation logic - removing the burden from other apps.
|
||||||
|
|
||||||
{ loading=lazy }
|
{ loading=lazy }
|
||||||
|
|
||||||
## Inclusion into AutoPirate
|
## Inclusion into AutoPirate
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ description: LazyLibrarian is a tool to follow authors and manage your ebook / a
|
|||||||
* AutoAdd feature for book management tools like Calibre which must have books in flattened directory structure, or use calibre to import your books into an existing calibre library
|
* AutoAdd feature for book management tools like Calibre which must have books in flattened directory structure, or use calibre to import your books into an existing calibre library
|
||||||
* LazyLibrarian can also be used to search for and download magazines, and monitor for new issues
|
* LazyLibrarian can also be used to search for and download magazines, and monitor for new issues
|
||||||
|
|
||||||
{ loading=lazy }
|
{ loading=lazy }
|
||||||
|
|
||||||
## Inclusion into AutoPirate
|
## Inclusion into AutoPirate
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ description: Lidarr is an automated music downloader for NZB and Torrent
|
|||||||
|
|
||||||
[Lidarr](https://lidarr.audio/) is an automated music downloader for NZB and Torrent. It performs the same function as [Headphones][headphones], but is written using the same(ish) codebase as [Radarr][radarr] and [Sonarr][sonarr]. It's blazingly fast, and includes beautiful album/artist art. Lidarr supports [SABnzbd][sabnzbd], [NZBGet][nzbget], Transmission, µTorrent, Deluge and Blackhole (_just like Sonarr / Radarr_)
|
[Lidarr](https://lidarr.audio/) is an automated music downloader for NZB and Torrent. It performs the same function as [Headphones][headphones], but is written using the same(ish) codebase as [Radarr][radarr] and [Sonarr][sonarr]. It's blazingly fast, and includes beautiful album/artist art. Lidarr supports [SABnzbd][sabnzbd], [NZBGet][nzbget], Transmission, µTorrent, Deluge and Blackhole (_just like Sonarr / Radarr_)
|
||||||
|
|
||||||
{ loading=lazy }
|
{ loading=lazy }
|
||||||
|
|
||||||
## Inclusion into AutoPirate
|
## Inclusion into AutoPirate
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ description: Mylar is a tool for downloading and managing digital comic books, a
|
|||||||
|
|
||||||
[Mylar](https://github.com/mylar3/mylar3) is a tool for downloading and managing digital comic books.
|
[Mylar](https://github.com/mylar3/mylar3) is a tool for downloading and managing digital comic books.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Inclusion into AutoPirate
|
## Inclusion into AutoPirate
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ description: NZBGet is a tool for downloading "content" from Usenet providers, a
|
|||||||
|
|
||||||
NZBGet performs the same function as [SABnzbd][sabnzbd] (_downloading content from Usenet servers_), but it's lightweight and fast(er), written in C++ (_as opposed to Python_).
|
NZBGet performs the same function as [SABnzbd][sabnzbd] (_downloading content from Usenet servers_), but it's lightweight and fast(er), written in C++ (_as opposed to Python_).
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Inclusion into AutoPirate
|
## Inclusion into AutoPirate
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ description: NZBHydra is a meta search engine for NZB indexers, and can be used
|
|||||||
|
|
||||||
[NZBHydra2](https://github.com/theotherp/nzbhydra2) is a meta search for NZB indexers. It provides easy access to a number of raw and newznab based indexers. You can search all your indexers from one place and use it as an indexer source for tools like Sonarr, Radarr or CouchPotato.
|
[NZBHydra2](https://github.com/theotherp/nzbhydra2) is a meta search for NZB indexers. It provides easy access to a number of raw and newznab based indexers. You can search all your indexers from one place and use it as an indexer source for tools like Sonarr, Radarr or CouchPotato.
|
||||||
|
|
||||||
{ loading=lazy }
|
{ loading=lazy }
|
||||||
|
|
||||||
Features include:
|
Features include:
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ User management system (_supports plex.tv, Emby and local accounts_)
|
|||||||
* Will show if the request is already on plex or even if it's already monitored.
|
* Will show if the request is already on plex or even if it's already monitored.
|
||||||
* Automatically updates the status of requests when they are available on Plex/Emby/Jellyfin
|
* Automatically updates the status of requests when they are available on Plex/Emby/Jellyfin
|
||||||
|
|
||||||
{ loading=lazy }
|
{ loading=lazy }
|
||||||
|
|
||||||
## Inclusion into AutoPirate
|
## Inclusion into AutoPirate
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ description: Prowlarr aggregates nzb/torrent searches. Imagine NZBHydra and Jack
|
|||||||
|
|
||||||
Prowlarr supports management of both Torrent Trackers and Usenet Indexers. It integrates seamlessly with [Lidarr][lidarr], [Mylar3][mylar], [Radarr][radarr], [Readarr][readarr], and [Sonarr][sonarr] offering complete management of your indexers with no per app Indexer setup required!
|
Prowlarr supports management of both Torrent Trackers and Usenet Indexers. It integrates seamlessly with [Lidarr][lidarr], [Mylar3][mylar], [Radarr][radarr], [Readarr][readarr], and [Sonarr][sonarr] offering complete management of your indexers with no per app Indexer setup required!
|
||||||
|
|
||||||
{ loading=lazy }
|
{ loading=lazy }
|
||||||
|
|
||||||
Fancy features include:
|
Fancy features include:
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ description: Radarr is a tool for finding, downloading and managing movies, and
|
|||||||
* And a beautiful UI
|
* And a beautiful UI
|
||||||
* Importing Metadata such as trailers or subtitles
|
* Importing Metadata such as trailers or subtitles
|
||||||
|
|
||||||
{ loading=lazy }
|
{ loading=lazy }
|
||||||
|
|
||||||
## Inclusion into AutoPirate
|
## Inclusion into AutoPirate
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ description: Readarr is "Sonarr/Radarr for eBooks and audiobooks, and plays perf
|
|||||||
|
|
||||||
[Readarr](https://github.com/Readarr/Readarr), in the fine tradition of [Radarr][radarr] and [Sonarr][sonarr], is a tool for "sourcing" eBooks, using usenet or bittorrent indexers.
|
[Readarr](https://github.com/Readarr/Readarr), in the fine tradition of [Radarr][radarr] and [Sonarr][sonarr], is a tool for "sourcing" eBooks, using usenet or bittorrent indexers.
|
||||||
|
|
||||||
{ loading=lazy }
|
{ loading=lazy }
|
||||||
|
|
||||||
Features include:
|
Features include:
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ description: ruTorrent (looks like uTorrent) is a popular web UI frontend to rto
|
|||||||
|
|
||||||
[RTorrent](http://rakshasa.github.io/rtorrent) is a popular CLI-based bittorrent client, and [ruTorrent](https://github.com/Novik/ruTorrent) is a powerful web interface for rtorrent.
|
[RTorrent](http://rakshasa.github.io/rtorrent) is a popular CLI-based bittorrent client, and [ruTorrent](https://github.com/Novik/ruTorrent) is a powerful web interface for rtorrent.
|
||||||
|
|
||||||
{ loading=lazy }
|
{ loading=lazy }
|
||||||
|
|
||||||
## Choose incoming port
|
## Choose incoming port
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ description: SABnzbd is a tool for downloading "content" from Usenet providers,
|
|||||||
|
|
||||||
SABnzbd is a workhorse of the stack. It takes .nzb files as input (_manually or from other [autopirate](/recipes/autopirate/) stack tools_), then connects to your chosen Usenet provider, downloads all the individual binaries referenced by the .nzb, and then tests/repairs/combines/uncompresses them all into the final result - media files.
|
SABnzbd is a workhorse of the stack. It takes .nzb files as input (_manually or from other [autopirate](/recipes/autopirate/) stack tools_), then connects to your chosen Usenet provider, downloads all the individual binaries referenced by the .nzb, and then tests/repairs/combines/uncompresses them all into the final result - media files.
|
||||||
|
|
||||||
{ loading=lazy }
|
{ loading=lazy }
|
||||||
|
|
||||||
## Inclusion into AutoPirate
|
## Inclusion into AutoPirate
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ description: Sonarr is a tool for finding, downloading and managing TV series*,
|
|||||||
|
|
||||||
[Sonarr](https://sonarr.tv/) is a tool for finding, downloading and managing your TV series.
|
[Sonarr](https://sonarr.tv/) is a tool for finding, downloading and managing your TV series.
|
||||||
|
|
||||||
{ loading=lazy }
|
{ loading=lazy }
|
||||||
|
|
||||||
## Inclusion into AutoPirate
|
## Inclusion into AutoPirate
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ title: Run Keycloak behind traefik in Docker
|
|||||||
|
|
||||||
Keycloak's OpenID provider can also be used in combination with [Traefik Forward Auth](/docker-swarm/traefik-forward-auth/), to protect [vulnerable services](/recipes/autopirate/nzbget/) with an extra layer of authentication.
|
Keycloak's OpenID provider can also be used in combination with [Traefik Forward Auth](/docker-swarm/traefik-forward-auth/), to protect [vulnerable services](/recipes/autopirate/nzbget/) with an extra layer of authentication.
|
||||||
|
|
||||||
{ loading=lazy }
|
{ loading=lazy }
|
||||||
|
|
||||||
--8<-- "recipe-standard-ingredients.md"
|
--8<-- "recipe-standard-ingredients.md"
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ In order to avoid IP addressing conflicts as we bring swarm networks up/down, we
|
|||||||
| [Tiny Tiny RSS](/recipes/tiny-tiny-rss/) | 172.16.5.0/24 |
|
| [Tiny Tiny RSS](/recipes/tiny-tiny-rss/) | 172.16.5.0/24 |
|
||||||
| [Huginn](/recipes/huginn/) | 172.16.6.0/24 |
|
| [Huginn](/recipes/huginn/) | 172.16.6.0/24 |
|
||||||
| [Gollum](/recipes/gollum/) | 172.16.7.0/24 |
|
| [Gollum](/recipes/gollum/) | 172.16.7.0/24 |
|
||||||
|
| Immich (coming soon!) | 172.16.8.0/24 |
|
||||||
|
| Mastodon (coming soon!) | 172.16.9.0/24 |
|
||||||
| [Duplicity](/recipes/duplicity/) | 172.16.10.0/24 |
|
| [Duplicity](/recipes/duplicity/) | 172.16.10.0/24 |
|
||||||
| [Autopirate](/recipes/autopirate/) | 172.16.11.0/24 |
|
| [Autopirate](/recipes/autopirate/) | 172.16.11.0/24 |
|
||||||
| [Nextcloud](/recipes/nextcloud/) | 172.16.12.0/24 |
|
| [Nextcloud](/recipes/nextcloud/) | 172.16.12.0/24 |
|
||||||
|
|||||||
166
manuscript/review/immich.md
Normal file
166
manuscript/review/immich.md
Normal file
@@ -0,0 +1,166 @@
|
|||||||
|
---
|
||||||
|
title: Review / Immich - a self-hosted Google Photos alternative
|
||||||
|
description: Immich is a polished and functional replacement for Google Photos
|
||||||
|
upstream_version: v1.19.1
|
||||||
|
upstream_repo: https://github.com/immich-app/immich
|
||||||
|
review_latest_change: Initial review!
|
||||||
|
---
|
||||||
|
|
||||||
|
# I'm defz going to replace Google Photos with Immich!
|
||||||
|
|
||||||
|
| Review details | |
|
||||||
|
| ----------- | ------------------------------------ |
|
||||||
|
| :material-calendar-check: Last updated | *{{ git_revision_date_localized }}* |
|
||||||
|
| :octicons-number-24: Reviewed version | *[{{ page.meta.upstream_version }}]({{ page.meta.upstream_repo }})* |
|
||||||
|
|
||||||
|
Immich is a promising self-hosted alternative to Google Photos. Its UI and features are clearly heavily inspired by Google Photos, and like [Photoprism][photoprism], Immich uses tensorflow-based machine learning to auto-tag your photos!
|
||||||
|
|
||||||
|
!!! warning "Pre-production warning"
|
||||||
|
The developer makes it abundantly clear that Immich is under heavy development, and features and APIs may change, and all your photos may be lost, or (worse) auto-shared with to your :dragon_face: mother-in-law! Take due care :wink:
|
||||||
|
|
||||||
|
I'm personally excited about Immich because I've recently been debating how to migrate from Google Photos, in which I'm hitting my 15GB storage limit.
|
||||||
|
|
||||||
|
{ loading=lazy }
|
||||||
|
|
||||||
|
Immich is a bit of an outlier in the self-hosted application space in terms of its maturity.. the [repository](https://github.com/immich-app/immich) currently states that it's **not** production-ready, but it's already got both an Android and iOS app available in the respective app stores.
|
||||||
|
|
||||||
|
{ align=right loading=lazy }
|
||||||
|
|
||||||
|
Two things stand out to me here - first off, the developer actively tries to discourage users from relying on the app for anything other than testing, and secondly, by investing in the mobile apps / app stores (*which come with a cost*), they're clearly thinking long-term and are committed to the project.
|
||||||
|
|
||||||
|
## Immich Features
|
||||||
|
|
||||||
|
Here are the current Immich features, which I scraped directly from the repo. As you'll note, the mobile apps mostly have parity with the web app, other than administrative functions, and even have some extra features, like search..
|
||||||
|
|
||||||
|
| | Mobile | Web |
|
||||||
|
| - | - | - |
|
||||||
|
| Upload and view videos and photos | Yes | Yes
|
||||||
|
| Auto backup when app is opened | Yes | N/A
|
||||||
|
| Selective album(s) for backup | Yes | N/A
|
||||||
|
| Download photos and videos to local device | Yes | Yes
|
||||||
|
| Multi-user support | Yes | Yes
|
||||||
|
| Album | No | Yes
|
||||||
|
| Shared Albums | Yes | Yes
|
||||||
|
| Quick navigation with draggable scrollbar | Yes | Yes
|
||||||
|
| Support RAW (HEIC, HEIF, DNG, Apple ProRaw) | Yes | Yes
|
||||||
|
| Metadata view (EXIF, map) | Yes | Yes
|
||||||
|
| Search by metadata, objects and image tags | Yes | No
|
||||||
|
| Administrative functions (user management) | N/A | Yes
|
||||||
|
|
||||||
|
## Background
|
||||||
|
|
||||||
|
Primarily what I want Immich to do is to backup all my photos from both my mobile phone, and my wife's phone, so that we can have a consolidated photo backup for our family. (*We currently use a dedicated gmail account with Google Photos for this purpose, but it's run out of space and is a little convoluted*)
|
||||||
|
|
||||||
|
We're iOS users, and we have a 2TB family iCloud account to which all of our photos are synced. Since the advent of iCloud Photo Library, it's not possible to "combine" photo libraries, so the only way we can share photos of our family is to manually add them to an album which one of us shares with the other. This is waaay too much work, and what inevitably happens is that we each end up with separate photo albums, and regularly have to send each other photos of events and kids.
|
||||||
|
|
||||||
|
So what I'm looking for is a solution to replace Google Photos - a way for each user to upload *all* photos taken on their device, and have these photos combined into a "master album" which both parties can access, manage, and create albums from.
|
||||||
|
|
||||||
|
## Details
|
||||||
|
|
||||||
|
### Install
|
||||||
|
|
||||||
|
Installation was... tricky, but that's because I wanted to install Immich using Docker Swarm, rather than the example docker-compose included with the repo. I'm working on a recipe, and will update this review when done.
|
||||||
|
|
||||||
|
### Web UI
|
||||||
|
|
||||||
|
The setup process was straightforward. After deploying Immich, I was prompted to setup a username and password, which subsequently became my admin credentials. Using these credentials, I setup a second user, and shared an album with him. Here's a video I made to illustrate the process:
|
||||||
|
|
||||||
|
<iframe width="560" height="315" src="https://www.youtube.com/embed/L1V_P2NRhlE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
|
||||||
|
|
||||||
|
### Mobile app
|
||||||
|
|
||||||
|
The Mobile app seems very polished, and based on my testing, works better than the Synology "Moments" app I was previously trialling (*especially given the volume of photos I have!*)
|
||||||
|
|
||||||
|
<figure markdown>
|
||||||
|
{ loading=lazy }
|
||||||
|
<figcaption>Apparently this was 4000+ photos!</figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
|
||||||
|
### Other
|
||||||
|
|
||||||
|
Here's what the filesystem where photos are stored looks like:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
/var/data/immich/upload/49a82212-e1bb-48d9-8b8f-7076e54bd6aa/thumb/WEB/34ce58c4-8100-49d4-a5a3-f13a74b478f9.webp
|
||||||
|
/var/data/immich/upload/49a82212-e1bb-48d9-8b8f-7076e54bd6aa/thumb/WEB/34ce58c4-8100-49d4-a5a3-f13a74b478f9.jpeg
|
||||||
|
/var/data/immich/upload/49a82212-e1bb-48d9-8b8f-7076e54bd6aa/thumb/WEB/7d8abe14-77c3-4214-804a-d35d68084a2c.webp
|
||||||
|
/var/data/immich/upload/49a82212-e1bb-48d9-8b8f-7076e54bd6aa/thumb/WEB/309228ef-0b21-4986-acc4-d0c0d10e43ac.webp
|
||||||
|
/var/data/immich/upload/49a82212-e1bb-48d9-8b8f-7076e54bd6aa/thumb/WEB/309228ef-0b21-4986-acc4-d0c0d10e43ac.jpeg
|
||||||
|
/var/data/immich/upload/49a82212-e1bb-48d9-8b8f-7076e54bd6aa/thumb/WEB/7d8abe14-77c3-4214-804a-d35d68084a2c.jpeg
|
||||||
|
/var/data/immich/upload/49a82212-e1bb-48d9-8b8f-7076e54bd6aa/thumb/WEB/8adff3fe-d0ac-4855-b0ca-12a1f6ef2caf.webp
|
||||||
|
/var/data/immich/upload/49a82212-e1bb-48d9-8b8f-7076e54bd6aa/thumb/WEB/8adff3fe-d0ac-4855-b0ca-12a1f6ef2caf.jpeg
|
||||||
|
/var/data/immich/upload/49a82212-e1bb-48d9-8b8f-7076e54bd6aa/thumb/WEB/30505706-520b-4eac-89ed-9f1227802306.jpeg
|
||||||
|
/var/data/immich/upload/49a82212-e1bb-48d9-8b8f-7076e54bd6aa/thumb/WEB/30505706-520b-4eac-89ed-9f1227802306.webp
|
||||||
|
/var/data/immich/upload/cae22784-474c-4527-825c-46d7f324e8e8
|
||||||
|
/var/data/immich/upload/cae22784-474c-4527-825c-46d7f324e8e8/original
|
||||||
|
/var/data/immich/upload/cae22784-474c-4527-825c-46d7f324e8e8/original/WEB
|
||||||
|
/var/data/immich/upload/cae22784-474c-4527-825c-46d7f324e8e8/original/WEB/2245d33b-fbc5-40ee-a50b-2a234f73e3d9.jpg
|
||||||
|
/var/data/immich/upload/cae22784-474c-4527-825c-46d7f324e8e8/thumb
|
||||||
|
/var/data/immich/upload/cae22784-474c-4527-825c-46d7f324e8e8/thumb/WEB
|
||||||
|
/var/data/immich/upload/cae22784-474c-4527-825c-46d7f324e8e8/thumb/WEB/2245d33b-fbc5-40ee-a50b-2a234f73e3d9.webp
|
||||||
|
/var/data/immich/upload/cae22784-474c-4527-825c-46d7f324e8e8/thumb/WEB/2245d33b-fbc5-40ee-a50b-2a234f73e3d9.jpeg
|
||||||
|
```
|
||||||
|
|
||||||
|
As you'll note, while it's true that files are stored locally, there's no filesystem-level metadata easily parsable, like yearly or album-based folders. While the files are stored locally, and *technically* you could move them elsewhere, it certainly wouldn't be easy.
|
||||||
|
|
||||||
|
It's also not easy to access the files via any sort of sharing (*NFS, SMB, etc*), other than using the Immich UI. Par for the course though, I expect, if we want to be able to rely on the database for metadata without requiring intensive filesystem interaction.
|
||||||
|
|
||||||
|
## Alternatives
|
||||||
|
|
||||||
|
### Photoprism
|
||||||
|
|
||||||
|
Until Immich, the only viable self-hosted Google Photos replacement I was aware of was [Photoprism][photoprism], which has a far wider featureset and several years of stable releases.
|
||||||
|
|
||||||
|
Given my goal of having a non-Apple secondary backup of my family photos, let's selfishly compare the features which matter (*to me*):
|
||||||
|
|
||||||
|
<figure markdown>
|
||||||
|
| Feature | Immich | Photoprism |
|
||||||
|
| ----- | ----------- | ------------------------------------ |
|
||||||
|
| :material-nas: Photos stored locally | Y | Y |
|
||||||
|
| :octicons-device-mobile-24: Automatic mobile uploads (automatic) | Y | [paid 3rd-party app](https://www.photosync-app.com/home.html) |
|
||||||
|
| :material-share-variant: Share albums with trusted users | Y | Y |
|
||||||
|
| :material-bomb-off: Stable release | haha | [2021](https://docs.photoprism.app/developer-guide/)
|
||||||
|
| :material-face-recognition: AI facial recognition | N | Y |
|
||||||
|
| :octicons-tag-24: AI tagging ("photo of dog") | Y | Y |
|
||||||
|
|
||||||
|
<figcaption>Immich vs Photoprism</figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
Conclusion: For my secondary-backup use-case, Immich (*even in its current pre-production buggy state*) is perfectly fine. The mobile app is beautiful (*if a little buggy*), and I do appreciate the cheeky "google photos" theming / styling. I think it'll appeal to a lot of Google Photos refugees for this reason alone.
|
||||||
|
|
||||||
|
### Google Photos
|
||||||
|
|
||||||
|
OK, obviously one is self-hosted, and the other is not. This massive differenec aside, again for my use-case, the other feature differences are:
|
||||||
|
|
||||||
|
<figure markdown>
|
||||||
|
| Feature | Immich | Google Photos |
|
||||||
|
| ----- | ----------- | ------------------------------------ |
|
||||||
|
| :material-nas: Storage limit | :octicons-infinity-24: | 15GB :fontawesome-solid-hand-middle-finger: |
|
||||||
|
| :octicons-device-mobile-24: Automatic mobile uploads (automatic) | Y | Y (*but deletions sync with my phone, which is less-than-idea, for my secondary-backup plan*) |
|
||||||
|
| :material-share-variant: Share all photos with user | Y | Only with 1 partner :couple: |
|
||||||
|
| :material-bomb-off: Stable release | haha | Y
|
||||||
|
| :material-face-recognition: AI facial recognition | N | Y |
|
||||||
|
| :octicons-tag-24: AI tagging ("photo of dog") | Y | Y |
|
||||||
|
|
||||||
|
<figcaption>Immich vs Google Photos</figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
**Conclusion**: I setup my secondary-backup plan when Google first announced unlimited storage for Google Photos. Now that this is no longer possible, I'm out.
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
### TL;DR
|
||||||
|
|
||||||
|
I'm in (*for a secondary backup to my iCloud Photo Library*)
|
||||||
|
|
||||||
|
Based on how the pre-production development has progressed, and the massive hunger in the self-hosted community for an alternative to Google Photos, I suspect that Immich will quickly gain traction and continue its rapid pace of development.
|
||||||
|
|
||||||
|
Please [join me](/#sponsored-projects) in sponsoring [@alextran1502](https://github.com/sponsors/alextran1502), to support this exceptional product!
|
||||||
|
|
||||||
|
### Setup Immiche via premix
|
||||||
|
|
||||||
|
I'll have a recipe up for Immich in due course, but if you're wanting to use the pre-prod, development, dont-blame-me version, there's an ansible role in the [Premix](/premix/) playbook which will set it up in under 60s (*see below*):
|
||||||
|
<iframe width="560" height="315" src="https://www.youtube.com/embed/s-NZjYrNOPg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
|
||||||
|
|
||||||
|
--8<-- "review-footer.md"
|
||||||
17
manuscript/review/index.md
Normal file
17
manuscript/review/index.md
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
title: Awesome self-hosted app reviews
|
||||||
|
description: This list focuses on reviews of self-hosted apps themselves, rather than deployment strategies
|
||||||
|
---
|
||||||
|
# Reviews of self-hosted apps
|
||||||
|
|
||||||
|
Unlike the [Docker Swarm](/docker-swarm/) or [Kubernetes](/kubernetes/) sections, which focus on deployment of various applications, this section reviews the applications themselves, irrespective of the deployment methodology.
|
||||||
|
|
||||||
|
What you'll find here are opinions and notes about various self-hosted applications, which will be updated from time-to-time to keep them "fresh" :leafy_green:
|
||||||
|
|
||||||
|
|
||||||
|
App | Description | Date
|
||||||
|
---------|----------| ---------
|
||||||
|
[Immich][review/immich] | Google Photos replacement | 3 Aug 2022
|
||||||
|
|
||||||
|
|
||||||
|
--8<-- "common-links.md"
|
||||||
@@ -42,7 +42,7 @@ plugins:
|
|||||||
#theme_dir: mkdocs-material
|
#theme_dir: mkdocs-material
|
||||||
nav:
|
nav:
|
||||||
- Home: index.md
|
- Home: index.md
|
||||||
- Docker Swarm:
|
- 🐳 Docker Swarm:
|
||||||
- docker-swarm/index.md
|
- docker-swarm/index.md
|
||||||
- Preparation:
|
- Preparation:
|
||||||
- Design: docker-swarm/design.md
|
- Design: docker-swarm/design.md
|
||||||
@@ -240,7 +240,10 @@ nav:
|
|||||||
- Operation: premix/ansible/operation.md
|
- Operation: premix/ansible/operation.md
|
||||||
- Design: premix/ansible/design.md
|
- Design: premix/ansible/design.md
|
||||||
# - Swarm: premix/swarm.md
|
# - Swarm: premix/swarm.md
|
||||||
# - Kubernetes: premix/kubernetes.md
|
# - Kubernetes: premix/kubernetes.md
|
||||||
|
- ✅ Reviews:
|
||||||
|
- review/index.md
|
||||||
|
- Immich: review/immich.md
|
||||||
- CHANGELOG: recent-changes.md
|
- CHANGELOG: recent-changes.md
|
||||||
- Support: support.md
|
- Support: support.md
|
||||||
- Contribute: community/contribute.md
|
- Contribute: community/contribute.md
|
||||||
|
|||||||
Reference in New Issue
Block a user