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 <noreply@anthropic.com>
This commit is contained in:
+3
-3
@@ -29,14 +29,14 @@ First release of winnow. Forked from [if-curator](https://github.com/ds-sebastia
|
|||||||
|
|
||||||
**Docker and scheduling**
|
**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)
|
- `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
|
- `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
|
- `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
|
- `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
|
- `.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
|
- 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
|
- `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
|
- `HEALTHCHECK` in Dockerfile
|
||||||
|
|
||||||
**Object mode**
|
**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`
|
- 24 unit tests across four modules: `test_config`, `test_immich_api`, `test_jobs`, `test_upload_tracker`
|
||||||
|
|
||||||
**Documentation**
|
**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/troubleshooting.md` — common failure modes with fixes
|
||||||
- `docs/faq.md` — answers to questions new users will ask
|
- `docs/faq.md` — answers to questions new users will ask
|
||||||
- `.env.example` — copy-paste starting point with every env var and inline comments
|
- `.env.example` — copy-paste starting point with every env var and inline comments
|
||||||
|
|||||||
@@ -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]
|
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
|
### Scheduling Behaviour
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -52,10 +52,10 @@ services:
|
|||||||
# - CRON_SCHEDULE=0 3 1 * *
|
# - CRON_SCHEDULE=0 3 1 * *
|
||||||
# - CRON_SCHEDULE=*/30 * * * *
|
# - CRON_SCHEDULE=*/30 * * * *
|
||||||
volumes:
|
volumes:
|
||||||
# Replace <pool> with your TrueNAS pool name, e.g. /mnt/tank/winnow/...
|
# Replace with absolute paths on your host, e.g. /opt/winnow/models
|
||||||
- /mnt/<pool>/winnow/models:/models
|
- /path/to/winnow/models:/models
|
||||||
- /mnt/<pool>/winnow/embeddings:/app/.if_cache
|
- /path/to/winnow/cache:/app/.if_cache
|
||||||
- /mnt/<pool>/winnow/output:/app/frigate_train
|
- /path/to/winnow/output:/app/frigate_train
|
||||||
stdin_open: true
|
stdin_open: true
|
||||||
tty: true
|
tty: true
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|||||||
+1
-1
@@ -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?
|
## Does it work on Unraid / Proxmox / bare Docker?
|
||||||
|
|
||||||
Yes — the `compose.yml` uses standard Docker volume mounts. The TrueNAS paths in the example (`/mnt/<pool>/...`) 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.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
+16
-9
@@ -40,7 +40,16 @@ API_KEY=your-immich-api-key
|
|||||||
FRIGATE_URL=http://192.168.1.10:5000
|
FRIGATE_URL=http://192.168.1.10:5000
|
||||||
```
|
```
|
||||||
|
|
||||||
Edit the volume paths in `compose.yml` to match your storage layout (replace `/mnt/<pool>` 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:
|
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 `<pool>` 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
|
```bash
|
||||||
volumes:
|
# Verify GPU is accessible to Docker
|
||||||
- /mnt/tank/winnow/models:/models
|
docker run --rm --gpus all nvidia/cuda:12.9.2-base-ubuntu22.04 nvidia-smi
|
||||||
- /mnt/tank/winnow/embeddings:/app/.if_cache
|
|
||||||
- /mnt/tank/winnow/output:/app/frigate_train
|
|
||||||
```
|
```
|
||||||
|
|
||||||
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.
|
||||||
|
|||||||
Reference in New Issue
Block a user