Every moving part of FabledCurator: whether it is still checking in, and — for the worker lanes — how much work it is allowed to take at once. Parts are learned as they appear, so anything that has run at least once stays listed. That is what lets a stopped one be noticed rather than simply vanishing.
Waiting and worker counts were measured {{ formatRelative(measured) }}, and are re-read every {{ Math.round(sweepSeconds) }}s. Waiting and worker counts have not been measured yet — the first reading lands within a minute of startup.
Max workers is the only thing you set. How many workers a lane is actually running at any moment is decided for you — it grows to meet a backlog and gives the workers back when the queue empties, so an idle instance settles down to one of each without being told to. The cap is the ceiling on that, never a target, so raising it costs nothing until there is work to spend it on.
A cap of zero turns the lane off. It keeps one parked process and stops taking work, so it stays listed here rather than looking like a crash. Three of the four lanes need to be running for FabledCurator to work at all; ML tagging is the one that is genuinely optional, and it ships at zero because switching it on downloads a model. Up to N beneath each dial is what this machine can hold — processor cores for every lane, and for ML tagging whichever runs out first, its cores or its memory. It is recalculated from the container's real limits every time this page loads.
The shipped caps are one of each, which is right for a first boot and wrong for a busy library. A lane that is running everything its cap allows while work piles up will say so in its row, and raising that cap is the answer when it does.
A part is called stale after {{ Math.round(store.thresholds.stale_after_seconds / 60) }} min without a check-in and treated as stopped after {{ Math.round(store.thresholds.down_after_seconds / 60) }} min. The window is deliberately wide: a rolling deploy briefly runs two of a service and then neither, and an indicator that reddened on every update would stop being read.
It computes image embeddings on the CPU — what similarity search, duplicate grouping and tag suggestions are built on. You only need it if you are not running the GPU agent, which does the same work faster.
Raising its cap above zero downloads, once:
{{ m.repo }} —
{{ approx(m.measured) }}{{ gb(m.download_bytes) }} to download, and
about {{ gb(m.resident_bytes) }} of RAM for
each slot while it runs.
Each worker loads its own copy and asks for several processor cores while it runs, which is why this machine allows it at most {{ lane.ceiling }}. It has too little memory to run this at all.