From e4d5f603d8c3cb85e59426cdd13bd0b6c7d7aa1b Mon Sep 17 00:00:00 2001 From: Holden Date: Fri, 12 Jun 2026 02:13:29 +0000 Subject: [PATCH] docs: remove TrueNAS references, make volume paths platform agnostic - compose.yml: generic /path/to/winnow/... placeholder paths - docs/setup.md: replace TrueNAS section with generic GPU passthrough guide - docs/faq.md: remove platform-specific path example - README.md: soften crop quality disclaimer, remove TrueNAS compose note - CHANGELOG.md: scrub TrueNAS mentions from release notes Co-Authored-By: Claude Sonnet 4.6 --- CHANGELOG.md | 6 +++--- README.md | 8 ++++---- compose.yml | 8 ++++---- docs/faq.md | 2 +- docs/setup.md | 25 ++++++++++++++++--------- 5 files changed, 28 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a98526e..d0c0092 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,14 +29,14 @@ First release of winnow. Forked from [if-curator](https://github.com/ds-sebastia **Docker and scheduling** - `Dockerfile` — multi-stage build (CUDA 12.9 on amd64, plain Ubuntu on arm64); runtime stage excludes build tools (g++, python3.12-dev, curl, gnupg) -- `compose.yml` — fully annotated with inline comments grouped by concern; TrueNAS volume paths in the example +- `compose.yml` — fully annotated with inline comments grouped by concern - `entrypoint.sh` — runs the tool once on startup, then hands off to the scheduler if `CRON_SCHEDULE` is set - `scheduler.py` — in-process cron scheduler that keeps the container (and loaded models) alive between runs - `CRON_SCHEDULE` env var — standard cron expression for recurring runs; unset exits after first run - `.dockerignore` — keeps `.venv`, `__pycache__`, test files, and logs out of the image context - Multi-arch image: `linux/amd64` and `linux/arm64` built and merged into a single manifest on GHCR - `tini` as PID 1 init process for correct signal handling -- Non-root container user (`appuser`, uid 568) matching TrueNAS default app UID +- Non-root container user (`appuser`, uid 568) - `HEALTHCHECK` in Dockerfile **Object mode** @@ -81,7 +81,7 @@ First release of winnow. Forked from [if-curator](https://github.com/ds-sebastia - 24 unit tests across four modules: `test_config`, `test_immich_api`, `test_jobs`, `test_upload_tracker` **Documentation** -- `docs/setup.md` — step-by-step install guide with TrueNAS and bare-Docker sections +- `docs/setup.md` — step-by-step install and GPU passthrough guide - `docs/troubleshooting.md` — common failure modes with fixes - `docs/faq.md` — answers to questions new users will ask - `.env.example` — copy-paste starting point with every env var and inline comments diff --git a/README.md b/README.md index f073ac2..b484824 100644 --- a/README.md +++ b/README.md @@ -69,11 +69,11 @@ Uploaded asset IDs are recorded so the same image is never uploaded twice, even --- -## Early Stage Software +## Note on Crop Quality -winnow is functional but early. The quality filtering catches most bad crops, but some will slip through — blurry frames, partial faces, someone walking through the background. After a run you should review what was uploaded in Frigate's face management UI and manually delete anything that doesn't belong. A few bad training images won't break recognition, but a lot of them will hurt it. +winnow works well, but no automated pipeline is perfect. Occasionally a bad crop will slip through quality filtering — a partial face, someone in the background, a blurry frame. After a run it's worth a quick review in Frigate's face management UI to remove anything that doesn't belong. -Bug reports and feedback are welcome via [GitHub Issues](https://github.com/sudolulo/winnow/issues). +Issues and feedback welcome via [GitHub Issues](https://github.com/sudolulo/winnow/issues). --- @@ -135,7 +135,7 @@ services: capabilities: [gpu] ``` -See [compose.yml](compose.yml) for the full annotated example including TrueNAS volume paths. +See [compose.yml](compose.yml) for the full annotated example. ### Scheduling Behaviour diff --git a/compose.yml b/compose.yml index efec92a..36fa757 100644 --- a/compose.yml +++ b/compose.yml @@ -52,10 +52,10 @@ services: # - CRON_SCHEDULE=0 3 1 * * # - CRON_SCHEDULE=*/30 * * * * volumes: - # Replace with your TrueNAS pool name, e.g. /mnt/tank/winnow/... - - /mnt//winnow/models:/models - - /mnt//winnow/embeddings:/app/.if_cache - - /mnt//winnow/output:/app/frigate_train + # Replace with absolute paths on your host, e.g. /opt/winnow/models + - /path/to/winnow/models:/models + - /path/to/winnow/cache:/app/.if_cache + - /path/to/winnow/output:/app/frigate_train stdin_open: true tty: true restart: unless-stopped diff --git a/docs/faq.md b/docs/faq.md index bd1d4af..03dc205 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -49,7 +49,7 @@ ARM builds (linux/arm64) use CPU-only — CUDA is not available on ARM. ## Does it work on Unraid / Proxmox / bare Docker? -Yes — the `compose.yml` uses standard Docker volume mounts. The TrueNAS paths in the example (`/mnt//...`) are just an example; replace them with whatever paths suit your setup. +Yes — the `compose.yml` uses standard Docker volume mounts. Replace the example paths with whatever absolute paths suit your setup. --- diff --git a/docs/setup.md b/docs/setup.md index 80316ca..c0dc64c 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -40,7 +40,16 @@ API_KEY=your-immich-api-key FRIGATE_URL=http://192.168.1.10:5000 ``` -Edit the volume paths in `compose.yml` to match your storage layout (replace `/mnt/` with your actual path). +Edit the volume paths in `compose.yml` to point to directories on your host where models, cache, and output crops should be stored: + +```yaml +volumes: + - /your/path/to/models:/models + - /your/path/to/cache:/app/.if_cache + - /your/path/to/output:/app/frigate_train +``` + +These directories will be created automatically by Docker if they don't exist. Start it: @@ -74,15 +83,13 @@ Without `CRON_SCHEDULE`, the container runs once and exits. --- -## TrueNAS Scale +## GPU passthrough -The included `compose.yml` uses TrueNAS-style volume paths. Replace `` with your pool name: +To enable GPU acceleration, include the `deploy` block in `compose.yml` (already present in the example) and ensure the NVIDIA container toolkit is installed on your host: -```yaml -volumes: - - /mnt/tank/winnow/models:/models - - /mnt/tank/winnow/embeddings:/app/.if_cache - - /mnt/tank/winnow/output:/app/frigate_train +```bash +# Verify GPU is accessible to Docker +docker run --rm --gpus all nvidia/cuda:12.9.2-base-ubuntu22.04 nvidia-smi ``` -GPU passthrough on TrueNAS requires the NVIDIA app to be installed from the TrueNAS catalog and the `deploy.resources.reservations.devices` block in `compose.yml` (already included). +CPU mode works without any GPU setup — set `FORCE_CPU=true` to disable GPU explicitly.