* revert: replace SQLite tracker with JSON backend (v0.6.0) The SQLite migration (v0.5.0) spawned 21 bug-fix releases in two days: data-loss risk in the migration layer, schema PK conflicts on per-person tracking, tracker isolation races under concurrent runs, and a disk-full error that triggered duplicate Frigate uploads. The complexity cost outweighs the benefit. Restored the pre-SQL JSON tracker (frigate_uploaded_ids.json / frigate_rejected_ids.json in DATA_DIR). Public API is identical — all callers in executor.py, jobs.py, cli.py, and reconcile.py work unchanged. Existing JSON files are read automatically; frigate_tracker.db can be deleted once verified. * fix: narrow corrupt-thumbnail exception to UnidentifiedImageError; restore IMMICH_URL empty-string fallback * docs: rewrite v0.6.0 changelog, strip v0.5.x entries, fix README SQLite references * chore: remove dead get_frigate_filename_for_asset (orphaned since FRIGATE_SCORE_THRESHOLD removal in v0.4.0) * fix: sort imports in executor.py (ruff I001)
103 lines
2.8 KiB
TOML
103 lines
2.8 KiB
TOML
[project]
|
|
name = "winnow"
|
|
version = "0.6.0"
|
|
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"
|