Dokümanlar

Görseli bir kez yükle, ihtiyacın olan ölçüyü dosya adına ekleyerek iste. Bu sayfa adres kurallarını, ölçüleri ve API'yi anlatır.

Başlarken

  1. Hesap aç, panelde API anahtarları bölümünden bir anahtar oluştur. Anahtar tcdn_ ile başlar ve yalnızca bir kez gösterilir.
  2. Ölçüler bölümünde sitende kullandığın boyutları tanımla, örneğin kart adıyla 400×400.
  3. Görseli yükle, sonra adresini ölçü adıyla kullan.
curl -X PUT \
  -H "Authorization: Bearer tcdn_..." \
  --data-binary @kapak.jpg \
  https://api.turkcdn.com/v1/images/urun/kapak.jpg

Görsel adresleri

Her görselin adresi https://cdn.turkcdn.com/{hesap}/{yol} biçimindedir. {hesap} panelde görünen hesap adın, {yol} yüklerken verdiğin yoldur. Ölçü ve format dosya adından okunur; sorgu parametresi ya da SDK gerekmez.

İstenen adresSonuç
urun/kapak.jpgOrijinal dosya
urun/kapak.webpOrijinal ölçüde WebP
urun/kapak_kart.avifkart tasarımı, AVIF
urun/kapak_kart_s.webpkart ölçüsü, kırpmadan sığdırılır. Komutların sırası önemli değil: _s_kart da olur.
urun/kapak_400x400.jpg400×400 izin verilen ebatlarda varsa üretilir
urun/kapak_w400.webpGenişlik 400, yükseklik orana göre; _h400 tersi. Bu ebat da izin verilenlerde olmalı.
urun/kapak_akart.webpakart tasarımının tüm ayarlarıyla: ölçü, kırpım, efektler, görüntüleyici
urun/kapak_akart_300x250.webpakart tasarımı, ölçüsü 300×250 olarak. 300×250 izin verilen ebatlarda yoksa 404.
urun/kapak_th_kart.webpEski biçim, hâlâ geçerli

Dosya adının sonundaki her _ bir komut başlatır ve komutların sırası önemli değildir. Adında alt çizgi olan dosyalar da çalışır: önce tam ad aranır, bulunamazsa sondaki parçalar komut olarak okunur. Bir adreste en fazla bir tasarım adı ve bir ebat olur. Dosya adında _th_ kullanılamaz, çünkü eski biçimin ayıracıdır.

Yalnızca hesabında tanımlı ebatlar ve tasarımlar üretilir. Tanımsız bir ölçü ya da olmayan bir dosya istenirse 404 döner. Böylece başkası adresine rastgele boyut yazarak işlem yükü oluşturamaz.

Kaynaktan çekme (web proxy)

Görsellerin zaten bir sitede duruyorsa hiçbirini yüklemen gerekmez. Alana kaynak olarak siteni ver, sonra sayfalarındaki görsel adreslerinde yalnız alan adını değiştir. Alanda olmayan bir görsel ilk istendiğinde kaynaktan alınır, alanına kaydedilir ve istenen ölçü üretilir. Sonraki istekler doğrudan CDN'den gelir.

Kurulum

  1. Panelde Alanlar sayfasında alanının yanındaki Kaynak: Ekle'ye tıkla.
  2. Sitenin adresini yaz: https://mysite.com. Görseller bir klasördeyse klasörü de verebilirsin: https://mysite.com/uploads.
  3. Sayfalarındaki görsel adreslerinde https://mysite.com yerine https://cdn.turkcdn.com/{alan} yaz, istediğin ölçüyü dosya adına ekle.
HTML
<!-- Önce -->
<img src="https://mysite.com/urun/ayakkabi.jpg">

<!-- Sonra: kart tasarımında, WebP olarak -->
<img src="https://cdn.turkcdn.com/magazam/urun/ayakkabi_kart.webp">

Hangi dosya alınır?

Komutlar ve uzantı adresten çıkarılır, kalan yol kaynağın sonuna eklenir:

