<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Search – Serverküche</title><link>https://serverkueche.de/en/tags/search/</link><description>Search – Neueste Beiträge von Serverküche</description><generator>Hugo</generator><language>en-US</language><managingEditor>feedback@serverkueche.de (Serverküche)</managingEditor><webMaster>feedback@serverkueche.de (Serverküche)</webMaster><copyright>2026 Serverküche</copyright><lastBuildDate>Thu, 20 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://serverkueche.de/en/tags/search/index.xml" rel="self" type="application/rss+xml"/><item><title>Optimizing Immich: mobile backup, multilingual AI search &amp; family setup (Part 2)</title><link>https://serverkueche.de/en/tutorials/optimize-immich-mobile/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><author>feedback@serverkueche.de (Serverküche)</author><guid>https://serverkueche.de/en/tutorials/optimize-immich-mobile/</guid><description>Immich part 2: make the mobile backup reliable, switch the AI search to your language, add existing photos as an external library, set user quotas.</description><content:encoded><![CDATA[<p>In <a href="/en/tutorials/self-host-immich-photos/">part 1</a> you set up Immich behind Traefik – the timeline is running. Now comes the part that turns the installation into a real Google Photos replacement: a mobile backup that actually runs reliably, an AI search that <strong>understands your language</strong>, your existing photo collection as an external library, and separate accounts for the family.</p>
<h2 id="what-are-we-building">What are we building?</h2>
<p>Four upgrades for your running <strong>Immich v3.1.0</strong> from part 1: first we configure the automatic mobile backup so it keeps running in the background. Then we swap the default search model for a <strong>multilingual CLIP model</strong> – after that, even a fully phrased query in your own language (&ldquo;snow-covered peaks above a lake&rdquo;) finds the right photo: in our German-language test the hit rate rose from <strong>19 to 24 out of 24</strong> queries. Next we add an existing photo archive as an <strong>external library</strong> without touching the files, and set up <strong>family accounts with storage quotas</strong>. All steps were played through against the real web interface on a netcup VPS; the screenshots come from that run (German UI – the menu structure is identical in English).</p>
<h2 id="prerequisites">Prerequisites</h2>
<ul>
<li>A running <strong>Immich v3.1.0</strong> behind Traefik – exactly the state from <a href="/en/tutorials/self-host-immich-photos/">part 1</a>, including the pinned <code>IMMICH_VERSION</code> and a backup</li>
<li>The <strong>Immich app</strong> on your phone, connected to your server (part 1, step 6)</li>
<li>For the AI search: <strong>8 GB RAM or more</strong> – the multilingual models are larger than the default model (real measurements in step 3)</li>
<li>Optional: a folder with existing photos on the server (for the external library)</li>
</ul>
<div class="not-prose my-6 overflow-hidden rounded-xl border border-paprika-200 bg-paprika-50 dark:border-paprika-800 dark:bg-paprika-900/20"
     data-track-content data-content-name="Affiliate-Box · /en/tutorials/optimize-immich-mobile/" data-content-piece="VPS 2000 G12">
  <div class="flex items-center justify-between border-b border-paprika-200 bg-paprika-100 px-4 py-1.5 text-xs font-semibold uppercase tracking-wide text-paprika-700 dark:border-paprika-800 dark:bg-paprika-900/40 dark:text-paprika-300">
    <span>🍳 Recommendation</span>
    <span title="Links marked with * are affiliate links.">Ad</span>
  </div>
  <div class="flex flex-col gap-4 p-4 sm:flex-row sm:items-center sm:justify-between">
    <div>
      <p class="text-lg font-bold text-slate-900 dark:text-white">VPS 2000 G12</p>
      <p class="mt-1 text-sm text-slate-600 dark:text-slate-300">8 vCores · 16 GB RAM · 512 GB NVMe</p>
      <p class="mt-1 text-sm font-semibold text-paprika-700 dark:text-paprika-400">from €19.24/month</p>
      <p class="mt-2 text-sm text-slate-600 dark:text-slate-400">Multilingual search models and family accounts like RAM – 16 GB gives you headroom.</p>
    </div>
    <a href="https://www.netcup.com/en/server/vps/vps-2000-g12-iv-12m?ref=44083" rel="sponsored noopener" target="_blank"
   data-track-event="Affiliate|netcup: Affiliate-Box|VPS 2000 G12 · {page}"
   class="inline-flex shrink-0 items-center justify-center rounded-lg bg-paprika-600 px-5 py-2.5 font-semibold text-white transition-colors hover:bg-paprika-700">
  Go to netcup →
