d5f29f7056
Better region PROPOSERS feeding the existing crop→SigLIP→max-over-bag heads (no change to the learned-tagging approach; no per-tag cost — propose once, embed each region, all heads in one matmul). - detectors.py: lazy ultralytics YOLO wrapper, each proposer independently optional + guarded (a bad weight spec / inference error self-disables that one, logged, never breaks the worker). Weights resolve from an ultralytics name | http(s) URL | "hf_repo::file", cached under HF_HOME. NMS merge so a figure two detectors both find collapses to one crop. - worker: figure boxes = imgutils detect_person ∪ general COCO person (merged) → CCIP + concept (anime + Western/realistic coverage); booru_yolo anatomy components (head/cat-head/anatomy/…) → concept crops; comic panels → kind= 'panel' concept crops. Capped per frame (MAX_COMPONENTS/MAX_PANELS). - config + compose: PERSON_WEIGHTS (default yolo11n.pt, works OOB), ANATOMY_WEIGHTS + PANEL_WEIGHTS (operator sets booru_yolo URL + mosesb panel hf::file; empty = off). ultralytics added to requirements. - backend: image_region 'kind' doc notes 'panel'; no migration (free String, and the bag scorer keys on a non-null siglip_embedding, not the kind, so any SigLIP region joins the bag automatically). Agent is outside CI — py-compiled here; operator tests on the GPU and checks Western-vs-anime crop quality via /api/ccip observability. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ttrj5P7upUTueSfoJcxEqa
65 lines
2.9 KiB
YAML
65 lines
2.9 KiB
YAML
# FabledCurator GPU agent — desktop run via docker compose.
|
|
#
|
|
# Usage:
|
|
# 1. Generate a token: FC → Settings → Tagging → GPU agent → Generate token.
|
|
# 2. Create a .env next to this file:
|
|
# FC_URL=http://curator.traefik.internal
|
|
# FC_TOKEN=<paste-the-token>
|
|
# # optional: CCIP_MODEL=ccip-caformer_b36-24 (the F1-0.94 variant)
|
|
# 3. docker compose up -d (pulls the published image)
|
|
# 4. Open http://localhost:8770 → Start. Pause/Stop hands the GPU back.
|
|
# docker compose down to stop the container entirely.
|
|
#
|
|
# Surviving a curator redeploy (you're away, can't touch the agent):
|
|
# - A running agent rides out curator being unreachable on its own — it retries
|
|
# leasing with capped backoff and resumes when the server is back. In-flight
|
|
# work is handed back (not failed), so a redeploy never poisons good jobs.
|
|
# - AUTO_START=1 (below) also resumes the worker if the AGENT container itself
|
|
# restarts (host reboot / crash via `restart: unless-stopped`) — no click.
|
|
#
|
|
# Needs the NVIDIA Container Toolkit installed on the host for --gpus.
|
|
|
|
services:
|
|
fc-gpu-agent:
|
|
image: git.fabledsword.com/bvandeusen/fabledcurator-agent:latest
|
|
pull_policy: always
|
|
ports:
|
|
- "8770:8770"
|
|
environment:
|
|
FC_URL: ${FC_URL:-http://curator.traefik.internal}
|
|
FC_TOKEN: ${FC_TOKEN:?set FC_TOKEN in .env (FC → GPU agent → Generate token)}
|
|
CCIP_MODEL: ${CCIP_MODEL:-}
|
|
DETECTOR_LEVEL: ${DETECTOR_LEVEL:-m}
|
|
BATCH_SIZE: ${BATCH_SIZE:-4}
|
|
# Resume the worker automatically on container start (survive a reboot /
|
|
# crash-restart while you're away). Set to 0 to require a manual Start.
|
|
AUTO_START: ${AUTO_START:-1}
|
|
# Crop embedder (SigLIP concept bag): float16 keeps VRAM low on a shared
|
|
# desktop GPU; the model itself is announced by the server.
|
|
SIGLIP_DTYPE: ${SIGLIP_DTYPE:-float16}
|
|
# Crop PROPOSERS (extra YOLO detectors → more/better concept crops).
|
|
# PERSON_WEIGHTS: general COCO person detector (Western/realistic figures),
|
|
# merged with the anime person detector. Default works out of the box.
|
|
# ANATOMY_WEIGHTS: booru_yolo (anime/furry/NSFW components). Set to the
|
|
# weights URL, e.g. the yolov11m_aa22.pt from github.com/aperveyev/booru_yolo.
|
|
# PANEL_WEIGHTS: comic-panel detector as "hf_repo::file",
|
|
# e.g. mosesb/best-comic-panel-detection::<weights>.pt
|
|
# Empty = that proposer is off. Each self-disables if its weights fail to load.
|
|
PERSON_WEIGHTS: ${PERSON_WEIGHTS:-yolo11n.pt}
|
|
ANATOMY_WEIGHTS: ${ANATOMY_WEIGHTS:-}
|
|
PANEL_WEIGHTS: ${PANEL_WEIGHTS:-}
|
|
volumes:
|
|
# Persist the downloaded ONNX models so restarts are fast.
|
|
- fc-agent-models:/models
|
|
restart: unless-stopped
|
|
deploy:
|
|
resources:
|
|
reservations:
|
|
devices:
|
|
- driver: nvidia
|
|
count: all
|
|
capabilities: [gpu]
|
|
|
|
volumes:
|
|
fc-agent-models:
|