Files
tensors/TODO.md
T
Adam Ladachowski 87ec0bef6a Phase 4: Configuration (config.py)
Add ComfyUI configuration functions:
- `get_comfyui_url()` - URL resolution (env var -> config -> default)
- `get_comfyui_defaults()` - Default generation parameters from config

Config section in config.toml:
    [comfyui]
    url = "http://127.0.0.1:8188"
    default_model = "flux1-dev-fp8.safetensors"
    width = 1024
    height = 1024
    steps = 20
    cfg = 7.0
    sampler = "euler"
    scheduler = "normal"

Updated comfyui.py to use config functions instead of hardcoded values.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-16 16:20:25 +01:00

3.5 KiB

TODO: ComfyUI CLI & API Integration

Phase 1: Core Client (tensors/comfyui.py)

  • Step 1.1: Create ComfyUI client module with basic query functions
    • get_system_stats() - System stats (GPU, RAM)
    • get_queue_status() - Queue status
    • get_loaded_models() - List loaded checkpoints/loras
    • get_history() - View history
    • Also: clear_queue(), get_object_info(), get_image()
  • Step 1.2: Add workflow execution with WebSocket progress tracking
    • queue_prompt() - Queue a workflow
    • run_workflow() - Run workflow with progress callback (uses polling)
  • Step 1.3: Add simple text-to-image generation
    • generate_image() - Text-to-image with embedded workflow template
    • Include SDXL/Flux-compatible default workflow (DEFAULT_WORKFLOW_TEMPLATE)

Phase 2: CLI Commands (tensors/cli.py)

  • Step 2.1: Add comfy subcommand group with status commands
    • tsr comfy status - System stats (GPU, RAM, queue)
    • tsr comfy queue - Queue status
    • tsr comfy queue --clear - Clear queue
    • tsr comfy models - List loaded models
    • tsr comfy history [PROMPT_ID] - View history
  • Step 2.2: Add generation commands
    • tsr comfy generate "prompt" - Simple text-to-image with full options
    • tsr comfy run workflow.json - Run arbitrary workflow
    • Rich progress output via console

Phase 3: Server API Routes (tensors/server/comfyui_api_routes.py)

  • Step 3.1: Create new router with query endpoints
    • GET /api/comfyui/status - System stats
    • GET /api/comfyui/queue - Queue status
    • DELETE /api/comfyui/queue - Clear queue
    • GET /api/comfyui/models - List loaded models
    • GET /api/comfyui/history - List history
    • GET /api/comfyui/history/{prompt_id} - Get specific result
  • Step 3.2: Add generation endpoints
    • POST /api/comfyui/generate - Text-to-image generation
    • POST /api/comfyui/workflow - Run arbitrary workflow
  • Step 3.3: Register router in server/__init__.py (with API key auth)

Phase 4: Configuration (tensors/config.py)

  • Step 4.1: Add ComfyUI config functions
    • get_comfyui_url() - Get ComfyUI backend URL (COMFYUI_URL env -> config -> default)
    • get_comfyui_defaults() - Get default generation settings from config
    • Environment variable: COMFYUI_URL
    • Config section: [comfyui] with url, default_model, width, height, steps, cfg, sampler, scheduler
    • Updated comfyui.py to use config functions

Architecture Reference

tensors/
├── comfyui.py              # Core client (NEW) - shared by CLI and server
├── cli.py                  # Add `tsr comfy` subcommands
└── server/
    ├── comfyui_routes.py       # Existing proxy (unchanged)
    └── comfyui_api_routes.py   # New programmatic API routes (NEW)

CLI Commands

tsr comfy status              # System stats (GPU, RAM, queue)
tsr comfy queue               # Current queue status
tsr comfy queue --clear       # Clear queue
tsr comfy models              # List loaded checkpoints/loras
tsr comfy history [PROMPT_ID] # View history or specific result
tsr comfy generate "prompt"   # Simple text-to-image
tsr comfy run workflow.json   # Run arbitrary workflow

Generate Options

tsr comfy generate "a cat" \
  -n "blurry, bad" \           # negative prompt
  -m "flux1-dev-fp8.safetensors" \  # model
  -W 1024 -H 1024 \            # dimensions
  --steps 20 --cfg 7.0 \       # sampling
  --seed 42 \                  # reproducibility
  -o ./output.png              # output path