</a>

  </div><div class="px-4 pb-4"><p class="not-prose my-3 flex flex-wrap items-center gap-x-2 gap-y-1 rounded-lg border border-herb-500/40 bg-herb-50 px-3 py-2 text-sm text-slate-700 dark:bg-herb-900/20 dark:text-slate-200">
  <span>💶 <strong>5 € voucher</strong> for new netcup customers:</span><code data-track-voucher="36nc17844976032"
        class="rounded bg-white px-2 py-0.5 font-mono text-sm font-semibold text-herb-800 dark:bg-slate-800 dark:text-herb-400">36nc17844976032</code>
  <span class="text-xs text-slate-500 dark:text-slate-400">(new customers only, no domains)</span>
</p></div>
</div>

<h2 id="step-by-step">Step by step</h2>
<h3 id="step-1-making-the-mobile-backup-reliable">Step 1: Making the mobile backup reliable</h3>
<p>You enabled the backup itself in part 1 – but with default settings, the app often only uploads while it is open. The important switches live in the app under <strong>Backup</strong> (app settings, not server settings). The app evolves quickly and individual menu items may be named slightly differently depending on the version – the mechanics stay the same:</p>
<ul>
<li><strong>Select albums:</strong> back up deliberately – camera album in, WhatsApp folder out. Albums can also be <strong>excluded</strong> (double-tap in the selection); handy on iOS, where one photo can belong to several albums.</li>
<li><strong>Enable background backup:</strong> only then does the app upload new photos without you opening it.</li>
<li><strong>Wi-Fi only</strong> is the default – new photos only appear on the server once the phone is back on Wi-Fi. If you want to back up on the go, allow mobile data in the backup settings (watch your data plan with videos).</li>
<li><strong>Album synchronization:</strong> optionally, Immich mirrors your phone albums as albums on the server – the structure from your device is preserved instead of everything just landing in the timeline. Synchronization is one-way (phone → server).</li>
</ul>
<p>Two platform quirks that hit almost everyone:</p>
<ul>
<li><strong>Android:</strong> aggressive battery optimization by many vendors (Samsung, Xiaomi &amp; co.) kills the background worker. Exempt the Immich app from battery optimization – <a href="https://dontkillmyapp.com/">dontkillmyapp.com</a> lists the vendor-specific steps. You can also restrict background backup to charging only.</li>
<li><strong>iOS:</strong> without <strong>Background App Refresh</strong> (Settings → General → Background App Refresh) nothing runs in the background. And even then, iOS decides <em>when</em> the task runs – the more often you open the app, the more background time iOS grants it. That is an iOS quirk, not an Immich bug.</li>
</ul>
<p>You don&rsquo;t have to fear duplicate uploads: Immich computes a <strong>checksum</strong> for every file and skips anything already on the server – whether it arrived via web, CLI or another device.</p>
<p>To verify everything arrives, check the server: the timeline shows new photos, and <strong>Administration → Server Statistics</strong> shows count and storage usage growing per user.</p>
<h3 id="step-2-why-the-search-struggles-in-your-language">Step 2: Why the search struggles in your language</h3>
<p>Immich&rsquo;s smart search works with a <strong>CLIP model</strong>: it turns every photo and every query into a numeric vector; the search returns the photos whose vectors are closest to the query. That&rsquo;s why &ldquo;dog at the beach&rdquo; works without anyone tagging photos – and why it runs entirely <strong>locally on your server</strong>, not in a cloud.</p>
<p>The catch: the default model <code>ViT-B-32__openai</code> was trained on <strong>English</strong> captions. Single nouns in other languages often still work – they appeared often enough in the training data. Our test run against a library of twelve unambiguous subjects shows exactly that pattern (all queries in German):</p>
<ul>
<li><strong>Single search words</strong> (&ldquo;Strand&rdquo;/beach, &ldquo;Leuchtturm&rdquo;/lighthouse, &ldquo;Katze&rdquo;/cat): 11 of 12 ranked first – only &ldquo;Sonnenuntergang in den Bergen&rdquo; (sunset in the mountains) missed.</li>
<li><strong>Fully phrased sentences</strong> (&ldquo;verschneite Berggipfel über einem See&rdquo;/snow-covered peaks above a lake, &ldquo;Burg hinter Bäumen am Ufer&rdquo;/castle behind trees on the shore): only <strong>8 of 12</strong>. For &ldquo;zwei alte Fahrräder nebeneinander&rdquo; (two old bicycles side by side) a lighthouse came first.</li>
</ul>
<p>So the closer your query gets to a whole sentence, the sooner the English model breaks down – and that is exactly how people search. That&rsquo;s what we fix now.</p>
<h3 id="step-3-switching-the-ai-search-to-a-multilingual-model">Step 3: Switching the AI search to a multilingual model</h3>
<p>Immich can load any CLIP model from its <a href="https://huggingface.co/immich-app">model catalog</a>. For non-English (and mixed) searches, the multilingual <strong><code>XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k</code></strong> proved itself in our test – it understands the query language directly, with no extra configuration.</p>
<p>Open <strong>Administration → Settings → Machine Learning</strong> and expand <strong>Smart Search</strong>. Enter the new model name in the <strong>CLIP model</strong> field and save:</p>
<p><figure class="my-6"><img src="/en/tutorials/optimize-immich-mobile/immich-ml-clip-modell_hu_36a8011fec873fcd.webp" srcset="/en/tutorials/optimize-immich-mobile/immich-ml-clip-modell_hu_3d3b7d390c83fee5.webp 480w, /en/tutorials/optimize-immich-mobile/immich-ml-clip-modell_hu_36a8011fec873fcd.webp 768w, /en/tutorials/optimize-immich-mobile/immich-ml-clip-modell_hu_d6785e1762d95e12.webp 1200w, /en/tutorials/optimize-immich-mobile/immich-ml-clip-modell_hu_254eb444af61169a.webp 1920w" sizes="(min-width: 768px) 768px, 100vw"
    width="768" height="432"
    data-full="/en/tutorials/optimize-immich-mobile/immich-ml-clip-modell_hu_a4ee14ea3c2bffde.webp"
    alt="The Immich system settings with the Smart Search section expanded and the CLIP model XLM-Roberta-Base-ViT-B-32 entered" title="Machine Learning → Smart Search: this is where the multilingual CLIP model goes"
    loading="lazy" decoding="async" class="rounded-lg"><figcaption class="mt-2 text-sm text-center text-slate-500 italic">Machine Learning → Smart Search: this is where the multilingual CLIP model goes</figcaption></figure></p>
