Contributing
PixelPatrol is an open project and we welcome contributions of all kinds - bug reports, feature suggestions, documentation improvements, new loaders or processors, and viewer plugins. If you want to get involved, open an issue or reach out at support@helmholtz-imaging.de.
Fork the repository on GitHub and open a pull request with your changes.
What's non-obvious
Monorepo with multiple packages. The repository contains several independently installable packages under packages/. Install the ones you need in editable mode:
uv pip install -e packages/pixel-patrol-base -e packages/pixel-patrol-image -e packages/pixel-patrol-loader-bio
The viewer build syncs to the Python package. The viewer is a separate Vite app in viewer/. Running npm run build in that directory compiles it and automatically copies the output into pixel-patrol-base, so pixel-patrol view always picks up your latest changes. For local development with hot reload use npm run dev.
Previewing the full site locally. Use ./tools/dev_serve.sh to build and serve the landing page, docs, and viewer together at the correct URLs (localhost:8000/ and localhost:8000/docs/). For docs-only editing with live reload, uv run --with mkdocs-material mkdocs serve is faster.
Schema reference assets are not committed. docs/assets/schema.html and docs/assets/schema.json are generated at deploy time and excluded from git. If you're working on schema or catalog changes and want to preview the schema page, generate them locally first:
You don't need this for Python logic, viewer, or general doc changes.
CI runs a wider matrix on main. Python tests run on Ubuntu only for feature branches, and additionally on Windows and macOS for pushes to main and PRs targeting it.