Skip to content

LocalHarness — the image plugin

Image

← the plugins /image

Off by default — turn it on with your ComfyUI address and the agent can make pictures.

  1. 1
    the model calls generate_image prompt · width · height · steps · seed — no path
  2. 2
    the registry hands it over the capability floor read its declarations: ingest none · host safe
  3. 3
    the workflow goes to ComfyUI POST /prompt to the machine-level image.comfyui_url
  4. 4
    the picture comes back GET /history, then GET /view
  5. 5
    core’s folder <state dir>/artifacts/image/ — core-minted id, never overwritten
  6. 6
    the typed ref, back to the loop Observation.artifact — validated as an ArtifactRef
  7. ↺
    enable checks once plugins enable image asks the address, writes it, runs the probe
  8. ↺
    doctor GET /system_stats · GET /object_info per node — model files there?
  9. ✕
    you run ComfyUI LocalHarness does not start it or download its model files

image.comfyui_url and image.workflow are machine-level only — a project folder cannot choose the server or the graph.

fig. 01 — PLATE IMAGE — what the plugin owns, what core provides: one picture

how it works

  • one tool generate_image takes a prompt and a size; the server and workflow are settings, not arguments.
  • your server it sends a workflow template to your ComfyUI and waits up to timeout_s; the first picture also loads the model.
  • never overwritten each picture gets its own id, in a folder core assigns.
  • machine-level a project folder cannot change the server or the workflow.
  • doctor checks that ComfyUI answers and has the template’s model files.

Setup

Turn it on from the session, fill in its settings, and it checks they work; your coding agent can do the hardware part.

~/project — localharness start shipped
qwen3.6-27b ~/project
Plugins: image, memory, autoresearch
❯ /plugins enable image
Restarting with image on — your conversation is kept.
ComfyUI address [http://127.0.0.1:8188]:
✓ image enabled in ~/.localharness/overrides.yaml
set image.comfyui_url = 'http://127.0.0.1:8188'
Checking it now:
✓ image: ComfyUI reachable at http://127.0.0.1:8188 (template: qwen-image-2.1)
Once ComfyUI answers, the agent can make pictures with generate_image.
Restarted with image on. Your conversation continues.
image: on in this session
❯ make a picture of a lighthouse at dusk
◆ generate_image a lighthouse at dusk
✓ generate_image

in a session: /plugins enable image · from a shell: localharness plugins enable image

paste into your coding agent to set it up for your hardware
Set up ComfyUI on this machine for LocalHarness image generation. Install ComfyUI and run it so it answers at http://127.0.0.1:8188; keep it off the open internet. Put these Qwen-Image-2.1 INT8 files in its models folder: diffusion_models/qwen_image_2.1_int8_convrot.safetensors (about 7.3 GB), text_encoders/qwen3vl_8b_int8_convrot.safetensors (about 9.4 GB) and vae/qwen_image_2.1_vae_bf16.safetensors (about 0.7 GB). The weights are under the Qwen Research License: personal, non-commercial use. Keep the UNETLoader weight_dtype at "default" (the fp8 fast mode spoils the pictures). On an NVIDIA GB10 (DGX Spark) the INT8 kernels compile on first use and need the Python headers: start ComfyUI with C_INCLUDE_PATH pointing at them. You are done when http://127.0.0.1:8188/system_stats answers and `localharness doctor` shows image reachable.

Surfaces

where you reach it

  • generate_image the tool the agent calls in a session.
  • localharness generate-image makes a picture from the shell.
  • image.comfyui_url · image.workflow · image.timeout_s the server, your own workflow, and how long to wait.
  • slash commands none.
  • /plugins enable image inside a running session: until it is set up, asks what it needs and checks it; then restarts with your conversation kept.
  • localharness plugins enable image off by default; disable turns it off again.

Get Involved