<div class="not-prose my-6 rounded-lg border-l-4 p-4 border-amber-400 bg-amber-50 dark:border-amber-700 dark:bg-amber-900/20">
  <p class="mb-1 flex items-center gap-2 font-semibold text-slate-900 dark:text-white">
    <span aria-hidden="true">⚠️</span>Avoid the nllb models (as of v3.1.0)
  </p>
  <div class="prose-kitchen text-sm">The model catalog also contains <code>nllb-clip-…</code> models. Those expect the search language as a parameter – and in Immich v3.1.0 there is nowhere to set it: neither the system settings nor the account settings offer such a field. Result in our test with <code>nllb-clip-base-siglip__v1</code>: <strong>19 of 24</strong> German queries ranked first – no better than the English default model, and for &ldquo;Leuchtturm&rdquo; (lighthouse) a castle came first. Pick an <code>XLM-…</code> or <code>…SigLIP2…</code> model instead; per the docs and our test, they work without any language setting.</div>
</div>
<p>The new model only applies to <strong>new</strong> vectors – your existing photos are still indexed with the old model, and the two vector spaces are incompatible. So go to <strong>Administration → Job Queues</strong> and start the <strong>Smart Search</strong> job via <strong>All</strong>:</p>
<p><figure class="my-6"><img src="/en/tutorials/optimize-immich-mobile/immich-jobs-intelligente-suche_hu_12da19c85f6ed867.webp" srcset="/en/tutorials/optimize-immich-mobile/immich-jobs-intelligente-suche_hu_5e2263a65f7ab1ed.webp 480w, /en/tutorials/optimize-immich-mobile/immich-jobs-intelligente-suche_hu_12da19c85f6ed867.webp 768w, /en/tutorials/optimize-immich-mobile/immich-jobs-intelligente-suche_hu_2fe25b2f4c16a3f.webp 1200w, /en/tutorials/optimize-immich-mobile/immich-jobs-intelligente-suche_hu_93359fa42abf3ab5.webp 1920w" sizes="(min-width: 768px) 768px, 100vw"
    width="768" height="432"
    data-full="/en/tutorials/optimize-immich-mobile/immich-jobs-intelligente-suche_hu_64c250acc4d226a6.webp"
    alt="The Immich job queues with the Smart Search queue actively running" title="After the model switch: Smart Search → All re-indexes every photo with the new model"
    loading="lazy" decoding="async" class="rounded-lg"><figcaption class="mt-2 text-sm text-center text-slate-500 italic">After the model switch: Smart Search → All re-indexes every photo with the new model</figcaption></figure></p>
