Vector Engine

Format sceny 1.0

Dokument JSON — version, document, objects, gradients, layers i workspaces. Kolory, jednostki, walidacja i limity.

Struktura dokumentu#

Scena to obiekt JSON z version, document, objects oraz opcjonalnymi gradients i layers. Nieznane właściwości są odrzucane ze strukturalnymi błędami schemy.

json
{
  "version": "1.0",
  "document": {
    "width": 1200,
    "height": 800,
    "unit": "px",
    "background": "#FFFFFF"
  },
  "objects": [],
  "gradients": [],
  "layers": []
}

Kanoniczna schema: schemas/vector-scene.schema.json.

Document#

WłaściwośćTypWymaganaOpis
widthintegertakSzerokość 1–16 384
heightintegertakWysokość 1–16 384
unitstringniepx, pt, mm, cm, in; domyślnie px
backgroundcolornieHex lub none
gradientsarraynieDefinicje gradientów
workspacesarraynieNazwane regiony eksportu

Kolory i paint#

Kolory akceptują:

  • #RGB, #RGBA, #RRGGBB, #RRGGBBAA,
  • none,
  • url(#gradientId) — referencja do gradientu.
json
{ "fill": "#0052FF", "stroke": "#17171780", "opacity": 0.9 }

Wspólne właściwości obiektów#

WłaściwośćTypDomyślnie
idstringwymagane
namestringopcjonalne
layerIdstringopcjonalne
typestringwymagane
fillcolor / url(#id) / nonezależnie od kształtu
strokecolor / url(#id) / nonezależnie od kształtu
strokeWidthnumber1
opacitynumber 0–11
blendModestringnormal
visiblebooleantrue
transformobjectidentity

Transformacje#

json
{
  "transform": {
    "translateX": 100,
    "translateY": 50,
    "rotate": 45,
    "scaleX": 1.5,
    "scaleY": 1.5,
    "skewX": 0,
    "skewY": 0,
    "originX": 200,
    "originY": 200
  }
}

Transformacje są afiniczne i składane w kolejności: translate → rotate → scale → skew, wokół punktu originX/originY. Grupy dziedziczą transformacje rodziców.

Workspaces#

Nazwane prostokątne regiony eksportu:

json
{
  "workspaces": [
    { "id": "social", "name": "Social card", "x": 0, "y": 0, "width": 1200, "height": 630 },
    { "id": "icon", "x": 0, "y": 0, "width": 512, "height": 512 }
  ]
}

Eksport może celować w workspace zamiast całej sceny — patrz Proces eksportu.

Walidacja#

Walidacja jest dwuetapowa:

  1. Strukturalna — Ajv Draft 2020-12 + parser JSON C++23.
  2. Semantyczna — unikalne ID, warstwy, workspaces, gradienty, limity pamięci.

Błędy są strukturalne i wskazują konkretne pole:

json
{
  "code": "invalid.color",
  "path": "/objects/2/fill",
  "message": "Expected hex color, none, or url(#id)"
}

Limity#

ZasóbLimit
Źródło JSON4 MB
Wymiar dokumentu16 384 px
Obszar rastra67 108 864 px
Obiekty10 000
Głębokość grup32
Dane path1 000 000 znaków

Renderer nie ładuje zewnętrznych zasobów

Akceptowane są tylko zadeklarowane właściwości, kolory hex, obsługiwane komendy path i lokalny tekst. Nie ma <image href="https://…">, zewnętrznych fontów ani sieciowych URL-i — to powierzchnia ataku, której silnik świadomie nie ma.