Nordic Layers · Nordic Byte

API belgeleri

Nordic Layers, https://app.layers.nordicbyte.co.uk adresinde HTTPS üzerinden çalışan bir REST API'sidir. Proje, katmanlardan oluşan bir JSON belgesidir; onu işlemlerle değiştirir ve görsel olarak dışa aktarırsınız. Tarayıcı editörü aynı API'yi kullanır.

Kimlik doğrulama

Hesap panelinizde bir API anahtarı oluşturun ve her /v1 isteğiyle birlikte gönderin. Anahtarlar nl_key_ ile başlar.

Authorization: Bearer nl_key_…

Olağan akış

  1. Yükleyin: Her görseli POST /v1/assets ile, dosyayı ham istek gövdesi olarak gönderin (PNG, JPEG, WebP, GIF, BMP veya TIFF). Yanıt, görselin id değerini taşır.
  2. Oluşturun: POST /v1/projects ile bir width, height ve background vererek proje oluşturun. İlk steps değerlerini aynı çağrıda da gönderebilirsiniz.
  3. Düzenleyin: POST /v1/projects/{id}/run ile; tek işlem {"op": …}, birden çok işlem {"steps": [...]} biçiminde. Ücretsiz olan GET /v1/projects/{id}/preview ile sonucu görün.
  4. Dışa aktarın: POST /v1/projects/{id}/export ile. Yanıt dosya URL'sini ya da "response": "image" ile görselin kendisini içerir.

İlk istek

Degradeli ve başlıklı 1080×1080 bir proje oluşturun, sonra WebP olarak dışa aktarın:

curl -X POST https://app.layers.nordicbyte.co.uk/v1/projects \
  -H "Authorization: Bearer $NL_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "First post",
    "width": 1080,
    "height": 1080,
    "steps": [
      {"op": "layer.addFill", "gradient": {"colors": ["#1E3A5F", "#64B5F6"], "angle": 135}},
      {"op": "text.add", "content": "Hello, layers", "fontName": "Segoe UI", "fontSize": 110, "bold": true, "color": "#FFFFFF"},
      {"op": "effects.set", "shadow": {"opacity": 0.4, "distance": 12, "size": 24}}
    ]
  }'

# → {"project": {"id": "…", …}}

curl -X POST https://app.layers.nordicbyte.co.uk/v1/projects/$PROJECT_ID/export \
  -H "Authorization: Bearer $NL_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "format": "webp",
    "quality": 90
  }'

Uç noktalar

YöntemYolNe yapar
GET/healthHizmet durumu
GET/v1/opsTüm işlemlerin ve parametrelerinin kataloğu (herkese açık)
POST/v1/assets?name=photo.jpgBir görsel yükle; gövde dosyanın kendisidir
GET/v1/assetsGörsellerinizi ve bir projede kullanılıp kullanılmadıklarını listele
DELETE/v1/assets/{id}Bir görseli sil
POST/v1/projectsProje oluştur (tuval veya tüm belge, isteğe bağlı adımlarla)
GET/v1/projectsProjelerinizi listele
GET/v1/projects/{id}Belgesiyle birlikte tek bir proje
PUT/v1/projects/{id}/documentTüm belgeyi değiştir
POST/v1/projects/{id}/runBir işlemi veya bir adım listesini uygula
POST/v1/projects/{id}/undoSon değişikliği geri al
POST/v1/projects/{id}/redoYinele
GET/v1/projects/{id}/preview?size=1024Ücretsiz PNG önizleme, uzun kenar en fazla size px
POST/v1/projects/{id}/exportPNG, JPEG veya WebP dışa aktar; yalnızca bu dosya için isteğe bağlı adımlar
POST/v1/renderTüm belgenin durumsuz render'ı
GET/v1/exportsDışa aktarmalarınızı listele
GET/v1/exports/{id}/fileBir dışa aktarmayı indir
DELETE/v1/projects/{id}Bir projeyi sil

İşlemler

Her işlem, op ve parametrelerini içeren bir nesnedir. Katmanlara id veya adla başvurulur; layer verilmezse etkin katman kullanılır. Adlar büyük/küçük harfi ve boşlukları yok sayar; dolayısıyla "Linear Dodge (Add)" ile "linearDodge" aynı karışım modudur. steps ile işlemler sırayla çalışır ve ilk hatada durur ("stopOnError": false verilmedikçe); ondan önceki adımlar uygulanmış olarak kalır.

