QuiverAI Provider
QuiverAI generates SVG documents directly from text prompts and can also vectorize raster images into clean SVGs. The QuiverAI provider for the AI SDK exposes both operations through generateImage.
Setup
The QuiverAI provider is available via the @ai-sdk/quiverai module. You can install it with
pnpm add @ai-sdk/quiverai
Provider Instance
You can import the default provider instance quiverai from @ai-sdk/quiverai:
import { quiverai } from '@ai-sdk/quiverai';If you need a customized setup, you can import createQuiverAI and create a provider instance with your settings:
import { createQuiverAI } from '@ai-sdk/quiverai';
const quiverai = createQuiverAI({ apiKey: 'your-api-key', // optional, defaults to QUIVERAI_API_KEY environment variable baseURL: 'custom-url', // optional, defaults to QUIVERAI_BASE_URL or https://api.quiver.ai/v1 headers: { /* custom headers */ }, // optional});You can use the following optional settings to customize the QuiverAI provider instance:
-
baseURL string
Use a different URL prefix for API calls, e.g. to use proxy servers. The default prefix is
https://api.quiver.ai/v1. It also readsQUIVERAI_BASE_URLfrom the environment. -
apiKey string
API key that is sent as a
Bearertoken in theAuthorizationheader. It defaults to theQUIVERAI_API_KEYenvironment variable. -
headers Record<string,string>
Custom headers to include in the requests.
-
fetch (input: RequestInfo, init?: RequestInit) => Promise<Response>
Custom fetch implementation. You can use it as a middleware to intercept requests, or to provide a custom fetch implementation for e.g. testing.
Image Models
You can create QuiverAI image models using the .image() factory method.
For more on image generation with the AI SDK see generateImage().
Basic Usage
import { quiverai } from '@ai-sdk/quiverai';import { generateImage } from 'ai';import fs from 'fs';
const { image } = await generateImage({ model: quiverai.image('arrow-1.1'), prompt: 'A logo for the next AI Design startup',});
const filename = `image-${Date.now()}.svg`;fs.writeFileSync(filename, image.uint8Array);console.log(`Saved SVG to ${filename}`);QuiverAI returns SVG documents. The generated SVG bytes are available through result.image.uint8Array (or result.images when generating multiple).
Model Capabilities
QuiverAI exposes three Arrow models:
| Model | Description |
|---|---|
arrow-1 | Base text-to-SVG model. Accepts up to 4 reference images. |
arrow-1.1 | Improved text-to-SVG model. Accepts up to 4 reference images. |
arrow-1.1-max | Higher quality variant with extended context. Accepts up to 16 reference images. |
Provider Options
You can fine-tune the request using providerOptions.quiverai:
import { quiverai, type QuiverAIImageModelOptions } from '@ai-sdk/quiverai';import { generateImage } from 'ai';
await generateImage({ model: quiverai.image('arrow-1.1'), prompt: 'A geometric unicorn icon', providerOptions: { quiverai: { instructions: 'Use a flat monochrome style with clean geometry.', temperature: 0.4, topP: 0.95, maxOutputTokens: 4096, } satisfies QuiverAIImageModelOptions, },});Supported options:
-
operation 'generate' | 'vectorize'
Choose between text-to-SVG generation (
generate, default) and image-to-SVG vectorization (vectorize). -
instructions string
Extra style guidance for prompt-based generation.
-
temperature number (0-2)
Sampling temperature.
-
topP number (0-1)
Nucleus sampling top-p value.
-
presencePenalty number (-2 to 2)
Presence penalty.
-
maxOutputTokens number (1-131072)
Maximum number of output tokens.
-
autoCrop boolean
When vectorizing, automatically crop the input image. Only used with
operation: 'vectorize'. -
targetSize number (128-4096)
When vectorizing, target canvas size in pixels. Only used with
operation: 'vectorize'.
Reference Images
Pass reference images through prompt.images:
await generateImage({ model: quiverai.image('arrow-1.1'), prompt: { text: 'A geometric unicorn icon', images: ['https://example.com/reference-1.png'], },});arrow-1 and arrow-1.1 accept up to 4 reference images. arrow-1.1-max accepts up to 16.
Vectorizing a Raster Image
Set operation to vectorize and pass a single image in prompt.images:
import { quiverai, type QuiverAIImageModelOptions } from '@ai-sdk/quiverai';import { generateImage } from 'ai';import fs from 'fs';
const { image } = await generateImage({ model: quiverai.image('arrow-1.1'), prompt: { images: [fs.readFileSync('./logo.png')], }, providerOptions: { quiverai: { operation: 'vectorize', autoCrop: true, targetSize: 1024, } satisfies QuiverAIImageModelOptions, },});
fs.writeFileSync('logo.svg', image.uint8Array);