<p>On the first run, the ML container downloads the model (around 1.4 GB) – so the first search result takes a moment. After that, search in your language:</p>
<p><figure class="my-6"><img src="/en/tutorials/optimize-immich-mobile/immich-suche-strand_hu_bfdb6fdf06602a1f.webp" srcset="/en/tutorials/optimize-immich-mobile/immich-suche-strand_hu_1617358525d83c44.webp 480w, /en/tutorials/optimize-immich-mobile/immich-suche-strand_hu_bfdb6fdf06602a1f.webp 768w, /en/tutorials/optimize-immich-mobile/immich-suche-strand_hu_2e0522c1cd97ce08.webp 1200w, /en/tutorials/optimize-immich-mobile/immich-suche-strand_hu_d538e20eafd51094.webp 1920w" sizes="(min-width: 768px) 768px, 100vw"
    width="768" height="432"
    data-full="/en/tutorials/optimize-immich-mobile/immich-suche-strand_hu_8e77c0f320e22c79.webp"
    alt="The Immich search for the German word Strand with beach chairs, a bicycle by the water and a lighthouse coast in the top positions" title="Searching for the German &#39;Strand&#39; (beach) after the model switch: beach chairs, a bicycle by the water and a lighthouse coast rank first – the search sorts the whole library by similarity"
    loading="lazy" decoding="async" class="rounded-lg"><figcaption class="mt-2 text-sm text-center text-slate-500 italic">Searching for the German &#39;Strand&#39; (beach) after the model switch: beach chairs, a bicycle by the water and a lighthouse coast rank first – the search sorts the whole library by similarity</figcaption></figure></p>
<p>Two things for expectation management: the search <strong>ranks, it doesn&rsquo;t filter</strong> – the bottom of the result list always contains non-matching photos too. And it is surprisingly good with descriptive queries: in our test the XLM model put <strong>all 24</strong> German queries first, from &ldquo;Gondel in Venedig&rdquo; (gondola in Venice) to &ldquo;roter Mohn zwischen Gräsern&rdquo; (red poppies among grasses).</p>
<p>One more detail from the job queues: <strong>duplicate detection</strong> relies, per its own description, on the same CLIP vectors as the smart search. After a model switch, trigger it once via <strong>All</strong> as well – otherwise it compares old vectors with new ones.</p>
<p>About RAM, measured for real on the test VPS (8 GB), each time after a fresh container start with both the visual <strong>and</strong> the textual model loaded: the ML container used <strong>around 1.0 GB</strong> with the default model and <strong>around 2.0 GB</strong> with the XLM model. On an 8 GB server running a few other services, that gets tight – hence the honest recommendation towards 16 GB if the AI search should run permanently.</p>
<h3 id="step-4-adding-existing-photos-as-an-external-library">Step 4: Adding existing photos as an external library</h3>
<p>Immich manages your phone photos itself in <code>UPLOAD_LOCATION</code>. But what about the 20 years of photo archive already sitting on the server? That&rsquo;s what <strong>external libraries</strong> are for: Immich indexes the folders but does <strong>not touch</strong> the files – nothing is moved, renamed or deleted.</p>
<p>First hand the archive folder to the server container – deliberately <strong>read-only</strong> (<code>:ro</code>), so even a slip in the UI can&rsquo;t change your originals. In the <code>compose.yaml</code> from part 1, extend the <code>immich-server</code> service:</p>
<div class="sk-code">
  <span class="sk-code-head">YAML</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="w">    </span><span class="nt">volumes</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">${UPLOAD_LOCATION}:/data</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">/path/to/YOUR_ARCHIVE:/mnt/archive:ro</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">/etc/localtime:/etc/localtime:ro</span></span></span></code></pre></div>
</div>
<p>Apply the change – Compose only recreates the server container:</p>
<div class="sk-code">
  <span class="sk-code-head">Terminal</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">docker compose up -d</span></span></code></pre></div>
