
Rendervid Şablon Sistemi - JSON Şablonları, Değişkenler, Animasyonlar ve Geçişler
Rendervid şablon sistemine kapsamlı rehber. JSON video şablonları oluşturmayı, {{variable}} sözdizimi ile dinamik değişkenler kullanmayı, 40+ animasyon ön ayarı...

Rendervid’i her yere dağıtın: önizlemeler için tarayıcı tabanlı render, sunucu tarafı toplu işleme için Node.js veya 10-50 kat daha hızlı paralel render için AWS Lambda, Azure Functions, GCP ve Docker üzerinde bulut render.
Rendervid, iş akışınızın gerektirdiği her yerde render etmek için tasarlanmıştır. Tarayıcıda anlık önizlemelere, sunucuda üretim kalitesinde video kodlamaya veya bulut altyapısında büyük ölçekli paralel render’a ihtiyacınız olsun, Rendervid her ortam için özel bir paket sağlar. Her dağıtım hedefi aynı şablon sistemini ve bileşen kütüphanesini paylaşır, bu nedenle tarayıcıda çalışan bir şablon AWS Lambda’da veya Docker konteynerinde aynı şekilde çalışır.
Bu kılavuz dört dağıtım ortamını, her birinde mevcut render seçeneklerini ve motion blur, GIF dışa aktarma ve performans optimizasyonu gibi gelişmiş özellikleri kapsar. Sonunda, hangi dağıtım yolunun projenize uygun olduğunu ve nasıl yapılandırılacağını tam olarak bileceksiniz.
+---------------------+
| JSON Şablonu |
+----------+----------+
|
+--------------------+--------------------+
| | |
+--------v--------+ +-------v--------+ +-------v---------+
| Tarayıcı | | Node.js | | Bulut |
| @rendervid/ | | @rendervid/ | | @rendervid/ |
| renderer-browser | | renderer-node | | cloud-rendering |
+---------+--------+ +-------+--------+ +-------+---------+
| | |
Canvas / WebM FFmpeg / Playwright Paralel Worker'lar
| | |
+---------v--------+ +------v---------+ +-------v---------+
| MP4, WebM, PNG, | | MP4, WebM, MOV,| | AWS Lambda |
| JPEG, WebP | | GIF, H.265 | | Azure Functions |
+------------------+ +----------------+ | GCP Functions |
| Docker |
+-----------------+
@rendervid/renderer-browser paketi, istemci tarafı render işlemini tamamen kullanıcının tarayıcısında gerçekleştirir. Sunucu altyapısı gerekmez. Bu, şablondan önizlemeye giden en hızlı yoldur.
npm install @rendervid/renderer-browser
Tarayıcı render, şablonun her karesini çizmek için HTML Canvas API’sini kullanır. Renderer her sahne ve katmanda gezinir, animasyonları ve yumuşatma fonksiyonlarını uygular, sonucu bir canvas elementine kompoze eder ve her kareyi yakalar. Video çıktısı için kareler, tarayıcının yerleşik MediaRecorder API’si (WebM) veya WebAssembly tabanlı MP4 kodlayıcı kullanılarak kodlanır.
| Format | Uzantı | Notlar |
|---|---|---|
| MP4 | .mp4 | WebAssembly kodlayıcı ile H.264 |
| WebM | .webm | MediaRecorder API ile VP8/VP9 |
| PNG | .png | Tek kare veya görüntü dizisi |
| JPEG | .jpeg | Tek kare, yapılandırılabilir kalite |
| WebP | .webp | Tek kare, daha küçük dosya boyutu |
import { BrowserRenderer } from "@rendervid/renderer-browser";
const renderer = new BrowserRenderer();
const template = {
width: 1920,
height: 1080,
fps: 30,
scenes: [
{
duration: 5,
layers: [
{
type: "text",
text: "Tarayıcıdan Merhaba",
fontSize: 72,
color: "#ffffff",
position: { x: 960, y: 540 },
animation: {
entrance: { type: "fadeIn", duration: 1 },
},
},
],
},
],
};
// Önizleme için bir canvas elementine render et
const canvas = document.getElementById("preview") as HTMLCanvasElement;
await renderer.preview(template, canvas);
// MP4 olarak dışa aktar
const mp4Blob = await renderer.render(template, {
format: "mp4",
quality: "standard",
});
// Tek bir kareyi PNG olarak dışa aktar
const pngBlob = await renderer.renderFrame(template, {
format: "png",
frameNumber: 0,
});
@rendervid/renderer-node paketi, tam FFmpeg entegrasyonu ile sunucu tarafı render sağlar. Her kareyi başsız (headless) bir tarayıcıda render etmek için Playwright veya Puppeteer kullanır, ardından profesyonel kalitede video kodlama için kareleri FFmpeg’e aktarır.
# Renderer'ı yükle
npm install @rendervid/renderer-node
# Playwright'ı yükle (tarayıcı binary'lerini içerir)
npx playwright install chromium
# FFmpeg'i yükle (video kodlama için gerekli)
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt-get install ffmpeg
# Windows (Chocolatey ile)
choco install ffmpeg
| Format | Uzantı | Codec | Notlar |
|---|---|---|---|
| MP4 | .mp4 | H.264 | Evrensel uyumluluk |
| MP4 | .mp4 | H.265/HEVC | %50 daha küçük dosyalar, yeni cihazlar |
| WebM | .webm | VP8/VP9 | Web için optimize edilmiş |
| MOV | .mov | ProRes | Profesyonel düzenleme iş akışları |
| GIF | .gif | Palet tabanlı | Optimizasyon ile animasyonlu |
| PNG | .png | Kayıpsız | Görüntü dizisi veya tek kare |
| JPEG | .jpeg | Kayıplı | Yapılandırılabilir kalite |
| WebP | .webp | Kayıplı/Kayıpsız | Modern web formatı |
Rendervid, kodlama parametrelerini kontrol eden dört kalite ön ayarı sağlar:
| Ön Ayar | Bitrate | Kullanım Durumu |
|---|---|---|
draft | Düşük | Geliştirme sırasında hızlı önizlemeler |
standard | Orta | Genel amaçlı çıktı, iyi kalite/boyut |
high | Yüksek | Pazarlama materyalleri, nihai teslimatlar |
lossless | Maksimum | Arşivleme, daha fazla düzenleme, kalite kaybı yok |
Node.js renderer, kodlamayı GPU’ya devretmek için donanım hızlandırmayı destekler. Bu, birçok katman, yüksek çözünürlük ve efektlere sahip karmaşık şablonlar için render süresini önemli ölçüde azaltır.
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/video.mp4",
hardwareAcceleration: true,
});
GPU hızlandırma, uyumlu NVIDIA (NVENC), AMD (AMF) veya Intel (Quick Sync) donanımına sahip sistemlerde mevcuttur. FFmpeg, ilgili kodlayıcı desteği ile derlenmiş olmalıdır.
import { NodeRenderer } from "@rendervid/renderer-node";
const renderer = new NodeRenderer();
const template = {
width: 1920,
height: 1080,
fps: 60,
scenes: [
{
duration: 10,
layers: [
{
type: "video",
src: "/assets/background.mp4",
fit: "cover",
},
{
type: "text",
text: "{{headline}}",
fontSize: 64,
color: "#ffffff",
fontFamily: "Inter",
position: { x: 960, y: 540 },
animation: {
entrance: { type: "slideInUp", duration: 0.8 },
exit: { type: "fadeOut", duration: 0.5 },
},
},
],
},
],
inputs: {
headline: {
type: "text",
label: "Başlık",
default: "Ürününüz, Yüceltilmiş",
},
},
};
// Özel girişlerle render et
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/promo.mp4",
renderWaitTime: 2000, // Medyanın yüklenmesi için 2 saniye bekle
inputs: {
headline: "Yaz İndirimi — Her Şeyde %50 İndirim",
},
});
console.log(`Render edildi: ${result.outputPath}`);
console.log(`Süre: ${result.duration}s`);
console.log(`Dosya boyutu: ${(result.fileSize / 1024 / 1024).toFixed(2)} MB`);
Birçok şablonu sırayla işlemek için toplu API’yi kullanın:
import { NodeRenderer } from "@rendervid/renderer-node";
const renderer = new NodeRenderer();
const templates = [
{ template: socialTemplate, inputs: { name: "Alice" }, output: "alice.mp4" },
{ template: socialTemplate, inputs: { name: "Bob" }, output: "bob.mp4" },
{ template: socialTemplate, inputs: { name: "Carol" }, output: "carol.mp4" },
];
for (const job of templates) {
await renderer.render(job.template, {
format: "mp4",
quality: "standard",
outputPath: `/output/${job.output}`,
inputs: job.inputs,
});
}
Tek bir makinede gerçek paralel render için aşağıdaki Docker Yerel Render bölümüne bakın.
@rendervid/cloud-rendering paketi, bulut altyapısı üzerinde dağıtık, paralel render sağlar. Kareleri bir makinede sırayla render etmek yerine, bulut render işi aynı anda kare render eden birçok worker fonksiyonuna böler, ardından bunları nihai çıktıda birleştirir.
+------------------+
| Uygulamanız |
| (Koordinatör) |
+--------+---------+
|
| 1. Videoyu kare parçalarına böl
v
+--------+---------+
| Parça Bölücü |
+--------+---------+
|
| 2. Parçaları worker'lara dağıt
v
+--------+---+---+---+---+--------+
| Worker 1 | Worker 2 | Worker N |
| (Lambda/ | (Lambda/ | (Lambda/ |
| Azure/ | Azure/ | Azure/ |
| GCP) | GCP) | GCP) |
+-----+------+----+------+----+----+
| | |
| 3. Her worker karelerini render eder
v v v
+-----+------+----+------+----+----+
| Kareler | Kareler | Kareler|
| 001-030 | 031-060 | 061-090|
+-----+------+----+------+----+----+
| | |
+------+-----+-----+----+
|
v
+-------+--------+
| Birleştirici |
| (FFmpeg concat) |
+-------+---------+
|
| 4. Nihai videoda birleştir
v
+-------+---------+
| Nesne Depolama |
| S3 / Blob / GCS |
+------------------+
|
| 5. İndir veya sun
v
+-------+---------+
| Nihai Çıktı |
| video.mp4 |
+------------------+
Adım adım nasıl çalışır:
import { CloudRenderer } from "@rendervid/cloud-rendering";
const cloudRenderer = new CloudRenderer({
provider: "aws", // "aws" | "azure" | "gcp" | "docker"
quality: "standard", // "draft" | "standard" | "high"
downloadToLocal: true,
outputPath: "/output/final.mp4",
});
Tam yapılandırma arayüzü:
interface CloudRenderConfig {
provider: "aws" | "azure" | "gcp" | "docker";
quality: "draft" | "standard" | "high";
downloadToLocal: boolean;
outputPath: string;
awsConfig?: {
region: string;
s3Bucket: string;
s3Prefix: string;
};
azureConfig?: {
resourceGroup: string;
storageAccount: string;
containerName: string;
};
gcpConfig?: {
projectId: string;
bucketName: string;
region: string;
};
dockerConfig?: {
volumePath: string;
workersCount: number;
};
}
AWS Lambda en yaygın bulut dağıtım hedefidir. Her worker fonksiyonu ayrı bir Lambda çağrısında çalışır ve büyük ölçekli paralellik sağlar.
Ön koşullar:
Yapılandırma:
import { CloudRenderer } from "@rendervid/cloud-rendering";
const renderer = new CloudRenderer({
provider: "aws",
quality: "high",
downloadToLocal: true,
outputPath: "/output/video.mp4",
awsConfig: {
region: "us-east-1",
s3Bucket: "my-rendervid-output",
s3Prefix: "renders/",
},
});
const result = await renderer.render(template);
console.log(`${result.renderTime}ms içinde render edildi`);
console.log(`Kullanılan worker sayısı: ${result.workersUsed}`);
console.log(`Çıktı: ${result.outputUrl}`);
Tipik AWS Lambda yapılandırması:
const renderer = new CloudRenderer({
provider: "azure",
quality: "standard",
downloadToLocal: true,
outputPath: "/output/video.mp4",
azureConfig: {
resourceGroup: "rendervid-rg",
storageAccount: "rendervidstore",
containerName: "renders",
},
});
const result = await renderer.render(template);
const renderer = new CloudRenderer({
provider: "gcp",
quality: "standard",
downloadToLocal: true,
outputPath: "/output/video.mp4",
gcpConfig: {
projectId: "my-project-id",
bucketName: "rendervid-output",
region: "us-central1",
},
});
const result = await renderer.render(template);
| Sağlayıcı | Dakika Başına Maliyet | Saat Başına Maliyet | Notlar |
|---|---|---|---|
| AWS Lambda | ~$0.02 | ~$1.00 | 1ms hesaplama başına ödeme |
| Azure Functions | ~$0.02 | ~$1.00 | Tüketim planı fiyatlandırması |
| Google Cloud Functions | ~$0.02 | ~$1.00 | 100ms hesaplama başına ödeme |
| Docker (yerel) | Ücretsiz | Ücretsiz | Kendi donanımınızı kullanır |
Tüm bulut sağlayıcılar, geliştirme ve düşük hacimli üretim sırasında önemli render iş yüklerini kapsayan ücretsiz katmanlar sunar.
Bulut render, tek makineli sıralı render’a kıyasla 10-50 kat hızlanma sağlar. Tam hızlanma, worker sayısına, şablon karmaşıklığına ve video süresine bağlıdır.
| Video Süresi | Sıralı (1 makine) | Bulut (50 worker) | Hızlanma |
|---|---|---|---|
| 30 saniye | ~90 saniye | ~5 saniye | 18x |
| 2 dakika | ~6 dakika | ~15 saniye | 24x |
| 10 dakika | ~30 dakika | ~45 saniye | 40x |
| 30 dakika | ~90 dakika | ~2 dakika | 45x |
Daha uzun videolar paralellikten daha fazla faydalanır çünkü worker başlatma ve kare birleştirme ek yükü daha fazla kareye yayılır.
Docker tabanlı render, bulut render ile aynı paralel render mimarisini sunar, ancak tamamen yerel makinenizde çalışır. Tamamen ücretsizdir, bulut hesabı kullanmaz ve kendi sunuculu kurulumlar, geliştirme ve bulut maliyetleri olmadan paralel render isteyen ekipler için idealdir.
# Docker'ın yüklü ve çalışır durumda olduğundan emin olun
docker --version
# Bulut render paketini yükleyin
npm install @rendervid/cloud-rendering
import { CloudRenderer } from "@rendervid/cloud-rendering";
const renderer = new CloudRenderer({
provider: "docker",
quality: "high",
downloadToLocal: true,
outputPath: "/output/video.mp4",
dockerConfig: {
volumePath: "/tmp/rendervid-work",
workersCount: 8, // Paralel olarak çalıştırılacak Docker konteyner sayısı
},
});
const result = await renderer.render(template);
console.log(`${result.workersUsed} worker kullanılarak ${result.renderTime}ms içinde render edildi`);
workersCount Seçimi: Bunu makinenizdeki mevcut CPU çekirdek sayısına ayarlayın. Örneğin, 8 çekirdekli bir makine 8 worker ile iyi çalışır. Çekirdek sayınızın ötesine geçmek, verimi artırmadan bağlam değiştirmeden kaynaklanan ek yük ekler.
+------------------+
| Koordinatör |
| (süreciniz) |
+--------+---------+
|
+-----+-----+-----+-----+
| | | | |
+--v--+ +--v-+ +-v--+ +-v--+
| C1 | | C2 | | C3 | | C4 | ... Docker konteynerleri
+--+--+ +--+-+ +-+--+ +-+--+
| | | |
v v v v
+--+------+-----+------+--+
| Paylaşılan Volume |
| /tmp/rendervid-work |
+-------------+-------------+
|
v
+-------+--------+
| Birleştirici |
+-------+---------+
|
v
+-------+---------+
| /output/video |
+-----------------+
Her Docker konteyneri, Node.js, Playwright ve FFmpeg önceden yüklenmiş bağımsız bir worker’dır. Worker’lar kare atamalarını paylaşılan volume’den okur, kareleri render eder ve sonuçları geri yazar. Koordinatör daha sonra tüm segmentleri nihai çıktıda birleştirir.
Rendervid, temporal supersampling yoluyla motion blur destekler. Kare başına tek bir anı render etmek yerine, renderer zamanda hafifçe farklı noktalarda birden fazla alt kare yakalar ve bunları birleştirir. Bu, kameralar nesneler hareket ederken pozlama sırasında oluşturdukları doğal bulanıklığı üretir.
| Ön Ayar | Kare Başına Örnek | Render Süresi Çarpanı | Görsel Kalite |
|---|---|---|---|
low | 5 | 5x | Hafif yumuşatma |
medium | 10 | 10x | Hızlı harekette belirgin blur |
high | 16 | 16x | Sinematik motion blur |
ultra | 32 | 32x | Film kalitesinde, yoğun blur |
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/cinematic.mp4",
motionBlur: {
enabled: true,
quality: "high", // Kare başına 16 örnek
},
});
Kare N (motion blur yok): Kare N (motion blur ile, 5 örnek):
Tek an: 5 alt kare birleştirilmiş:
+--------+ +--------+ +--------+ +--------+
| O | | O | + | O | + | O | ...
+--------+ +--------+ +--------+ +--------+
|
v
+--------+
| ~O~ | <- Birleştirilmiş sonuç
+--------+
Her alt kare, animasyon zaman çizelgesini küçük bir artışla ilerletir (1/fps, örnek sayısına bölünür). Alt kareler daha sonra nihai kareyi üretmek için alfa karıştırılır. Alt kareler arasında hareket eden nesneler hareket yolları boyunca bulanık görünürken, sabit elemanlar keskin kalır.
Motion blur, render süresini örnek sayısıyla orantılı olarak çarpar. 30 fps’de 10 saniyelik bir videoda 300 kare vardır. high kalite (16 örnek) ile renderer, 300 yerine 4.800 alt kare üretmelidir. Geliştirme sırasında draft kalitesini kullanın ve yalnızca nihai dışa aktarmalar için high veya ultra‘ya geçin.
Bulut render ve Docker paralel render, motion blur ile iyi çalışır çünkü kare başına maliyet worker’lar arasında dağıtılır. Worker’lar arasında bölünmüş kare başına 16 kat artış, bir makinede blur olmayan bir render ile kabaca aynı toplam render süresine yol açar.
Rendervid’in GIF dışa aktarması, basit bir kareden GIF’e dönüşümün çok ötesine geçer. Yapılandırılabilir dithering, renk sayıları ve dosya boyutu kısıtlamaları ile optimize edilmiş, yüksek kaliteli animasyonlu GIF’ler üretmek için FFmpeg’in palet oluşturma hattını kullanır.
Standart GIF kodlaması, genellikle bantlama ve zayıf renk üretimine yol açan 256 renkten oluşan tek bir global palet kullanır. Rendervid iki geçişli bir yaklaşım kullanır:
| Ön Ayar | Çözünürlük | Maks Renk | Hedef Kullanım Durumu |
|---|---|---|---|
social | 480x480 | 256 | Instagram, Twitter, Slack |
web | 640x480 | 256 | Blog yazıları, dokümantasyon |
email | 320x240 | 128 | E-posta kampanyaları, bültenler |
| Algoritma | Kalite | Dosya Boyutu | Açıklama |
|---|---|---|---|
floyd_steinberg | En İyi | En Büyük | Hata yayılım dithering, yumuşak geçişler |
bayer | İyi | Orta | Sıralı dithering, tutarlı desen |
none | En Düşük | En Küçük | Dithering yok, düz renk bölgeleri |
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/animation.gif",
gif: {
preset: "social", // 480x480 çözünürlük
colors: 256, // 2-256 renk paleti
dithering: "floyd_steinberg",
targetSizeKB: 5000, // 5MB altında kalmak için otomatik optimize et
fps: 15, // Daha düşük FPS = daha küçük dosya
},
});
console.log(`GIF boyutu: ${(result.fileSize / 1024).toFixed(0)} KB`);
console.log(`Tahmini boyut: ${result.estimatedSizeKB} KB`);
Bir targetSizeKB ayarladığınızda, Rendervid render etmeden önce çıktı dosya boyutunu tahmin eder ve hedefe ulaşmak için parametreleri (renk sayısı, çözünürlük, FPS) otomatik olarak ayarlar. Bu, özellikle dosya boyutu sınırları olan platformlar için kullanışlıdır (örneğin, Slack’in 50 MB sınırı, e-postanın tipik 10 MB kısıtlaması).
// 2MB e-posta kısıtlamasına sığdırmak için otomatik optimize et
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/email-banner.gif",
gif: {
preset: "email",
targetSizeKB: 2000,
},
});
Rendervid, 13 paketten oluşan bir monorepo olarak organize edilmiştir. Her paket odaklanmış bir sorumluluğa sahiptir ve her dağıtım senaryosunu desteklemek için bir araya gelirler.
@rendervid/
├── core Motor, tipler, doğrulama, animasyon sistemi
│ ├── Şablon ayrıştırıcı ve doğrulayıcı (AJV + JSON Schema)
│ ├── Animasyon motoru (40+ ön ayar, 30+ yumuşatma fonksiyonu)
│ ├── Katman sistemi (text, image, video, shape, audio, group, lottie, custom)
│ └── Sahne yönetimi ve geçişler (17 tip)
│
├── renderer-browser İstemci tarafı render
│ ├── Canvas tabanlı kare render
│ ├── WebM dışa aktarma için MediaRecorder
│ └── WebAssembly MP4 kodlayıcı
│
├── renderer-node Sunucu tarafı render
│ ├── Playwright/Puppeteer başsız tarayıcı
│ ├── FFmpeg entegrasyonu (fluent-ffmpeg)
│ ├── GPU hızlandırma
│ └── GIF optimizasyon hattı
│
├── cloud-rendering Çoklu bulut orkestrasyon
│ ├── AWS Lambda sağlayıcı
│ ├── Azure Functions sağlayıcı
│ ├── Google Cloud Functions sağlayıcı
│ ├── Docker yerel sağlayıcı
│ ├── Parça bölücü ve birleştirici
│ └── Nesne depolama adaptörleri (S3, Blob, GCS)
│
├── player Video/şablon oynatıcı bileşeni
├── editor Görsel şablon editörü (Zustand state)
├── components Önceden oluşturulmuş React bileşenleri
│ ├── AnimatedLineChart
│ ├── AuroraBackground
│ ├── WaveBackground
│ ├── SceneTransition
│ └── TypewriterEffect
│
├── templates Şablon tanımları ve örnekler (100+)
├── testing Test yardımcı araçları
│ ├── Vitest özel eşleştiriciler
│ ├── Snapshot test yardımcıları
│ └── Görsel regresyon yardımcı araçları
│
├── editor-playground Editör geliştirme ortamı
├── player-playground Oynatıcı geliştirme ortamı
├── mcp Model Context Protocol sunucusu
└── docs VitePress dokümantasyon sitesi
renderer-node‘u sarar ve işini bulut fonksiyonları veya Docker konteynerleri arasında dağıtır.Rendervid, güvenilirlik, performans ve geliştirici deneyimi için seçilmiş modern bir TypeScript yığını üzerine inşa edilmiştir.
| Katman | Teknoloji | Amaç |
|---|---|---|
| Dil | TypeScript | Tüm 13 pakette tip güvenliği |
| Derleme | tsup, Vite | Hızlı derlemeler, tree-shaking, ESM/CJS çıktı |
| Test | Vitest | Birim testler, snapshot testler, özel eşleştiriciler |
| UI Framework | React 18.3.1 | Bileşen render, şablon kompozisyon |
| State Yönetimi | Zustand | Editör state (hafif, boilerplate yok) |
| Stil | Tailwind CSS | Editör ve oynatıcı UI |
| Doğrulama | AJV ile JSON Schema | Render etmeden önce şablon doğrulama |
| Tarayıcı Render | HTML Canvas API | Tarayıcıda kare kare çizim |
| Başsız Tarayıcı | Playwright, Puppeteer | Sunucu tarafı kare yakalama |
| Video Kodlama | FFmpeg (fluent-ffmpeg) | H.264, H.265, VP9, ProRes, GIF kodlama |
| 3D Grafik | Three.js (isteğe bağlı), CSS 3D | 3D sahneler ve perspektif dönüşümler |
| Dokümantasyon | VitePress | Paket dokümantasyon sitesi |
Rendervid, şablonları doğrulamak için özel Vitest eşleştiricileri, snapshot test yardımcıları ve görsel regresyon yardımcı araçları sağlayan özel bir test paketi (@rendervid/testing) içerir.
import { describe, it, expect } from "vitest";
import "@rendervid/testing/matchers";
describe("Ürün Vitrin Şablonu", () => {
it("geçerli bir şablon olmalı", () => {
expect(template).toBeValidTemplate();
});
it("doğru boyutlara sahip olmalı", () => {
expect(template).toHaveResolution(1920, 1080);
});
it("en az bir metin katmanı içermeli", () => {
expect(template).toContainLayerOfType("text");
});
it("başlıkta animasyonlar olmalı", () => {
expect(template.scenes[0].layers[0]).toHaveAnimation("entrance");
});
});
Snapshot test, bir şablonu görüntüye render eder ve saklanan bir referansla karşılaştırır. Herhangi bir görsel değişiklik testin başarısız olmasına neden olur, bu da istenmeyen regresyonları yakalamanı kolaylaştırır.
import { describe, it } from "vitest";
import { renderSnapshot } from "@rendervid/testing";
describe("Şablon Görsel Regresyon", () => {
it("kare 0'da referans snapshot ile eşleşmeli", async () => {
const snapshot = await renderSnapshot(template, { frame: 0 });
expect(snapshot).toMatchImageSnapshot();
});
it("orta noktada referans snapshot ile eşleşmeli", async () => {
const totalFrames = template.fps * template.scenes[0].duration;
const snapshot = await renderSnapshot(template, {
frame: Math.floor(totalFrames / 2),
});
expect(snapshot).toMatchImageSnapshot();
});
});
Render değişikliklerini üretime ulaşmadan önce yakalamak için görsel regresyon testlerini CI/CD hattınıza entegre edin:
# .github/workflows/visual-regression.yml
name: Görsel Regresyon Testleri
on: [pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18
- run: npx playwright install chromium
- run: npm ci
- run: npm run test:visual
Mümkün olan en hızlı render sürelerini elde etmek, zamanın nerede harcandığını ve hangi kolları çekebileceğinizi anlamayı gerektirir. İşte en etkili optimizasyon stratejileri.
| Senaryo | En İyi Hedef |
|---|---|
| Düzenleme sırasında hızlı önizleme | Tarayıcı |
| Tek video, üretim kalitesi | Node.js |
| 10-100 video toplu işi | Node.js veya Docker |
| 100+ video toplu işi veya zaman kritik | Bulut (AWS/Azure/GCP) |
draft kalitesini kullanın. Yalnızca nihai dışa aktarmalar için high veya lossless‘e geçin.renderWaitTime‘ı Akıllıca KullanınrenderWaitTime seçeneği, harici medyanın (görseller, videolar, fontlar) yüklenmesine izin vermek için render işlemini duraklatır. Bunu, tüm varlıkların yüklendiğinden emin olan minimum değere ayarlayın. 500-2000ms değeri tipiktir. Çok yüksek ayarlamak her karede zaman kaybeder.
await renderer.render(template, {
renderWaitTime: 1000, // 1 saniye genellikle yeterlidir
});
10 saniyeden uzun herhangi bir video için paralel render (Docker veya bulut), sıralı render’dan daha hızlı olacaktır. Başa baş noktası donanımınıza ve bulut yapılandırmanıza bağlıdır, ancak genel bir kural olarak:
GIF’ler doğası gereği büyüktür. Dosya boyutlarını yönetilebilir tutmak için:
social, web, email) kullanarak çözünürlüğü azaltın.targetSizeKB kullanın.none).Uyumlu GPU’lara sahip makinelerde, donanım hızlandırmalı kodlama, kodlama adımı için render sürelerini 2-5 kat azaltabilir. Bu, yüksek çözünürlüklü (4K+) ve yüksek bitrate çıktılar için en etkilidir.
Şablonunuz harici görsellere veya videolara referans veriyorsa, render etmeden önce bunları yerel depolamaya önceden indirin. Render sırasındaki ağ gecikmesi, yavaş veya başarısız render’ların en yaygın nedenidir.
Sizinki gibi şirketlere akıllı chatbotlar, MCP Sunucuları, AI araçları veya organizasyonunuzdaki tekrarlanan görevlerde insanları değiştirmek için diğer AI otomasyon türlerini geliştirmede yardım ediyoruz.

Rendervid şablon sistemine kapsamlı rehber. JSON video şablonları oluşturmayı, {{variable}} sözdizimi ile dinamik değişkenler kullanmayı, 40+ animasyon ön ayarı...

Tüm Rendervid bileşenlerini keşfedin: 8 yerleşik katman tipi (metin, resim, video, şekil, ses, grup, lottie, özel), önceden hazırlanmış React bileşenleri, görse...

Programatik video üretimi için Remotion'a ücretsiz açık kaynak alternatif Rendervid'i keşfedin. MCP entegrasyonu, JSON şablonları, bulut rendering ve lisans ücr...
Çerez Onayı
Göz atma deneyiminizi geliştirmek ve trafiğimizi analiz etmek için çerezleri kullanıyoruz. See our privacy policy.