Skip to content
Holden Salomon edited this page Jun 13, 2026 · 7 revisions

FAQ

Does winnow modify my Immich library?

No. winnow only reads from Immich (assets, people, face bounding boxes). It never writes back to Immich or deletes anything.


How many images should I upload to Frigate?

The auto strategy decides this for you — it keeps selecting until adding more images would be redundant. In practice this is usually 20–60 per person. You can cap it with MAX_AUTO_IMAGES (default 80).

When winnow reaches the cap on subsequent runs, QUALITY_REPLACEMENT=true (default) lets it swap out the lowest-scoring existing image if a better candidate is found — so the training set improves over time rather than stalling. Only images winnow uploaded are ever replaced; anything added manually through Frigate's UI is never touched.

Quality and diversity matter far more than volume. 30 well-spread images outperform 200 from the same week.


What's the difference between face mode and object mode?

  • Face mode: Extracts and aligns face crops, uploads them directly to Frigate's face training API. This is for teaching Frigate to recognize specific people.
  • Object mode: Runs YOLO detection on full images and saves crops of a target class (dog, cat, car, etc.) to disk. Frigate has no API for object training data, so you place them manually.

Can I run it without Frigate?

Yes — in object mode, FRIGATE_URL is not used and crops are saved to the output volume. In face mode you need Frigate to receive the uploads, but you can use DRY_RUN=true to preview selection without uploading.


How does auto-diversity mode work?

winnow computes a vector embedding for each candidate image (what the face/object actually looks like — angle, lighting, expression). It then clusters those embeddings and picks representatives that are maximally spread across the embedding space. It stops when the next-most-different image is already close to something already selected. See the README pipeline for the full breakdown.


Does it support multiple people in one run?

Yes. By default it processes every named person in your Immich library. Use ONLY_PEOPLE to whitelist specific names or SKIP_PEOPLE to exclude them.


What GPU is needed?

Any NVIDIA GPU with CUDA 12.x support works with :latest. AMD ROCm GPUs work with :rocm. Intel Arc and integrated GPUs work with :intel. The models (InsightFace Buffalo_L + SigLIP) fit comfortably in 4 GB VRAM.

CPU mode works but is significantly slower — typically tens of seconds per person instead of under a second on GPU.

CPU memory: Set a container memory limit of at least 2 GB (mem_limit: 2g). The models use roughly 1–1.5 GB and thumbnails are processed in bounded batches of 32, so usage stays flat regardless of library size.

ARM builds (linux/arm64) are CPU-only — GPU variants are amd64 only.


Does it work on Unraid / Proxmox / bare Docker?

Yes — the compose.yml uses standard Docker volume mounts. Replace the example paths with whatever absolute paths suit your setup.


How do I update winnow?

docker compose pull
docker compose up -d

The latest, cpu, rocm, and intel tags on GHCR always point to the latest release. Versioned tags (e.g. ghcr.io/sudolulo/winnow:v0.2.13) are also published for each release and are useful for pinning to a known-good version.

Clone this wiki locally