[project] name = "splasher" version = "0.1.0" description = "Labeling tool: synchronized channels (3D clouds, images) -> 2D BEV grid or per-point labels" readme = "README.md" authors = [{ name = "Augustin Bresset", email = "augustin.bresset@gmail.com" }] license = { file = "LICENSE" } requires-python = ">=3.11" keywords = ["labeling", "annotation", "lidar", "point-cloud", "bev", "robotics", "traversability"] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Topic :: Scientific/Engineering :: Image Processing", ] # Core + engine depend only on numpy. The fronts are extras. dependencies = [ "numpy", ] # apairo is just ONE optional input adapter — the core does not depend on it. [project.optional-dependencies] apairo = [ # apairo 0.5.0+ for ChannelWriter (label write-back); pinned to the release tag. "apairo @ git+https://github.com/apairo-robotics/apairo.git@v0.5.0", "PyYAML", ] # Web server + API (the `splasher.engine` core does not depend on it). api = [ "fastapi", "uvicorn", ] # Desktop app: the web front inside a native webview (Spotify-style). # pywebview[qt] pulls a pip-only Qt WebEngine (Chromium) backend so a real native # window opens out of the box on Linux (no system GTK/WebKit packages needed). app = [ "fastapi", "uvicorn", "pywebview[qt]", ] [project.scripts] splasher = "splasher.cli:main" [dependency-groups] dev = ["pytest", "httpx", "ruff"] # httpx: required by fastapi.testclient (API tests) [tool.ruff] line-length = 110 target-version = "py311" [tool.ruff.lint] select = ["E", "F", "W", "I", "B", "UP"] ignore = ["B008"] # `= Body(...)` in defaults is the intended FastAPI idiom [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["splasher"] [tool.hatch.metadata] allow-direct-references = true