3.4 KiB
3.4 KiB
ComfyUI-Simple-Prompt Architecture Documentation
This document describes the architectural design of ComfyUI-Simple-Prompt after the v0.1.0 refactor. The main goal of this refactor was to decouple the core business logic from the ComfyUI framework and support hot reloading during development.
Directory Structure
ComfyUI-Simple-Prompt/
├── simple_prompt/
│ ├── __init__.py # Package initialization
│ ├── core/ # Core business logic (platform-independent)
│ │ ├── config.py # Path configurations
│ │ ├── database.py # DuckDB connection and initialization
│ │ ├── tags.py # Tag search and management logic
│ │ ├── categories.py # Category management logic
│ │ ├── presets.py # Preset management logic
│ │ └── utils.py # General utility functions
│ ├── api/ # API abstraction layer
│ │ └── handlers.py # Pure functional request handlers
│ └── comfyui/ # ComfyUI adapter layer
│ ├── nodes.py # Node definitions (SimplePrompt)
│ └── server.py # PromptServer route registration & hot reload logic
├── tests/ # Unit tests
├── js/ # Frontend build artifacts
├── src/ # Frontend source code
├── __init__.py # ComfyUI entry point
└── pyproject.toml # Python project configuration
Core Design
1. Layered Architecture
- Core Layer (
simple_prompt/core): Contains pure Python logic, independent ofaiohttporComfyUI. All data operations (DuckDB, JSON read/write) are handled in this layer. - API Layer (
simple_prompt/api):handlers.pyacts as an intermediate layer, receiving parameters, calling Core layer functions, and returning standard Python dictionaries/lists. - Adapter Layer (
simple_prompt/comfyui): Responsible for forwardingPromptServerrequests to the API layer and wrapping the results inweb.json_response.
2. Data Management
- Uses DuckDB as the primary query engine, merging multiple Parquet data sources (Main repository, User custom, Liked, Default) through Views.
- Configuration files (categories, presets) are stored as JSON.
- All data paths are centrally managed in
simple_prompt/core/config.py.
Development Guide
Hot Reload
To improve development efficiency, the backend supports modifying code without restarting ComfyUI.
How to enable:
Set the environment variable SIMPLE_PROMPT_DEV=1 when starting ComfyUI.
Windows (PowerShell):
$env:SIMPLE_PROMPT_DEV="1"
.\run_nvidia_gpu.bat # Or your startup script
How it works:
simple_prompt/comfyui/server.pycontains a_maybe_reload()function.- Every API request (e.g., tag search) triggers this function. If in development mode, it uses
importlib.reloadto reload all modules undersimple_prompt.coreandsimple_prompt.api. - Note: After modifying
nodes.py(node definitions) orserver.py(route registration), you still need to restart ComfyUI as these are registered at startup.
Running Tests
Use pytest to run unit tests:
uv run pytest tests/ -v
The test environment is independent and does not rely on the ComfyUI runtime.