tag:github.com,2008:https://github.com/icereed/paperless-gpt/releasesRelease notes from paperless-gpt2026-09-18T09:55:36Ztag:github.com,2008:Repository/861746639/v0.28.02026-09-18T10:09:19Zv0.28.0 โ The Follow-Through Expansion<p>Automation you can leave alone. This release is almost entirely about paperless-gpt <strong>doing what its logs already claimed it was doing</strong> โ tags that were computed and then silently dropped, retry loops that never concluded, and settings that quietly had no effect.</p>
<p>The theme is <strong>follow-through</strong>: if the app says it added a tag, the tag is there; if a document can't be processed, it stops being retried and says so; if you set an option, it reaches the model.</p>
<blockquote>
<p><strong>Heads-up โ two behaviour changes worth reading before you upgrade.</strong> See <em>Notable changes</em> at the bottom.</p>
</blockquote>
<hr>
<h2>๐ท๏ธ Tags that actually get applied</h2>
<p>Five separate defects conspired to make completion tags vanish between the log line and paperless-ngx. Every one of them is fixed.</p>
<ul>
<li><strong><code>AUTO_TAG_COMPLETE</code> is applied instead of being dropped.</strong> The tag was written to an <code>AddTags</code> field that nothing ever read, so it was computed, logged as "adding", and discarded. A second tag path โ taken when no other field changed, which is the <em>likeliest</em> case for an already-tidy document โ ignored it too. Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/skort-90/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/skort-90">@skort-90</a> for the four-document reproduction and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Denim5660/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Denim5660">@Denim5660</a> for the original root-cause analysis. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5409054677" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1059" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1059/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1059">#1059</a>, closes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4869273966" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1006" data-hovercard-type="issue" data-hovercard-url="/icereed/paperless-gpt/issues/1006/hovercard" href="https://github.com/icereed/paperless-gpt/issues/1006">#1006</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5467203890" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1074" data-hovercard-type="issue" data-hovercard-url="/icereed/paperless-gpt/issues/1074/hovercard" href="https://github.com/icereed/paperless-gpt/issues/1074">#1074</a>)</li>
<li><strong><code>PDF_OCR_COMPLETE_TAG</code> is created at startup</strong>, like <code>FAIL_TAG</code> already was. Without it, the nameโID resolution silently skipped a tag that didn't exist yet โ which is why this worked for some people and not others, with nothing in the log to explain the difference. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5409692113" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1064" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1064/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1064">#1064</a>, closes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3789756777" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/854" data-hovercard-type="issue" data-hovercard-url="/icereed/paperless-gpt/issues/854/hovercard" href="https://github.com/icereed/paperless-gpt/issues/854">#854</a>)</li>
<li><strong>Tag names now resolve case-insensitively.</strong> The rest of the tag handling already ignored case; the nameโID lookup was the odd one out, so a configured <code>Paperless-GPT-Auto-Complete</code> couldn't find a stored <code>paperless-gpt-auto-complete</code>. Where a database holds several case variants, the original (lowest id) wins deterministically and the ambiguity is logged. Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ivanzud/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ivanzud">@ivanzud</a>! (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5491071226" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1075" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1075/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1075">#1075</a>)</li>
<li><strong>An added tag now wins a name collision</strong> with a removed one. Configuring the completion tag to the same name as the trigger tag used to leave the document with <em>neither</em>. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5409054677" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1059" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1059/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1059">#1059</a>, closes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3125542432" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/458" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/458/hovercard" href="https://github.com/icereed/paperless-gpt/pull/458">#458</a>)</li>
<li><strong>paperless-gpt's own tags are never offered to the LLM.</strong> <code>FAIL_TAG</code>, <code>AUTO_TAG_COMPLETE</code> and <code>PDF_OCR_COMPLETE_TAG</code> were missing from the exclusion list, so the model suggested them as ordinary document tags. With an OCRโtagging workflow that produced an unbounded loop, re-billing every LLM call on each pass. Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hakehardware/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hakehardware">@hakehardware</a> and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fr0der1c/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fr0der1c">@fr0der1c</a> for reporting it, twice. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5409140668" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1061" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1061/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1061">#1061</a>, closes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3887067545" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/877" data-hovercard-type="issue" data-hovercard-url="/icereed/paperless-gpt/issues/877/hovercard" href="https://github.com/icereed/paperless-gpt/issues/877">#877</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4919054691" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1015" data-hovercard-type="issue" data-hovercard-url="/icereed/paperless-gpt/issues/1015/hovercard" href="https://github.com/icereed/paperless-gpt/issues/1015">#1015</a>)</li>
</ul>
<h2>๐ Loops that end</h2>
<p>Three ways the auto pipeline can fail. Until now, only two of them could stop.</p>
<ul>
<li><strong>Repeated suggestion failures now break the loop.</strong> A permanent LLM error โ a prompt that can't fit the context, a model that no longer exists โ used to re-bill the same request forever: one report measured ~12,000 rejected requests over seven days. Worse, because the poll fetches a single unordered page of 25, enough stuck documents starved everything behind them (67 documents, with the container still reporting healthy). After <code>AUTO_TAG_MAX_RETRIES</code> attempts the auto tag comes off and <code>FAIL_TAG</code> goes on. Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/JoGres-DE/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/JoGres-DE">@JoGres-DE</a> for an exceptionally precise report. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5498152992" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1076" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1076/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1076">#1076</a>, closes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5442340476" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1071" data-hovercard-type="issue" data-hovercard-url="/icereed/paperless-gpt/issues/1071/hovercard" href="https://github.com/icereed/paperless-gpt/issues/1071">#1071</a>)<br>
This should also end the "<strong>worker goes permanently silent</strong>" reports: the poll loop doubles its backoff on every failing cycle, capped at <strong>one hour</strong>, so a single permanently failing document kept the whole worker in hour-long sleeps until a container restart. With the document leaving the queue, the cycle succeeds and the backoff resets. (likely <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4919559269" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1016" data-hovercard-type="issue" data-hovercard-url="/icereed/paperless-gpt/issues/1016/hovercard" href="https://github.com/icereed/paperless-gpt/issues/1016">#1016</a>)</li>
<li><strong>Ollama requests can no longer hang forever.</strong> Both Ollama paths ran on a timeout-less HTTP client, so a single stalled generation blocked the background loop indefinitely โ recoverable only by restarting the container. <code>OLLAMA_TIMEOUT_SECONDS</code> (default 300s) bounds it. Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/swiception/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/swiception">@swiception</a>! (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5425816450" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1070" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1070/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1070">#1070</a>)<br>
Note this covers the <strong>Ollama</strong> paths only โ other providers still share an unbounded HTTP client, so <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4111536950" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/937" data-hovercard-type="issue" data-hovercard-url="/icereed/paperless-gpt/issues/937/hovercard" href="https://github.com/icereed/paperless-gpt/issues/937">#937</a> stays open.</li>
</ul>
<h2>๐ง Ollama: <code>OLLAMA_THINK</code> finally does something</h2>
<p><code>OLLAMA_THINK</code> had <strong>no effect at all</strong>, in either direction. The underlying library nested <code>think</code> inside the request's <code>options</code> object, where the Ollama server doesn't look for it, and dropped the value entirely when it was <code>false</code>.</p>
<p>On thinking-capable models (Qwen 3 / 3.5, Gemma 3) that meant unconditional reasoning: the model spent its output budget on a reasoning trace and returned results that were glacial or empty โ worst exactly where it matters most, on closed-list classification and strict JSON.</p>
<p>The metadata path now uses Ollama's official client, where <code>think</code> is a top-level field. Reasoning levels (<code>low</code> / <code>medium</code> / <code>high</code>) work too. Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lunetics/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lunetics">@lunetics</a> for the diagnosis and the implementation, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/andglaser/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/andglaser">@andglaser</a> for the independent report. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5409619794" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1063" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1063/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1063">#1063</a>, closes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4981348827" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1024" data-hovercard-type="issue" data-hovercard-url="/icereed/paperless-gpt/issues/1024/hovercard" href="https://github.com/icereed/paperless-gpt/issues/1024">#1024</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5351243101" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1056" data-hovercard-type="issue" data-hovercard-url="/icereed/paperless-gpt/issues/1056/hovercard" href="https://github.com/icereed/paperless-gpt/issues/1056">#1056</a>)</p>
<p>The same change brings <strong><code>LLM_TEMPERATURE</code></strong> for the text LLM (closes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5028731366" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1033" data-hovercard-type="issue" data-hovercard-url="/icereed/paperless-gpt/issues/1033/hovercard" href="https://github.com/icereed/paperless-gpt/issues/1033">#1033</a>), plus <code>LLM_MAX_TOKENS</code> and <code>OLLAMA_KEEP_ALIVE</code>. Ollama-only variables now warn instead of being silently inert when another provider is configured, and <code>OLLAMA_HEADERS</code> is treated as a secret so credential-bearing headers stay out of the configuration view.</p>
<h2>๐ฌ OCR</h2>
<ul>
<li><strong><code>OCR_LIMIT_PAGES=0</code> means all pages again</strong> โ an explicit zero was being mistaken for "unset" and silently replaced by the 5-page default. Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/CBOSSX/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CBOSSX">@CBOSSX</a>! (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5253390997" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1047" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1047/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1047">#1047</a>, closes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5085641408" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1037" data-hovercard-type="issue" data-hovercard-url="/icereed/paperless-gpt/issues/1037/hovercard" href="https://github.com/icereed/paperless-gpt/issues/1037">#1037</a>)</li>
<li><strong>Transient provider errors are retried per page</strong> (HTTP 429/5xx, exponential backoff) instead of forfeiting the whole document. Deliberately more patient than the suggestion path: a failed page throws away every page before it. Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MarcvsTvllivs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MarcvsTvllivs">@MarcvsTvllivs</a>! (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4868853288" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1004" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1004/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1004">#1004</a>)</li>
<li><strong>Uploaded files are deleted from Mistral after OCR.</strong> They were being left in Mistral's cloud storage indefinitely โ a genuine data-retention problem for a self-hosted document tool, and invisible from the outside. Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lunetics/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lunetics">@lunetics</a>! (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4880993736" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1007" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1007/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1007">#1007</a>)</li>
<li><strong>Oversized page images compress correctly.</strong> After stepping quality down to fit a size limit, the last-resort resize re-encoded at a <em>higher</em> quality than it had just settled on, partly undoing the reduction. Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/maksyms/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/maksyms">@maksyms</a>! (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4207838737" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/946" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/946/hovercard" href="https://github.com/icereed/paperless-gpt/pull/946">#946</a>)</li>
<li><strong><code>image_limit</code> and <code>image_min_size</code> are configurable</strong> for Mistral OCR โ raise the minimum to stop small boxed fields (handwritten form entries) being skipped as images. Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jipe-b/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jipe-b">@jipe-b</a>! (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5268684752" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1050" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1050/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1050">#1050</a>, closes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5268224416" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1048" data-hovercard-type="issue" data-hovercard-url="/icereed/paperless-gpt/issues/1048/hovercard" href="https://github.com/icereed/paperless-gpt/issues/1048">#1048</a>)</li>
</ul>
<h2>๐ Using a different AI provider</h2>
<p>Five separate requests โ issues and pull requests โ asked for providers that <strong>already shipped</strong>, one of them implementing a whole provider branch that did nothing <code>OPENAI_BASE_URL</code> didn't already do. That was a documentation failure on our side, not missing features.</p>
<p><a href="https://github.com/icereed/paperless-gpt/blob/main/docs/openai_compatible_providers.md"><strong>OpenAI-compatible providers</strong></a> is a new guide with copy-pasteable configuration for OpenRouter, LM Studio, vLLM, LiteLLM, llama.cpp and Azure โ plus the three things everyone gets wrong (a base URL missing <code>/v1</code>, vendor-specific model names, local servers rejecting an empty API key) and a troubleshooting section mapping the recurring errors to their causes. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5409096850" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1060" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1060/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1060">#1060</a>, closes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3834118457" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/864" data-hovercard-type="issue" data-hovercard-url="/icereed/paperless-gpt/issues/864/hovercard" href="https://github.com/icereed/paperless-gpt/issues/864">#864</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4004525046" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/908" data-hovercard-type="issue" data-hovercard-url="/icereed/paperless-gpt/issues/908/hovercard" href="https://github.com/icereed/paperless-gpt/issues/908">#908</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5112729068" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1041" data-hovercard-type="issue" data-hovercard-url="/icereed/paperless-gpt/issues/1041/hovercard" href="https://github.com/icereed/paperless-gpt/issues/1041">#1041</a>)</p>
<blockquote>
<p>Anything that documents an "OpenAI-compatible endpoint" works today via <code>LLM_PROVIDER=openai</code> plus <code>OPENAI_BASE_URL</code>. No new release required.</p>
</blockquote>
<h2>โ๏ธ New options</h2>
<table>
<thead>
<tr>
<th>Variable</th>
<th>What it does</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>AUTO_TAG_MAX_RETRIES</code></td>
<td>Give up on a document after N failed suggestion attempts (default <code>3</code>, <code>0</code> retries forever)</td>
</tr>
<tr>
<td><code>OLLAMA_TIMEOUT_SECONDS</code></td>
<td>Per-request timeout for Ollama (default <code>300</code>)</td>
</tr>
<tr>
<td><code>PRESERVE_EXISTING_METADATA</code></td>
<td>Keep a correspondent or document type that is already set, so paperless-ngx' own classifier or a manual correction stays in charge. Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/keefar/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/keefar">@keefar</a>! (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5409763711" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1065" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1065/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1065">#1065</a>, closes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5028730627" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1032" data-hovercard-type="issue" data-hovercard-url="/icereed/paperless-gpt/issues/1032/hovercard" href="https://github.com/icereed/paperless-gpt/issues/1032">#1032</a>)</td>
</tr>
<tr>
<td><code>CORRESPONDENT_PROMPT_LIMIT</code></td>
<td>Cap how many correspondents go into the prompt. On a 13k-document instance with 628 correspondents, the correspondent step went from a >10-minute timeout per document to seconds. Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/interruptor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/interruptor">@interruptor</a>! (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5120197636" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1043" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1043/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1043">#1043</a>)</td>
</tr>
<tr>
<td><code>LLM_TEMPERATURE</code>, <code>LLM_MAX_TOKENS</code>, <code>OLLAMA_KEEP_ALIVE</code></td>
<td>Ollama metadata generation</td>
</tr>
<tr>
<td><code>MISTRAL_OCR_IMAGE_LIMIT</code>, <code>MISTRAL_OCR_IMAGE_MIN_SIZE</code></td>
<td>Mistral OCR image extraction</td>
</tr>
</tbody>
</table>
<h2>๐ Privacy & deployment</h2>
<ul>
<li><strong>Document content is no longer logged at info level.</strong> Full document text was landing in <code>docker logs</code> and any log shipper. Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mrab54/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mrab54">@mrab54</a>! (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4031976968" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/922" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/922/hovercard" href="https://github.com/icereed/paperless-gpt/pull/922">#922</a>, closes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4031891825" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/921" data-hovercard-type="issue" data-hovercard-url="/icereed/paperless-gpt/issues/921/hovercard" href="https://github.com/icereed/paperless-gpt/issues/921">#921</a>)</li>
<li><strong>Non-root containers start correctly</strong> โ Kubernetes <code>runAsNonRoot</code> and <code>docker run --user</code> now skip the privilege-drop path instead of failing. Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/vistalba/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/vistalba">@vistalba</a>! (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4867371309" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1002" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1002/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1002">#1002</a>)</li>
</ul>
<h2>๐ฆ Under the hood</h2>
<ul>
<li>The end-to-end test suite works against paperless-ngx 3.x again (it refuses to start on the documented placeholder secret key, so the container died during init) and is pinned by digest instead of tracking <code>:latest</code>. Extracted from <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lunetics/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lunetics">@lunetics</a>' work in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5393775728" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1058" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1058/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1058">#1058</a>. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5409201050" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1062" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1062/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1062">#1062</a>)</li>
<li>Container images are assembled without a redundant cross-registry copy, which was exhausting Docker Hub pull quota on busy days. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5410627612" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1068" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1068/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1068">#1068</a>)</li>
<li>Dependencies refreshed, including Node 24 and Alpine 3.24.</li>
</ul>
<hr>
<h2><g-emoji class="g-emoji" alias="warning">โ ๏ธ</g-emoji> Notable changes</h2>
<p><strong>1. Documents whose suggestions keep failing now leave the queue.</strong> Previously they were retried forever. After <code>AUTO_TAG_MAX_RETRIES</code> attempts (default <code>3</code>) the auto tag is removed and <code>FAIL_TAG</code> applied. If you relied on indefinite retries, set <code>AUTO_TAG_MAX_RETRIES=0</code>. This mirrors what <code>OCR_MAX_RETRIES</code> already did for OCR in v0.27.0.</p>
<p><strong>2. Ollama requests now time out after 300 seconds.</strong> Previously they could hang indefinitely. If you run very large models on slow hardware and a legitimate generation exceeds five minutes, raise <code>OLLAMA_TIMEOUT_SECONDS</code> or set it to <code>0</code> to restore the old behaviour.</p>
<p>Both defaults were chosen so the failure mode is "this document is marked for review" rather than "the worker is silently wedged".</p>
<hr>
<h2>๐ Credits</h2>
<p>This release came almost entirely from the community โ reports, diagnoses and code.</p>
<ul>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lunetics/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lunetics">@lunetics</a></strong> (Matthias Breddin) โ the <code>OLLAMA_THINK</code> diagnosis and native-client implementation (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5409619794" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1063" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1063/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1063">#1063</a>), the Mistral data-retention fix (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4880993736" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1007" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1007/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1007">#1007</a>), and the E2E fixes that unblocked CI for every open PR (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5409201050" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1062" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1062/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1062">#1062</a>)</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/swiception/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/swiception">@swiception</a></strong> โ the Ollama request timeout (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5425816450" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1070" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1070/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1070">#1070</a>)</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ivanzud/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ivanzud">@ivanzud</a></strong> (Ivan) โ case-insensitive tag resolution, including the determinism argument that stopped it being subtly wrong (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5491071226" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1075" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1075/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1075">#1075</a>)</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MarcvsTvllivs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MarcvsTvllivs">@MarcvsTvllivs</a></strong> โ per-page OCR retry with backoff (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4868853288" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1004" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1004/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1004">#1004</a>)</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/interruptor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/interruptor">@interruptor</a></strong> โ <code>CORRESPONDENT_PROMPT_LIMIT</code>, with measurements (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5120197636" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1043" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1043/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1043">#1043</a>)</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/keefar/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/keefar">@keefar</a></strong> โ <code>PRESERVE_EXISTING_METADATA</code> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5409763711" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1065" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1065/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1065">#1065</a>)</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/CBOSSX/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CBOSSX">@CBOSSX</a></strong> โ the explicit-zero page limit fix (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5253390997" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1047" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1047/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1047">#1047</a>)</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jipe-b/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jipe-b">@jipe-b</a></strong> โ Mistral image parameters (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5268684752" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1050" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1050/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1050">#1050</a>)</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/maksyms/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/maksyms">@maksyms</a></strong> โ the image re-encoding fix (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4207838737" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/946" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/946/hovercard" href="https://github.com/icereed/paperless-gpt/pull/946">#946</a>)</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/vistalba/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/vistalba">@vistalba</a></strong> โ non-root container support (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4867371309" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1002" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1002/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1002">#1002</a>)</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mrab54/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mrab54">@mrab54</a></strong> โ content logging at debug level (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4031976968" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/922" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/922/hovercard" href="https://github.com/icereed/paperless-gpt/pull/922">#922</a>)</li>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/JoGres-DE/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/JoGres-DE">@JoGres-DE</a></strong>, <strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/skort-90/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/skort-90">@skort-90</a></strong>, <strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Denim5660/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Denim5660">@Denim5660</a></strong>, <strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hakehardware/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hakehardware">@hakehardware</a></strong>, <strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fr0der1c/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fr0der1c">@fr0der1c</a></strong>, <strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/andglaser/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/andglaser">@andglaser</a></strong>, <strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nmeden/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nmeden">@nmeden</a></strong>, <strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/vanderfran/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/vanderfran">@vanderfran</a></strong>, <strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/embdMan/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/embdMan">@embdMan</a></strong>, <strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jacobhausler/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jacobhausler">@jacobhausler</a></strong>, <strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Christoph274/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Christoph274">@Christoph274</a></strong> โ reports precise enough to fix from, several with the root cause already correctly identified</li>
</ul>
<p><strong>Full Changelog:</strong> <a class="commit-link" href="https://github.com/icereed/paperless-gpt/compare/v0.27.0...v0.28.0"><tt>v0.27.0...v0.28.0</tt></a></p>icereedtag:github.com,2008:Repository/861746639/v0.27.02026-07-21T10:13:57Zv0.27.0 โ The Clarity Expansion<p>paperless-gpt's biggest release in a long time โ a ground-up redesign of the web UI, LLM-based OCR promoted to a first-class feature with its own Playground and Activity log, a read-only view of your entire live configuration, and a clear ramp from manual runs to fully hands-off automation.</p>
<p>The theme is <strong>clarity</strong>: you can finally <em>see</em> what paperless-gpt is doing, tune it with confidence, and trust it to run on its own.</p>
<blockquote>
<p><strong>Heads-up:</strong> this release moves the OCR route to <code>/ocr</code> and drops the <code>MANUAL_OCR_TAG</code> queue in favor of the new Playground + Auto-OCR flow. See <em>Notable changes</em> below.</p>
</blockquote>
<hr>
<h2>โจ A redesigned, dark-mode-first web UI</h2>
<p>The interface users called the app's weakest point has been rebuilt from the ground up โ calm, precise, and trustworthy.</p>
<ul>
<li><strong>First-class dark mode</strong> (not an inversion): surfaces gain depth through lightness, scans stay crisp, contrast holds everywhere. Follows your system theme, with a manual toggle.</li>
<li>A consistent design system: OKLCH color tokens, a real type scale, and one shared button/badge/chip vocabulary across every screen.</li>
<li>The familiar <strong>select โ generate โ review โ apply</strong> flow is intact โ upgraded with clearer diff cards and an optional focus mode โ so the ~1M existing installs feel instantly at home.</li>
</ul>
<h2>๐ฌ OCR Playground & Activity</h2>
<p>LLM-based OCR is no longer "experimental" โ it's the headline feature, with a workspace to match.</p>
<ul>
<li><strong>Playground</strong> (<code>/ocr</code>): pick any document, run OCR, and see the scan beside the recognized (editable) text. Tune per-run options โ page limit, process mode, searchable-PDF handling, prompt override โ and <strong>re-run any past run</strong> with adjusted settings.</li>
<li><strong>Compare runs</strong> side by side and <strong>re-OCR individual pages</strong>.</li>
<li><strong>Activity log</strong> (<code>/ocr?tab=activity</code>): a persisted record of every OCR run, manual <em>and</em> automatic, with status, duration, page counts, and clear warnings when an original was replaced by a searchable PDF.</li>
</ul>
<h2>๐ค A ramp to hands-off Auto-OCR</h2>
<p>The Playground exists to build your trust, then get out of the way.</p>
<ul>
<li>Dial in options that work, hit <strong>Save as defaults</strong>, tag documents with your Auto-OCR tag, and paperless-gpt processes them automatically using those defaults.</li>
<li>The Activity log is your safety net for verifying what ran overnight.</li>
</ul>
<h2>โ๏ธ Active Configuration view</h2>
<p>A new read-only page under <strong>Settings</strong> shows every setting the running instance is actually using โ all 80+ environment variables, what each one means, and where its value comes from (<code>env</code>, saved-in-app, or default). Secrets are shown only as <strong>set</strong> / <strong>not set</strong>, never revealed.</p>
<ul>
<li>Makes 12-factor config legible: when a saved in-app default shadows an environment variable, the UI says so explicitly (and it's logged at startup).</li>
</ul>
<h2>๐ Fixes & polish</h2>
<ul>
<li><strong>Stop endless OCR retries</strong> โ failed auto-OCR now gives up after <code>OCR_MAX_RETRIES</code> attempts and applies a fail-tag instead of looping forever. Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lunetics/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lunetics">@lunetics</a>! (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4881047202" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1008" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1008/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1008">#1008</a>)</li>
<li><strong>"Save as defaults"</strong> is now a clear, prominent control โ the promotion-to-automation action it was always meant to be.</li>
<li>The Playground now <strong>teaches on first open</strong> instead of showing an empty canvas.</li>
<li><strong>Model scaffolding no longer leaks into recognized text</strong> โ a stray <code>```markdown</code> wrapper from vision models is stripped at the source, so it never reaches your archive.</li>
<li><strong>OCR failures are diagnosable</strong> โ full error messages and long document titles are now reachable (keyboard- and screen-reader-friendly), not hidden in a tooltip.</li>
</ul>
<h2>๐ Under the hood</h2>
<ul>
<li>Docs: contributor instructions migrated to the standard <strong>AGENTS.md</strong> format.</li>
<li>OCR runs are now persisted and re-runnable units with per-run options.</li>
</ul>
<hr>
<h2>๐ Credits</h2>
<ul>
<li><strong><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lunetics/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lunetics">@lunetics</a></strong> (Matthias Breddin) โ the endless-retry fix (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4881047202" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/1008" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/1008/hovercard" href="https://github.com/icereed/paperless-gpt/pull/1008">#1008</a>).</li>
<li><strong>Christian Hessel</strong> โ the async job-processing foundation this release's flow is built on (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4649644918" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/984" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/984/hovercard" href="https://github.com/icereed/paperless-gpt/pull/984">#984</a>).</li>
<li>Everyone who reported that the UI needed love. This one's for you.</li>
</ul>
<p><strong>Full Changelog:</strong> <a class="commit-link" href="https://github.com/icereed/paperless-gpt/compare/v0.26.1...v0.27.0"><tt>v0.26.1...v0.27.0</tt></a></p>icereedtag:github.com,2008:Repository/861746639/v0.26.12026-07-08T12:48:58Z๐ ๏ธ v0.26.1 โ Patch Release<h1>๐ ๏ธ v0.26.1 โ Patch Release</h1>
<h3>Summary</h3>
<p>This patch release fixes a regression introduced in v0.26.0 which prevented the container from starting when <code>PUID</code>/<code>PGID</code> collide with users or groups that already exist in the image โ most notably on <strong>Unraid</strong>, which requires <code>PUID=99</code>/<code>PGID=100</code> (Alpine ships the group <code>users</code> with GID 100, so the container died with <code>addgroup: gid '100' in use</code> in a restart loop).</p>
<h3>What's fixed</h3>
<ul>
<li>๐ข <strong><code>PUID</code>/<code>PGID</code> collisions no longer crash the container:</strong> the entrypoint now looks up the requested numeric IDs and reuses pre-existing user/group entries instead of failing. Privileges are dropped with numeric <code>su-exec uid:gid</code>, so exactly the requested IDs apply regardless of which entry they resolve to.</li>
<li>๐ข <strong>Unraid works out of the box</strong> with <code>PUID=99</code> / <code>PGID=100</code>.</li>
<li>๐ข <strong><code>HOME</code> is now set after the privilege drop</strong>, so configs land in <code>/home/paperless-gpt</code> even when the UID resolves to a pre-existing user (e.g. <code>nobody</code>/65534).</li>
<li>๐ข <strong>OpenAI-compatible endpoints without the Azure flag:</strong> <code>OPENAI_BASE_URL</code> now works for any OpenAI-compatible service (LM Studio, LiteLLM, vLLM, OpenRouter, โฆ) โ no <code>OPENAI_API_TYPE</code> workaround needed.</li>
</ul>
<p>Also included: internal CI improvements (secret-free PR pipeline with mock E2E, environment-approval gate for real-LLM E2E runs โ <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4829459498" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/992" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/992/hovercard" href="https://github.com/icereed/paperless-gpt/pull/992">#992</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4829881260" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/993" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/993/hovercard" href="https://github.com/icereed/paperless-gpt/pull/993">#993</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4829919354" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/994" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/994/hovercard" href="https://github.com/icereed/paperless-gpt/pull/994">#994</a>).</p>
<h3>How to upgrade</h3>
<ol>
<li>Update your paperless-gpt Docker image/tag to <code>v0.26.1</code>.</li>
<li>No migration steps or config changes are needed.</li>
</ol>
<h3>Thanks</h3>
<p>Thank you <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/DennaGherlyn/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/DennaGherlyn">@DennaGherlyn</a> for the quick report and the Unraid details!</p>
<ul>
<li><a href="https://github.com/icereed/paperless-gpt/issues/995" data-hovercard-type="issue" data-hovercard-url="/icereed/paperless-gpt/issues/995/hovercard">#995</a>: "addgroup: gid '100' in use after update to 0.26.0"</li>
</ul>
<h3>What's Changed</h3>
<ul>
<li>fix(entrypoint): support PUID/PGID that collide with existing users/groups in <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/icereed/paperless-gpt/commit/227b061/hovercard" href="https://github.com/icereed/paperless-gpt/commit/227b061"><tt>227b061</tt></a></li>
<li>feat: OPENAI_BASE_URL for any OpenAI-compatible endpoint + secret-free mock E2E by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/icereed/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/icereed">@icereed</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4829881260" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/993" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/993/hovercard" href="https://github.com/icereed/paperless-gpt/pull/993">#993</a></li>
<li>ci: secret-free PR pipeline + environment-approval gate for real-LLM E2E by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/icereed/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/icereed">@icereed</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4829919354" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/994" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/994/hovercard" href="https://github.com/icereed/paperless-gpt/pull/994">#994</a></li>
<li>fix(ci): skip registry logins on pull_request builds by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/icereed/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/icereed">@icereed</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4829459498" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/992" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/992/hovercard" href="https://github.com/icereed/paperless-gpt/pull/992">#992</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/icereed/paperless-gpt/compare/v0.26.0...v0.26.1"><tt>v0.26.0...v0.26.1</tt></a></p>icereedtag:github.com,2008:Repository/861746639/v0.26.02026-07-07T09:24:27Zv0.26.0 - "The Resilience Expansion"<h1>๐ paperless-gpt v0.26.0 - "The Resilience Expansion"</h1>
<p><em>The container goes rootless, failed updates stop looping forever, monetary fields finally validate, and Ollama gets thinking-mode and reverse-proxy controls โ powered by a huge wave of community contributions!</em></p>
<h2>๐ Major New Features</h2>
<h3>๐ <strong>Rootless Container</strong></h3>
<p>The Docker container no longer runs as root! On startup it creates a dedicated <code>paperless-gpt</code> user (default <code>10001:10001</code>), fixes ownership of <code>/app</code>, and drops privileges before launching. Customize with the <code>PUID</code>/<code>PGID</code> environment variables.</p>
<ul>
<li><g-emoji class="g-emoji" alias="warning">โ ๏ธ</g-emoji> <strong>Upgrade note:</strong> if you mount volumes (e.g. <code>prompts/</code>, <code>db/</code>, local hOCR/PDF paths), their ownership will be changed to <code>PUID:PGID</code> on startup. If you need the old behavior, set <code>PUID</code>/<code>PGID</code> to match your host user.<br>
<em>Thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hensing/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hensing">@hensing</a> for this security win โ and for bundling, rebasing and pre-verifying 16 community PRs in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4823005124" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/990" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/990/hovercard" href="https://github.com/icereed/paperless-gpt/pull/990">#990</a> to make this whole release possible!</em> ๐</li>
</ul>
<h3>๐ก๏ธ <strong>Graceful Recovery from Rejected Updates</strong></h3>
<p>When paperless-ngx rejects an LLM suggestion (e.g. an impossible date like <code>2023-01-79</code>), paperless-gpt no longer retries the same document forever โ which could rack up real LLM costs. Instead it now:</p>
<ul>
<li>Strips the rejected fields and retries so the valid suggestions still land</li>
<li>Removes the auto tag to break the processing loop</li>
<li>Applies a new <code>FAIL_TAG</code> (default: <code>paperless-gpt-failed</code>, auto-created) so you can find and review affected documents<br>
<em>Thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/thu1971dlr/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/thu1971dlr">@thu1971dlr</a> for tackling this long-standing pain point!</em></li>
</ul>
<h3>๐ฐ <strong>Monetary Custom Field Normalization</strong></h3>
<p>LLM-suggested monetary values like <code>USD1,053.52</code> or EU-style <code>1.053,52</code> are now normalized to the canonical format paperless-ngx expects before the update is sent โ no more 400 errors and stuck documents from formatting quirks.<br>
<em>Thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bartigas/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bartigas">@bartigas</a>!</em></p>
<h3>๐ท๏ธ <strong>Let the LLM Create New Tags</strong></h3>
<p>With <code>CREATE_NEW_TAGS: "true"</code>, the LLM may suggest tags that don't exist in paperless-ngx yet โ they'll be created automatically. Off by default, so existing setups are unaffected.<br>
<em>Contributed by @Copilot in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4092803626" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/936" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/936/hovercard" href="https://github.com/icereed/paperless-gpt/pull/936">#936</a>.</em></p>
<h3>๐ฆ <strong>More Ollama Control</strong></h3>
<ul>
<li><strong><code>OLLAMA_THINK</code></strong>: Disable (or force) Ollama's reasoning mode. Essential for thinking-mode models (Qwen 3, Gemma 3 families) on tasks that need strict output formats โ with thinking left on, they can burn the whole token budget reasoning and return empty content. <em>Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dertbv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dertbv">@dertbv</a>!</em></li>
<li><strong><code>OLLAMA_HEADERS</code></strong>: Pass arbitrary HTTP headers (e.g. <code>Authorization=Bearer mytoken</code>) to every Ollama request โ perfect for Ollama behind an authenticated reverse proxy. <em>Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zebrapurring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/zebrapurring">@zebrapurring</a>!</em></li>
</ul>
<h3>โ๏ธ <strong>Content Sanitization Before LLM Calls</strong></h3>
<p>Strip scanner watermarks, boilerplate, or sensitive markers from document content before it's sent to the LLM:</p>
<ul>
<li><code>REMOVE_FROM_CONTENT</code>: comma-separated literal strings</li>
<li><code>REMOVE_FROM_CONTENT_REGEX</code>: semicolon-separated regex patterns<br>
<em>Thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/BieggerM/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/BieggerM">@BieggerM</a>!</em></li>
</ul>
<h3>๐ <strong>Smarter OCR Prompts</strong></h3>
<p>The OCR prompt is now rendered per document and can include the text paperless-ngx already extracted (<code>{{.Content}}</code>, capped at 8,000 chars) โ giving vision models a reference to cross-check difficult words and numbers against.<br>
<em>Thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/adamflagg/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/adamflagg">@adamflagg</a>!</em></p>
<h3>โ <strong>Auto-Processing Completion Tag</strong></h3>
<p>Documents finished by the auto pipeline now get an <code>AUTO_TAG_COMPLETE</code> tag (default: <code>paperless-gpt-auto-complete</code>), making it easy to build follow-up workflows. Set it to an empty string to disable.<br>
<em>Thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cfilipov/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cfilipov">@cfilipov</a>!</em></p>
<h3>๐ฝ <strong>Select-Type Custom Fields</strong></h3>
<p>Custom fields of type <code>select</code> now work correctly: LLM-suggested labels are mapped to the option IDs paperless-ngx expects, with proper XML escaping in the prompt.<br>
<em>Thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SEWADE/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SEWADE">@SEWADE</a>!</em></p>
<h2>๐ Bug Fixes & Reliability</h2>
<ul>
<li><strong>whole_pdf mode fixed</strong>: a variable-shadowing bug made <code>totalPdfPages</code> always 0, preventing PDF generation in <code>whole_pdf</code> mode โ <em>thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/chasebolt/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/chasebolt">@chasebolt</a>!</em> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4006347530" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/909" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/909/hovercard" href="https://github.com/icereed/paperless-gpt/pull/909">#909</a>)</li>
<li><strong>PDF_REPLACE loop fix</strong>: tag updates are now skipped for documents that were just replaced, avoiding errors on deleted originals โ <em>thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/chasebolt/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/chasebolt">@chasebolt</a>!</em> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4006546094" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/911" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/911/hovercard" href="https://github.com/icereed/paperless-gpt/pull/911">#911</a>)</li>
<li><strong>No more crashes on malformed PDFs</strong>: <code>gofpdi</code> panics during OCR PDF assembly are recovered so one bad document can't take down the worker โ <em>thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SAY-5/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SAY-5">@SAY-5</a>!</em> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4368146994" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/959" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/959/hovercard" href="https://github.com/icereed/paperless-gpt/pull/959">#959</a>)</li>
<li><strong>Correspondents no longer show as "private"</strong>: the <code>owner</code> field is omitted when creating correspondents so paperless-ngx assigns the request user โ <em>thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sobrino89/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sobrino89">@sobrino89</a>!</em> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4304644838" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/955" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/955/hovercard" href="https://github.com/icereed/paperless-gpt/pull/955">#955</a>)</li>
<li><strong>Dangling <code><think></code> tags cleaned up</strong>: OCR reasoning cleanup now handles unclosed think tags โ <em>thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MilanSchilling/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MilanSchilling">@MilanSchilling</a>!</em> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4010023098" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/915" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/915/hovercard" href="https://github.com/icereed/paperless-gpt/pull/915">#915</a>)</li>
<li><strong>Data race fixed</strong>: <code>settings.CustomFieldsEnable</code> is now read under lock โ <em>thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/adamflagg/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/adamflagg">@adamflagg</a>!</em> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4037572577" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/928" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/928/hovercard" href="https://github.com/icereed/paperless-gpt/pull/928">#928</a>)</li>
<li><strong>Lighter polling</strong>: document polling is throttled (5s interval) when the queue is empty โ <em>thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ruben-E/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ruben-E">@Ruben-E</a>!</em> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4706301731" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/987" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/987/hovercard" href="https://github.com/icereed/paperless-gpt/pull/987">#987</a>)</li>
<li><strong>Version in the footer</strong>: the WebUI now shows which version you're running โ <em>thanks @Copilot!</em> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3996016752" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/905" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/905/hovercard" href="https://github.com/icereed/paperless-gpt/pull/905">#905</a>)</li>
<li><strong>Fresh image builds fixed</strong>: bumped the pinned <code>musl-dev</code> package after Alpine GC'd the old version, and made the Docker publish workflow fork-aware โ <em>thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hensing/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hensing">@hensing</a>!</em> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4823005124" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/990" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/990/hovercard" href="https://github.com/icereed/paperless-gpt/pull/990">#990</a>)</li>
<li><strong>E2E stability</strong>: the Mistral OCR E2E assertion is now robust against OCR model drift (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4826845285" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/991" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/991/hovercard" href="https://github.com/icereed/paperless-gpt/pull/991">#991</a>)</li>
<li><strong>Docs</strong>: docker-compose volume fix by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ce603/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ce603">@ce603</a> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4040324198" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/929" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/929/hovercard" href="https://github.com/icereed/paperless-gpt/pull/929">#929</a>) and resource-reservation guidance by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kaindlnetwork/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kaindlnetwork">@kaindlnetwork</a> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2841012930" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/207" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/207/hovercard" href="https://github.com/icereed/paperless-gpt/pull/207">#207</a>)</li>
</ul>
<hr>
<h2>โ๏ธ Configuration Highlights</h2>
<h3>New Environment Variables</h3>
<div class="highlight highlight-source-yaml notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="# Rootless container
PUID: "10001" # User ID to run as (default 10001)
PGID: "10001" # Group ID to run as (default 10001)
# Update failure handling
FAIL_TAG: "paperless-gpt-failed" # Applied when a suggestion is rejected (auto-created)
# Auto-processing
AUTO_TAG_COMPLETE: "paperless-gpt-auto-complete" # Added when auto-processing finishes ("" to disable)
CREATE_NEW_TAGS: "false" # Allow the LLM to create brand-new tags
# Ollama
OLLAMA_THINK: "false" # Disable reasoning mode for thinking-mode models
OLLAMA_HEADERS: "Authorization=Bearer mytoken" # Headers for reverse-proxy auth
# Content sanitization
REMOVE_FROM_CONTENT: "CONFIDENTIAL,Scanned by XYZ"
REMOVE_FROM_CONTENT_REGEX: "Page \\d+ of \\d+;^Fax:.*$""><pre><span class="pl-c"><span class="pl-c">#</span> Rootless container</span>
<span class="pl-ent">PUID</span>: <span class="pl-s"><span class="pl-pds">"</span>10001<span class="pl-pds">"</span></span> <span class="pl-c"><span class="pl-c">#</span> User ID to run as (default 10001)</span>
<span class="pl-ent">PGID</span>: <span class="pl-s"><span class="pl-pds">"</span>10001<span class="pl-pds">"</span></span> <span class="pl-c"><span class="pl-c">#</span> Group ID to run as (default 10001)</span>
<span class="pl-c"><span class="pl-c">#</span> Update failure handling</span>
<span class="pl-ent">FAIL_TAG</span>: <span class="pl-s"><span class="pl-pds">"</span>paperless-gpt-failed<span class="pl-pds">"</span></span> <span class="pl-c"><span class="pl-c">#</span> Applied when a suggestion is rejected (auto-created)</span>
<span class="pl-c"><span class="pl-c">#</span> Auto-processing</span>
<span class="pl-ent">AUTO_TAG_COMPLETE</span>: <span class="pl-s"><span class="pl-pds">"</span>paperless-gpt-auto-complete<span class="pl-pds">"</span></span> <span class="pl-c"><span class="pl-c">#</span> Added when auto-processing finishes ("" to disable)</span>
<span class="pl-ent">CREATE_NEW_TAGS</span>: <span class="pl-s"><span class="pl-pds">"</span>false<span class="pl-pds">"</span></span> <span class="pl-c"><span class="pl-c">#</span> Allow the LLM to create brand-new tags</span>
<span class="pl-c"><span class="pl-c">#</span> Ollama</span>
<span class="pl-ent">OLLAMA_THINK</span>: <span class="pl-s"><span class="pl-pds">"</span>false<span class="pl-pds">"</span></span> <span class="pl-c"><span class="pl-c">#</span> Disable reasoning mode for thinking-mode models</span>
<span class="pl-ent">OLLAMA_HEADERS</span>: <span class="pl-s"><span class="pl-pds">"</span>Authorization=Bearer mytoken<span class="pl-pds">"</span></span> <span class="pl-c"><span class="pl-c">#</span> Headers for reverse-proxy auth</span>
<span class="pl-c"><span class="pl-c">#</span> Content sanitization</span>
<span class="pl-ent">REMOVE_FROM_CONTENT</span>: <span class="pl-s"><span class="pl-pds">"</span>CONFIDENTIAL,Scanned by XYZ<span class="pl-pds">"</span></span>
<span class="pl-ent">REMOVE_FROM_CONTENT_REGEX</span>: <span class="pl-s"><span class="pl-pds">"</span>Page <span class="pl-cce">\\</span>d+ of <span class="pl-cce">\\</span>d+;^Fax:.*$<span class="pl-pds">"</span></span></pre></div>
<h3><g-emoji class="g-emoji" alias="warning">โ ๏ธ</g-emoji> Behavior Change: Rootless by Default</h3>
<p>The container now drops root privileges on startup and <code>chown</code>s <code>/app</code> and mounted app directories to <code>PUID:PGID</code> (default <code>10001:10001</code>). Most setups need no changes; if your volumes require specific ownership, set <code>PUID</code>/<code>PGID</code> accordingly. All other features are opt-in.</p>
<hr>
<h2>๐ What's Changed</h2>
<ul>
<li>Add version display to WebUI footer by @Copilot in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3996016752" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/905" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/905/hovercard" href="https://github.com/icereed/paperless-gpt/pull/905">#905</a></li>
<li>Skip tag update for replaced document when PDF_REPLACE=true by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/chasebolt/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/chasebolt">@chasebolt</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4006546094" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/911" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/911/hovercard" href="https://github.com/icereed/paperless-gpt/pull/911">#911</a></li>
<li>Fix whole_pdf mode page count mismatch preventing PDF generation by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/chasebolt/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/chasebolt">@chasebolt</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4006347530" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/909" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/909/hovercard" href="https://github.com/icereed/paperless-gpt/pull/909">#909</a></li>
<li>feat: add CREATE_NEW_TAGS env var by @Copilot in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4092803626" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/936" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/936/hovercard" href="https://github.com/icereed/paperless-gpt/pull/936">#936</a></li>
<li>Bundle of 16 small, pre-verified community PRs by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hensing/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hensing">@hensing</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4823005124" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/990" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/990/hovercard" href="https://github.com/icereed/paperless-gpt/pull/990">#990</a>, including:
<ul>
<li>Reduce document polling load by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ruben-E/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ruben-E">@Ruben-E</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4706301731" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/987" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/987/hovercard" href="https://github.com/icereed/paperless-gpt/pull/987">#987</a></li>
<li><code>OLLAMA_THINK</code> env var by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dertbv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dertbv">@dertbv</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4605429227" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/983" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/983/hovercard" href="https://github.com/icereed/paperless-gpt/pull/983">#983</a></li>
<li>Normalize monetary custom field values by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bartigas/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bartigas">@bartigas</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4513750258" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/978" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/978/hovercard" href="https://github.com/icereed/paperless-gpt/pull/978">#978</a></li>
<li>Break auto-tag loop on update rejection by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/thu1971dlr/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/thu1971dlr">@thu1971dlr</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4478540789" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/976" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/976/hovercard" href="https://github.com/icereed/paperless-gpt/pull/976">#976</a></li>
<li>Recover from gofpdi panic on malformed PDFs by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SAY-5/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SAY-5">@SAY-5</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4368146994" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/959" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/959/hovercard" href="https://github.com/icereed/paperless-gpt/pull/959">#959</a></li>
<li>Drop <code>owner</code> field from correspondent POST when nil by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sobrino89/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sobrino89">@sobrino89</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4304644838" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/955" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/955/hovercard" href="https://github.com/icereed/paperless-gpt/pull/955">#955</a></li>
<li>Resolve select-field label-to-ID mapping for custom fields by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SEWADE/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SEWADE">@SEWADE</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4184766840" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/943" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/943/hovercard" href="https://github.com/icereed/paperless-gpt/pull/943">#943</a></li>
<li><code>OLLAMA_HEADERS</code> support by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zebrapurring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/zebrapurring">@zebrapurring</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4116249545" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/938" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/938/hovercard" href="https://github.com/icereed/paperless-gpt/pull/938">#938</a></li>
<li>README docker-compose volume fix by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ce603/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ce603">@ce603</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4040324198" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/929" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/929/hovercard" href="https://github.com/icereed/paperless-gpt/pull/929">#929</a></li>
<li>Fix data race on <code>settings.CustomFieldsEnable</code> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/adamflagg/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/adamflagg">@adamflagg</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4037572577" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/928" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/928/hovercard" href="https://github.com/icereed/paperless-gpt/pull/928">#928</a></li>
<li>Per-document OCR prompt rendering by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/adamflagg/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/adamflagg">@adamflagg</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4037408976" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/925" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/925/hovercard" href="https://github.com/icereed/paperless-gpt/pull/925">#925</a></li>
<li>Content sanitization for LLM API calls by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/BieggerM/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/BieggerM">@BieggerM</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4024571340" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/917" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/917/hovercard" href="https://github.com/icereed/paperless-gpt/pull/917">#917</a></li>
<li>Fix OCR reasoning cleanup for dangling <code><think></code> tags by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MilanSchilling/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MilanSchilling">@MilanSchilling</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4010023098" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/915" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/915/hovercard" href="https://github.com/icereed/paperless-gpt/pull/915">#915</a></li>
<li><code>AUTO_TAG_COMPLETE</code> env var by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cfilipov/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cfilipov">@cfilipov</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3948642850" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/892" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/892/hovercard" href="https://github.com/icereed/paperless-gpt/pull/892">#892</a></li>
<li>Docker Compose resource-reservation docs by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kaindlnetwork/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kaindlnetwork">@kaindlnetwork</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2841012930" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/207" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/207/hovercard" href="https://github.com/icereed/paperless-gpt/pull/207">#207</a></li>
<li>Run Docker container as non-root user by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hensing/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hensing">@hensing</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3529186246" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/722" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/722/hovercard" href="https://github.com/icereed/paperless-gpt/pull/722">#722</a></li>
</ul>
</li>
<li>fix(e2e): make Mistral OCR phrase assertion robust to model drift by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/icereed/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/icereed">@icereed</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4826845285" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/991" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/991/hovercard" href="https://github.com/icereed/paperless-gpt/pull/991">#991</a></li>
</ul>
<h2>๐ New Contributors</h2>
<p>A huge welcome to our new contributors โ this release is overwhelmingly community-built! ๐</p>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/chasebolt/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/chasebolt">@chasebolt</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4006546094" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/911" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/911/hovercard" href="https://github.com/icereed/paperless-gpt/pull/911">#911</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ruben-E/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ruben-E">@Ruben-E</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4706301731" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/987" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/987/hovercard" href="https://github.com/icereed/paperless-gpt/pull/987">#987</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dertbv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dertbv">@dertbv</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4605429227" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/983" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/983/hovercard" href="https://github.com/icereed/paperless-gpt/pull/983">#983</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bartigas/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bartigas">@bartigas</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4513750258" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/978" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/978/hovercard" href="https://github.com/icereed/paperless-gpt/pull/978">#978</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/thu1971dlr/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/thu1971dlr">@thu1971dlr</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4478540789" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/976" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/976/hovercard" href="https://github.com/icereed/paperless-gpt/pull/976">#976</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SAY-5/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SAY-5">@SAY-5</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4368146994" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/959" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/959/hovercard" href="https://github.com/icereed/paperless-gpt/pull/959">#959</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sobrino89/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sobrino89">@sobrino89</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4304644838" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/955" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/955/hovercard" href="https://github.com/icereed/paperless-gpt/pull/955">#955</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SEWADE/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SEWADE">@SEWADE</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4184766840" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/943" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/943/hovercard" href="https://github.com/icereed/paperless-gpt/pull/943">#943</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zebrapurring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/zebrapurring">@zebrapurring</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4116249545" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/938" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/938/hovercard" href="https://github.com/icereed/paperless-gpt/pull/938">#938</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ce603/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ce603">@ce603</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4040324198" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/929" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/929/hovercard" href="https://github.com/icereed/paperless-gpt/pull/929">#929</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/adamflagg/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/adamflagg">@adamflagg</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4037408976" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/925" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/925/hovercard" href="https://github.com/icereed/paperless-gpt/pull/925">#925</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/BieggerM/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/BieggerM">@BieggerM</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4024571340" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/917" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/917/hovercard" href="https://github.com/icereed/paperless-gpt/pull/917">#917</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MilanSchilling/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MilanSchilling">@MilanSchilling</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4010023098" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/915" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/915/hovercard" href="https://github.com/icereed/paperless-gpt/pull/915">#915</a></li>
</ul>
<p>And a special shout-out to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hensing/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hensing">@hensing</a> for assembling, rebasing, conflict-resolving and end-to-end testing the 16-PR community bundle. ๐ช</p>
<hr>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/icereed/paperless-gpt/compare/v0.25.1...v0.26.0"><tt>v0.25.1...v0.26.0</tt></a></p>
<hr>
<p><strong>Ready to upgrade?</strong></p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="docker pull icereed/paperless-gpt:latest"><pre>docker pull icereed/paperless-gpt:latest</pre></div>
<blockquote>
<p>๐ Check out the <a href="https://github.com/icereed/paperless-gpt#readme">README</a> for full documentation on all features!</p>
</blockquote>icereedtag:github.com,2008:Repository/861746639/v0.25.12026-02-26T14:50:11Z๐ ๏ธ v0.25.1 โ Patch Release<h1>๐ ๏ธ v0.25.1 โ Patch Release</h1>
<h3>Summary</h3>
<p>This patch release fixes a regression introduced in v0.25.0 which caused the UI to enter a reload loop and fail to fetch documents from Paperless when the manual queue tag (e.g., with emoji or spaces, like <code>๐ค AI-Queue</code>) was used.</p>
<h3>Whatโs fixed</h3>
<ul>
<li>๐ข <strong>Unicode/emoji tag filtering now works:</strong> Fixes improper query encoding for tags with non-ASCII characters or spaces in <code>tags__name__iexact</code>. Paperless-ngx queries by emoji/spaced tags work as expected.</li>
<li>The UI no longer enters a reload loop when a tag like <code>๐ค AI-Queue</code> is used as <code>MANUAL_TAG</code>.</li>
<li>No changes to other functionality or settings required.</li>
</ul>
<h3>How to upgrade</h3>
<ol>
<li>Update your paperless-gpt Docker image/tag to <code>v0.25.1</code>.</li>
<li>No migration steps or config changes are needed.</li>
</ol>
<h3>Thanks</h3>
<p>Thank you to everyone reporting and helping debug this regression!</p>
<ul>
<li><a href="https://github.com/icereed/paperless-gpt/issues/898" data-hovercard-type="issue" data-hovercard-url="/icereed/paperless-gpt/issues/898/hovercard">#898</a>: โ400 from paperless-gpt when querying documents by emoji tag via tags__name__iexactโ โ <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/icereed/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/icereed">@icereed</a></li>
</ul>
<h3>What's Changed</h3>
<ul>
<li>Update README.md by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nettnikl/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nettnikl">@nettnikl</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3958083039" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/895" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/895/hovercard" href="https://github.com/icereed/paperless-gpt/pull/895">#895</a></li>
<li>Fix URL encoding for tag queries with special characters by @Copilot in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3974380530" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/901" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/901/hovercard" href="https://github.com/icereed/paperless-gpt/pull/901">#901</a></li>
</ul>
<h3>New Contributors</h3>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nettnikl/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nettnikl">@nettnikl</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3958083039" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/895" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/895/hovercard" href="https://github.com/icereed/paperless-gpt/pull/895">#895</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/icereed/paperless-gpt/compare/v0.25.0...v0.25.1"><tt>v0.25.0...v0.25.1</tt></a></p>icereedtag:github.com,2008:Repository/861746639/v0.25.02026-02-16T08:31:48Zv0.25.0 - "The Vision Expansion"<h1>๐ paperless-gpt v0.25.0 - "The Vision Expansion"</h1>
<p><em>Gemini joins the vision OCR party, polling gets smarter, and image processing becomes fully tunable!</em></p>
<h2>๐ Major New Features</h2>
<h3>๐๏ธ <strong>Google Gemini as Vision (OCR) Provider</strong></h3>
<p>Google Gemini can now be used directly as a vision LLM provider for OCR! With native PDF handling, Gemini supports <code>image</code>, <code>pdf</code>, and <code>whole_pdf</code> processing modes out of the boxโgiving you even more flexibility for document processing.</p>
<ul>
<li>Set <code>VISION_LLM_PROVIDER: "googleai"</code> and <code>VISION_LLM_MODEL: "gemini-2.5-flash"</code> to get started</li>
<li>Optional thinking budget support for reasoning models via <code>GOOGLEAI_THINKING_BUDGET</code><br>
<em>Thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/its-a-unixsystem/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/its-a-unixsystem">@its-a-unixsystem</a> for this fantastic contribution!</em></li>
</ul>
<h3>๐๏ธ <strong>Configurable Image Processing Limits</strong></h3>
<p>Image processing limits are no longer hardcoded! You can now fine-tune max pixel dimensions, total pixels, render DPI, and max file size via environment variables. This is especially useful for smaller vision models like <code>minicpm-v</code> that perform better with appropriately sized images.</p>
<ul>
<li><code>IMAGE_MAX_PIXEL_DIMENSION</code>, <code>IMAGE_MAX_TOTAL_PIXELS</code>, <code>IMAGE_MAX_RENDER_DPI</code>, <code>IMAGE_MAX_FILE_BYTES</code></li>
<li>Sensible defaults maintained for backward compatibility<br>
<em>Great addition by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cfilipov/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cfilipov">@cfilipov</a>!</em></li>
</ul>
<h2>โก Performance Improvements</h2>
<h3>๐ <strong>Smarter Paperless Polling</strong></h3>
<p>Polling for new documents is now significantly faster and lighter on resources. Instead of querying the full documents API, paperless-gpt now uses tag-based document counting to short-circuit when there's nothing to processโreducing response times from 500โ1000ms down to 10โ50ms on larger instances.</p>
<ul>
<li>Fixes high CPU usage on paperless-ngx caused by aggressive polling</li>
<li>Single-tag retrieval replaces multi-tag queries</li>
<li>API calls are aborted early when no documents need processing<br>
<em>Thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/apoapoapo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/apoapoapo">@apoapoapo</a> for this performance win!</em></li>
</ul>
<h2>๐ง CI/CD Improvements</h2>
<h3>๐ก๏ธ <strong>Secure Fork PR E2E Testing</strong></h3>
<p>Fork pull requests can now run E2E tests securely via a label-based approval workflow. Maintainers add the <code>safe-to-test</code> label after code review, which triggers E2E tests with secret access using local Docker buildsโno registry credentials needed.<br>
<em>Contributed by @Copilot!</em></p>
<hr>
<h2>โ๏ธ Configuration Highlights</h2>
<h3>New Environment Variables</h3>
<div class="highlight highlight-source-yaml notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="# Gemini Vision OCR
VISION_LLM_PROVIDER: "googleai"
VISION_LLM_MODEL: "gemini-2.5-flash"
GOOGLEAI_API_KEY: "your-api-key"
GOOGLEAI_THINKING_BUDGET: "16384" # Optional
OCR_PROCESS_MODE: "whole_pdf" # image, pdf, or whole_pdf
# Image Processing Limits
IMAGE_MAX_PIXEL_DIMENSION: "10000"
IMAGE_MAX_TOTAL_PIXELS: "40000000"
IMAGE_MAX_RENDER_DPI: "300"
IMAGE_MAX_FILE_BYTES: "10485760""><pre><span class="pl-c"><span class="pl-c">#</span> Gemini Vision OCR</span>
<span class="pl-ent">VISION_LLM_PROVIDER</span>: <span class="pl-s"><span class="pl-pds">"</span>googleai<span class="pl-pds">"</span></span>
<span class="pl-ent">VISION_LLM_MODEL</span>: <span class="pl-s"><span class="pl-pds">"</span>gemini-2.5-flash<span class="pl-pds">"</span></span>
<span class="pl-ent">GOOGLEAI_API_KEY</span>: <span class="pl-s"><span class="pl-pds">"</span>your-api-key<span class="pl-pds">"</span></span>
<span class="pl-ent">GOOGLEAI_THINKING_BUDGET</span>: <span class="pl-s"><span class="pl-pds">"</span>16384<span class="pl-pds">"</span></span> <span class="pl-c"><span class="pl-c">#</span> Optional</span>
<span class="pl-ent">OCR_PROCESS_MODE</span>: <span class="pl-s"><span class="pl-pds">"</span>whole_pdf<span class="pl-pds">"</span></span> <span class="pl-c"><span class="pl-c">#</span> image, pdf, or whole_pdf</span>
<span class="pl-c"><span class="pl-c">#</span> Image Processing Limits</span>
<span class="pl-ent">IMAGE_MAX_PIXEL_DIMENSION</span>: <span class="pl-s"><span class="pl-pds">"</span>10000<span class="pl-pds">"</span></span>
<span class="pl-ent">IMAGE_MAX_TOTAL_PIXELS</span>: <span class="pl-s"><span class="pl-pds">"</span>40000000<span class="pl-pds">"</span></span>
<span class="pl-ent">IMAGE_MAX_RENDER_DPI</span>: <span class="pl-s"><span class="pl-pds">"</span>300<span class="pl-pds">"</span></span>
<span class="pl-ent">IMAGE_MAX_FILE_BYTES</span>: <span class="pl-s"><span class="pl-pds">"</span>10485760<span class="pl-pds">"</span></span></pre></div>
<h3>No Breaking Changes</h3>
<p>Existing configurations continue to work as expected. All new features are opt-in!</p>
<hr>
<h2>๐ What's Changed</h2>
<ul>
<li>Add secure fork PR E2E testing with label-based approval by @Copilot in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3814894347" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/857" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/857/hovercard" href="https://github.com/icereed/paperless-gpt/pull/857">#857</a></li>
<li>Improve paperless polling for new documents by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/apoapoapo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/apoapoapo">@apoapoapo</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3943796343" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/889" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/889/hovercard" href="https://github.com/icereed/paperless-gpt/pull/889">#889</a></li>
<li>feat: make image processing limits configurable by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cfilipov/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cfilipov">@cfilipov</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3909036593" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/883" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/883/hovercard" href="https://github.com/icereed/paperless-gpt/pull/883">#883</a></li>
<li>add Gemini as Vision (OCR) provider by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/its-a-unixsystem/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/its-a-unixsystem">@its-a-unixsystem</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3907450215" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/881" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/881/hovercard" href="https://github.com/icereed/paperless-gpt/pull/881">#881</a></li>
</ul>
<h2>๐ New Contributors</h2>
<p>A huge welcome to our new contributors! ๐</p>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/apoapoapo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/apoapoapo">@apoapoapo</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3943796343" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/889" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/889/hovercard" href="https://github.com/icereed/paperless-gpt/pull/889">#889</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cfilipov/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cfilipov">@cfilipov</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3909036593" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/883" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/883/hovercard" href="https://github.com/icereed/paperless-gpt/pull/883">#883</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/its-a-unixsystem/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/its-a-unixsystem">@its-a-unixsystem</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3907450215" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/881" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/881/hovercard" href="https://github.com/icereed/paperless-gpt/pull/881">#881</a></li>
</ul>
<hr>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/icereed/paperless-gpt/compare/v0.24.0...v0.25.0"><tt>v0.24.0...v0.25.0</tt></a></p>
<hr>
<p><strong>Ready to upgrade?</strong></p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="docker pull icereed/paperless-gpt:latest"><pre>docker pull icereed/paperless-gpt:latest</pre></div>
<blockquote>
<p>๐ Check out the <a href="https://github.com/icereed/paperless-gpt#readme">README</a> for full documentation on all features!</p>
</blockquote>icereedtag:github.com,2008:Repository/861746639/v0.24.02026-01-14T21:28:09Zv0.24.0- "The Intelligence Expansion"<h1>๐ paperless-gpt v0.24.0 - "The Intelligence Expansion"</h1>
<p><em>Your AI-powered document processing just got smarter with Claude support, automatic document types, and a whole lot more!</em></p>
<h2>๐ Major New Features</h2>
<h3>๐ง <strong>Anthropic Claude API Support</strong></h3>
<p>Claude joins the party! You can now use Anthropic's powerful Claude models as your LLM provider. Perfect for users who prefer Claude's reasoning capabilities or want an alternative to OpenAI/Ollama.</p>
<ul>
<li>Set <code>LLM_PROVIDER: "anthropic"</code> and configure your <code>ANTHROPIC_API_KEY</code> to get started<br>
*Thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kamcnally/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kamcnally">@kamcnally</a> for this excellent addition! *</li>
</ul>
<h3>๐ <strong>Automatic Document Type Assignment</strong></h3>
<p>Paperless-gpt now intelligently suggests and assigns document types to your documents! Let the AI categorize your invoices, contracts, receipts, and more without lifting a finger.</p>
<ul>
<li><strong>UI toggle</strong> to enable/disable document type generation</li>
<li><strong>View and edit</strong> suggested document types per document</li>
<li>Set <code>AUTO_GENERATE_DOCUMENT_TYPE: "true"</code> to get started<br>
<em>Brilliant contribution from <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/niklasfink/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/niklasfink">@niklasfink</a>!</em></li>
</ul>
<h3>๐จ <strong>Enhanced OCR UI & LLM Options</strong></h3>
<p>The OCR interface got a major facelift with more options for fine-tuning your LLM interactionsโgiving you greater control over how documents are processed.<br>
<em>Improved by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dawidkulpa/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dawidkulpa">@dawidkulpa</a>!</em></p>
<h2>๐ง Improvements & Fixes</h2>
<h3>๐ <strong>Sub-Path Hosting Support</strong></h3>
<p>Hosting paperless-gpt behind a reverse proxy under a sub-path (e.g., <code>/ai/</code>) now works seamlessly! All frontend API calls are now sub-path aware, ensuring the Settings menu and other UI features load correctly.<br>
*Thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tldev-de/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tldev-de">@tldev-de</a>! *</p>
<h3>๐ <strong>OCR Tag Loop Fix</strong></h3>
<p>Fixed a critical bug where the auto OCR tag would never be cleared when it was the last remaining tag, causing an endless processing loop.<br>
*Fixed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/haigcd/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/haigcd">@haigcd</a> โ closes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3708120171" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/817" data-hovercard-type="issue" data-hovercard-url="/icereed/paperless-gpt/issues/817/hovercard" href="https://github.com/icereed/paperless-gpt/issues/817">#817</a>! *</p>
<h3>๐ท๏ธ <strong>Tag Removal Fix</strong></h3>
<p>Fixed handling of auto/manual tag removal to prevent sending empty arrays, which could cause issues with paperless-ngx.<br>
<em>Fixed by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/itkevin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/itkevin">@itkevin</a> โ closes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3460663706" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/659" data-hovercard-type="issue" data-hovercard-url="/icereed/paperless-gpt/issues/659/hovercard" href="https://github.com/icereed/paperless-gpt/issues/659">#659</a>!</em></p>
<h3>๐ค <strong>Reasoning Model Cleanup</strong></h3>
<p>OCR output now automatically strips <code><think></code> reasoning tags from models like DeepSeek-R1, giving you cleaner extracted text.<br>
*Contributed by @Copilot! *</p>
<h3>๐ <strong>Docling Provider Enhancements</strong></h3>
<ul>
<li>Updated Docling server API to v1</li>
<li>Added support for PDF processing modes (<code>pdf</code> and <code>whole_pdf</code>)</li>
<li>New environment variables for additional configuration<br>
<em>Thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/T-Eberle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/T-Eberle">@T-Eberle</a> and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Schweinhitti/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Schweinhitti">@Schweinhitti</a>!</em></li>
</ul>
<h2>๐ฆ What's Under the Hood</h2>
<p>This release includes <strong>100+ dependency updates</strong> across both Go backend and TypeScript frontend, keeping everything secure and up-to-date:</p>
<table>
<thead>
<tr>
<th>Component</th>
<th>Version</th>
</tr>
</thead>
<tbody>
<tr>
<td>React</td>
<td>19.2.3</td>
</tr>
<tr>
<td>Go</td>
<td>1.25.5</td>
</tr>
<tr>
<td>Vite</td>
<td>7.3.0</td>
</tr>
<tr>
<td>Node.js</td>
<td>24</td>
</tr>
<tr>
<td>PostgreSQL</td>
<td>18</td>
</tr>
<tr>
<td>Alpine</td>
<td>3.23.0</td>
</tr>
<tr>
<td>Gin</td>
<td>1.11.0</td>
</tr>
<tr>
<td>GORM</td>
<td>1.31.1</td>
</tr>
<tr>
<td>LangChainGo</td>
<td>0.1.14</td>
</tr>
<tr>
<td>Google GenAI</td>
<td>1.39.0</td>
</tr>
</tbody>
</table>
<h3>CI/CD Improvements</h3>
<ul>
<li>Updated to actions/checkout v6, actions/setup-node v6, actions/setup-go v6</li>
<li>GitHub artifact actions updated to latest major versions</li>
<li>actions/cache updated to v5</li>
</ul>
<hr>
<h2>๐ What's Changed</h2>
<h3>โจ Features</h3>
<ul>
<li>๐ฌ Ad-hoc Analysis to get answers from multiple documents by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/icereed/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/icereed">@icereed</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3462383720" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/663" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/663/hovercard" href="https://github.com/icereed/paperless-gpt/pull/663">#663</a></li>
<li>๐ค Add Anthropic/Claude API as LLM provider by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kamcnally/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kamcnally">@kamcnally</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3662961074" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/795" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/795/hovercard" href="https://github.com/icereed/paperless-gpt/pull/795">#795</a></li>
<li>๐ Document Type Assignment for Documents by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/niklasfink/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/niklasfink">@niklasfink</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3775938480" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/848" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/848/hovercard" href="https://github.com/icereed/paperless-gpt/pull/848">#848</a></li>
<li>๐จ Improves OCR UI and adds more options for LLMs by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dawidkulpa/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dawidkulpa">@dawidkulpa</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3318991003" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/573" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/573/hovercard" href="https://github.com/icereed/paperless-gpt/pull/573">#573</a></li>
</ul>
<h3>๐ Bug Fixes</h3>
<ul>
<li>Fix frontend API/base paths when hosting under sub-path (e.g. /ai/) by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tldev-de/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tldev-de">@tldev-de</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3756734991" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/844" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/844/hovercard" href="https://github.com/icereed/paperless-gpt/pull/844">#844</a></li>
<li>Handle situation when auto OCR tag is the last remaining tag by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/haigcd/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/haigcd">@haigcd</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3779201580" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/852" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/852/hovercard" href="https://github.com/icereed/paperless-gpt/pull/852">#852</a></li>
<li>Handle removal of auto/manual tags without sending empty array by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/itkevin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/itkevin">@itkevin</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3554220718" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/738" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/738/hovercard" href="https://github.com/icereed/paperless-gpt/pull/738">#738</a></li>
<li>Strip <code><think></code> reasoning tags from OCR output by @Copilot in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3518417138" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/709" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/709/hovercard" href="https://github.com/icereed/paperless-gpt/pull/709">#709</a></li>
</ul>
<h3>๐ง Improvements</h3>
<ul>
<li>Fixed Docling serve API version to v1 & added environment variables by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/T-Eberle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/T-Eberle">@T-Eberle</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3377568884" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/614" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/614/hovercard" href="https://github.com/icereed/paperless-gpt/pull/614">#614</a></li>
<li>Update Docling provider to support PDF processing modes by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Schweinhitti/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Schweinhitti">@Schweinhitti</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3594294650" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/758" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/758/hovercard" href="https://github.com/icereed/paperless-gpt/pull/758">#758</a></li>
</ul>
<hr>
<h2>๐ New Contributors</h2>
<p>A huge welcome to our new contributors! ๐</p>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dawidkulpa/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dawidkulpa">@dawidkulpa</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3318991003" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/573" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/573/hovercard" href="https://github.com/icereed/paperless-gpt/pull/573">#573</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/T-Eberle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/T-Eberle">@T-Eberle</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3377568884" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/614" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/614/hovercard" href="https://github.com/icereed/paperless-gpt/pull/614">#614</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Schweinhitti/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Schweinhitti">@Schweinhitti</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3594294650" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/758" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/758/hovercard" href="https://github.com/icereed/paperless-gpt/pull/758">#758</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/itkevin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/itkevin">@itkevin</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3554220718" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/738" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/738/hovercard" href="https://github.com/icereed/paperless-gpt/pull/738">#738</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tldev-de/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tldev-de">@tldev-de</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3756734991" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/844" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/844/hovercard" href="https://github.com/icereed/paperless-gpt/pull/844">#844</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kamcnally/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kamcnally">@kamcnally</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3662961074" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/795" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/795/hovercard" href="https://github.com/icereed/paperless-gpt/pull/795">#795</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/haigcd/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/haigcd">@haigcd</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3779201580" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/852" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/852/hovercard" href="https://github.com/icereed/paperless-gpt/pull/852">#852</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/niklasfink/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/niklasfink">@niklasfink</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3775938480" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/848" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/848/hovercard" href="https://github.com/icereed/paperless-gpt/pull/848">#848</a></li>
</ul>
<hr>
<h2>โ๏ธ Configuration Highlights</h2>
<h3>New Environment Variables</h3>
<div class="highlight highlight-source-yaml notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="# Anthropic Claude Support
LLM_PROVIDER: "anthropic"
ANTHROPIC_API_KEY: "your-api-key"
# Document Type Generation
AUTO_GENERATE_DOCUMENT_TYPE: "true""><pre><span class="pl-c"><span class="pl-c">#</span> Anthropic Claude Support</span>
<span class="pl-ent">LLM_PROVIDER</span>: <span class="pl-s"><span class="pl-pds">"</span>anthropic<span class="pl-pds">"</span></span>
<span class="pl-ent">ANTHROPIC_API_KEY</span>: <span class="pl-s"><span class="pl-pds">"</span>your-api-key<span class="pl-pds">"</span></span>
<span class="pl-c"><span class="pl-c">#</span> Document Type Generation</span>
<span class="pl-ent">AUTO_GENERATE_DOCUMENT_TYPE</span>: <span class="pl-s"><span class="pl-pds">"</span>true<span class="pl-pds">"</span></span></pre></div>
<h3>No Breaking Changes</h3>
<p>Existing configurations continue to work as expected. All new features are opt-in!</p>
<hr>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/icereed/paperless-gpt/compare/v0.23.0...v0.24.0"><tt>v0.23.0...v0.24.0</tt></a></p>
<hr>
<p><strong>Ready to upgrade?</strong></p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="docker pull icereed/paperless-gpt:latest"><pre>docker pull icereed/paperless-gpt:latest</pre></div>
<blockquote>
<p>๐ Check out the <a href="https://github.com/icereed/paperless-gpt#readme">README</a> for full documentation on all features!</p>
</blockquote>icereedtag:github.com,2008:Repository/861746639/v0.23.02025-09-17T10:15:51Z"The Power User Edition"<h1>๐ paperless-gpt v0.23.0 - "The Power User Edition"</h1>
<p><em>Bringing AI-powered document processing to the next level with custom fields, external prompts, and enhanced developer experience!</em></p>
<h2>๐ Major New Features</h2>
<h3>๐ <strong>External Prompts & UI Editor</strong></h3>
<p>Transform how you customize AI behavior! You can now manage your prompts externally and edit them through a beautiful web interface. No more diving into config files - craft your perfect document processing prompts with ease.<br>
<em>Thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hensing/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hensing">@hensing</a> for this game-changing feature!</em></p>
<h3>๐ฏ <strong>Automatic Custom Field Detection</strong></h3>
<p>paperless-gpt now intelligently detects and extracts custom fields from your documents automatically. Let AI discover the data patterns in your paperwork and suggest custom fields you never knew you needed.<br>
<em>Another brilliant contribution from <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hensing/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hensing">@hensing</a>!</em></p>
<h3>โฑ๏ธ <strong>Document Processing Runtime Logging</strong></h3>
<p>Ever wondered how long each document takes to process? Now you'll know! Every document processing operation is timed and logged, giving you insights into performance and helping you optimize your AI workflows.<br>
<em>Big thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/matgoebl/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/matgoebl">@matgoebl</a> for this useful addition!</em></p>
<h3>๐ ๏ธ <strong>Enhanced Developer Experience</strong></h3>
<p>We've added comprehensive GitHub Copilot instructions to make contributing to paperless-gpt a breeze. Whether you're fixing bugs or adding features, the development workflow is now smoother than ever.<br>
<em>Powered by @Copilot's first contribution to the project!</em></p>
<h2>๐ง Infrastructure Improvements</h2>
<ul>
<li><strong>Optional Docker Hub Pushes</strong>: More flexible CI/CD pipeline management</li>
<li><strong>Date Validation</strong>: Better handling of invalid document dates</li>
<li><strong>Dependency Fortress</strong>: Massive dependency update sweep keeping everything secure and up-to-date</li>
</ul>
<h2>๐ฆ What's Under the Hood</h2>
<p>This release includes <strong>50+ dependency updates</strong> across both Go backend and TypeScript frontend, ensuring you're running on the latest and greatest packages. From React 19.1.1 to Go 1.25.0, we've got you covered.</p>
<h2>๐ New Contributors Welcome!</h2>
<p>Special shoutout to @Copilot for joining our contributor family! ๐ค</p>
<hr>
<p><strong>Ready to supercharge your document processing?</strong></p>
<p>๐ฅ <strong>Download</strong>: <a href="https://github.com/icereed/paperless-gpt/releases/tag/v0.23.0">Release v0.23.0</a><br>
๐ <strong>Documentation</strong>: Check out our updated docs for the new features<br>
๐ <strong>Issues</strong>: Found something? We love feedback!</p>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/icereed/paperless-gpt/compare/v0.22.0...v0.23.0"><tt>v0.22.0...v0.23.0</tt></a></p>icereedtag:github.com,2008:Repository/861746639/v0.22.02025-07-17T08:50:21ZSupport relative URLs for reverse-proxies<h1>Support relative URLs for reverse-proxies</h1>
<p>Use relative URLs, so forwarding a sub-path from a reverse proxy works. Thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/matgoebl/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/matgoebl">@matgoebl</a>.</p>
<h2>What's Changed</h2>
<ul>
<li>doc: clarify LLM_LANGUAGE by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/thiswillbeyourgithub/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/thiswillbeyourgithub">@thiswillbeyourgithub</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3164939209" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/472" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/472/hovercard" href="https://github.com/icereed/paperless-gpt/pull/472">#472</a></li>
<li>chore(deps): update dependency go to v1.24.4 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3159182225" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/465" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/465/hovercard" href="https://github.com/icereed/paperless-gpt/pull/465">#465</a></li>
<li>chore(deps): update dependency @types/react to v19.1.8 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3139171141" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/462" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/462/hovercard" href="https://github.com/icereed/paperless-gpt/pull/462">#462</a></li>
<li>fix(deps): update module google.golang.org/api to v0.239.0 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3103420737" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/444" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/444/hovercard" href="https://github.com/icereed/paperless-gpt/pull/444">#444</a></li>
<li>chore(deps): update dependency postcss to v8.5.6 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3103419116" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/443" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/443/hovercard" href="https://github.com/icereed/paperless-gpt/pull/443">#443</a></li>
<li>chore(deps): update docker.io/golang docker tag to v1.24.4 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3186119788" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/481" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/481/hovercard" href="https://github.com/icereed/paperless-gpt/pull/481">#481</a></li>
<li>fix(deps): update dependency react-router-dom to v7.6.3 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3186119867" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/482" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/482/hovercard" href="https://github.com/icereed/paperless-gpt/pull/482">#482</a></li>
<li>fix(deps): update module github.com/gen2brain/go-fitz to v1.24.15 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3186168087" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/483" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/483/hovercard" href="https://github.com/icereed/paperless-gpt/pull/483">#483</a></li>
<li>chore(deps): update dependency @types/node to v22.15.34 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3095407324" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/430" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/430/hovercard" href="https://github.com/icereed/paperless-gpt/pull/430">#430</a></li>
<li>chore(deps): update dependency typescript-eslint to v8.35.0 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3095407881" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/431" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/431/hovercard" href="https://github.com/icereed/paperless-gpt/pull/431">#431</a></li>
<li>chore(deps): update docker.io/alpine docker tag to v3.22.0 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3104294900" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/447" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/447/hovercard" href="https://github.com/icereed/paperless-gpt/pull/447">#447</a></li>
<li>fix(deps): update module github.com/hashicorp/go-retryablehttp to v0.7.8 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3186168186" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/484" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/484/hovercard" href="https://github.com/icereed/paperless-gpt/pull/484">#484</a></li>
<li>fix(deps): update module gorm.io/gorm to v1.30.0 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3089197404" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/426" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/426/hovercard" href="https://github.com/icereed/paperless-gpt/pull/426">#426</a></li>
<li>chore(deps): update dependency @playwright/test to v1.53.1 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3186200871" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/485" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/485/hovercard" href="https://github.com/icereed/paperless-gpt/pull/485">#485</a></li>
<li>chore(deps): update dependency dotenv to v16.6.1 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3186200966" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/486" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/486/hovercard" href="https://github.com/icereed/paperless-gpt/pull/486">#486</a></li>
<li>chore(config): migrate renovate config by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3186201431" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/487" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/487/hovercard" href="https://github.com/icereed/paperless-gpt/pull/487">#487</a></li>
<li>fix(deps): update dependency axios to v1.10.0 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3186439167" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/489" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/489/hovercard" href="https://github.com/icereed/paperless-gpt/pull/489">#489</a></li>
<li>chore(deps): update eslint monorepo to v9.30.0 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3186439092" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/488" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/488/hovercard" href="https://github.com/icereed/paperless-gpt/pull/488">#488</a></li>
<li>chore(deps): update dependency dotenv to v17 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3187007179" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/494" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/494/hovercard" href="https://github.com/icereed/paperless-gpt/pull/494">#494</a></li>
<li>fix(deps): update module google.golang.org/genai to v1.13.0 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3187006691" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/492" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/492/hovercard" href="https://github.com/icereed/paperless-gpt/pull/492">#492</a></li>
<li>fix(deps): update dependency react-tooltip to v5.29.1 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3187005323" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/490" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/490/hovercard" href="https://github.com/icereed/paperless-gpt/pull/490">#490</a></li>
<li>chore(deps): update dependency vite to v7 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3187008404" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/495" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/495/hovercard" href="https://github.com/icereed/paperless-gpt/pull/495">#495</a></li>
<li>fix(deps): update module gorm.io/driver/sqlite to v1.6.0 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3187006817" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/493" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/493/hovercard" href="https://github.com/icereed/paperless-gpt/pull/493">#493</a></li>
<li>chore(deps): update dependency dotenv to v17.0.1 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3207741273" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/499" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/499/hovercard" href="https://github.com/icereed/paperless-gpt/pull/499">#499</a></li>
<li>chore(deps): update dependency @playwright/test to v1.53.2 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3207741017" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/498" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/498/hovercard" href="https://github.com/icereed/paperless-gpt/pull/498">#498</a></li>
<li>fix(deps): update module google.golang.org/api to v0.240.0 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3187006433" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/491" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/491/hovercard" href="https://github.com/icereed/paperless-gpt/pull/491">#491</a></li>
<li>chore(deps): update dependency typescript-eslint to v8.35.1 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3208366194" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/500" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/500/hovercard" href="https://github.com/icereed/paperless-gpt/pull/500">#500</a></li>
<li>chore(deps): update dependency vite to v7.0.2 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3208367079" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/501" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/501/hovercard" href="https://github.com/icereed/paperless-gpt/pull/501">#501</a></li>
<li>chore(deps): update dependency vite to v7.0.4 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3222715702" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/504" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/504/hovercard" href="https://github.com/icereed/paperless-gpt/pull/504">#504</a></li>
<li>chore(deps): update dependency go to v1.24.5 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3222714626" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/503" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/503/hovercard" href="https://github.com/icereed/paperless-gpt/pull/503">#503</a></li>
<li>chore(deps): update eslint monorepo to v9.30.1 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3223384540" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/506" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/506/hovercard" href="https://github.com/icereed/paperless-gpt/pull/506">#506</a></li>
<li>chore(deps): update docker.io/golang docker tag to v1.24.5 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3223383085" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/505" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/505/hovercard" href="https://github.com/icereed/paperless-gpt/pull/505">#505</a></li>
<li>chore(deps): update dependency @playwright/test to v1.54.1 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3223833308" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/507" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/507/hovercard" href="https://github.com/icereed/paperless-gpt/pull/507">#507</a></li>
<li>chore(deps): update dependency @types/node to v22.16.3 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3223833546" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/508" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/508/hovercard" href="https://github.com/icereed/paperless-gpt/pull/508">#508</a></li>
<li>chore(deps): update dependency dotenv to v17.2.0 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3224385377" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/509" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/509/hovercard" href="https://github.com/icereed/paperless-gpt/pull/509">#509</a></li>
<li>chore(deps): update dependency globals to v16.3.0 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3224385498" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/510" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/510/hovercard" href="https://github.com/icereed/paperless-gpt/pull/510">#510</a></li>
<li>chore(deps): update dependency typescript-eslint to v8.36.0 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3224579555" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/511" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/511/hovercard" href="https://github.com/icereed/paperless-gpt/pull/511">#511</a></li>
<li>chore(deps): update eslint monorepo to v9.31.0 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3224579628" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/512" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/512/hovercard" href="https://github.com/icereed/paperless-gpt/pull/512">#512</a></li>
<li>fix(deps): update module golang.org/x/sync to v0.16.0 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3224823019" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/513" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/513/hovercard" href="https://github.com/icereed/paperless-gpt/pull/513">#513</a></li>
<li>fix(deps): update module google.golang.org/api to v0.241.0 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3224823093" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/514" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/514/hovercard" href="https://github.com/icereed/paperless-gpt/pull/514">#514</a></li>
<li>fix(deps): update module google.golang.org/genai to v1.15.0 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3225182233" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/515" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/515/hovercard" href="https://github.com/icereed/paperless-gpt/pull/515">#515</a></li>
<li>chore(deps): update dependency @types/node to v22.16.4 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3234644820" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/517" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/517/hovercard" href="https://github.com/icereed/paperless-gpt/pull/517">#517</a></li>
<li>chore(deps): update docker.io/alpine docker tag to v3.22.1 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3234644963" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/518" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/518/hovercard" href="https://github.com/icereed/paperless-gpt/pull/518">#518</a></li>
<li>Use relative URLs, so forwarding a sub-path from a reverse proxy works. by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/matgoebl/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/matgoebl">@matgoebl</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3230049873" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/516" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/516/hovercard" href="https://github.com/icereed/paperless-gpt/pull/516">#516</a></li>
<li>chore(deps): update dependency typescript-eslint to v8.37.0 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3235546690" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/519" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/519/hovercard" href="https://github.com/icereed/paperless-gpt/pull/519">#519</a></li>
<li>fix(deps): update dependency react-router-dom to v7.7.0 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3237705662" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/521" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/521/hovercard" href="https://github.com/icereed/paperless-gpt/pull/521">#521</a></li>
<li>fix(deps): update module google.golang.org/api to v0.242.0 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3237706460" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/522" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/522/hovercard" href="https://github.com/icereed/paperless-gpt/pull/522">#522</a></li>
<li>chore(deps): update dependency vite to v7.0.5 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3238186541" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/523" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/523/hovercard" href="https://github.com/icereed/paperless-gpt/pull/523">#523</a></li>
<li>fix(deps): update module google.golang.org/genai to v1.16.0 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3238188369" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/524" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/524/hovercard" href="https://github.com/icereed/paperless-gpt/pull/524">#524</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/matgoebl/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/matgoebl">@matgoebl</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3230049873" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/516" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/516/hovercard" href="https://github.com/icereed/paperless-gpt/pull/516">#516</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/icereed/paperless-gpt/compare/v0.21.0...v0.22.0"><tt>v0.21.0...v0.22.0</tt></a></p>icereedtag:github.com,2008:Repository/861746639/v0.21.02025-06-19T14:24:07Zv0.21.0<h2>Release Highlights ๐</h2>
<h3>New Features</h3>
<h4>๐ฎ Mistral OCR Integration with Advanced PDF Processing</h4>
<ul>
<li><strong>Extended PDF processing support</strong> - Mistral OCR now joins Google Document AI in supporting all processing modes: <code>image</code>, <code>pdf</code>, and <code>whole_pdf</code></li>
<li><strong>Cost-effective OCR</strong> - Purpose-built OCR endpoint optimized for document processing with competitive pricing</li>
<li><strong>Markdown-formatted output</strong> - Returns well-structured markdown text that preserves document formatting and layout</li>
<li><strong>Large document support</strong> - Handles files up to 50MB and 1,000 pages efficiently</li>
<li>Set <code>OCR_PROVIDER: "mistral_ocr"</code> and configure your Mistral API key to get started</li>
</ul>
<h4>๐ท๏ธ Enhanced Title Generation with Context</h4>
<ul>
<li><strong>Original title context</strong> - Title generation now includes the existing document title as contextual information</li>
<li><strong>Improved relevance</strong> - Language models can use the original title to generate more accurate and contextually appropriate suggestions</li>
<li><strong>Better continuity</strong> - Maintains document naming consistency while enhancing title quality</li>
<li><strong>Smart fallbacks</strong> - Handles cases where original titles are missing or incomplete</li>
</ul>
<h3>Improvements & Refinements</h3>
<h4>๐ก๏ธ Configuration Validation</h4>
<ul>
<li><strong>OCR provider compatibility checks</strong> - Prevents invalid combinations of OCR providers and processing modes</li>
<li><strong>Clear error messages</strong> - Detailed feedback when unsupported mode combinations are detected</li>
<li><strong>Startup validation</strong> - Early detection of configuration issues before processing begins</li>
<li><strong>Provider-specific guidance</strong> - Helpful error messages explain which modes are supported by each provider</li>
</ul>
<h4>๐ Enhanced PDF Processing Architecture</h4>
<ul>
<li><strong>Hybrid file naming</strong> - Improved PDF splitting with standardized naming conventions that maintain backward compatibility</li>
<li><strong>More provider choice</strong> - Users can now choose between Google Document AI and Mistral OCR for advanced PDF processing</li>
<li><strong>Consistent behavior</strong> - Both advanced providers support <code>pdf</code> and <code>whole_pdf</code> modes with similar performance characteristics</li>
</ul>
<h4>๐งช Comprehensive E2E Testing</h4>
<ul>
<li><strong>Mistral OCR test suite</strong> - Full end-to-end testing of Mistral OCR integration with real PDF documents</li>
<li><strong>Processing mode validation</strong> - Tests verify <code>whole_pdf</code> mode works correctly with multi-page documents</li>
<li><strong>Performance metrics</strong> - Test output includes detailed comparison of original vs. enhanced OCR content</li>
<li><strong>Cross-provider compatibility</strong> - Tests ensure consistent behavior across different OCR providers</li>
</ul>
<h3>Documentation Updates</h3>
<h4>๐ OCR Provider Comparison</h4>
<ul>
<li><strong>Updated provider documentation</strong> - Clear explanation of which providers support which processing modes</li>
<li><strong>Mode compatibility matrix</strong> - Easy reference for choosing the right provider and mode combination</li>
<li><strong>Mistral-specific guidance</strong> - Detailed setup instructions and best practices for Mistral OCR</li>
<li><strong>Configuration examples</strong> - Complete docker-compose examples for all supported configurations</li>
</ul>
<h2>Technical Details</h2>
<h3>Provider Mode Support Matrix</h3>
<table>
<thead>
<tr>
<th>Provider</th>
<th>image</th>
<th>pdf</th>
<th>whole_pdf</th>
</tr>
</thead>
<tbody>
<tr>
<td>LLM (OpenAI/Ollama)</td>
<td>โ </td>
<td>โ</td>
<td>โ</td>
</tr>
<tr>
<td>Azure Document Intelligence</td>
<td>โ </td>
<td>โ</td>
<td>โ</td>
</tr>
<tr>
<td>Google Document AI</td>
<td>โ </td>
<td>โ </td>
<td>โ </td>
</tr>
<tr>
<td><strong>Mistral OCR</strong> (New!)</td>
<td>โ </td>
<td>โ </td>
<td>โ </td>
</tr>
<tr>
<td>Docling</td>
<td>โ </td>
<td>โ</td>
<td>โ</td>
</tr>
</tbody>
</table>
<h3>What's Changed</h3>
<ul>
<li><strong>feat: Add Mistral OCR provider with advanced PDF processing support</strong> - Extends <code>pdf</code> and <code>whole_pdf</code> mode support to a second provider</li>
<li><strong>feat: Add OCR provider and processing mode validation</strong> - Prevents misconfigurations and provides helpful error messages</li>
<li><strong>feat: Pass original document title to title generation prompt</strong> - Improves context and relevance of AI-generated titles <a href="https://github.com/icereed/paperless-gpt/issues/453" data-hovercard-type="issue" data-hovercard-url="/icereed/paperless-gpt/issues/453/hovercard">#453</a></li>
<li><strong>feat: Implement hybrid PDF naming strategy</strong> - Improved file naming with backward compatibility</li>
<li><strong>test: Add comprehensive Mistral OCR E2E tests</strong> - Full test coverage including diff comparison utilities</li>
<li><strong>docs: Update OCR processing modes documentation</strong> - Clear provider compatibility information</li>
</ul>
<h3>Configuration Example</h3>
<div class="highlight highlight-source-yaml notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="environment:
# Mistral OCR (new advanced PDF support)
OCR_PROVIDER: "mistral_ocr"
MISTRAL_API_KEY: "your_mistral_api_key"
MISTRAL_MODEL: "mistral-ocr-latest" # Optional
OCR_PROCESS_MODE: "whole_pdf" # Now supported!"><pre><span class="pl-ent">environment</span>:
<span class="pl-c"><span class="pl-c">#</span> Mistral OCR (new advanced PDF support)</span>
<span class="pl-ent">OCR_PROVIDER</span>: <span class="pl-s"><span class="pl-pds">"</span>mistral_ocr<span class="pl-pds">"</span></span>
<span class="pl-ent">MISTRAL_API_KEY</span>: <span class="pl-s"><span class="pl-pds">"</span>your_mistral_api_key<span class="pl-pds">"</span></span>
<span class="pl-ent">MISTRAL_MODEL</span>: <span class="pl-s"><span class="pl-pds">"</span>mistral-ocr-latest<span class="pl-pds">"</span></span> <span class="pl-c"><span class="pl-c">#</span> Optional</span>
<span class="pl-ent">OCR_PROCESS_MODE</span>: <span class="pl-s"><span class="pl-pds">"</span>whole_pdf<span class="pl-pds">"</span></span> <span class="pl-c"><span class="pl-c">#</span> Now supported!</span></pre></div>
<h3>Migration Notes</h3>
<ul>
<li><strong>No breaking changes</strong> - Existing configurations continue to work as expected</li>
<li><strong>More provider choice</strong> - Users now have two options for advanced PDF processing (<code>pdf</code> and <code>whole_pdf</code> modes)</li>
</ul>
<h3>Performance Benefits</h3>
<ul>
<li><strong>Provider flexibility</strong> - Choose between Google Document AI and Mistral OCR based on your needs and pricing preferences</li>
<li><strong>Reduced API calls</strong> - <code>whole_pdf</code> mode processes entire documents in one request (now available with both advanced providers)</li>
<li><strong>Better accuracy</strong> - Direct PDF processing maintains document structure and formatting</li>
<li><strong>Smarter title generation</strong> - Original title context leads to more relevant AI suggestions</li>
</ul>
<h2>PRs</h2>
<ul>
<li>fix(deps): update module github.com/pdfcpu/pdfcpu to v0.11.0 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3097987991" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/434" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/434/hovercard" href="https://github.com/icereed/paperless-gpt/pull/434">#434</a></li>
<li>fix: mislabeled data types in azure types by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/moarsmokes/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/moarsmokes">@moarsmokes</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3107944714" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/455" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/455/hovercard" href="https://github.com/icereed/paperless-gpt/pull/455">#455</a></li>
<li>chore(deps): update react monorepo to v19.1.7 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3093712191" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/429" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/429/hovercard" href="https://github.com/icereed/paperless-gpt/pull/429">#429</a></li>
<li>chore(deps): update dependency @vitejs/plugin-react-swc to v3.10.2 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/renovate/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/renovate">@renovate</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3084936409" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/424" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/424/hovercard" href="https://github.com/icereed/paperless-gpt/pull/424">#424</a></li>
<li>Enhance title suggestions with original title by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/icereed/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/icereed">@icereed</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3159191882" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/466" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/466/hovercard" href="https://github.com/icereed/paperless-gpt/pull/466">#466</a></li>
<li>[mistral-ocr] Add MIME type detection, structured logging, and improvโฆ by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/icereed/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/icereed">@icereed</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3159234442" data-permission-text="Title is private" data-url="https://github.com/icereed/paperless-gpt/issues/468" data-hovercard-type="pull_request" data-hovercard-url="/icereed/paperless-gpt/pull/468/hovercard" href="https://github.com/icereed/paperless-gpt/pull/468">#468</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/icereed/paperless-gpt/compare/v0.20.0...v0.21.0"><tt>v0.20.0...v0.21.0</tt></a></p>icereed