Katmanlar

İşlemParametrelerNe yapar
layer.addcolor, nameAlias of layer.addFill (the web has no empty pixel layers).
layer.addFillcolor | gradient {colors: [..], angle, type: linear|radial}, name, above, atBottomA colour or gradient layer the size of the canvas.
layer.addImageasset_id | color, name, rect | origin | center, width, height, fit (stretch|contain|cover), fitCanvas (contain|cover), above, atBottom, opacity, blendModeAdd an uploaded image (asset_id) or a solid colour (color).
layer.cliplayerClip a layer to the one below it (clipping mask).
layer.deletelayer | layersDelete layers.
layer.duplicatelayer, nameCopy a layer above itself.
layer.getlayerOne layer with all its settings.
layer.list—Layers from bottom to top.
layer.movelayer, above | below (layer), toTop, atBottom, index, offsetReorder a layer.
layer.renamelayer, nameRename a layer.
layer.selectlayerMake a layer the active one.
layer.setBlendModelayer | layers, blendMode (normal, darken, multiply, colorBurn, linearBurn, lighten, screen, colorDodge, linearDodge, overlay, softLight, hardLight, difference, exclusion, subtract, divide, hue, saturation, color, luminosity)Blend mode.
layer.setFilllayer, color | gradientChange a fill layer's colour or gradient.
layer.setImagelayer, asset_id, fit (stretch|contain|cover)Replace a layer's image and keep its box (templates).
layer.setOpacitylayer | layers, opacityLayer opacity, 0 to 1.
layer.setVisiblelayer | layers, visibleShow or hide layers.
layer.uncliplayerRelease a clipping mask.

Metin

İşlemParametrelerNe yapar
text.addcontent, fontName, fontSize, color, alignment, leading, bold, italic, boxWidth, origin | center, nameAdd a text layer.
text.defaults—Fonts on the server and whether complex scripts are shaped.
text.setlayer, content, fontName, fontSize, color, alignment, leading, bold, italic, boxWidthChange a text layer.

Şekiller

İşlemParametrelerNe yapar
shape.addshape, rect | from+to, color, cornerRadius, lineWidth, nameAdd a rectangle, ellipse or line.
shape.setlayer, color, cornerRadius, lineWidthChange a shape layer.

Dönüştürme

İşlemParametrelerNe yapar
transform.fliplayer | layers, axis (horizontal|vertical)Flip horizontally or vertically.
transform.movelayer | layers, dx, dy | to [x, y]Move by dx/dy or to a point.
transform.rotatelayer | layers, angleRotate by an angle (degrees, clockwise).
transform.scalelayer | layers, factor | percent | width | heightScale around each layer's centre.
transform.setlayer | layers, x, y, width, height, rotation, flipX, flipYBox, rotation and flips.

Bir katmanda ayarlamalar

İşlemParametrelerNe yapar
adjust.blackWhitelayer | layers, reds, yellows, greens, cyans, blues, magentas, tint, tintHue, tintSaturationNon-destructive blackWhite on a layer (adds it or updates it).
adjust.brightnessContrastlayer | layers, brightness, contrastNon-destructive brightnessContrast on a layer (adds it or updates it).
adjust.clearlayer | layersRemove every adjustment and filter from a layer.
adjust.colorBalancelayer | layers, shadows, midtones, highlights, preserveLuminosityNon-destructive colorBalance on a layer (adds it or updates it).
adjust.curveslayer | layers, rgb, red, green, blueNon-destructive curves on a layer (adds it or updates it).
adjust.exposurelayer | layers, exposure, offset, gammaNon-destructive exposure on a layer (adds it or updates it).
adjust.gradientMaplayer | layers, shadows, highlights, reversedNon-destructive gradientMap on a layer (adds it or updates it).
adjust.grainlayer | layers, amount, size, seedNon-destructive grain on a layer (adds it or updates it).
adjust.hueSaturationlayer | layers, hue, saturation, lightness, colorizeNon-destructive hueSaturation on a layer (adds it or updates it).
adjust.invertlayer | layers, no settingsNon-destructive invert on a layer (adds it or updates it).
adjust.levelslayer | layers, black, white, gamma, outputBlack, outputWhiteNon-destructive levels on a layer (adds it or updates it).
adjust.removelayer | layers, kindRemove one adjustment or filter from a layer.

