Skip to content

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 08 May 08:14
· 39 commits to main since this release

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

  • openaimodel, size, quality, style (vivid/natural for DALL-E 3), n (max 4)
  • googleImagemodel (Nano Banana / Pro / Flash 3.1)
  • xaiaspectRatio (1:1, 16:9, 9:16, …), n (max 10)
  • recraftmodel (V3/V4, raster/vector), style, styleId (custom styles), size, n (max 6)
  • replicatemodel (any text-to-image model), size, n (max 4), timeoutMs (default 5min)
  • togethermodel, 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:

  • timeoutMs input 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 empty images array silently.
  • Robust error stringification — Replicate's error field 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-plugins

What's also new

  • Shared _shared/parseSize.ts helper — 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