Files
remove-ai-watermarks/pyproject.toml
T
test-user 49b2b43f8d feat: split heavy GPU deps into optional [gpu] extra
Move torch, diffusers, transformers, accelerate, controlnet-aux,
ultralytics, and safetensors into [project.optional-dependencies.gpu].

Core install now only includes lightweight deps (~20 MB vs ~1 GB):
pillow, piexif, numpy, opencv-python-headless, click, rich.

This allows web apps using fal.ai cloud GPU to skip installing
1+ GB of ML packages, reducing Docker images from 3 GB to ~300 MB
and deploy times from 14 minutes to ~3-4 minutes.

Usage:
  pip install remove-ai-watermarks        # core only (visible + metadata)
  pip install remove-ai-watermarks[gpu]   # full local GPU support
  pip install remove-ai-watermarks[all]   # gpu + dev tools
2026-03-26 09:29:57 -07:00

77 lines
1.7 KiB
TOML

[project]
name = "remove-ai-watermarks"
version = "0.3.0"
description = "Remove visible and invisible AI watermarks from images (Gemini / Nano Banana, ChatGPT, Stable Diffusion)"
readme = "README.md"
requires-python = ">=3.10"
license = {text = "MIT"}
dependencies = [
"pillow>=10.0.0",
"piexif>=1.1.3",
"numpy>=1.24.0",
"opencv-python-headless>=4.8.0",
"click>=8.0.0",
"rich>=13.0.0",
"color-matcher",
"python-dotenv>=1.0.0",
"requests>=2.33.0",
]
[project.optional-dependencies]
gpu = [
"torch>=2.0.0",
"diffusers>=0.25.0",
"transformers>=4.35.0",
"accelerate>=0.25.0",
"controlnet-aux>=0.0.9",
"safetensors",
"ultralytics>=8.0.0",
"opencv-python>=4.8.0",
]
dev = [
"pytest>=8.0.0",
"pytest-cov>=4.1.0",
"ruff>=0.4.0",
]
all = ["remove-ai-watermarks[gpu,dev]"]
[project.scripts]
remove-ai-watermarks = "remove_ai_watermarks.cli:main"
[project.urls]
Repository = "https://github.com/wiltodelta/remove-ai-watermarks"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
packages = ["src/remove_ai_watermarks"]
[tool.pytest.ini_options]
testpaths = ["tests"]
pythonpath = ["src"]
addopts = "-v --tb=short"
[tool.ruff]
target-version = "py310"
line-length = 120
[tool.pyright]
exclude = ["tests"]
reportOptionalMemberAccess = "warning"
reportPrivateImportUsage = false
reportInvalidTypeForm = false
reportOptionalCall = false
reportMissingImports = "warning"
reportCallIssue = "warning"
reportAttributeAccessIssue = "warning"
reportArgumentType = "warning"
reportPossiblyUnboundVariable = "warning"
reportAssignmentType = "warning"
reportOperatorIssue = "warning"
[tool.ruff.lint]
select = ["E", "F", "W", "I", "N", "UP"]
ignore = ["E501"]