Filtreler

İşlemParametrelerNe yapar
filter.addNoiselayer | layers, amount, gaussian, monochromatic, seedNon-destructive addNoise on a layer (adds it or updates it).
filter.gaussianBlurlayer | layers, radiusNon-destructive gaussianBlur on a layer (adds it or updates it).
filter.motionBlurlayer | layers, angle, distanceNon-destructive motionBlur on a layer (adds it or updates it).
filter.pixelatelayer | layers, sizeNon-destructive pixelate on a layer (adds it or updates it).
filter.sharpenlayer | layers, amount, radius, thresholdNon-destructive sharpen on a layer (adds it or updates it).
filter.vignettelayer | layers, amount, midpoint, roundness, feather, colorNon-destructive vignette on a layer (adds it or updates it).

Ayarlama katmanları

İşlemParametrelerNe yapar
adjustmentLayer.addkind, settings…, name, aboveAn adjustment layer: changes everything below it.
adjustmentLayer.getlayerAn adjustment layer's settings.
adjustmentLayer.setlayer, settings…Change an adjustment layer (partial).

Katman maskeleri

İşlemParametrelerNe yapar
mask.addlayer, reveal | hide | rect | ellipse (rect) | gradient (from, to) | asset_id (+ rect), feather, invert, cornerRadiusAdd or replace a layer mask.
mask.blurlayer, radiusFeather the layer mask.
mask.deletelayerRemove the layer mask.
mask.invertlayerInvert the layer mask.
mask.setEnabledlayer, enabledTurn the layer mask on or off.

Katman efektleri

İşlemParametrelerNe yapar
effects.copyfrom, layer | layersCopy effects from one layer to others.
effects.getlayerA layer's effects.
effects.removelayer | layers, kindsRemove effects (all, or the ones named).
effects.setlayer | layers, shadow {…}, stroke {…}, outerGlow {…}, colorOverlay {…}Set effects (partial): shadow, outerGlow, stroke, colorOverlay.
effects.setEnabledlayer, kind, enabledTurn one effect on or off.

Tuval

İşlemParametrelerNe yapar
canvas.croprect [x, y, width, height]Crop the canvas to a rectangle.
canvas.imageSizewidth and/or height, or percentScale the whole document.
canvas.setBackgroundcolorBackground colour, or null for transparent.
canvas.sizewidth, height, anchor (topLeft…bottomRight, default center)Change the canvas without scaling layers.

Proje

İşlemParametrelerNe yapar
project.state—The whole document.

Karışım modları

Yazı tipi aileleri

Şablonlar

Dışa aktarma çağrısına steps verin; bunlar yalnızca o dosya için projenin bir kopyasına uygulanır. Tek şablon, çok dosya: metni text.set ile, fotoğrafı katmanın kutusunu koruyan layer.setImage ile değiştirin.

curl -X POST https://app.layers.nordicbyte.co.uk/v1/projects/$TEMPLATE_ID/export \
  -H "Authorization: Bearer $NL_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "format": "png",
    "steps": [
      {"op": "text.set", "layer": "Title", "content": "Nueva colección"},
      {"op": "layer.setImage", "layer": "Photo", "asset_id": "photo_dunes"}
    ]
  }'

Durumsuz render

POST /v1/render, tam bir document (project.document içinde döndürüldüğü gibi), isteğe bağlı steps ve dışa aktarma seçeneklerini alır ve proje kaydetmez. "response": "image" ile yanıt görsel dosyasıdır.

curl -X POST https://app.layers.nordicbyte.co.uk/v1/render \
  -H "Authorization: Bearer $NL_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "document": {"width": 1200, "height": 630, "background": "#1E3A5F", "layers": ["…"]},
    "format": "png",
    "response": "image"
  }' \
  -o card.png

Hatalar

Hatalar, sabit bir code ve hesabınızın dilinde bir detail iletisiyle JSON olarak döner. Başarısız bir adım, hangi parametrenin yanlış olduğunu bildirir. Bir planın renderları bittiğinde API, quota_renders ile 402 yanıtı verir.

Sınırlar