API · v1

Aynı motor, sunucu tarafında.

Herhangi bir görseli temiz, düzenlenebilir vektör sanatına dönüştürün — gerçek yollar, renk bölgesi başına tek dolgu. API, tarayıcı içi dönüştürücüyle aynı WebAssembly motorunu sizin makineniz yerine bizimkinde çalıştırır; bu yüzden geri aldığınız SVG, uygulamanın üreteceği SVG ile aynıdır.

Hızlı başlangıç
curl -X POST "https://vectortrace.app/api/v1/vectorize?format=svg" \
  -F image=@logo.png \
  -o logo.svg

Bir istek, bir dosya geri döner. Aşağıdaki anonim sınırlar için anahtar gerekmez.

Kimlik doğrulama

Anonim istekler sıkı sınırlarla çalışır. Bir anahtar bu sınırları yükseltir ve bearer token olarak gönderilir. Tanımadığımız bir anahtar — iptal edilmiş olan da dahil — sessizce anonim katmana düşürülmek yerine 401 ile reddedilir ve bu ret IP'nizin bütçesinden düşer: sessiz bir düşürme, bir yazım hatasını bir saat sonra bir hız sınırı hatasına dönüştürür.

Authorization: Bearer $VECTORTRACE_KEY

Anahtarlar hesap sayfanızda oluşturulur ve bir kez gösterilir; yalnızca özeti saklanır. Pro'nun bir parçasıdır: ayda 500 görsel dahildir, üzerindeki her görsel €0,02 tutarındadır ve aboneliğiniz üzerinden faturalandırılır. Bir anahtarı hesap sayfasında iptal edin; bir sonraki istekte çalışmayı durdurur. Anahtar yönetimi bir tarayıcı yüzeyidir, oturum çerezi ile kimliği doğrulanır ve kökeni denetlenir — bir istemcinin şekilleri görebilmesi için OpenAPI dosyasında belgelenir, ama betiklenmek üzere tasarlanmamıştır.

GET    /api/account/keys            → { keys, usage, maxKeys }
POST   /api/account/keys  { name }  → { key, secret }   # secret shown once
DELETE /api/account/keys/{id}       → { revoked: true, id }

Hesabınızdaki anahtarları yönetin

POST/api/v1/vectorize

Tek bir raster görseli vektörleştirin. Onu bir multipart dosya parçası olarak veya bir JSON gövdesi içinde base64 olarak gönderin. Yanıt, vektör dosyasının kendisi veya istediğinizde JSON olarak belgedir.

PNG · JPG · JPEG · WebP · BMP · GIF

İstek

ParçaNeredeDeğer
imagemultipart/form-dataRaster dosya.
imageapplication/json gövdesiAynı dosya, base64 kodlu, data: ön eki ile veya onsuz. İkisinden birini kullanın.
optionsJSON gövdesi veya form alanıAşağıdaki seçeneklerin herhangi bir alt kümesi. Belirtmediğiniz alanlar adlandırılmış ön ayarın değerlerini alır.
formatsorgu dizesiNeyin dışa aktarılacağı. Sorgu, gövdeye üstün gelir.
Acceptistek başlığıapplication/json, dosya yerine belgeyi ve istatistiklerini döndürür.

Örnekler

curl
curl -X POST "https://vectortrace.app/api/v1/vectorize?format=svg" \
  -H "Authorization: Bearer $VECTORTRACE_KEY" \
  -F "image=@logo.png" \
  -F 'options={"preset":"logo","colors":8}' \
  -o logo.svg
node
import { readFile, writeFile } from 'node:fs/promises'

const form = new FormData()
form.append('image', new Blob([await readFile('logo.png')]), 'logo.png')
form.append('options', JSON.stringify({ preset: 'logo', colors: 8 }))

const response = await fetch('https://vectortrace.app/api/v1/vectorize?format=svg', {
  method: 'POST',
  headers: { Authorization: `Bearer ${process.env.VECTORTRACE_KEY}` },
  body: form,
})
if (!response.ok) throw new Error(await response.text())
await writeFile('logo.svg', Buffer.from(await response.arrayBuffer()))
python
import json, os, requests

with open("logo.png", "rb") as image:
    response = requests.post(
        "https://vectortrace.app/api/v1/vectorize",
        params={"format": "svg"},
        headers={"Authorization": f"Bearer {os.environ['VECTORTRACE_KEY']}"},
        files={"image": image},
        data={"options": json.dumps({"preset": "logo", "colors": 8})},
    )
response.raise_for_status()
open("logo.svg", "wb").write(response.content)

JSON gövdesi

POST /api/v1/vectorize?format=svg
Content-Type: application/json
Accept: application/json

{
  "image": "iVBORw0KGgoAAAANSUhEUgAA…",
  "options": { "preset": "logo", "colors": 8 }
}

Seçenekler

Her alan isteğe bağlıdır. Bir ön ayar geri kalanını doldurur; ayarladığınız bir alan ön ayara üstün gelir. Bunlar dönüştürücünün denetleyicisiyle aynı kontroller ve Rust motorunun okuduğu aynı tablodur.

