When stream: true is set, image data is delivered in real time as it's generated. The server sends events with the text/event-stream content type.
What you'll receive
| Event | When it fires | What it contains |
|---|---|---|
success | An image was generated | url or b64_json, plus metadata |
error | An image failed to generate | Error code and message |
complete | All images are done | Final usage totals |
[DONE] | Stream ended | (nothing more to read) |
Example
event: success
data: {"created":1719000000,"index":0,"url":"https://..."}
event: complete
data: {"created":1719000000,"usage":{"images":1,"total_tokens":4096}}
data: [DONE]
Errors during streaming
If a specific image fails, you'll get an event: error with details for that image — the stream continues for the rest.
If all routes fail at the gateway level, you'll get a single error message followed by [DONE]:
data: {"error":{"message":"Failed to generate image (500): ...","type":"upstream_error"}}
data: [DONE]
In practice: event: error = one image failed (others may succeed). A bare data: {"error":...} with no event: prefix = everything failed.
Cancelling a stream
curl: PressCtrl+Cto cancel- HTTP client: Set a timeout on your request
- SDK: Use
rb.image(...).stream()which handles parsing for you
Next steps
Async tasks · Provider-specific streaming examples in sidebar