automatic/.github/copilot-instructions.md

2.7 KiB

Project Guidelines

Tools

  • pyproject.toml for Python configuration, including linting and type checking settings.
  • venv for Python environment management, activated with source venv/bin/activate.
  • python 3.10+.
  • eslint configured for both core and UI code.
  • pnpm for managing JavaScript dependencies and scripts, with key commands defined in package.json.
  • ruff and pylint for Python linting, with configurations in pyproject.toml and executed via pnpm ruff and pnpm pylint.
  • pre-commit hooks which also check line-endings and other formatting issues, configured in .pre-commit-config.yaml.

Project Structure

  • Entry/startup flow: webui.sh -> launch.py -> webui.py -> modules under modules/.
  • Core runtime state is centralized in modules/shared.py (shared.opts, model state, backend/device state).
  • API/server routes are under modules/api/.
  • Model and pipeline logic is split between modules/sd_* and pipelines/.
  • Additional plug-ins live in scripts/ and are used only when specified.
  • Extensions live in extensions-builtin/ and extensions/ and are loaded dynamically.
  • Tests and CLI scripts are under test/ and cli/, with some API smoke checks in test/full-test.sh.

Code Style

  • Prefer existing project patterns over strict generic style rules;
    this codebase intentionally allows patterns often flagged in default linters such as allowing long lines, etc.

Build And Test

  • Activate environment: source venv/bin/activate (always ensure this is active when working with Python code).
  • Test startup: python launch.py --test
  • Full startup: python launch.py
  • Full lint sequence: pnpm lint
  • Python checks individually: pnpm ruff, pnpm pylint
  • JS checks: pnpm eslint and pnpm eslint-ui

Conventions

  • Keep PR-ready changes targeted to dev branch conventions from CONTRIBUTING.
  • Do not include unrelated edits or submodule changes when preparing contributions.
  • Use existing CLI/API tool patterns in cli/ and test/ when adding automation scripts.
  • Respect environment-driven behavior (SD_* flags and options) instead of hardcoding platform/model assumptions.
  • For startup/init edits, preserve error handling and partial-failure tolerance in parallel scans and extension loading.

Pitfalls

  • Initialization order matters: startup paths in launch.py and webui.py are sensitive to import/load timing.
  • Shared mutable global state can create subtle regressions; prefer narrow, explicit changes.
  • Device/backend-specific code paths (CUDA/ROCm/IPEX/DirectML/OpenVINO) should not assume one platform.
  • Extension loading is dynamic; failures may appear only when specific extensions or models are present.