AlanDeğerlerVarsayılanNotlar
presetlogo · line-art · photo · embroidery · vinyl · laserlogoAdlandırılmış seçenek kümeleri. Uygulama ve Rust motoruyla aynı tablo.
modecolor · binarycolorİkili tek bir mürekkebi çizer; renkli önce bir paleti kümeler.
colors2 – 6416Kümeleme sonrası palet boyutu. İkili modda yok sayılır.
filterSpecklepiksel alanı4Bundan küçük bölgeler atılır.
cornerThreshold0 – 180 derece60Bundan keskin dönüşler, eğri yerine sert köşe olarak kalır.
pathPrecision0 – 42Yol verisine yazılan ondalık basamak sayısı.
curveFittingpixel · polygon · splinesplinePiksel merdiveni korur, çokgen doğrulara oturtur, eğri kübiklere oturtur.
hierarchicalstacked · cutoutstackedYığılmış, bölgeleri üst üste boyar; kesim her bölgeyi ayrık yapar.
spliceThreshold0 – 180 derece45Oturtulmuş bir eğrinin ikiye bölündüğü açı.
lengthThresholdpiksel4Sadeleştirmeden önce korunan en kısa çokgen kenarı.
maxIterations1 – 10010Alt yol başına eğri oturtma iyileştirme bütçesi.

Yanıtlar ve hatalar

Başarılı

DurumContent-TypeGövde
200image/svg+xmlDışa aktarılan SVG dosyası, satır içi, sunucu tarafından türetilmiş bir dosya adıyla.
200application/pdfDışa aktarılan PDF dosyası, satır içi, sunucu tarafından türetilmiş bir dosya adıyla.
200application/postscriptDışa aktarılan EPS dosyası, satır içi, sunucu tarafından türetilmiş bir dosya adıyla.
200image/vnd.dxfDışa aktarılan DXF dosyası, satır içi, sunucu tarafından türetilmiş bir dosya adıyla.
200image/pngDışa aktarılan PNG dosyası, satır içi, sunucu tarafından türetilmiş bir dosya adıyla.
200application/jsonAccept: application/json ile vektör belgesi ve istatistikleri.
{
  "document": {
    "version": 1, "width": 512, "height": 512, "unit": "px",
    "palette": ["#101114", "#e8491d"],
    "elements": [{ "kind": "path", "fill": 0, "stroke": null, "subpaths": [ … ] }]
  },
  "stats": { "paths": 12, "nodes": 184, "colors": 2, "ms": 41, "estimatedSvgBytes": 3210 }
}

Her yanıt, reddedilsin ya da edilmesin, hız sınırı başlıklarını taşır. X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset

Hata zarfı

Her zaman tek bir zarf. Metne değil koda göre dallanın — kod kararlıdır, metin değil.

{ "error": { "code": "IMAGE_TOO_LARGE", "message": "…" } }
DurumKodNe zaman
400DECODE_FAILEDBayt dizisi kabul ettiğimiz bir biçimde ama çözümlenemedi.
400VALIDATION_ERRORGövde veya bir alan sözleşmeyle eşleşmedi.
401UNAUTHORIZEDOkunamayan bir Authorization başlığı veya bilmediğimiz bir anahtar.
413IMAGE_TOO_LARGEGörsel, bu çağıran sınıfının piksel sınırının üzerinde.
413PAYLOAD_TOO_LARGEGövde, bu çağıran sınıfının bayt sınırının üzerinde.
415UNSUPPORTED_FORMATİstenen çıktı biçiminin bu derlemede bir dışa aktarıcısı yok.
415UNSUPPORTED_INPUT_FORMATBayt dizisi kabul edilen rasterlardan biri değil.
429RATE_LIMITEDSaatlik bütçe tükendi. Retry-After ne zaman geri geleceğinizi söyler.
500ENGINE_ERRORÇizici çalıştı ve bu görselde başarısız oldu.
500INTERNAL_ERRORBizim hatamız. Bir kez daha deneyin, sonra bize bildirin.

Hız sınırları

KatmanAzami gövdeAzami pikselİsteklerNeye göre sayılır
Anonim2 MB1 MP20 / saatİstemci IP
Anahtarlı20 MB16 MP600 / saatAnahtar tanıtıcısı

Piksel sınırının üzerindeki bir görsel küçültülmez, reddedilir. Tarayıcınızdaki dönüştürücü aşırı büyük eserleri küçültür, çünkü alternatifi kendi sekmenizde çeyrek gigabaytlık bir ayırmadır; burada tavan bir bütçedir ve gönderdiğiniz esere oturmayan koordinatlar döndürmek bir hatadan daha kötü olurdu.

OpenAPI

Yukarıdaki referans, sunucunun doğrulamada kullandığı aynı zod şemalarından üretilir, bu yüzden güncelliğini yitirebilecek elle yazılmış bir spesifikasyon yoktur. Bir istemci üreticisini buna yönlendirin.

GET https://vectortrace.app/api/openapi.json

/api/openapi.json

llms.txt

Ürünün, sayfaların ve bu uç noktanın dil modelleri ve etmenler için yazılmış düz metin özeti. Tam sürüm, sayfa dizinini ve ön ayar tablosunu ekler.

GET https://vectortrace.app/llms.txt
GET https://vectortrace.app/llms-full.txt

CLI

10. hafta

Motor, bir komut olarak. Aynı ön ayarlar, aynı çıktı, aradaki döngüde sunucu yok.

npx @vectortrace/cli in.png -o out.svg --preset laser

MCP

10. hafta

Motoru stdio veya akışlı HTTP üzerinden etmenlere açan bir MCP sunucusu. Üç araç:

AraçNe yapar
vectorize_imageBir görseli çizer ve bir belge tanıtıcısıyla istatistikleri döndürür.
list_presetsHer seçenek değeriyle birlikte ön ayar tablosunu döndürür.
export_documentBir tanıtıcıyı dışa aktarım biçimlerinden birine dönüştürür.