# Contributing ## Setup ```bash pip install -e ".[dev,ai]" ``` Use `.[dev]` only for core tests; AI module tests need `.[ai]` (torch). OpenRouter/Comfy steps need `OPENROUTER_API_KEY` in `.env` (see `.env.example`). ## Code style - **Ruff** for lint and format (`ruff check .`, `ruff format .`) - Python **3.11+**, type hints on public APIs - CLI messages: direct English, no marketing tone (see `SOUL.md`) ## Tests ```bash pytest # full suite (may call local CLIs) pytest -m "not integration" # fast subset for CI ``` Mark new external-tool tests with `@pytest.mark.integration`. ## Adding a module See [MODULE_DEVELOPMENT.md](MODULE_DEVELOPMENT.md). Register in `imagepipeline/modules/__init__.py` and add param/behavior tests. ## Pipelines Scripts in `pipelines/` are examples and shoot-specific recipes. Machine-local `INPUT` paths are intentional. Reset `CONTINUE_FROM` before sharing a script. ## Commits Conventional Commits (`feat:`, `fix:`, `chore:`, …). One logical change per commit.