Workflow Execution API
Esta página aún no está disponible en tu idioma.
Overview
Section titled “Overview”InvokeAI’s HTTP API can be used programmatically from external clients, but one distinction is easy to miss:
- A saved workflow is not executed directly.
- The queue accepts an executable graph.
- If you fetch a saved workflow from
/api/v1/workflows/, you still need to enqueue a graph withPOST /api/v1/queue/default/enqueue_batch.
This is a common source of confusion when a client can successfully read workflow records but cannot execute them.
If you are using multi-user mode, include your Authorization: Bearer <token> header on these requests.
Minimal enqueue_batch Example
Section titled “Minimal enqueue_batch Example”The smallest useful “hello world” is a simple graph with one math node. This avoids any image-model setup and lets you verify that your client can enqueue work and poll for completion.
import requestsimport time
BASE_URL = "http://localhost:9090"
graph = { "id": "hello-graph", "nodes": { "add-node": { "id": "add-node", "type": "add", "a": 2, "b": 3, "is_intermediate": False, "use_cache": True, } }, "edges": [],}
payload = { "batch": { "graph": graph, "runs": 1, "origin": "external-client", }}
enqueue_response = requests.post( f"{BASE_URL}/api/v1/queue/default/enqueue_batch", json=payload,)enqueue_response.raise_for_status()
item_id = enqueue_response.json()["item_ids"][0]
while True: item_response = requests.get(f"{BASE_URL}/api/v1/queue/default/i/{item_id}") item_response.raise_for_status() item = item_response.json()
status = item["status"] if status == "completed": print(item["session"]["results"]) break if status == "failed": raise RuntimeError(item["error_message"]) if status == "canceled": raise RuntimeError("Queue item was canceled")
time.sleep(0.5)For the graph above, the completed queue item will contain the output in session.results.
Getting an Image Output
Section titled “Getting an Image Output”For image-generation graphs, the completed queue item also includes session.results, but the output object will typically contain an image reference instead of a plain integer value.
For example, an image output may look like this:
{ "type": "image_output", "image": { "image_name": "abc123.png" }}Once you have the image_name, you can download the generated file from:
GET /api/v1/images/i/{image_name}/fullIf you only need the file preview, you can also use:
GET /api/v1/images/i/{image_name}/thumbnailPolling vs. WebSockets
Section titled “Polling vs. WebSockets”The example above uses polling because it is the easiest way to get started from an external client. If you need lower-latency updates, you can also use the socket events emitted during queue execution.