---
title: "Image to SVG"
description: "Convert image inputs into production-ready SVG outputs."
icon: "image"
---

Convert an image input into SVG via `POST /v1/svgs/vectorizations`.

Examples below use `arrow-1.1`. To discover model IDs available to your organization, call
`GET /v1/models`. Arrow 1.1 is the default choice for most vectorization tasks; Arrow 1.1 Max is
better for detailed images where color, alignment, and fine structure need more fidelity.

Set `stream: true` to receive `reasoning`, `draft`, and `content` Server-Sent Events while the SVG
is being produced.

## Example

**Node.js SDK**

```typescript
import { QuiverAI } from "@quiverai/sdk";

const client = new QuiverAI({
  bearerAuth: process.env["QUIVERAI_API_KEY"],
});

const result = await client.vectorizeSVG.vectorizeSVG({
  model: "arrow-1.1",
  autoCrop: true,
  image: {
    url: "https://example.com/logo.png",
  },
});
```

**cURL**

```bash
curl --request POST \
  --url https://api.quiver.ai/v1/svgs/vectorizations \
  --header 'Authorization: Bearer <QUIVERAI_API_KEY>' \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "arrow-1.1",
    "auto_crop": true,
    "image": {
      "url": "https://example.com/logo.png"
    }
  }'
```

## Preparing the image

Cropping the input image tightly to the subject usually improves output quality. Use `auto_crop` as a fallback when you can't crop manually.

Image inputs can be provided as `{ url: "..." }` or `{ base64: "..." }`. Direct base64 image
payloads can be PNG, JPEG, WebP, GIF, or SVG. Decoded image inputs must be no larger than
12,582,912 bytes, 4096 x 4096 pixels, or 16,777,216 total pixels.

Image URLs must use HTTP or HTTPS, resolve to a public network target, and return an image content
type. The API follows up to 3 redirects and applies the same decoded image limits after fetching.

For logos, icons, and most source images, `arrow-1.1` is the right starting point. For complex
illustrations, technical drawings, and other dense inputs where smaller details need to stay
stable, use `arrow-1.1-max`.

## Parameters

| Parameter           | Type    | Default | Description                                                                                                                                                   |
| ------------------- | ------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `model`             | string  | --      | **Required.** Model identifier (for example, `arrow-1.1` or `arrow-1.1-max`).                                                                                 |
| `image`             | object  | --      | **Required.** Input image as `{ url: "..." }` or `{ base64: "..." }`.                                                                                         |
| `auto_crop`         | boolean | `false` | Automatically crop the image to the dominant subject before vectorization.                                                                                    |
| `target_size`       | integer | --      | Square resize target in pixels (128 to 4096).                                                                                                                 |
| `stream`            | boolean | `false` | When `true`, returns a Server-Sent Events stream with progressive rendering phases (`reasoning`, `draft`, `content`).                                         |
| `temperature`       | number  | `1`     | Controls randomness (0 to 2). Lower values produce more deterministic output; higher values increase variety.                                                 |
| `top_p`             | number  | `1`     | Nucleus sampling (0 to 1). Limits token selection to the smallest set whose cumulative probability exceeds this value. Lower values make output more focused. |
| `presence_penalty`  | number  | `0`     | Penalizes tokens already present in prior output (-2 to 2). Positive values encourage the model to explore new patterns.                                      |
| `max_output_tokens` | integer | --      | Upper bound for output token count (1 to 65536).                                                                                                              |
