Previously reset_person wiped the local tracker but left existing Frigate training files as orphans, causing the next run to upload a full new batch on top of them. Now deletes all winnow-managed files from Frigate first so the next run starts truly clean. Manually-added Frigate files are never touched. Also fixes a spurious warning when FRIGATE_URL is unset: the deletion step is now skipped at info level rather than logging a misleading error. Moves the deferred import to top-level and eliminates a double disk read. Bumps to 0.4.1. Also fixes ruff lint violations in executor.py (import sort, line length) and promotes the "winnow only touches files it uploaded" callout to the README intro. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
121 lines
3.4 KiB
TOML
121 lines
3.4 KiB
TOML
[project]
|
|
name = "winnow"
|
|
version = "0.4.1"
|
|
description = "Selects diverse, high-quality photos from Immich as training data for Frigate face recognition and object classification."
|
|
license = "AGPL-3.0-or-later"
|
|
requires-python = ">=3.13"
|
|
authors = [{ name = "Holden Salomon", email = "holden@arch.fyi" }]
|
|
keywords = ["immich", "frigate", "face-recognition", "training-data", "arcface", "insightface"]
|
|
classifiers = [
|
|
"Development Status :: 3 - Alpha",
|
|
"Intended Audience :: Developers",
|
|
"Intended Audience :: System Administrators",
|
|
"License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)",
|
|
"Programming Language :: Python :: 3.13",
|
|
"Topic :: Scientific/Engineering :: Image Recognition",
|
|
]
|
|
dependencies = [
|
|
"croniter>=5.0.2",
|
|
"insightface>=0.7.3",
|
|
"nvidia-cudnn-cu12>=9.0.0",
|
|
"numpy>=2.2.6",
|
|
"onnxruntime-gpu>=1.23.2; sys_platform == 'linux' and platform_machine == 'x86_64'",
|
|
"onnxruntime>=1.23.2; sys_platform == 'linux' and platform_machine != 'x86_64'",
|
|
"onnxruntime>=1.23.2; sys_platform != 'linux'",
|
|
"opencv-python-headless>=4.12.0.88",
|
|
"pillow>=12.1.0",
|
|
"python-dotenv>=1.2.1",
|
|
"requests>=2.32.5",
|
|
"rich>=14.2.0",
|
|
"torch>=2.12.0",
|
|
"torchvision>=0.27.0",
|
|
"transformers>=5.12.0",
|
|
"ultralytics>=8.4.66",
|
|
]
|
|
|
|
[project.scripts]
|
|
winnow = "winnow.cli:main"
|
|
|
|
[project.urls]
|
|
Repository = "https://github.com/sudolulo/winnow"
|
|
Changelog = "https://github.com/sudolulo/winnow/blob/main/CHANGELOG.md"
|
|
Documentation = "https://github.com/sudolulo/winnow/wiki"
|
|
|
|
[tool.uv]
|
|
conflicts = [
|
|
[
|
|
{ package = "onnxruntime" },
|
|
{ package = "onnxruntime-gpu" },
|
|
],
|
|
]
|
|
required-environments = [
|
|
"sys_platform == 'linux' and platform_machine == 'x86_64'",
|
|
"sys_platform == 'linux' and platform_machine == 'aarch64'",
|
|
]
|
|
|
|
[tool.uv.sources]
|
|
torch = [
|
|
{ index = "pytorch-cu126", marker = "sys_platform == 'linux' and platform_machine == 'x86_64'" },
|
|
{ index = "pytorch-cpu", marker = "sys_platform == 'linux' and platform_machine == 'aarch64'" },
|
|
{ index = "pytorch-cpu", marker = "sys_platform != 'linux'" },
|
|
]
|
|
torchvision = [
|
|
{ index = "pytorch-cu126", marker = "sys_platform == 'linux' and platform_machine == 'x86_64'" },
|
|
{ index = "pytorch-cpu", marker = "sys_platform == 'linux' and platform_machine == 'aarch64'" },
|
|
{ index = "pytorch-cpu", marker = "sys_platform != 'linux'" },
|
|
]
|
|
|
|
[[tool.uv.index]]
|
|
name = "pytorch-cu126"
|
|
url = "https://download.pytorch.org/whl/cu126"
|
|
explicit = true
|
|
|
|
[[tool.uv.index]]
|
|
name = "pytorch-cpu"
|
|
url = "https://download.pytorch.org/whl/cpu"
|
|
explicit = true
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"pytest>=8.0",
|
|
"ruff>=0.15.17",
|
|
]
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["winnow"]
|
|
|
|
[tool.ruff]
|
|
line-length = 120
|
|
target-version = "py313"
|
|
|
|
[tool.ruff.lint]
|
|
select = ["E", "F", "I"]
|
|
|
|
[tool.deptry]
|
|
pep621_dev_dependency_groups = ["dev"]
|
|
|
|
[tool.deptry.package_module_name_map]
|
|
pillow = "PIL"
|
|
opencv-python-headless = "cv2"
|
|
python-dotenv = "dotenv"
|
|
insightface = "insightface"
|
|
numpy = "numpy"
|
|
nvidia-cudnn-cu12 = "nvidia.cudnn"
|
|
onnxruntime-gpu = "onnxruntime"
|
|
requests = "requests"
|
|
rich = "rich"
|
|
torch = "torch"
|
|
transformers = "transformers"
|
|
ultralytics = "ultralytics"
|
|
|
|
[tool.deptry.per_rule_ignores]
|
|
DEP002 = ["onnxruntime-gpu", "nvidia-cudnn-cu12"]
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["tests"]
|
|
|
|
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|