- 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>
96 lines
2.4 KiB
Markdown
96 lines
2.4 KiB
Markdown
# Setup Guide
|
||
|
||
## Prerequisites
|
||
|
||
- [Immich](https://immich.app) v1.106+ with face recognition enabled and people tagged
|
||
- [Frigate](https://frigate.video) v0.16+ (face mode only)
|
||
- Docker with the NVIDIA container toolkit (optional but strongly recommended)
|
||
|
||
---
|
||
|
||
## 1. Get your Immich API key
|
||
|
||
1. Open Immich → **Account Settings** → **API Keys**
|
||
2. Click **New API Key**, give it a name (e.g. `winnow`), copy the key
|
||
|
||
---
|
||
|
||
## 2. Get your Frigate URL
|
||
|
||
This is the base URL of your Frigate instance, e.g. `http://192.168.1.10:5000`. Only needed for face mode — omit it entirely if you're using object mode.
|
||
|
||
---
|
||
|
||
## 3. Deploy with Docker Compose
|
||
|
||
Copy [`compose.yml`](../compose.yml) and [`.env.example`](../.env.example) to a directory on your host:
|
||
|
||
```bash
|
||
mkdir winnow && cd winnow
|
||
curl -O https://raw.githubusercontent.com/sudolulo/winnow/main/compose.yml
|
||
curl -O https://raw.githubusercontent.com/sudolulo/winnow/main/.env.example
|
||
cp .env.example .env
|
||
```
|
||
|
||
Edit `.env` with your values:
|
||
|
||
```bash
|
||
IMMICH_URL=http://192.168.1.10:2283
|
||
API_KEY=your-immich-api-key
|
||
FRIGATE_URL=http://192.168.1.10:5000
|
||
```
|
||
|
||
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:
|
||
|
||
```bash
|
||
docker compose up -d
|
||
```
|
||
|
||
Logs:
|
||
|
||
```bash
|
||
docker compose logs -f winnow
|
||
```
|
||
|
||
---
|
||
|
||
## 4. First run
|
||
|
||
On the first run, winnow downloads the embedding models (~1–2 GB) from HuggingFace and InsightFace. This happens once — subsequent runs use the cached models from your mounted volume and start immediately.
|
||
|
||
---
|
||
|
||
## 5. Scheduling
|
||
|
||
Set `CRON_SCHEDULE` in your `.env` to keep winnow running on a schedule:
|
||
|
||
```
|
||
CRON_SCHEDULE=0 3 * * 0 # Every Sunday at 3 AM
|
||
```
|
||
|
||
Without `CRON_SCHEDULE`, the container runs once and exits.
|
||
|
||
---
|
||
|
||
## GPU passthrough
|
||
|
||
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:
|
||
|
||
```bash
|
||
# Verify GPU is accessible to Docker
|
||
docker run --rm --gpus all nvidia/cuda:12.9.2-base-ubuntu22.04 nvidia-smi
|
||
```
|
||
|
||
CPU mode works without any GPU setup — set `FORCE_CPU=true` to disable GPU explicitly.
|