Generate images
Type: Recipe
Outcome
Generate a PNG through Anvia's provider-neutral image request and save its bytes to disk. Use this for server-side asset generation where prompts and outputs pass your product's safety policy.
Prerequisites
- Node.js 22 or newer
@anvia/core,@anvia/openai,tsx, and a server-sideOPENAI_API_KEY- Access to the selected image model
Implementation
import { writeFile } from 'node:fs/promises'
import { imageGenerationRequest } from '@anvia/core/image-generation'
import { GPT_IMAGE_2, OpenAIClient } from '@anvia/openai'
const client = new OpenAIClient({ apiKey: process.env.OPENAI_API_KEY })
const model = client.imageGenerationModel(
process.env.OPENAI_IMAGE_MODEL ?? GPT_IMAGE_2,
)
const response = await imageGenerationRequest(model)
.prompt('A clean technical illustration of a document ingestion pipeline')
.width(1024)
.height(1024)
.additionalParams({ output_format: 'png' })
.send()
await writeFile('pipeline.png', response.image)
console.log({ images: response.images.length, mediaType: response.mediaType })Run and expected behavior
Run pnpm tsx image-generation.ts. A successful request writes pipeline.png and prints image count and MIME type. Generation may take longer than text and can reject prompts under provider policy.
Boundaries
Validate and moderate prompts, restrict who may generate assets, and treat returned bytes as untrusted until media type, dimensions, size, and decode are verified. Establish policies for copyright, impersonation, minors, sexual content, and provenance. Do not expose provider keys or arbitrary output paths to browsers.
In production, run generation in a queued worker, use idempotency and request records, scan and store outputs in protected object storage, apply retention, and handle provider policy rejection separately from transient failures.
Source and extensions
Run the OpenAI image cookbook or compare the Gemini media example. Next, add job status, prompt templates, and an approved asset library.