İstenen adresKaynaktan alınan
urun/ayakkabi.jpgmysite.com/urun/ayakkabi.jpg
urun/ayakkabi_300x250.jpgmysite.com/urun/ayakkabi.jpg
urun/ayakkabi_kart.webpayakkabi.webp, yoksa .jpg, o da yoksa .png

Boşluk ve Türkçe karakterler adreste kendiliğinden kodlanır. Kaynak https://mysite.com/uploads ise aynı adresler https://mysite.com/uploads/urun/… olarak aranır. Kendi alan adını bağladıysan aynısı orada da çalışır: https://img.mysite.com/urun/ayakkabi_kart.webp.

Bilmen gerekenler

  • İlk istek biraz yavaş: görsel kaynaktan indirilip işlenir. Sonra CDN'den gelir.
  • Görsel güncellemek: TurkCDN kaynağı tekrar kontrol etmez. Kaynakta bir görseli değiştirdiysen panelden ya da API'den (DELETE /images/{yol}) sil; bir sonraki istekte yenisi alınır.
  • Olmayan dosya: kaynakta bulunamayan dosya 404 döner ve 10 dakika tekrar sorulmaz. Kaynak adresini değiştirince bu bekleme sıfırlanır.
  • Kaynağın erişilebilir olması lazım: istekler TurkCDN/1 (+https://turkcdn.com) kimliğiyle gelir, 10 saniyede cevap gelmezse vazgeçilir. Yönlendirmeler (301, 302) izlenmez; adres doğrudan görseli vermeli. Sitende hotlink ya da bot koruması varsa bu kimliğe izin ver.
  • Sınırlar: yüklemedeki kurallar geçerli: en fazla 20 MB, JPG, PNG, WebP ya da GIF. Çekilen görseller paketindeki görsel sayısına ve depolamaya sayılır.
  • Güvenlik: yalnız internete açık adreslere bağlanılır; iç ağ ve yerel adresler engellidir.
Kaynak ve yükleme birlikte çalışır: alanda olan görsel her zaman alandakinden verilir, kaynağa yalnız alanda olmayanlar için gidilir.

Ebatlar ve tasarımlar

Panelde Ölçüler sekmesinde iki ayrı liste vardır:

  • İzin verilen ebatlar: İsimsiz genişlik × yükseklik listesi. Adreste boyutuyla çağrılır (_300x250, _w400, _h400) ve tasarımların ölçüsünü ezmek için kullanılır. Ortadan kırpılır.
  • Tasarımlar: İsim zorunludur. Varsayılan ölçü, mod, kırpma yönü, kalite, tasarım komutları ve görüntüleyici bir arada saklanır; adreste adıyla çağrılır (_akart).

API'de ikisi de /presets ucundadır: name verilirse tasarım, verilmezse ebattır. Ebatta effects ve viewer kullanılamaz.

AlanDeğer
nameTasarımda zorunlu. 1-32 karakter; küçük harf, rakam ve tire. 120x60, w400 gibi ebata benzeyemez.
width, height0 ile 4000 piksel arası; biri 0 ise orana göre hesaplanır, ikisi birden 0 olamaz
modecover (varsayılan): alanı doldurur, taşanı kırpar. contain: oranı koruyarak sığdırır, büyütmez.
anchorKırpma yönü: tl, t, tr, l, c (varsayılan), r, bl, b, br
quality1 ile 100 arası, varsayılan 82
image_idVerilirse ölçü yalnızca o görsel için geçerli olur
effectsYalnız tasarımda. Tasarım komutları, adresteki gibi: rounded-lg_border-2-eeeeee
viewerYalnız tasarımda. o-on, z-on ya da o-on_z-on; bkz. Büyütme ve büyüteç

Bir ölçüyü değiştirdiğinde ondan üretilmiş kopyalar silinir ve sonraki istekte yeni ayarla yeniden üretilir.

Tasarım komutları

Köşe, çerçeve ve benzeri ayarları ölçüye kaydedebilir ya da adrese doğrudan ekleyebilirsin. Ölçüsüz de kullanılır; o zaman görselin kendi boyutunda uygulanır.

KomutTürkçesiNe yapar
_rounded-sm, _rounded, _rounded-md, _rounded-lg, _rounded-xl_yuvarlak-az, _yuvarlak, _yuvarlak-orta, _yuvarlak-buyuk, _yuvarlak-cokKöşeleri yuvarlatır; küçükten büyüğe
_rounded-full_yuvarlak-tamKısa kenarın yarısı kadar köşe: dikdörtgende hap, karede daire. Kırpmaz.
_circle_daireOrtadan kare kırpıp daire yapar
_border, _border-thick_cerceve, _cerceve-kalinİçe doğru ince ya da kalın çerçeve, görselin ölçüsü değişmez. Varsayılan beyaz; renk eklenebilir: _border-1d3557, _border-thick-eee
_bg-f5f5f5_zemin-f5f5f5_s ile sığdırınca kalan boşluğu ve JPG'de saydam köşeleri bu renkle doldurur
_p-sm, _p-md, _p-lg_bosluk-az, _bosluk-orta, _bosluk-cokÖlçü aynı kalır; görsel içeri alınır, çevresi saydam boşluk olur; _bg- ile renk verilebilir, JPG'de beyazdır. Piksel: _p-24
_grayscale_griSiyah-beyaz
_blur-low, _blur, _blur-high_bulanik-az, _bulanik, _bulanik-cokAz, orta ya da çok bulanık
_shadow-low, _shadow, _shadow-high_golge-az, _golge, _golge-cokHafif, normal ya da belirgin gölge; kenarlara pay eklendiği için ölçü büyür
_opacity-50_opaklik-50Görsel yüzde kaç görünsün, 1-99; gölge dahil tamamı saydamlaşır. JPG saydamlık taşımadığı için beyaza karışır, .png, .webp ya da .avif iste
_logo_filigranAlanın filigranını basar; filigran yoksa bir şey yapmaz

Seviyeler görselin boyutuna göre ölçeklenir; 200 ve 2000 piksellik görselde aynı görünür. Piksel vermek istersen sayı yaz: _rounded-16 (1-500), _border-2 ve _border-2-eeeeee (1-50), _blur-8 (1-50). Türkçesi de aynı: _yuvarlak-16, _cerceve-2-eeeeee, _bulanik-8.

İngilizce ve Türkçe komutlar birbirinin takma adıdır, aynı kopyayı üretir. Aynı komut iki dilde birden yazılamaz: _gri_grayscale geçersizdir.

Komutlar sırasız yazılır ve birleştirilir: urun/kapak_kart_rounded-lg_border.webp, ekip/ayse_circle.png, banner_grayscale_blur-low.jpg. Bir adreste en fazla 6 komut olur, her komut bir kez yazılır. Renkler 3 ya da 6 haneli, küçük harf onaltılıktır.

Sık kullandığın birleşimi kendi adınla kullanmak istersen bir ölçüye kaydet: örneğin kapak adlı ölçü rounded-lg_shadow olsun, adreste _kapak yaz. Ölçüde ve adreste aynı komut varsa adrestekiyle üretilir. Saydam köşeler için .webp, .avif ya da .png iste; JPG saydamlık taşımaz, köşeler beyaz ya da _bg rengiyle dolar.

Büyütme ve büyüteç

Sitene bir kez şu satırı ekle:

HTML
<script src="https://cdn.turkcdn.com/turkcdn.js" defer></script>

Sonra görselin adresine komutu ekle. Görsel aynı kalır; davranışı script ekler.

KomutNe yapar
_o-onTıklanınca sayfa kararır, görselin tamamı büyük açılır. Büyük görsele tıklamak 2 kat yakınlaştırır; oklar sayfadaki diğer görsellere geçer; ESC, × ya da dışarı tıklamak kapatır.
_z-onAlışveriş sitelerindeki gibi: fare görselin üstündeyken o bölge yakından gösterilir; görselin içinde ya da yanında ayrı panelde. Dokunmatik ekranda dokununca büyük hâl açılır.

Komutu her adrese yazmak istemezsen panelde tasarımın Görüntüleyici ayarını seç; o tasarımı kullanan her adres (resim_akart.jpg) kendiliğinden büyütülebilir olur. Özel alan adı kullanıyorsan script etiketine alan adını ekle: data-domains="cdn.mysite.com".

İkisi birlikte de olur: urun/kapak_kart_o-on_z-on.webp. Script büyük hâller için aynı adresin iki sürümünü ister; istersen sen de kullanabilirsin:

  • _full: ölçü yok sayılır, görselin tamamı orijinal boyutunda gelir.
  • _hd: aynı ölçü ve kırpım, 3 kat çözünürlükte; orijinalden büyük olmaz.

Görüntüleyici ayarları

Panelde Ölçüler sekmesinin altındaki Görüntüleyici bölümünden alan başına ayarlanır. Overlay ya da zoom'u kapatırsan adreslere dokunmadan anında durur.

AyarSeçenekler
overlay, zoomAçık / kapalı (varsayılan açık)
overlay_bg, overlay_opacityZemin rengi #rrggbb ve koyuluk %50-100 (varsayılan #0a0c12, %90)
overlay_radiusBüyük görselin köşesi: none, sm, md
overlay_buttonsOklar ve kapat düğmesi: light, dark
overlay_captionAlt metni görselin altında göster
zoom_scaleBüyütme: 2, 2.5, 3, 4
zoom_placeinside: görselin içinde; side: görselin sağında panel (yer yoksa içinde)
zoom_lensYanda panelde görselin üstündeki mercek: none, square, round

API: GET / PUT /zones/{alan}/viewer. Script ayarları ve görüntüleyicili tasarımları alanın turkcdn.json dosyasından okur: https://cdn.turkcdn.com/{alan}/turkcdn.json.

Script yaklaşık 4 KB'tır, bağımlılığı yoktur. Eklemezsen komutlu görseller normal görsel gibi davranır.

Formatlar ve sınırlar

Yüklenebilen görsellerJPG, PNG, WebP, GIF
Üretilen formatlarJPG, PNG, WebP, AVIF
Görsel boyutuEn fazla 20 MB
Yüklenebilen videolarMP4, MOV, M4V, WebM (en fazla 200 MB)
Dosya yoluEn fazla 512 karakter. Klasör adları boş olamaz ve nokta ile başlayamaz.

Format adresteki uzantıyla seçilir. .jpeg uzantısı .jpg olarak okunur.

Önbellek ve temizlik

  • Kopyalar ilk istekte üretilir, sonra CDN'den sunulur. Yanıtlar Cache-Control: public, max-age=86400 ve ETag taşır.
  • Her alan adından kullanılabilir (Access-Control-Allow-Origin: *).
  • Aynı yola yeniden yükleme yaparsan eski kopyalar ve CDN önbelleği temizlenir. Adres değişmez.
  • 30 gün boyunca istenmeyen kopyalar kendiliğinden silinir; tekrar istenirse yeniden üretilir. Orijinal dosya silinmez.

Video

Yüklenen video arka planda H.264 MP4'e dönüştürülür. Dönüşüm bitene kadar adresler 404 döner, sonra hazır olur. Range istekleri desteklenir.

İstenen adresSonuç
tanitim/klip.mp4Varsayılan dönüşüm, uzun kenar en fazla 1920 px
tanitim/klip_mobil.mp4mobil adlı video ölçüsü
tanitim/klip.jpgKapak karesi

Video ölçüleri görsel ölçülerinden ayrıdır. Genişlik ve yükseklik 32 ile 3840 arasında çift sayı olmalı. mode varsayılanı contain, kalite crf ile verilir (18-35, varsayılan 23, küçük sayı daha yüksek kalite). Yeni ölçü eklediğinde hesabındaki videolar o ölçüde yeniden hazırlanır.

API

Temel adres https://api.turkcdn.com/v1. Her istekte API anahtarını Authorization başlığında gönder:

HTTP
Authorization: Bearer tcdn_...

Anahtarını sunucu tarafında sakla, tarayıcıya ya da mobil uygulamaya koyma. Sızdığını düşünürsen panelden sil ve yenisini oluştur.

Her anahtar bir alana bağlıdır; yüklediğin görseller ve videolar o alanın adresinde yayınlanır.

Görseller

PUT/images/{yol}Yükle. Gövde dosyanın kendisidir. Aynı yol varsa üzerine yazılır.
DELETE/images/{yol}Sil. Başarıda 204 döner.
GET/imagesHesaptaki görselleri listeler

Yükleme ve listeleme her görsel için şu alanları döner:

Yanıt
{
  "id": 128,
  "path": "urun/kapak.jpg",
  "size": 1258291,
  "width": 2400,
  "height": 2400,
  "created_at": 1792540800,
  "url": "https://cdn.turkcdn.com/magazam/urun/kapak.jpg"
}

Ölçüler

GET/presetsGenel ölçüleri listeler. ?image_id=128 ile o görsele özel ölçüler gelir.
POST/presetsÖlçü ekler
PUT/presets/{id}Ölçüyü günceller, eski kopyaları temizler
DELETE/presets/{id}Ölçüyü siler

Gövde JSON'dur; alanlar Ölçüler bölümündeki tabloda.

curl -X POST \
  -H "Authorization: Bearer tcdn_..." \
  -H "Content-Type: application/json" \
  -d '{"name": "kart", "width": 400, "height": 400, "mode": "cover", "anchor": "t"}' \
  https://api.turkcdn.com/v1/presets

Filigran

GET/watermarkFiligran ayarları; yüklenmemişse null
PUT/watermarkLogoyu yükler ya da değiştirir. Gövde dosyanın kendisi; png, webp ya da jpg, en fazla 2 MB.
PUT/watermark/settingsJSON: anchor (konum, varsayılan br), opacity (10-100), scale (görsel genişliğine oranı, 5-50)
DELETE/watermarkFiligranı kaldırır

Videolar

PUT/videos/{yol}Yükle. Gövde video dosyasıdır.
DELETE/videos/{yol}Sil
GET/videosVideoları ve durumlarını listeler
GET POST/video-presetsVideo ölçülerini listeler, ekler
PUT DELETE/video-presets/{id}Video ölçüsünü günceller, siler

Video durumu status alanındadır: queued, processing, ready ya da failed. Yanıtta oynatma adresi url, kapak karesi poster_url alanında gelir.

Anahtarlar

GET/keysAnahtarları listeler (yalnızca ön ek görünür)
POST/keys{"name": "..."} ile yeni anahtar oluşturur. Tam anahtar yalnızca bu yanıtta gelir.
DELETE/keys/{id}Anahtarı iptal eder

Alanlar

Bir hesabın birden fazla alanı olabilir; her alanın kendi adresi (https://cdn.turkcdn.com/{alan}/), görselleri, videoları, ölçüleri, alan adları ve anahtarları vardır. Görsel, video, depolama ve trafik limitleri tüm alanların toplamına uygulanır. Alan sayısı: Webmaster ve Başla 1, Geliştir 3, Büyüt 10. Ücretsiz Webmaster paketinde ayrıca günlük sınır var: günde 50 MB trafik ve 1.000 istek. Biri dolunca görseller ertesi gün 03:00'e kadar sunulmaz.

GET/zonesAlanları listeler. Anahtarla çağrılırsa yalnız anahtarın alanı gelir.
PUT/zones/{alan}/originKaynak adresi ayarlar: {"origin": "https://mysite.com"}; null kapatır.

Kaynak adresin nasıl çalıştığı Kaynaktan çekme bölümünde.

Alan eklemek ve silmek yalnız panelden yapılır. Silinen alanın görselleri, videoları, ölçüleri, alan adları ve anahtarları kalıcı olarak silinir, adresleri CDN önbelleğinden de temizlenir.

İstatistik

GET/stats görsel, kopya ve ölçü sayılarını ve kapladıkları alanı bayt olarak döner: images, image_bytes, variants, variant_bytes, presets.

Hatalar

Hatalı isteklerde gövde {"error": "açıklama"} biçimindedir; açıklama Türkçedir.

KodAnlamı
400Geçersiz istek: desteklenmeyen format, boş dosya, hatalı ölçü değeri, 200 MB sınırını aşan video
401Anahtar eksik ya da geçersiz
404Dosya, ölçü ya da kayıt bulunamadı
409Çakışma: aynı ölçü veya isim zaten var, aynı yolda bir video var
413Görsel 20 MB sınırını aşıyor