</div>
<p>Then, under <strong>Administration → External Libraries → Create library</strong>, create a library (choose the owner). Immich drops you straight into the new, still empty library. There you add the import path <code>/mnt/archive</code> under <strong>Folders → Add</strong> – the path <strong>inside the container</strong>, not on the host. <strong>Edit</strong> gives it a meaningful name, <strong>Scan</strong> starts the first run (the same command sits in the ⋮ context menu in the overview). The collection then shows up in the overview:</p>
<p><figure class="my-6"><img src="/en/tutorials/optimize-immich-mobile/immich-externe-bibliotheken_hu_adfec072737813f2.webp" srcset="/en/tutorials/optimize-immich-mobile/immich-externe-bibliotheken_hu_f07506d8c7287528.webp 480w, /en/tutorials/optimize-immich-mobile/immich-externe-bibliotheken_hu_adfec072737813f2.webp 768w, /en/tutorials/optimize-immich-mobile/immich-externe-bibliotheken_hu_c92772d28edac4c8.webp 1200w, /en/tutorials/optimize-immich-mobile/immich-externe-bibliotheken_hu_a63aa6d8c35fc4d3.webp 1920w" sizes="(min-width: 768px) 768px, 100vw"
    width="768" height="432"
    data-full="/en/tutorials/optimize-immich-mobile/immich-externe-bibliotheken_hu_142946b35721df34.webp"
    alt="The external library management in Immich with the library Foto-Archiv including photo count and size" title="The external library after the first scan: 4 photos indexed, the files remain untouched"
    loading="lazy" decoding="async" class="rounded-lg"><figcaption class="mt-2 text-sm text-center text-slate-500 italic">The external library after the first scan: 4 photos indexed, the files remain untouched</figcaption></figure></p>
<p>The archive photos now appear in the timeline and search like normal uploads – sorted by their capture date from the EXIF data. New files in the folder are picked up by another scan (manually or via the scheduled scan in the library settings).</p>
<div class="not-prose my-6 rounded-lg border-l-4 p-4 border-amber-400 bg-amber-50 dark:border-amber-700 dark:bg-amber-900/20">
  <p class="mb-1 flex items-center gap-2 font-semibold text-slate-900 dark:text-white">
    <span aria-hidden="true">⚠️</span>External libraries are not covered by your backup
  </p>
  <div class="prose-kitchen text-sm">The backup from part 1 covers <code>UPLOAD_LOCATION</code> and the database – your archive folder lives <strong>outside</strong> both. Add it to your <a href="/en/tutorials/restic-backups/">Restic job</a> as well, otherwise your oldest photos of all are the unprotected ones.</div>
</div>
<h3 id="step-5-family-accounts-with-storage-quotas">Step 5: Family accounts with storage quotas</h3>
<p>Every family member gets their own account with a <strong>separate library</strong> – nobody sees anyone else&rsquo;s photos; sharing happens deliberately via albums. To stop a single account from filling the disk, give it a <strong>quota</strong> when creating it.</p>
<p>Under <strong>Administration → Users → Create user</strong> you set email, name, initial password and the quota in GiB:</p>
<p><figure class="my-6"><img src="/en/tutorials/optimize-immich-mobile/immich-benutzer-kontingent_hu_564127fcfd7093e0.webp" srcset="/en/tutorials/optimize-immich-mobile/immich-benutzer-kontingent_hu_29956d57cc7df62.webp 480w, /en/tutorials/optimize-immich-mobile/immich-benutzer-kontingent_hu_564127fcfd7093e0.webp 768w, /en/tutorials/optimize-immich-mobile/immich-benutzer-kontingent_hu_434e5c882decf5df.webp 1200w, /en/tutorials/optimize-immich-mobile/immich-benutzer-kontingent_hu_a46bce00d8e2834a.webp 1920w" sizes="(min-width: 768px) 768px, 100vw"
    width="768" height="432"
    data-full="/en/tutorials/optimize-immich-mobile/immich-benutzer-kontingent_hu_886d195308132948.webp"
    alt="The Immich user management with two accounts: Familie Muster with a 50 GiB quota and the admin without a limit" title="User management: the new account has a 50 GiB quota, the admin stays unlimited (∞)"
    loading="lazy" decoding="async" class="rounded-lg"><figcaption class="mt-2 text-sm text-center text-slate-500 italic">User management: the new account has a 50 GiB quota, the admin stays unlimited (∞)</figcaption></figure></p>
