Highlights
-
Multimodal chat input: paste or drag images into the chat composer to ask
about your library together with a picture. Images ride the current turn
only (never re-sent in history, so token cost stays flat) and render in the
transcript.MARGINALIA_CHAT_VISION(auto|on|off, default auto) probes the
chat model once per model and, for a text-only model, routes images through
thevisionprofile as an injected description — automating the manual
"describe the image first" workaround. Per-turn caps via
MARGINALIA_CHAT_IMAGE_MAX_COUNT/MARGINALIA_CHAT_IMAGE_MAX_BYTES. Pasted
images are persisted per turn and re-displayed as thumbnails when a session's
transcript is reloaded (UI only — still never re-sent to the model). -
POST /v1/settings/llm/testprobes each configured LLM profile with a tiny
chat call (bounded by a timeout) so a mistyped key/base-URL/model is caught
at config time; a "Test connection" button surfaces per-profile status. A
settings PUT that first makes required profiles valid now auto-reprocesses
ingests that failed before a key existed. -
OCR_MAX_PAGES(default 300) caps scanned-PDF OCR and records an
ocr_page_cappartial-coverage reason when it trips. -
Transient provider failures (rate limits, 5xx/529 overload, timeouts) are
retried with bounded exponential backoff honoringRetry-After, so a brief
overload no longer discards a whole agent turn's accumulated tool work. -
CPU-bound document parsing (PDF/DOCX/PPTX/spreadsheet) runs off the event
loop, keeping the API responsive and worker heartbeats alive during large
ingests. -
GUI search tokenizes multi-word queries and ranks results instead of
matching one contiguous phrase; the per-hit related-entries walk is limited
to the top hits so latency no longer scales with match count. -
Release artifacts (Docker image, desktop sidecar) install from the locked
requirements exported fromuv.lock, so shipped versions match what CI
tested; CI gained auv.lockdrift gate and a Docker build check. -
Selective WebDAV publish no longer leaks the full folder/tag taxonomy or any
sessions/conversations/journals — only the taxonomy and relations reachable
from the selected entries ride along. -
Agent per-call token budgets are sized for reasoning models (plan 2048,
execute 4096, vision-describe 4096), which spend most of their output budget
on hidden reasoning before any visible text — the old smaller caps were
consumed by reasoning and truncated the plan/answer/image description to
empty ("can't read the image" even when the model and image were fine). -
The LLM test-connection probe treats a rate-limit (429) as reachable and no
longer retry-storms it into a false timeout when several profiles share one
provider account.
Artifacts
Desktop bundles built from v0.3.3.
Desktop targets: Windows x64/arm64, macOS x64/arm64, Linux x64/arm64.
Linux targets include .deb, .rpm, and AppImage assets built on Ubuntu 22.04 runners.
Each bundle ships a self-contained Python runtime; no system Python required.
Docker image: ghcr.io/shenmintao/marginalia:v0.3.3 (linux/amd64, linux/arm64)
First-Launch Notes For Unsigned Binaries
- Windows: SmartScreen may say "Windows protected your PC". Click "More info" and then "Run anyway".
- macOS: Gatekeeper may refuse to open the .dmg. Run
xattr -dr com.apple.quarantine /Applications/Marginalia.appafter dragging it across.