[project] name = "refiners" dynamic = ["version"] description = "The simplest way to train and run adapters on top of foundation models" authors = [{ name = "The Finegrain Team", email = "bonjour@lagon.tech" }] license = { text = "MIT License" } dependencies = [ "torch>=2.4.1", "safetensors>=0.4.5", "pillow>=10.4.0", "jaxtyping>=0.2.23", "packaging>=23.2", "numpy>=1.26.4", ] readme = "README.md" requires-python = ">= 3.10" keywords = [ "pytorch", "text-to-image", "image-to-image", "image-generation", "diffusion-models", "stable-diffusion", "sd1.5", "sdxl", "background-generation", "background-removal", "shadow-generation", "textual-inversion", "adapters", "controlnet", "ip-adapter", "t2i-adapter", "lora", "lcm", "lcm-lora", "upscaler", "dinov2", "segment-anything", "sam", ] classifiers = [ "Typing :: Typed", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Scientific/Engineering :: Artificial Intelligence", "License :: OSI Approved :: MIT License", ] [project.urls] Homepage = "https://refine.rs/" Documentation = "https://refine.rs/" Repository = "https://github.com/finegrain-ai/refiners" Issues = "https://github.com/finegrain-ai/refiners/issues" [project.scripts] get_weights = "refiners.conversion.cli:main" [project.optional-dependencies] training = [ "bitsandbytes>=0.41.2.post2", "pydantic>=2.5.2", "prodigyopt>=1.0", "torchvision>=0.16.1", "loguru>=0.7.2", "wandb>=0.16.0", "neptune>=1.10.4", "datasets>=2.15.0", "tomli>=2.0.1", "gitpython>=3.1.43", ] test = [ "pytest-rerunfailures>=14.0", "diffusers>=0.26.1", "transformers>=4.35.2", "piq>=0.8.0", "torchvision>=0.16.1", # An unofficial Python package for Meta AI's Segment Anything Model: https://github.com/opengeos/segment-anything "segment-anything-py>=1.0", # Official Python package for HQ-SAM: https://github.com/SysCV/sam-hq "segment-anything-hq>=0.3", # HQ-SAM missing dependency: https://github.com/SysCV/sam-hq/pull/59 "timm>=0.5.0", "sentencepiece>=0.2.0", ] conversion = [ "huggingface-hub>=0.25.1", "diffusers>=0.26.1", "transformers>=4.35.2", "segment-anything-py>=1.0", "requests>=2.26.0", "tqdm>=4.62.3", ] doc = [ # required by mkdocs to format the signatures "black>=24.1.1", "mkdocs-material>=9.5.6", "mkdocstrings[python]>=0.24.0", "mkdocs-literate-nav>=0.6.1", ] solutions = [ "huggingface-hub>=0.24.6", ] [build-system] requires = ["hatchling", "hatch-vcs"] build-backend = "hatchling.build" [tool.hatch.version] source = "vcs" fallback-version = '0.0.0' [tool.rye] managed = true dev-dependencies = [ "pyright==1.1.372", "docformatter>=1.7.5", "pytest>=8.0.0", "coverage>=7.4.1", "typos>=1.18.2", "comfy-cli>=1.1.6", ] [tool.hatch.metadata] allow-direct-references = true [tool.rye.scripts] serve-docs = "mkdocs serve" test-cov = "coverage run -m pytest" # Work around for "Couldn't parse" errors due to e.g. opencv-python: https://github.com/nedbat/coveragepy/issues/1653 build-html-cov = { cmd = "coverage html", env = { PYTHONWARNINGS = "ignore:Couldn't parse::coverage.report_core" } } serve-cov-report = { chain = [ "build-html-cov", "python -m http.server 8080 -b 127.0.0.1 -d htmlcov", ] } [tool.black] line-length = 120 [tool.ruff] src = ["src"] # see https://docs.astral.sh/ruff/settings/#src line-length = 120 [tool.ruff.lint] select = [ "I", # isort ] ignore = [ "F722", # forward-annotation-syntax-error, because of Jaxtyping "E731", # do-not-assign-lambda ] [tool.ruff.lint.isort] # Allow this kind of import on a single line: # # from torch import device as Device, dtype as DType # combine-as-imports = true [tool.docformatter] black = true [tool.pyright] include = ["src/refiners", "tests"] strict = ["*"] exclude = ["**/__pycache__", "tests/weights", "tests/repos"] reportMissingTypeStubs = "warning" [tool.coverage.run] branch = true source = ["src/refiners"] # Also apply to HTML output, where appropriate [tool.coverage.report] ignore_errors = true # see `build-html-cov` for details exclude_also = [ "def __repr__", "raise NotImplementedError", "if TYPE_CHECKING:", "class .*\\bProtocol\\):", "@(abc\\.)?abstractmethod", ] [tool.typos.default] extend-ignore-identifiers-re = ["NDArray*", "interm", "af000ded", "nin"] [tool.typos.default.extend-words] adaptee = "adaptee" # Common name for an adapter's target [tool.typos.default.extend-identifiers] imaginAIry = "imaginAIry" [tool.pytest.ini_options] filterwarnings = [ "ignore::UserWarning:segment_anything_hq.modeling.tiny_vit_sam.*", "ignore::DeprecationWarning:timm.models.layers.*", "ignore::DeprecationWarning:timm.models.registry.*" ] addopts = "--import-mode=importlib"