
Sistemul de Șabloane Rendervid - Șabloane JSON, Variabile, Animații și Tranziții
Ghid complet pentru sistemul de șabloane Rendervid. Învață cum să creezi șabloane video JSON, să folosești variabile dinamice cu sintaxa {{variable}}, să config...

Implementați Rendervid oriunde: randare în browser pentru previzualizări, Node.js pentru procesare batch pe server sau randare cloud pe AWS Lambda, Azure Functions, GCP și Docker pentru randare paralelă de 10-50x mai rapidă.
Rendervid este conceput pentru a randa oriunde cere fluxul dumneavoastră de lucru. Fie că aveți nevoie de previzualizări instant în browser, codificare video de calitate profesională pe un server sau randare masiv paralelă pe infrastructură cloud, Rendervid oferă un pachet dedicat pentru fiecare mediu. Fiecare țintă de implementare partajează același sistem de șabloane și bibliotecă de componente , astfel încât un șablon care funcționează în browser funcționează identic pe AWS Lambda sau într-un container Docker.
Acest ghid acoperă toate cele patru medii de implementare, opțiunile de randare disponibile în fiecare și funcții avansate precum motion blur, export GIF și optimizarea performanței. La final, veți ști exact ce cale de implementare se potrivește proiectului dumneavoastră și cum să o configurați.
+---------------------+
| Șablon JSON |
+----------+----------+
|
+--------------------+--------------------+
| | |
+--------v--------+ +-------v--------+ +-------v---------+
| Browser | | Node.js | | Cloud |
| @rendervid/ | | @rendervid/ | | @rendervid/ |
| renderer-browser | | renderer-node | | cloud-rendering |
+---------+--------+ +-------+--------+ +-------+---------+
| | |
Canvas / WebM FFmpeg / Playwright Parallel Workers
| | |
+---------v--------+ +------v---------+ +-------v---------+
| MP4, WebM, PNG, | | MP4, WebM, MOV,| | AWS Lambda |
| JPEG, WebP | | GIF, H.265 | | Azure Functions |
+------------------+ +----------------+ | GCP Functions |
| Docker |
+-----------------+
Pachetul @rendervid/renderer-browser gestionează randarea pe partea clientului în întregime în browserul utilizatorului. Nu este necesară infrastructură de server. Aceasta face ca să fie cea mai rapidă cale de la șablon la previzualizare.
npm install @rendervid/renderer-browser
Randarea în browser folosește API-ul HTML Canvas pentru a desena fiecare cadru al șablonului. Renderul parcurge fiecare scenă și strat, aplică animații și funcții de easing, compune rezultatul pe un element canvas și capturează fiecare cadru. Pentru ieșirea video, cadrele sunt codificate folosind API-ul integrat al browserului MediaRecorder (WebM) sau un encoder MP4 bazat pe WebAssembly.
| Format | Extensie | Note |
|---|---|---|
| MP4 | .mp4 | H.264 prin encoder WebAssembly |
| WebM | .webm | VP8/VP9 prin API MediaRecorder |
| PNG | .png | Cadru unic sau secvență imagine |
| JPEG | .jpeg | Cadru unic, calitate configurabilă |
| WebP | .webp | Cadru unic, dimensiune fișier mai mică |
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: "Salut din Browser",
fontSize: 72,
color: "#ffffff",
position: { x: 960, y: 540 },
animation: {
entrance: { type: "fadeIn", duration: 1 },
},
},
],
},
],
};
// Randare la un element canvas pentru previzualizare
const canvas = document.getElementById("preview") as HTMLCanvasElement;
await renderer.preview(template, canvas);
// Export ca MP4
const mp4Blob = await renderer.render(template, {
format: "mp4",
quality: "standard",
});
// Export un singur cadru ca PNG
const pngBlob = await renderer.renderFrame(template, {
format: "png",
frameNumber: 0,
});
Pachetul @rendervid/renderer-node oferă randare pe server cu integrare completă FFmpeg. Folosește Playwright sau Puppeteer pentru a randa fiecare cadru într-un browser fără interfață grafică, apoi trimite cadrele către FFmpeg pentru codificare video de calitate profesională.
# Instalați renderul
npm install @rendervid/renderer-node
# Instalați Playwright (include binare browser)
npx playwright install chromium
# Instalați FFmpeg (necesar pentru codificarea video)
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt-get install ffmpeg
# Windows (prin Chocolatey)
choco install ffmpeg
| Format | Extensie | Codec | Note |
|---|---|---|---|
| MP4 | .mp4 | H.264 | Compatibilitate universală |
| MP4 | .mp4 | H.265/HEVC | Fișiere cu 50% mai mici, dispozitive mai noi |
| WebM | .webm | VP8/VP9 | Optimizat pentru web |
| MOV | .mov | ProRes | Fluxuri de lucru editare profesională |
| GIF | .gif | Bazat pe paletă | Animat cu optimizare |
| PNG | .png | Fără pierderi | Secvență imagine sau cadru unic |
| JPEG | .jpeg | Cu pierderi | Calitate configurabilă |
| WebP | .webp | Cu/fără pierderi | Format web modern |
Rendervid oferă patru preseturi de calitate care controlează parametrii de codificare:
| Preset | Bitrate | Caz de Utilizare |
|---|---|---|
draft | Scăzut | Previzualizări rapide în timpul dezvoltării |
standard | Mediu | Ieșire pentru uz general, calitate/dimensiune bună |
high | Mare | Materiale marketing, livrabile finale |
lossless | Maxim | Arhivare, editare ulterioară, fără pierdere calitate |
Renderul Node.js suportă accelerare hardware pentru a delega codificarea către GPU. Aceasta reduce semnificativ timpul de randare pentru șabloane complexe cu multe straturi, rezoluții mari și efecte.
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/video.mp4",
hardwareAcceleration: true,
});
Accelerarea GPU este disponibilă pe sisteme cu hardware compatibil NVIDIA (NVENC), AMD (AMF) sau Intel (Quick Sync). FFmpeg trebuie compilat cu suportul pentru encoderul corespunzător.
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: "Titlu",
default: "Produsul Dumneavoastră, Îmbunătățit",
},
},
};
// Randare cu intrări personalizate
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/promo.mp4",
renderWaitTime: 2000, // Așteptați 2s pentru încărcarea media
inputs: {
headline: "Vânzare de Vară — 50% Reducere la Tot",
},
});
console.log(`Randat: ${result.outputPath}`);
console.log(`Durată: ${result.duration}s`);
console.log(`Dimensiune fișier: ${(result.fileSize / 1024 / 1024).toFixed(2)} MB`);
Pentru procesarea multor șabloane în secvență, folosiți API-ul batch:
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,
});
}
Pentru randare cu adevărat paralelă pe o singură mașină, consultați secțiunea Randare Locală Docker de mai jos.
Pachetul @rendervid/cloud-rendering permite randare distribuită, paralelă pe infrastructură cloud. În loc să randeze cadre secvențial pe o mașină, randarea cloud împarte munca pe multe funcții worker care randează cadre simultan, apoi le îmbină în ieșirea finală.
+------------------+
| Aplicația Ta |
| (Coordonator) |
+--------+---------+
|
| 1. Împarte videoclipul în bucăți de cadre
v
+--------+---------+
| Chunk Splitter |
+--------+---------+
|
| 2. Distribuie bucățile către workeri
v
+--------+---+---+---+---+--------+
| Worker 1 | Worker 2 | Worker N |
| (Lambda/ | (Lambda/ | (Lambda/ |
| Azure/ | Azure/ | Azure/ |
| GCP) | GCP) | GCP) |
+-----+------+----+------+----+----+
| | |
| 3. Fiecare worker randează cadrele sale
v v v
+-----+------+----+------+----+----+
| Cadre | Cadre | Cadre |
| 001-030 | 031-060 | 061-090|
+-----+------+----+------+----+----+
| | |
+------+-----+-----+----+
|
v
+-------+--------+
| Merger |
| (FFmpeg concat) |
+-------+---------+
|
| 4. Combină în videoclipul final
v
+-------+---------+
| Object Storage |
| S3 / Blob / GCS |
+------------------+
|
| 5. Descarcă sau servește
v
+-------+---------+
| Ieșire Finală |
| video.mp4 |
+------------------+
Cum funcționează pas cu pas:
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",
});
Interfața completă de configurare:
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 este cea mai comună țintă de implementare cloud. Fiecare funcție worker rulează într-o invocare Lambda separată, permițând paralelism masiv.
Prerequisite:
Configurare:
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(`Randat în ${result.renderTime}ms`);
console.log(`Workeri folosiți: ${result.workersUsed}`);
console.log(`Ieșire: ${result.outputUrl}`);
Configurare tipică AWS Lambda:
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);
| Furnizor | Cost pe Minut | Cost pe Oră | Note |
|---|---|---|---|
| AWS Lambda | ~0,02 USD | ~1,00 USD | Plată pe 1ms de calcul |
| Azure Functions | ~0,02 USD | ~1,00 USD | Prețuri plan consum |
| Google Cloud Functions | ~0,02 USD | ~1,00 USD | Plată pe 100ms de calcul |
| Docker (local) | Gratuit | Gratuit | Folosește propriul hardware |
Toți furnizorii cloud oferă niveluri gratuite care acoperă sarcini de randare semnificative în timpul dezvoltării și producției cu volum redus.
Randarea cloud realizează o accelerare de 10-50x comparativ cu randarea secvențială pe o singură mașină. Accelerarea exactă depinde de numărul de workeri, complexitatea șablonului și durata videoclipului.
| Durată Video | Secvențial (1 mașină) | Cloud (50 workeri) | Accelerare |
|---|---|---|---|
| 30 secunde | ~90 secunde | ~5 secunde | 18x |
| 2 minute | ~6 minute | ~15 secunde | 24x |
| 10 minute | ~30 minute | ~45 secunde | 40x |
| 30 minute | ~90 minute | ~2 minute | 45x |
Videoclipurile mai lungi beneficiază mai mult de paralelism deoarece overhead-ul pornirii workerilor și îmbinării cadrelor este amortizat pe mai multe cadre.
Randarea bazată pe Docker vă oferă aceeași arhitectură de randare paralelă ca randarea cloud, dar rulând în întregime pe mașina locală. Este complet gratuită, nu folosește conturi cloud și este ideală pentru configurații self-hosted, dezvoltare și echipe care doresc randare paralelă fără costuri cloud.
# Asigurați-vă că Docker este instalat și rulează
docker --version
# Instalați pachetul cloud rendering
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, // Numărul de containere Docker care rulează în paralel
},
});
const result = await renderer.render(template);
console.log(`Randat în ${result.renderTime}ms folosind ${result.workersUsed} workeri`);
Alegerea workersCount: Setați aceasta la numărul de nuclee CPU disponibile pe mașina dumneavoastră. De exemplu, o mașină cu 8 nuclee funcționează bine cu 8 workeri. Depășirea numărului de nuclee adaugă overhead de la schimbarea contextului fără a îmbunătăți throughput-ul.
+------------------+
| Coordonator |
| (procesul tău) |
+--------+---------+
|
+-----+-----+-----+-----+
| | | | |
+--v--+ +--v-+ +-v--+ +-v--+
| C1 | | C2 | | C3 | | C4 | ... Containere Docker
+--+--+ +--+-+ +-+--+ +-+--+
| | | |
v v v v
+--+------+-----+------+--+
| Volum Partajat |
| /tmp/rendervid-work |
+-------------+-------------+
|
v
+-------+--------+
| Merger |
+-------+---------+
|
v
+-------+---------+
| /output/video |
+-----------------+
Fiecare container Docker este un worker autonom cu Node.js, Playwright și FFmpeg pre-instalate. Workerii citesc alocările lor de cadre din volumul partajat, randează cadrele și scriu rezultatele înapoi. Coordonatorul apoi îmbină toate segmentele în ieșirea finală.
Rendervid suportă motion blur prin supersampling temporal. În loc să randeze un singur instant pe cadru, renderul capturează mai multe sub-cadre la momente ușor diferite în timp și le combină împreună. Aceasta produce blur-ul natural pe care camerele îl creează când obiectele se mișcă în timpul unei expuneri.
| Preset | Mostre pe Cadru | Multiplicator Timp Randare | Calitate Vizuală |
|---|---|---|---|
low | 5 | 5x | Netezire subtilă |
medium | 10 | 10x | Blur vizibil la mișcare rapidă |
high | 16 | 16x | Motion blur cinematic |
ultra | 32 | 32x | Calitate film, blur puternic |
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/cinematic.mp4",
motionBlur: {
enabled: true,
quality: "high", // 16 mostre pe cadru
},
});
Cadrul N (fără motion blur): Cadrul N (cu motion blur, 5 mostre):
Instant unic: 5 sub-cadre combinate:
+--------+ +--------+ +--------+ +--------+
| O | | O | + | O | + | O | ...
+--------+ +--------+ +--------+ +--------+
|
v
+--------+
| ~O~ | <- Rezultat combinat
+--------+
Fiecare sub-cadru avansează cronologia animației cu un increment minuscul (1/fps împărțit la numărul de mostre). Sub-cadrele sunt apoi combinate alpha pentru a produce cadrul final. Obiectele care s-au mișcat între sub-cadre apar blur-ate de-a lungul traiectoriei de mișcare, în timp ce elementele staționare rămân clare.
Motion blur-ul multiplică timpul de randare proporțional cu numărul de mostre. Un video de 10 secunde la 30fps are 300 cadre. Cu calitate high (16 mostre), renderul trebuie să genereze 4.800 sub-cadre în loc de 300. Folosiți calitatea draft în timpul dezvoltării și treceți la high sau ultra doar pentru exporturi finale.
Randarea cloud și randarea paralelă Docker funcționează bine cu motion blur deoarece costul pe cadru este distribuit pe workeri. O creștere de 16x pe cadru împărțită pe 16 workeri rezultă în aproximativ același timp total de randare ca o randare fără blur pe o mașină.
Exportul GIF al Rendervid depășește cu mult o simplă conversie cadru-la-GIF. Folosește pipeline-ul de generare paletă al FFmpeg pentru a produce GIF-uri animate optimizate, de înaltă calitate, cu dithering configurabil, număr de culori și constrângeri de dimensiune fișier.
Codificarea GIF standard folosește o singură paletă globală de 256 culori, ceea ce rezultă adesea în benzi și reproducere slabă a culorilor. Rendervid folosește o abordare în două treceri:
| Preset | Rezoluție | Culori Max | Caz de Utilizare Țintă |
|---|---|---|---|
social | 480x480 | 256 | Instagram, Twitter, Slack |
web | 640x480 | 256 | Postări blog, documentație |
email | 320x240 | 128 | Campanii email, newsletter-uri |
| Algorithm | Calitate | Dimensiune Fișier | Descriere |
|---|---|---|---|
floyd_steinberg | Cea mai bună | Cea mai mare | Dithering difuzie eroare, gradiente netede |
bayer | Bună | Medie | Dithering ordonat, pattern consistent |
none | Cea mai scăzută | Cea mai mică | Fără dithering, regiuni culoare plate |
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/animation.gif",
gif: {
preset: "social", // rezoluție 480x480
colors: 256, // paletă culori 2-256
dithering: "floyd_steinberg",
targetSizeKB: 5000, // Auto-optimizare pentru a rămâne sub 5MB
fps: 15, // FPS mai mic = fișier mai mic
},
});
console.log(`Dimensiune GIF: ${(result.fileSize / 1024).toFixed(0)} KB`);
console.log(`Dimensiunea estimată a fost: ${result.estimatedSizeKB} KB`);
Când setați un targetSizeKB, Rendervid estimează dimensiunea fișierului de ieșire înainte de randare și ajustează automat parametrii (număr culori, rezoluție, FPS) pentru a îndeplini ținta. Acest lucru este deosebit de util pentru platforme cu limite de dimensiune fișier (de ex., limita de 50 MB a Slack, constrângerea tipică de 10 MB a email-ului).
// Auto-optimizare pentru a se încadra în constrângerea de 2MB a email-ului
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/email-banner.gif",
gif: {
preset: "email",
targetSizeKB: 2000,
},
});
Rendervid este organizat ca un monorepo cu 13 pachete. Fiecare pachet are o responsabilitate focalizată și se compun împreună pentru a suporta fiecare scenariu de implementare.
@rendervid/
├── core Motor, tipuri, validare, sistem animație
│ ├── Parser și validator șablon (AJV + JSON Schema)
│ ├── Motor animație (40+ preseturi, 30+ funcții easing)
│ ├── Sistem straturi (text, imagine, video, formă, audio, grup, lottie, personalizat)
│ └── Gestionare scene și tranziții (17 tipuri)
│
├── renderer-browser Randare partea clientului
│ ├── Randare cadre bazată pe Canvas
│ ├── MediaRecorder pentru export WebM
│ └── Encoder MP4 WebAssembly
│
├── renderer-node Randare partea serverului
│ ├── Browser fără interfață Playwright/Puppeteer
│ ├── Integrare FFmpeg (fluent-ffmpeg)
│ ├── Accelerare GPU
│ └── Pipeline optimizare GIF
│
├── cloud-rendering Orchestrare multi-cloud
│ ├── Furnizor AWS Lambda
│ ├── Furnizor Azure Functions
│ ├── Furnizor Google Cloud Functions
│ ├── Furnizor Docker local
│ ├── Splitter și merger bucăți
│ └── Adaptoare object storage (S3, Blob, GCS)
│
├── player Componentă player video/șablon
├── editor Editor vizual șablon (stare Zustand)
├── components Componente React pre-construite
│ ├── AnimatedLineChart
│ ├── AuroraBackground
│ ├── WaveBackground
│ ├── SceneTransition
│ └── TypewriterEffect
│
├── templates Definiții șabloane și exemple (100+)
├── testing Utilitare testare
│ ├── Matcher-e personalizate Vitest
│ ├── Helper-e testare snapshot
│ └── Utilitare regresie vizuală
│
├── editor-playground Mediu dezvoltare editor
├── player-playground Mediu dezvoltare player
├── mcp Server Model Context Protocol
└── docs Site documentație VitePress
renderer-node și distribuie munca sa pe funcții cloud sau containere Docker.Rendervid este construit pe un stack TypeScript modern ales pentru fiabilitate, performanță și experiență dezvoltator.
| Strat | Tehnologie | Scop |
|---|---|---|
| Limbaj | TypeScript | Siguranță tipuri pe toate cele 13 pachete |
| Build | tsup, Vite | Build-uri rapide, tree-shaking, ieșire ESM/CJS |
| Testare | Vitest | Teste unitate, teste snapshot, matcher-e personalizate |
| Framework UI | React 18.3.1 | Randare componente, compoziție șabloane |
| Gestionare Stare | Zustand | Stare editor (ușor, fără boilerplate) |
| Styling | Tailwind CSS | UI editor și player |
| Validare | AJV cu JSON Schema | Validare șablon înainte de randare |
| Randare Browser | API HTML Canvas | Desenare cadru cu cadru în browser |
| Browser Fără Interfață | Playwright, Puppeteer | Capturare cadre pe server |
| Codificare Video | FFmpeg (fluent-ffmpeg) | Codificare H.264, H.265, VP9, ProRes, GIF |
| Grafică 3D | Three.js (opțional), CSS 3D | Scene 3D și transformări perspectivă |
| Documentație | VitePress | Site documentație pachet |
Rendervid include un pachet dedicat de testare (@rendervid/testing) care oferă matcher-e personalizate Vitest, helper-e testare snapshot și utilitare regresie vizuală pentru validarea șabloanelor.
import { describe, it, expect } from "vitest";
import "@rendervid/testing/matchers";
describe("Șablon Prezentare Produs", () => {
it("ar trebui să fie un șablon valid", () => {
expect(template).toBeValidTemplate();
});
it("ar trebui să aibă dimensiunile corecte", () => {
expect(template).toHaveResolution(1920, 1080);
});
it("ar trebui să conțină cel puțin un strat text", () => {
expect(template).toContainLayerOfType("text");
});
it("ar trebui să aibă animații pe titlu", () => {
expect(template.scenes[0].layers[0]).toHaveAnimation("entrance");
});
});
Testarea snapshot randează un șablon la o imagine și o compară cu o referință stocată. Orice schimbare vizuală determină eșuarea testului, facilitând detectarea regresiilor neintenționate.
import { describe, it } from "vitest";
import { renderSnapshot } from "@rendervid/testing";
describe("Regresie Vizuală Șablon", () => {
it("ar trebui să se potrivească cu snapshot-ul de referință la cadrul 0", async () => {
const snapshot = await renderSnapshot(template, { frame: 0 });
expect(snapshot).toMatchImageSnapshot();
});
it("ar trebui să se potrivească cu snapshot-ul de referință la mijloc", async () => {
const totalFrames = template.fps * template.scenes[0].duration;
const snapshot = await renderSnapshot(template, {
frame: Math.floor(totalFrames / 2),
});
expect(snapshot).toMatchImageSnapshot();
});
});
Integrați teste de regresie vizuală în pipeline-ul CI/CD pentru a detecta schimbările de randare înainte ca acestea să ajungă în producție:
# .github/workflows/visual-regression.yml
name: Teste Regresie Vizuală
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
Obținerea celor mai rapide timpi de randare posibili necesită înțelegerea unde se petrece timpul și ce pârghii puteți acționa. Iată cele mai impactante strategii de optimizare.
| Scenariu | Țintă Optimă |
|---|---|
| Previzualizare rapidă în timpul editării | Browser |
| Video unic, calitate producție | Node.js |
| Lot de 10-100 videoclipuri | Node.js sau Docker |
| Lot de 100+ videoclipuri sau critic timp | Cloud (AWS/Azure/GCP) |
draft în timpul dezvoltării și testării. Treceți la high sau lossless doar pentru exporturi finale.renderWaitTime cu ÎnțelepciuneOpțiunea renderWaitTime pune pauză randarea pentru a permite încărcarea media externe (imagini, videoclipuri, fonturi). Setați aceasta la valoarea minimă care asigură că toate resursele sunt încărcate. O valoare de 500-2000ms este tipică. Setarea ei prea mare pierde timp pe fiecare cadru.
await renderer.render(template, {
renderWaitTime: 1000, // 1 secundă este de obicei suficient
});
Pentru orice video mai lung de 10 secunde, randarea paralelă (Docker sau cloud) va fi mai rapidă decât randarea secvențială. Punctul de echilibru depinde de hardware-ul și configurația cloud, dar ca regulă generală:
GIF-urile sunt în mod inerent mari. Pentru a menține dimensiunile fișierelor gestionabile:
social, web, email).targetSizeKB pentru a permite Rendervid să auto-optimizeze parametrii.none) dacă dimensiunea fișierului contează mai mult decât calitatea gradientului.Pe mașini cu GPU-uri compatibile, codificarea accelerată hardware poate reduce timpii de randare cu 2-5x pentru pasul de codificare. Acest lucru are cel mai mare impact pentru ieșiri de înaltă rezoluție (4K+) și bitrate mare.
Dacă șablonul dumneavoastră referențiază imagini sau videoclipuri externe, pre-descărcați-le în stocare locală înainte de randare. Latența rețelei în timpul randării este cea mai comună cauză a randărilor lente sau eșuate.
Rendervid suportă patru opțiuni de implementare: randare în browser pentru previzualizări pe partea clientului și aplicații web, randare Node.js pentru procesare batch pe server cu FFmpeg, randare cloud pe AWS Lambda/Azure Functions/GCP pentru accelerare paralelă de 10-50x și Docker pentru randare paralelă locală gratuită.
Randarea cloud costă aproximativ 0,02 USD pe minut pe AWS Lambda, Azure Functions sau Google Cloud Functions—aproximativ 1 USD pe oră de randare. Randarea locală bazată pe Docker este complet gratuită și oferă aceleași beneficii de randare paralelă.
Randarea cloud folosește un coordonator care împarte videoclipurile în bucăți de cadre, le distribuie către funcțiile worker (Lambda/Azure/GCP), fiecare worker randează cadrele alocate, un merger combină toate cadrele în videoclipul final, iar rezultatul este stocat în object storage (S3/Azure Blob/GCS).
Pentru randarea în browser, orice browser modern cu suport Canvas funcționează. Pentru randarea Node.js, aveți nevoie de Node.js 18+, Playwright sau Puppeteer și FFmpeg instalat. Pentru randarea cloud, aveți nevoie de un cont AWS/Azure/GCP sau Docker instalat local.
Da, renderul Node.js suportă accelerare hardware pentru randare mai rapidă. Accelerarea GPU poate crește semnificativ viteza de randare, în special pentru șabloane complexe cu multe straturi, efecte și rezoluții mari.
Rendervid implementează motion blur folosind supersampling temporal, randând mai multe sub-cadre pe cadru de ieșire și combinându-le. Preseturile de calitate variază de la scăzut (5 mostre, timp de randare 5x) la ultra (32 mostre, timp de randare 32x), producând o fluiditate cinematică.
Ajutăm companii ca a ta să dezvolte chatboți inteligenți, servere MCP, instrumente AI sau alte tipuri de automatizare AI pentru a înlocui oamenii în sarcinile repetitive din organizația ta.

Ghid complet pentru sistemul de șabloane Rendervid. Învață cum să creezi șabloane video JSON, să folosești variabile dinamice cu sintaxa {{variable}}, să config...

Explorați toate componentele Rendervid: 8 tipuri de straturi încorporate (text, imagine, video, formă, audio, grup, lottie, personalizat), componente React pre-...

Descoperă Rendervid, alternativa gratuită open-source la Remotion pentru generarea programatică de video. Design AI-first cu integrare MCP, șabloane JSON, redar...