* fix: quality replacement slot floor uses deleted file's score not failed candidate's When a blur-score replacement deletes a low-quality Frigate file but the subsequent upload fails, min_quality_score_for_slot was set to candidate_score (the good file that failed to upload). This filtered out any subsequent candidate that didn't beat the failed upload, even if it was better than the file we just deleted — leaving the freed slot unfilled unnecessarily. The comment on the guard already documented the correct intent: 'require the next candidate to beat the deleted file's score'. Fix: use target_score (the deleted file's blur score) as the floor instead of candidate_score. * chore: bump version to 0.5.4
103 lines
2.8 KiB
TOML
103 lines
2.8 KiB
TOML
[project]
|
|
name = "winnow"
|
|
version = "0.5.4"
|
|
description = "Selects diverse, high-quality photos from Immich as training data for Frigate face recognition."
|
|
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",
|
|
"numpy>=2.2.6",
|
|
"opencv-python-headless>=4.12.0.88",
|
|
"pillow>=12.1.0",
|
|
"python-dotenv>=1.2.1",
|
|
"requests>=2.32.5",
|
|
"rich>=14.2.0",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
gpu = [
|
|
"onnxruntime-gpu>=1.23.2; sys_platform == 'linux' and platform_machine == 'x86_64'",
|
|
"nvidia-cudnn-cu12>=9.0.0; sys_platform == 'linux' and platform_machine == 'x86_64'",
|
|
]
|
|
rocm = ["onnxruntime-rocm>=1.16.0; sys_platform == 'linux' and platform_machine == 'x86_64'"]
|
|
intel = ["onnxruntime-openvino>=1.20.0; sys_platform == 'linux' and platform_machine == 'x86_64'"]
|
|
cpu = ["onnxruntime>=1.23.2"]
|
|
|
|
[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]
|
|
index-strategy = "unsafe-best-match"
|
|
conflicts = [
|
|
[
|
|
{ extra = "gpu" },
|
|
{ extra = "rocm" },
|
|
{ extra = "intel" },
|
|
{ extra = "cpu" },
|
|
],
|
|
]
|
|
required-environments = [
|
|
"sys_platform == 'linux' and platform_machine == 'x86_64'",
|
|
"sys_platform == 'linux' and platform_machine == 'aarch64'",
|
|
]
|
|
|
|
|
|
[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"
|
|
onnxruntime-rocm = "onnxruntime"
|
|
onnxruntime-openvino = "onnxruntime"
|
|
onnxruntime = "onnxruntime"
|
|
requests = "requests"
|
|
rich = "rich"
|
|
|
|
[tool.deptry.per_rule_ignores]
|
|
DEP002 = ["onnxruntime-gpu", "nvidia-cudnn-cu12", "onnxruntime-rocm", "onnxruntime-openvino", "onnxruntime"]
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["tests"]
|
|
|
|
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|