<p>The quota counts the account&rsquo;s <strong>uploaded</strong> files; once it is exhausted, the server rejects further uploads with <code>400 Quota has been exceeded!</code> – the app then shows a storage error, and deleting photos frees up space (permanently only after the trash). There is still no public registration: accounts are only created through the admin account.</p>
<p>For sharing within the family, create an <strong>album</strong> and add the accounts as members – or use the <strong>partner feature</strong> (account settings → sharing), which lets two accounts show each other their full timelines without copying photos. For grandma without an account there are <strong>shared links</strong>: an album can be shared as a public link, optionally with a password and expiry date – just remember that anyone with the link sees the photos as long as it is valid.</p>
<h2 id="when-things-go-wrong">When things go wrong</h2>
<div class="troubleshoot not-prose">
<p><strong>The search returns nonsense after the model switch.</strong> The photos are still (or partially) indexed with the old model – old and new vectors don&rsquo;t mix. Start the <strong>All</strong> run under <strong>Job Queues → Smart Search</strong> and wait until the queue is empty. Exactly this mixed state also occurs if you save the setting but forget the re-index.</p>
<p><strong>With an <code>nllb-…</code> model the search is no better than before.</strong> Known behaviour in v3.1.0: the language hint these models expect cannot be set in Immich at all (see the warning box in step 3). Switch to an <code>XLM-…</code> or SigLIP2 model and re-index.</p>
<p><strong>The ML container exits with <code>exit 137</code> after the model switch.</strong> Out of memory: the new model no longer fits next to the server, the database and your other services. Either pick a smaller model or add RAM – the XLM base model really uses around 2 GB for the ML container alone.</p>
<p><strong>The external library stays empty after the scan.</strong> Almost always the path is wrong: the import path must be the <strong>container path</strong> (<code>/mnt/archive</code>), not the host path. Check with <code>docker compose exec immich-server ls /mnt/archive</code> whether the container sees the files at all – if nothing shows up, the volume entry is missing or you skipped <code>docker compose up -d</code> after the change.</p>
<p><strong>The phone only backs up while the app is open.</strong> On Android, battery optimization kills the background worker (exempt the app, see step 1); on iOS, Background App Refresh is off or iOS deprioritizes the app – opening it more often genuinely helps. And: by default, backup runs on Wi-Fi only – photos taken on the go are only &ldquo;missing&rdquo; until you&rsquo;re back home.</p>

</div>

<h2 id="maintenance--backups">Maintenance &amp; backups</h2>
<ul>
<li>
<p><strong>The update ritual from part 1 still applies:</strong> backup → read the release notes → bump <code>IMMICH_VERSION</code> → <code>docker compose pull &amp;&amp; docker compose up -d</code>. Update all containers together; migrations are not reversible.</p>
</li>
<li>
<p><strong>The model cache grows with every model switch.</strong> Old models stay in the volume – after our tests with three CLIP models it held <strong>3.9 GB</strong> (default model 583 MB, XLM 1.4 GB, nllb 1.9 GB). Clean up: stop the ML container, empty the volume, start it again (the active model re-downloads):</p>
<div class="sk-code">
  <span class="sk-code-head">Terminal</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">docker compose stop immich-machine-learning
</span></span><span class="line"><span class="cl">docker run --rm -v immich_model-cache:/cache alpine:3 sh -c <span class="s2">&#34;rm -rf /cache/clip/*&#34;</span>
</span></span><span class="line"><span class="cl">docker compose start immich-machine-learning</span></span></code></pre></div>
</div>
</li>
<li>
<p><strong>Review your backup scope:</strong> <code>UPLOAD_LOCATION</code> + DB dump (part 1) <strong>plus</strong> every external library folder. A quick look at your Restic snapshots after adding a new library saves nasty surprises.</p>
</li>
<li>
<p><strong>Keep an eye on storage and quotas:</strong> <strong>Server Statistics</strong> shows usage per account. If an account approaches its limit, raise it in time – rejected uploads mean, on the phone: no backup.</p>
</li>
<li>
<p><strong>Honest about the effort:</strong> with AI search, an external library and multiple users, Immich is not a &ldquo;set up once, never touch again&rdquo; service. Plan for one update appointment per month plus the occasional re-index after model or major version switches – in return, the entire photo stack is yours.</p>
</li>
</ul>
]]></content:encoded></item></channel></rss>