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 reads QUIVERAI_BASE_URL from the environment.

  • apiKey string

    API key that is sent as a Bearer token in the Authorization header. It defaults to the QUIVERAI_API_KEY environment 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:

ModelDescription
arrow-1Base text-to-SVG model. Accepts up to 4 reference images.
arrow-1.1Improved text-to-SVG model. Accepts up to 4 reference images.
arrow-1.1-maxHigher 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);