# Video and motion tools: Python 3.12 uv package configuration, lint, strict typing and test settings. [project] name = "video-motion" version = "0.1.0" description = "The tools behind the video and motion seed pack: frame-addressable scene recipes, motion formulas fitted from traces, 9:16, 4:5 and 16:9 safe-zone layout, captions, every-frame QA, and worker rendering of sequences to checked MP4." readme = "README.md" requires-python = ">=3.12" license = "MIT" authors = [{ name = "ta-amps" }] dependencies = [ "pydantic>=2.9", ] [project.optional-dependencies] # Worker-side video rendering only (video_motion.video_worker): headless Chromium rasterizes frames # and a bundled ffmpeg build encodes and measures. Importing video_motion never needs these packages. video = [ "playwright>=1.47", "imageio-ffmpeg>=0.5", ] [project.scripts] video-motion = "video_motion.cli:main" [dependency-groups] dev = [ "pytest>=8.3", "pytest-timeout>=2.3", "ruff>=0.6", "mypy>=1.11", ] # Real Tessera models for tests/test_tessera_contracts.py, pinned to one reviewed commit, so the # noun digest, pin and category checks run in CI instead of being skipped. Test-only. integration = [ "tessera[mcp] @ git+https://github.com/ta-amps/tessera-infrastructure-work-and-storage-engine@55458514e84eaf1e524637c3bd04916ebb4b3c35", ] [build-system] requires = ["hatchling>=1.25"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["video_motion"] # Ship the bundled recipes and motion trace inside the wheel (video_motion/examples), so an installed # package can load and render them; video_motion.social.examples_dir() prefers this location. [tool.hatch.build.targets.wheel.force-include] "examples" = "video_motion/examples" [tool.ruff] line-length = 100 target-version = "py312" [tool.ruff.lint] select = ["E", "F", "W", "I", "B", "UP", "SIM", "RUF", "S", "PT"] ignore = ["S101", "S603", "S607", "E501"] [tool.ruff.lint.per-file-ignores] "tests/**" = ["S105", "S106", "S108", "PT018"] [tool.mypy] strict = true python_version = "3.12" files = ["video_motion"] plugins = ["pydantic.mypy"] # The `video` extra is optional and imported lazily by video_motion.video_worker only; type-check the # same way whether or not it is installed. [[tool.mypy.overrides]] module = ["playwright", "playwright.*", "imageio_ffmpeg", "imageio_ffmpeg.*"] ignore_missing_imports = true [tool.pytest.ini_options] testpaths = ["tests"] timeout = 180