v0.7.0
Image generation, six providers
This release adds first-class image generation to runline. Six new plugins, one image.create action each, all returning the same shape so you can swap providers without rewriting code.
| Plugin | Provider | Best for |
|---|---|---|
openai |
GPT Image / DALL-E | Quality leader — text rendering, prompt adherence |
googleImage |
Gemini (Nano Banana / Imagen) | Fast, great value, conversational editing |
xai |
Grok Imagine / Aurora | Photorealism, real-world entities |
recraft |
Recraft V3 / V4 | Design — vectors, brand assets, typography |
replicate |
200+ open-source models (Flux, SD, …) | Community fine-tunes |
together |
Together AI (Flux, Ideogram, Qwen) | OpenAI-compatible, fast schnell models |
Set the env var, add a connection, generate:
export OPENAI_API_KEY=sk-...
runline connection add oa --plugin openai --set apiKey=$OPENAI_API_KEY
runline exec 'return await openai.image.create({ prompt: "a red bicycle on snow" })'Every provider returns the same envelope:
{
provider: "openai",
model: "gpt-image-1",
images: [{ base64: "...", mimeType: "image/png", revisedPrompt?: "..." }]
}So a workflow doesn't care which provider you used:
const { images } = await openai.image.create({ prompt: "logo concept" });
await github.file.create({
owner: "acme", repo: "brand",
path: "concepts/v1.png",
content: images[0].base64,
});Provider-specific knobs
- openai —
model,size,quality,style(vivid/natural for DALL-E 3),n(max 4) - googleImage —
model(Nano Banana / Pro / Flash 3.1) - xai —
aspectRatio(1:1, 16:9, 9:16, …),n(max 10) - recraft —
model(V3/V4, raster/vector),style,styleId(custom styles),size,n(max 6) - replicate —
model(any text-to-image model),size,n(max 4),timeoutMs(default 5min) - together —
model,size,steps(4 for schnell, 20–30 for dev models),n(max 4)
Replicate is its own animal
Replicate's prediction API is async — submit, then poll. This plugin handles both the happy path (Prefer: wait returns synchronously when the model is fast) and the long path (poll every 2s until terminal), with three production niceties:
timeoutMsinput so an unbounded job can't hang the agent forever- Per-URL fetch failure tracking — when a Replicate prediction outputs three images and one 404s, you get the two successes back plus a
failures: [{ url, reason }]array, so the agent knows it got a partial result. If every URL fails, it throws with the full failure list instead of returning an emptyimagesarray silently. - Robust error stringification — Replicate's
errorfield can be a string, an object, or null. The plugin JSON-stringifies objects instead of producing[object Object].
Pi integration
Already using pi-runline? After updating, open /runline-plugins and toggle on whichever providers you want — guided credential prompts handle the rest.
pi install pi-runline # gets v0.7.0
# then in any pi session:
/runline-pluginsWhat's also new
- Shared
_shared/parseSize.tshelper — used by replicate + together, attributes errors to the calling plugin - Plugin table regenerated; counts updated across all READMEs (202 plugins, 2,614 actions)
Full Changelog: v0.6.0...v0.7.0