mirror of https://github.com/vladmandic/automatic
2.7 KiB
2.7 KiB
Project Guidelines
Tools
pyproject.tomlfor Python configuration, including linting and type checking settings.venvfor Python environment management, activated withsource venv/bin/activate.python3.10+.eslintconfigured for both core and UI code.pnpmfor managing JavaScript dependencies and scripts, with key commands defined inpackage.json.ruffandpylintfor Python linting, with configurations inpyproject.tomland executed viapnpm ruffandpnpm pylint.pre-commithooks 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 undermodules/. - 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_*andpipelines/. - Additional plug-ins live in
scripts/and are used only when specified. - Extensions live in
extensions-builtin/andextensions/and are loaded dynamically. - Tests and CLI scripts are under
test/andcli/, with some API smoke checks intest/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 eslintandpnpm eslint-ui
Conventions
- Keep PR-ready changes targeted to
devbranch conventions fromCONTRIBUTING. - Do not include unrelated edits or submodule changes when preparing contributions.
- Use existing CLI/API tool patterns in
cli/andtest/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.pyandwebui.pyare 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.