-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathpyproject.toml
More file actions
143 lines (133 loc) · 4.25 KB
/
Copy pathpyproject.toml
File metadata and controls
143 lines (133 loc) · 4.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "photomapai"
version = "1.2.1"
description = "AI-based image clustering and exploration tool"
authors = [
{ name = "Lincoln Stein", email = "lincoln.stein@gmail.com" }
]
readme = { content-type = "text/markdown", file = "README.md" }
license = { text = "MIT" }
requires-python = ">=3.10, <3.15"
classifiers = [
"Development Status :: 4 - Beta",
"Intended Audience :: End Users/Desktop",
"Intended Audience :: Developers",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Topic :: Multimedia :: Graphics :: Viewers",
"Topic :: Software Development :: Libraries :: Application Frameworks",
"Topic :: Software Development :: Libraries :: Python Modules",
]
dependencies = [
"Pillow",
"clip-anytorch",
"colorama",
"dash",
"fastapi",
# Range/206 handling in Starlette's FileResponse is load-bearing for video
# seeking, and it landed in Starlette 0.39.0 — so the floor belongs on
# starlette directly. Constraining fastapi instead does not work: 0.115.0
# and 0.115.1 both pin starlette<0.39.0, so a fastapi>=0.115 floor is
# satisfied by a Starlette that ignores Range and answers 200 with the
# whole file, making <video> re-download the clip on every scrub.
# 0.49.1 additionally fixes a Range-parser advisory in this exact path.
"starlette>=0.49.1",
# Bundles a static ffmpeg binary used to extract a still frame from videos.
# Floor is 0.6.0 because that is the first release publishing a
# macosx_11_0_arm64 wheel — earlier ones ship Intel-only macOS wheels, so
# an Apple Silicon resolve falls back to the sdist, which contains no
# binary at all and fails only later, at the first video indexed.
"imageio-ffmpeg>=0.6.0",
"jinja2",
"networkx",
"numpy",
"open_clip_torch", # OpenCLIP encoder backend
"pandas",
"pillow-heif",
"platformdirs",
"pydantic",
"python-multipart",
"PyYAML",
"requests",
"scikit-learn",
"setuptools<67", # Avoid deprecation warning from CLIP dependency
"torch",
"tqdm",
"transformers", # SigLIP encoder backend
"numba>=0.57", # 0.57+ supports Python 3.12+; without this, resolver can pick numba 0.53.1 which only supports <3.10
"umap-learn",
"uvicorn",
"psutil", # Add this for process management
"packaging", # Add this for version checking
"send2trash",
]
[project.urls]
Homepage = "https://github.com/lstein/PhotoMapAI"
[project.optional-dependencies]
testing = [
"pytest",
"pytest-cov",
"httpx",
"asynctest",
"pytest-asyncio",
]
development = [
"build",
"mkdocs<1.6",
"mkdocs-material",
"pymdown-extensions",
"twine",
"ruff",
]
[tool.setuptools.packages.find]
where = ["."] # Look in the current directory (repo root)
include = ["photomap*"] # Include photomap package and subpackages
# Include package data files
[tool.setuptools.package-data]
"photomap.frontend" = ["static/**", "templates/**"]
"photomap.backend" = ["data/*.txt", "data/*.md"]
[project.scripts]
index_images = "photomap.backend.imagetool:main"
update_images = "photomap.backend.imagetool:main"
search_images = "photomap.backend.imagetool:main"
search_text = "photomap.backend.imagetool:main"
find_duplicate_images = "photomap.backend.imagetool:main"
rebuild_cluster_labels = "photomap.backend.imagetool:main"
start_photomap = "photomap.backend.launch:main"
[tool.ruff]
# Set line length to match the project's style
line-length = 120
target-version = "py310"
# Enable selected rule sets
lint.select = [
"E", # pycodestyle errors
"W", # pycodestyle warnings
"F", # pyflakes
"I", # isort (import sorting)
"UP", # pyupgrade
"B", # flake8-bugbear
]
# Ignore certain rules
lint.ignore = [
"E501", # Line too long (handled by formatter)
]
# Exclude directories
exclude = [
".git",
".github",
"__pycache__",
"build",
"dist",
"*.egg-info",
".pytest_cache",
".venv",
"venv",
]
[tool.ruff.lint.isort]
known-first-party = ["photomap"]