
Rendervid Sjabloonsysteem - JSON Sjablonen, Variabelen, Animaties & Overgangen
Volledige gids voor het Rendervid sjabloonsysteem. Leer hoe je JSON video sjablonen maakt, dynamische variabelen gebruikt met {{variable}} syntax, 40+ animatie ...

Implementeer Rendervid overal: browser-gebaseerde rendering voor voorbeelden, Node.js voor server-side batch verwerking, of cloud rendering op AWS Lambda, Azure Functions, GCP, en Docker voor 10-50x snellere parallelle rendering.
Rendervid is ontworpen om overal te renderen waar uw workflow dat vereist. Of u nu directe voorbeelden in de browser nodig heeft, professionele video encoding op een server, of massaal parallelle rendering over cloud infrastructuur, Rendervid biedt een toegewijd pakket voor elke omgeving. Elk implementatiedoel deelt hetzelfde template systeem en componentbibliotheek , dus een template die in de browser werkt, werkt identiek op AWS Lambda of in een Docker container.
Deze gids behandelt alle vier implementatie omgevingen, de rendering opties beschikbaar in elk, en geavanceerde functies zoals motion blur, GIF export, en prestatie optimalisatie. Aan het einde weet u precies welk implementatiepad bij uw project past en hoe u het moet configureren.
+---------------------+
| JSON Template |
+----------+----------+
|
+--------------------+--------------------+
| | |
+--------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 |
+-----------------+
Het @rendervid/renderer-browser pakket verzorgt client-side rendering volledig binnen de browser van de gebruiker. Er is geen server infrastructuur nodig. Dit maakt het het snelste pad van template naar voorbeeld.
npm install @rendervid/renderer-browser
Browser rendering gebruikt de HTML Canvas API om elk frame van de template te tekenen. De renderer doorloopt elke scene en laag, past animaties en easing functies toe, componeert het resultaat op een canvas element, en legt elk frame vast. Voor video output worden de frames gecodeerd met behulp van de ingebouwde MediaRecorder API van de browser (WebM) of een WebAssembly-gebaseerde MP4 encoder.
| Formaat | Extensie | Opmerkingen |
|---|---|---|
| MP4 | .mp4 | H.264 via WebAssembly encoder |
| WebM | .webm | VP8/VP9 via MediaRecorder API |
| PNG | .png | Enkel frame of afbeeldingenreeks |
| JPEG | .jpeg | Enkel frame, configureerbare kwaliteit |
| WebP | .webp | Enkel frame, kleinere bestandsgrootte |
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: "Hallo vanuit de Browser",
fontSize: 72,
color: "#ffffff",
position: { x: 960, y: 540 },
animation: {
entrance: { type: "fadeIn", duration: 1 },
},
},
],
},
],
};
// Render naar een canvas element voor voorbeeld
const canvas = document.getElementById("preview") as HTMLCanvasElement;
await renderer.preview(template, canvas);
// Exporteer als MP4
const mp4Blob = await renderer.render(template, {
format: "mp4",
quality: "standard",
});
// Exporteer een enkel frame als PNG
const pngBlob = await renderer.renderFrame(template, {
format: "png",
frameNumber: 0,
});
Het @rendervid/renderer-node pakket biedt server-side rendering met volledige FFmpeg integratie. Het gebruikt Playwright of Puppeteer om elk frame in een headless browser te renderen, en stuurt vervolgens de frames naar FFmpeg voor professionele video encoding.
# Installeer de renderer
npm install @rendervid/renderer-node
# Installeer Playwright (inclusief browser binaries)
npx playwright install chromium
# Installeer FFmpeg (vereist voor video encoding)
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt-get install ffmpeg
# Windows (via Chocolatey)
choco install ffmpeg
| Formaat | Extensie | Codec | Opmerkingen |
|---|---|---|---|
| MP4 | .mp4 | H.264 | Universele compatibiliteit |
| MP4 | .mp4 | H.265/HEVC | 50% kleinere bestanden, nieuwere apparaten |
| WebM | .webm | VP8/VP9 | Web-geoptimaliseerd |
| MOV | .mov | ProRes | Professionele editing workflows |
| GIF | .gif | Palet-gebaseerd | Geanimeerd met optimalisatie |
| PNG | .png | Lossless | Afbeeldingenreeks of enkel frame |
| JPEG | .jpeg | Lossy | Configureerbare kwaliteit |
| WebP | .webp | Lossy/Lossless | Modern web formaat |
Rendervid biedt vier kwaliteit presets die encoding parameters regelen:
| Preset | Bitrate | Gebruik |
|---|---|---|
draft | Laag | Snelle voorbeelden tijdens ontwikkeling |
standard | Gemiddeld | Algemeen gebruik, goede kwaliteit/grootte |
high | Hoog | Marketingmateriaal, definitieve oplevering |
lossless | Maximum | Archivering, verdere bewerking, geen kwaliteitsverlies |
De Node.js renderer ondersteunt hardware versnelling om encoding naar de GPU te verplaatsen. Dit vermindert de rendertijd aanzienlijk voor complexe templates met veel lagen, hoge resoluties, en effecten.
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/video.mp4",
hardwareAcceleration: true,
});
GPU versnelling is beschikbaar op systemen met compatibele NVIDIA (NVENC), AMD (AMF), of Intel (Quick Sync) hardware. FFmpeg moet gecompileerd zijn met de overeenkomstige encoder ondersteuning.
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: "Kop",
default: "Uw Product, Verheven",
},
},
};
// Render met aangepaste inputs
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/promo.mp4",
renderWaitTime: 2000, // Wacht 2s voor media om te laden
inputs: {
headline: "Zomeraanbieding — 50% Korting op Alles",
},
});
console.log(`Gerenderd: ${result.outputPath}`);
console.log(`Duur: ${result.duration}s`);
console.log(`Bestandsgrootte: ${(result.fileSize / 1024 / 1024).toFixed(2)} MB`);
Voor het verwerken van veel templates in volgorde, gebruik de batch API:
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,
});
}
Voor echte parallelle rendering op één machine, zie de Docker Lokale Rendering sectie hieronder.
Het @rendervid/cloud-rendering pakket maakt gedistribueerde, parallelle rendering mogelijk over cloud infrastructuur. In plaats van frames sequentieel op één machine te renderen, splitst cloud rendering het werk over veel worker functies die frames gelijktijdig renderen, en voegt ze vervolgens samen tot de uiteindelijke output.
+------------------+
| Your App |
| (Coordinator) |
+--------+---------+
|
| 1. Split video into frame chunks
v
+--------+---------+
| Chunk Splitter |
+--------+---------+
|
| 2. Distribute chunks to workers
v
+--------+---+---+---+---+--------+
| Worker 1 | Worker 2 | Worker N |
| (Lambda/ | (Lambda/ | (Lambda/ |
| Azure/ | Azure/ | Azure/ |
| GCP) | GCP) | GCP) |
+-----+------+----+------+----+----+
| | |
| 3. Each worker renders its frames
v v v
+-----+------+----+------+----+----+
| Frames | Frames | Frames |
| 001-030 | 031-060 | 061-090|
+-----+------+----+------+----+----+
| | |
+------+-----+-----+----+
|
v
+-------+--------+
| Merger |
| (FFmpeg concat) |
+-------+---------+
|
| 4. Combine into final video
v
+-------+---------+
| Object Storage |
| S3 / Blob / GCS |
+------------------+
|
| 5. Download or serve
v
+-------+---------+
| Final Output |
| video.mp4 |
+------------------+
Hoe het stap voor stap werkt:
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",
});
De volledige configuratie interface:
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 is het meest voorkomende cloud implementatiedoel. Elke worker functie draait in een aparte Lambda invocatie, wat massale parallellisatie mogelijk maakt.
Vereisten:
Configuratie:
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(`Gerenderd in ${result.renderTime}ms`);
console.log(`Workers gebruikt: ${result.workersUsed}`);
console.log(`Output: ${result.outputUrl}`);
Typische AWS Lambda configuratie:
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);
| Provider | Kosten per Minuut | Kosten per Uur | Opmerkingen |
|---|---|---|---|
| AWS Lambda | ~$0.02 | ~$1.00 | Betaal per 1ms compute |
| Azure Functions | ~$0.02 | ~$1.00 | Consumption plan pricing |
| Google Cloud Functions | ~$0.02 | ~$1.00 | Betaal per 100ms compute |
| Docker (lokaal) | Gratis | Gratis | Gebruikt uw eigen hardware |
Alle cloud providers bieden gratis tiers die aanzienlijke rendering workloads dekken tijdens ontwikkeling en lage-volume productie.
Cloud rendering bereikt een 10-50x versnelling vergeleken met single-machine sequentiële rendering. De exacte versnelling hangt af van het aantal workers, template complexiteit, en video duur.
| Video Duur | Sequentieel (1 machine) | Cloud (50 workers) | Versnelling |
|---|---|---|---|
| 30 seconden | ~90 seconden | ~5 seconden | 18x |
| 2 minuten | ~6 minuten | ~15 seconden | 24x |
| 10 minuten | ~30 minuten | ~45 seconden | 40x |
| 30 minuten | ~90 minuten | ~2 minuten | 45x |
Langere video’s profiteren meer van parallellisme omdat de overhead van worker startup en frame merging wordt geamortiseerd over meer frames.
Docker-gebaseerde rendering geeft u dezelfde parallelle rendering architectuur als cloud rendering, maar draait volledig op uw lokale machine. Het is volledig gratis, gebruikt geen cloud accounts, en is ideaal voor self-hosted setups, ontwikkeling, en teams die parallelle rendering willen zonder cloud kosten.
# Zorg ervoor dat Docker is geïnstalleerd en draait
docker --version
# Installeer het cloud rendering pakket
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, // Aantal Docker containers om parallel te draaien
},
});
const result = await renderer.render(template);
console.log(`Gerenderd in ${result.renderTime}ms met ${result.workersUsed} workers`);
workersCount kiezen: Stel dit in op het aantal CPU cores beschikbaar op uw machine. Bijvoorbeeld, een 8-core machine werkt goed met 8 workers. Verder gaan dan uw core count voegt overhead toe door context switching zonder de doorvoer te verbeteren.
+------------------+
| Coordinator |
| (your process) |
+--------+---------+
|
+-----+-----+-----+-----+
| | | | |
+--v--+ +--v-+ +-v--+ +-v--+
| C1 | | C2 | | C3 | | C4 | ... Docker containers
+--+--+ +--+-+ +-+--+ +-+--+
| | | |
v v v v
+--+------+-----+------+--+
| Shared Volume |
| /tmp/rendervid-work |
+-------------+-------------+
|
v
+-------+--------+
| Merger |
+-------+---------+
|
v
+-------+---------+
| /output/video |
+-----------------+
Elke Docker container is een zelfstandige worker met Node.js, Playwright, en FFmpeg vooraf geïnstalleerd. Workers lezen hun frame toewijzingen van het gedeelde volume, renderen de frames, en schrijven de resultaten terug. De coördinator voegt vervolgens alle segmenten samen tot de uiteindelijke output.
Rendervid ondersteunt motion blur via temporele supersampling. In plaats van een enkel moment per frame te renderen, legt de renderer meerdere sub-frames vast op licht verschillende tijdspunten en mengt ze samen. Dit produceert de natuurlijke vervaging die camera’s creëren wanneer objecten bewegen tijdens een belichting.
| Preset | Samples per Frame | Rendertijd Vermenigvuldiger | Visuele Kwaliteit |
|---|---|---|---|
low | 5 | 5x | Subtiele gladmaking |
medium | 10 | 10x | Merkbare vervaging bij snelle beweging |
high | 16 | 16x | Cinematische motion blur |
ultra | 32 | 32x | Film-kwaliteit, zware vervaging |
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/cinematic.mp4",
motionBlur: {
enabled: true,
quality: "high", // 16 samples per frame
},
});
Frame N (geen motion blur): Frame N (met motion blur, 5 samples):
Enkel moment: 5 sub-frames gemengd:
+--------+ +--------+ +--------+ +--------+
| O | | O | + | O | + | O | ...
+--------+ +--------+ +--------+ +--------+
|
v
+--------+
| ~O~ | <- Gemengd resultaat
+--------+
Elk sub-frame verplaatst de animatie tijdlijn met een kleine stap (1/fps gedeeld door het aantal samples). De sub-frames worden vervolgens alpha-gemengd om het uiteindelijke frame te produceren. Objecten die tussen sub-frames bewogen zijn, verschijnen vervaagd langs hun bewegingspad, terwijl stationaire elementen scherp blijven.
Motion blur vermenigvuldigt de rendertijd evenredig met het aantal samples. Een 10-seconden video op 30fps heeft 300 frames. Met high kwaliteit (16 samples) moet de renderer 4.800 sub-frames genereren in plaats van 300. Gebruik draft kwaliteit tijdens ontwikkeling en schakel over naar high of ultra alleen voor definitieve exports.
Cloud rendering en Docker parallelle rendering werken goed met motion blur omdat de per-frame kosten worden verdeeld over workers. Een 16x per-frame toename gedeeld door 16 workers resulteert in ongeveer dezelfde totale rendertijd als een niet-vervaagde render op één machine.
Rendervid’s GIF export gaat veel verder dan een eenvoudige frame-naar-GIF conversie. Het gebruikt FFmpeg’s palet generatie pipeline om geoptimaliseerde, hoogwaardige geanimeerde GIF’s te produceren met configureerbare dithering, kleuraantallen, en bestandsgrootte beperkingen.
Standaard GIF encoding gebruikt een enkel globaal palet van 256 kleuren, wat vaak resulteert in banding en slechte kleurweergave. Rendervid gebruikt een twee-stappen aanpak:
| Preset | Resolutie | Max Kleuren | Doel Gebruik |
|---|---|---|---|
social | 480x480 | 256 | Instagram, Twitter, Slack |
web | 640x480 | 256 | Blog posts, documentatie |
email | 320x240 | 128 | Email campagnes, nieuwsbrieven |
| Algoritme | Kwaliteit | Bestandsgrootte | Beschrijving |
|---|---|---|---|
floyd_steinberg | Beste | Grootste | Error-diffusion dithering, gladde kleurovergangen |
bayer | Goed | Gemiddeld | Ordered dithering, consistent patroon |
none | Laagste | Kleinste | Geen dithering, vlakke kleurgebieden |
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/animation.gif",
gif: {
preset: "social", // 480x480 resolutie
colors: 256, // 2-256 kleuren palet
dithering: "floyd_steinberg",
targetSizeKB: 5000, // Auto-optimaliseer om onder 5MB te blijven
fps: 15, // Lagere FPS = kleiner bestand
},
});
console.log(`GIF grootte: ${(result.fileSize / 1024).toFixed(0)} KB`);
console.log(`Geschatte grootte was: ${result.estimatedSizeKB} KB`);
Wanneer u een targetSizeKB instelt, schat Rendervid de output bestandsgrootte voor het renderen en past automatisch parameters aan (kleurenaantal, resolutie, FPS) om het doel te bereiken. Dit is bijzonder handig voor platforms met bestandsgrootte limieten (bijv. Slack’s 50 MB limiet, email’s typische 10 MB beperking).
// Auto-optimaliseer om binnen een 2MB email beperking te passen
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/email-banner.gif",
gif: {
preset: "email",
targetSizeKB: 2000,
},
});
Rendervid is georganiseerd als een monorepo met 13 pakketten. Elk pakket heeft een gerichte verantwoordelijkheid, en ze componeren samen om elk implementatie scenario te ondersteunen.
@rendervid/
├── core Engine, types, validatie, animatie systeem
│ ├── Template parser en validator (AJV + JSON Schema)
│ ├── Animatie engine (40+ presets, 30+ easing functies)
│ ├── Laag systeem (text, image, video, shape, audio, group, lottie, custom)
│ └── Scene management en transities (17 types)
│
├── renderer-browser Client-side rendering
│ ├── Canvas-gebaseerde frame rendering
│ ├── MediaRecorder voor WebM export
│ └── WebAssembly MP4 encoder
│
├── renderer-node Server-side rendering
│ ├── Playwright/Puppeteer headless browser
│ ├── FFmpeg integratie (fluent-ffmpeg)
│ ├── GPU versnelling
│ └── GIF optimalisatie pipeline
│
├── cloud-rendering Multi-cloud orchestratie
│ ├── AWS Lambda provider
│ ├── Azure Functions provider
│ ├── Google Cloud Functions provider
│ ├── Docker local provider
│ ├── Chunk splitter en merger
│ └── Object storage adapters (S3, Blob, GCS)
│
├── player Video/template player component
├── editor Visuele template editor (Zustand state)
├── components Voorgebouwde React componenten
│ ├── AnimatedLineChart
│ ├── AuroraBackground
│ ├── WaveBackground
│ ├── SceneTransition
│ └── TypewriterEffect
│
├── templates Template definities en voorbeelden (100+)
├── testing Testing utilities
│ ├── Vitest custom matchers
│ ├── Snapshot testing helpers
│ └── Visual regression utilities
│
├── editor-playground Editor ontwikkel omgeving
├── player-playground Player ontwikkel omgeving
├── mcp Model Context Protocol server
└── docs VitePress documentatie site
renderer-node in en distribueert het werk over cloud functies of Docker containers.Rendervid is gebouwd op een moderne TypeScript stack gekozen voor betrouwbaarheid, prestaties, en ontwikkelaar ervaring.
| Laag | Technologie | Doel |
|---|---|---|
| Taal | TypeScript | Type veiligheid over alle 13 pakketten |
| Build | tsup, Vite | Snelle builds, tree-shaking, ESM/CJS output |
| Testing | Vitest | Unit tests, snapshot tests, custom matchers |
| UI Framework | React 18.3.1 | Component rendering, template compositie |
| State Management | Zustand | Editor state (lichtgewicht, geen boilerplate) |
| Styling | Tailwind CSS | Editor en player UI |
| Validatie | AJV met JSON Schema | Template validatie voor rendering |
| Browser Rendering | HTML Canvas API | Frame-voor-frame tekenen in de browser |
| Headless Browser | Playwright, Puppeteer | Server-side frame capture |
| Video Encoding | FFmpeg (fluent-ffmpeg) | H.264, H.265, VP9, ProRes, GIF encoding |
| 3D Graphics | Three.js (optioneel), CSS 3D | 3D scenes en perspectief transformaties |
| Documentatie | VitePress | Pakket documentatie site |
Rendervid bevat een toegewijd testing pakket (@rendervid/testing) dat custom Vitest matchers, snapshot testing helpers, en visual regression utilities biedt voor het valideren van templates.
import { describe, it, expect } from "vitest";
import "@rendervid/testing/matchers";
describe("Product Showcase Template", () => {
it("moet een geldige template zijn", () => {
expect(template).toBeValidTemplate();
});
it("moet de juiste afmetingen hebben", () => {
expect(template).toHaveResolution(1920, 1080);
});
it("moet minstens één tekstlaag bevatten", () => {
expect(template).toContainLayerOfType("text");
});
it("moet animaties hebben op de kop", () => {
expect(template.scenes[0].layers[0]).toHaveAnimation("entrance");
});
});
Snapshot testing rendert een template naar een afbeelding en vergelijkt deze met een opgeslagen referentie. Elke visuele verandering zorgt ervoor dat de test faalt, waardoor het gemakkelijk is om onbedoelde regressies op te vangen.
import { describe, it } from "vitest";
import { renderSnapshot } from "@rendervid/testing";
describe("Template Visual Regression", () => {
it("moet overeenkomen met de referentie snapshot op frame 0", async () => {
const snapshot = await renderSnapshot(template, { frame: 0 });
expect(snapshot).toMatchImageSnapshot();
});
it("moet overeenkomen met de referentie snapshot op het middelpunt", async () => {
const totalFrames = template.fps * template.scenes[0].duration;
const snapshot = await renderSnapshot(template, {
frame: Math.floor(totalFrames / 2),
});
expect(snapshot).toMatchImageSnapshot();
});
});
Integreer visual regression tests in uw CI/CD pipeline om rendering veranderingen op te vangen voordat ze productie bereiken:
# .github/workflows/visual-regression.yml
name: Visual Regression Tests
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
Het behalen van de snelst mogelijke rendertijden vereist begrip van waar tijd wordt besteed en welke hefbomen u kunt gebruiken. Hier zijn de meest impactvolle optimalisatie strategieën.
| Scenario | Beste Doel |
|---|---|
| Snel voorbeeld tijdens bewerking | Browser |
| Enkele video, productie kwaliteit | Node.js |
| Batch van 10-100 video’s | Node.js of Docker |
| Batch van 100+ video’s of tijdskritisch | Cloud (AWS/Azure/GCP) |
draft kwaliteit tijdens ontwikkeling en testen. Schakel over naar high of lossless alleen voor definitieve exports.renderWaitTime VerstandigDe renderWaitTime optie pauzeert rendering om externe media (afbeeldingen, video’s, fonts) te laten laden. Stel dit in op de minimale waarde die ervoor zorgt dat alle assets zijn geladen. Een waarde van 500-2000ms is typisch. Te hoog instellen verspilt tijd op elk frame.
await renderer.render(template, {
renderWaitTime: 1000, // 1 seconde is meestal genoeg
});
Voor elke video langer dan 10 seconden zal parallelle rendering (Docker of cloud) sneller zijn dan sequentiële rendering. Het break-even punt hangt af van uw hardware en cloud configuratie, maar als vuistregel:
GIF’s zijn inherent groot. Om bestandsgroottes beheersbaar te houden:
social, web, email).targetSizeKB om Rendervid parameters automatisch te laten optimaliseren.none) als bestandsgrootte belangrijker is dan kleurovergang kwaliteit.Op machines met compatibele GPU’s kan hardware-versnelde encoding rendertijden met 2-5x verminderen voor de encoding stap. Dit is het meest impactvol voor hoge resoluties (4K+) en hoge bitrate outputs.
Als uw template verwijst naar externe afbeeldingen of video’s, download ze vooraf naar lokale opslag voor het renderen. Netwerk latentie tijdens rendering is de meest voorkomende oorzaak van trage of mislukte renders.
Rendervid ondersteunt vier implementatie opties: browser-gebaseerde rendering voor client-side voorbeelden en web apps, Node.js rendering voor server-side batch verwerking met FFmpeg, cloud rendering op AWS Lambda/Azure Functions/GCP voor 10-50x parallelle versnelling, en Docker voor gratis lokale parallelle rendering.
Cloud rendering kost ongeveer $0.02 per minuut op AWS Lambda, Azure Functions, of Google Cloud Functions—ongeveer $1 per uur rendering. Docker-gebaseerde lokale rendering is volledig gratis en biedt dezelfde parallelle rendering voordelen.
Cloud rendering gebruikt een coördinator die video's opsplitst in frame chunks, deze distribueert naar worker functies (Lambda/Azure/GCP), elke worker rendert zijn toegewezen frames, een merger combineert alle frames tot de uiteindelijke video, en de output wordt opgeslagen in object storage (S3/Azure Blob/GCS).
Voor browser rendering werkt elke moderne browser met Canvas ondersteuning. Voor Node.js rendering heb je Node.js 18+, Playwright of Puppeteer, en FFmpeg geïnstalleerd nodig. Voor cloud rendering heb je een AWS/Azure/GCP account of Docker lokaal geïnstalleerd nodig.
Ja, de Node.js renderer ondersteunt hardware versnelling voor snellere rendering. GPU versnelling kan rendering aanzienlijk versnellen, vooral voor complexe templates met veel lagen, effecten, en hoge resoluties.
Rendervid implementeert motion blur met behulp van temporele supersampling, waarbij meerdere sub-frames per output frame worden gerenderd en samengevoegd. Kwaliteitspresets variëren van laag (5 samples, 5x rendertijd) tot ultra (32 samples, 32x rendertijd), wat cinematische zachtheid produceert.
Wij helpen bedrijven zoals die van u bij het ontwikkelen van slimme chatbots, MCP-servers, AI-tools of andere soorten AI-automatisering om mensen te vervangen bij repetitieve taken in uw organisatie.

Volledige gids voor het Rendervid sjabloonsysteem. Leer hoe je JSON video sjablonen maakt, dynamische variabelen gebruikt met {{variable}} syntax, 40+ animatie ...

Ontdek alle Rendervid componenten: 8 ingebouwde laagtypen (tekst, afbeelding, video, vorm, audio, groep, lottie, aangepast), kant-en-klare React componenten, de...

Ontdek Rendervid, het gratis open-source alternatief voor Remotion voor programmatische videogeneratie. AI-first ontwerp met MCP-integratie, JSON-templates, clo...