
Rendervid Template-System - JSON-Templates, Variablen, Animationen & Übergänge
Vollständiger Leitfaden zum Rendervid Template-System. Lernen Sie, wie Sie JSON-Video-Templates erstellen, dynamische Variablen mit {{variable}}-Syntax verwende...

Deployen Sie Rendervid überall: Browser-basiertes Rendering für Vorschauen, Node.js für serverseitige Stapelverarbeitung oder Cloud-Rendering auf AWS Lambda, Azure Functions, GCP und Docker für 10-50x schnelleres paralleles Rendering.
Rendervid ist so konzipiert, dass es überall rendert, wo Ihr Workflow es erfordert. Ob Sie sofortige Vorschauen im Browser, produktionsreife Videokodierung auf einem Server oder massiv paralleles Rendering über Cloud-Infrastruktur benötigen, Rendervid bietet ein dediziertes Paket für jede Umgebung. Jedes Deployment-Ziel teilt sich dasselbe Template-System und die Komponentenbibliothek , sodass ein Template, das im Browser funktioniert, identisch auf AWS Lambda oder in einem Docker-Container funktioniert.
Dieser Leitfaden behandelt alle vier Deployment-Umgebungen, die in jeder verfügbaren Rendering-Optionen und erweiterte Funktionen wie Motion Blur, GIF-Export und Performance-Optimierung. Am Ende werden Sie genau wissen, welcher Deployment-Pfad zu Ihrem Projekt passt und wie Sie ihn konfigurieren.
+---------------------+
| 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 |
+-----------------+
Das @rendervid/renderer-browser-Paket übernimmt das clientseitige Rendering vollständig im Browser des Benutzers. Es ist keine Server-Infrastruktur erforderlich. Dies macht es zum schnellsten Weg vom Template zur Vorschau.
npm install @rendervid/renderer-browser
Browser-Rendering verwendet die HTML Canvas API, um jeden Frame des Templates zu zeichnen. Der Renderer durchläuft jede Szene und Ebene, wendet Animationen und Easing-Funktionen an, komponiert das Ergebnis auf ein Canvas-Element und erfasst jeden Frame. Für Video-Ausgabe werden die Frames mit der browsereigenen MediaRecorder API (WebM) oder einem WebAssembly-basierten MP4-Encoder kodiert.
| Format | Erweiterung | Hinweise |
|---|---|---|
| MP4 | .mp4 | H.264 über WebAssembly-Encoder |
| WebM | .webm | VP8/VP9 über MediaRecorder API |
| PNG | .png | Einzelframe oder Bildsequenz |
| JPEG | .jpeg | Einzelframe, konfigurierbare Qualität |
| WebP | .webp | Einzelframe, kleinere Dateigröße |
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 aus dem Browser",
fontSize: 72,
color: "#ffffff",
position: { x: 960, y: 540 },
animation: {
entrance: { type: "fadeIn", duration: 1 },
},
},
],
},
],
};
// Auf ein Canvas-Element für Vorschau rendern
const canvas = document.getElementById("preview") as HTMLCanvasElement;
await renderer.preview(template, canvas);
// Als MP4 exportieren
const mp4Blob = await renderer.render(template, {
format: "mp4",
quality: "standard",
});
// Einzelnen Frame als PNG exportieren
const pngBlob = await renderer.renderFrame(template, {
format: "png",
frameNumber: 0,
});
Das @rendervid/renderer-node-Paket bietet serverseitiges Rendering mit vollständiger FFmpeg-Integration. Es verwendet Playwright oder Puppeteer, um jeden Frame in einem Headless-Browser zu rendern, und leitet die Frames dann an FFmpeg für professionelle Videokodierung weiter.
# Renderer installieren
npm install @rendervid/renderer-node
# Playwright installieren (beinhaltet Browser-Binaries)
npx playwright install chromium
# FFmpeg installieren (erforderlich für Videokodierung)
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt-get install ffmpeg
# Windows (über Chocolatey)
choco install ffmpeg
| Format | Erweiterung | Codec | Hinweise |
|---|---|---|---|
| MP4 | .mp4 | H.264 | Universelle Kompatibilität |
| MP4 | .mp4 | H.265/HEVC | 50% kleinere Dateien, neuere Geräte |
| WebM | .webm | VP8/VP9 | Web-optimiert |
| MOV | .mov | ProRes | Professionelle Editing-Workflows |
| GIF | .gif | Palettenbasiert | Animiert mit Optimierung |
| PNG | .png | Verlustfrei | Bildsequenz oder Einzelframe |
| JPEG | .jpeg | Verlustbehaftet | Konfigurierbare Qualität |
| WebP | .webp | Verlustbehaftet/Verlustfrei | Modernes Webformat |
Rendervid bietet vier Qualitätsvoreinstellungen, die Kodierungsparameter steuern:
| Voreinstellung | Bitrate | Anwendungsfall |
|---|---|---|
draft | Niedrig | Schnelle Vorschauen während der Entwicklung |
standard | Mittel | Allzweck-Ausgabe, gute Qualität/Größe |
high | Hoch | Marketingmaterialien, finale Deliverables |
lossless | Maximum | Archivierung, weitere Bearbeitung, kein Qualitätsverlust |
Der Node.js-Renderer unterstützt Hardware-Beschleunigung, um die Kodierung auf die GPU auszulagern. Dies reduziert die Renderzeit für komplexe Templates mit vielen Ebenen, hohen Auflösungen und Effekten erheblich.
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/video.mp4",
hardwareAcceleration: true,
});
GPU-Beschleunigung ist auf Systemen mit kompatibler NVIDIA (NVENC), AMD (AMF) oder Intel (Quick Sync) Hardware verfügbar. FFmpeg muss mit der entsprechenden Encoder-Unterstützung kompiliert sein.
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: "Überschrift",
default: "Ihr Produkt, Erhoben",
},
},
};
// Mit benutzerdefinierten Eingaben rendern
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/promo.mp4",
renderWaitTime: 2000, // 2s warten, bis Medien geladen sind
inputs: {
headline: "Sommerschlussverkauf — 50% auf Alles",
},
});
console.log(`Gerendert: ${result.outputPath}`);
console.log(`Dauer: ${result.duration}s`);
console.log(`Dateigröße: ${(result.fileSize / 1024 / 1024).toFixed(2)} MB`);
Für die Verarbeitung vieler Templates in Folge verwenden Sie die 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,
});
}
Für echtes paralleles Rendering auf einer einzelnen Maschine siehe den Abschnitt Docker Local Rendering unten.
Das @rendervid/cloud-rendering-Paket ermöglicht verteiltes, paralleles Rendering über Cloud-Infrastruktur. Anstatt Frames sequenziell auf einer Maschine zu rendern, teilt Cloud-Rendering die Arbeit auf viele Worker-Funktionen auf, die Frames gleichzeitig rendern, und fügt sie dann zur finalen Ausgabe zusammen.
+------------------+
| Your App |
| (Coordinator) |
+--------+---------+
|
| 1. Video in Frame-Chunks aufteilen
v
+--------+---------+
| Chunk Splitter |
+--------+---------+
|
| 2. Chunks an Worker verteilen
v
+--------+---+---+---+---+--------+
| Worker 1 | Worker 2 | Worker N |
| (Lambda/ | (Lambda/ | (Lambda/ |
| Azure/ | Azure/ | Azure/ |
| GCP) | GCP) | GCP) |
+-----+------+----+------+----+----+
| | |
| 3. Jeder Worker rendert seine Frames
v v v
+-----+------+----+------+----+----+
| Frames | Frames | Frames |
| 001-030 | 031-060 | 061-090|
+-----+------+----+------+----+----+
| | |
+------+-----+-----+----+
|
v
+-------+--------+
| Merger |
| (FFmpeg concat) |
+-------+---------+
|
| 4. Zu finalem Video kombinieren
v
+-------+---------+
| Object Storage |
| S3 / Blob / GCS |
+------------------+
|
| 5. Herunterladen oder bereitstellen
v
+-------+---------+
| Final Output |
| video.mp4 |
+------------------+
So funktioniert es Schritt für Schritt:
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",
});
Das vollständige Konfigurationsinterface:
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 ist das häufigste Cloud-Deployment-Ziel. Jede Worker-Funktion läuft in einer separaten Lambda-Invocation, was massive Parallelität ermöglicht.
Voraussetzungen:
Konfiguration:
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(`Gerendert in ${result.renderTime}ms`);
console.log(`Verwendete Worker: ${result.workersUsed}`);
console.log(`Ausgabe: ${result.outputUrl}`);
Typische AWS Lambda-Konfiguration:
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);
| Anbieter | Kosten pro Minute | Kosten pro Stunde | Hinweise |
|---|---|---|---|
| AWS Lambda | ~$0.02 | ~$1.00 | Bezahlung pro 1ms Rechenzeit |
| Azure Functions | ~$0.02 | ~$1.00 | Consumption Plan Preise |
| Google Cloud Functions | ~$0.02 | ~$1.00 | Bezahlung pro 100ms Rechenzeit |
| Docker (lokal) | Kostenlos | Kostenlos | Verwendet Ihre eigene Hardware |
Alle Cloud-Provider bieten Free Tiers, die während der Entwicklung und bei geringem Produktionsvolumen erhebliche Rendering-Workloads abdecken.
Cloud-Rendering erreicht eine 10-50x Beschleunigung im Vergleich zu sequenziellem Rendering auf einer einzelnen Maschine. Die genaue Beschleunigung hängt von der Anzahl der Worker, der Template-Komplexität und der Videodauer ab.
| Videodauer | Sequenziell (1 Maschine) | Cloud (50 Worker) | Beschleunigung |
|---|---|---|---|
| 30 Sekunden | ~90 Sekunden | ~5 Sekunden | 18x |
| 2 Minuten | ~6 Minuten | ~15 Sekunden | 24x |
| 10 Minuten | ~30 Minuten | ~45 Sekunden | 40x |
| 30 Minuten | ~90 Minuten | ~2 Minuten | 45x |
Längere Videos profitieren mehr von Parallelität, da der Overhead für Worker-Start und Frame-Merging über mehr Frames amortisiert wird.
Docker-basiertes Rendering bietet Ihnen dieselbe parallele Rendering-Architektur wie Cloud-Rendering, läuft aber vollständig auf Ihrer lokalen Maschine. Es ist völlig kostenlos, verwendet keine Cloud-Konten und ist ideal für selbstgehostete Setups, Entwicklung und Teams, die paralleles Rendering ohne Cloud-Kosten wünschen.
# Sicherstellen, dass Docker installiert ist und läuft
docker --version
# Cloud-Rendering-Paket installieren
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, // Anzahl der parallel laufenden Docker-Container
},
});
const result = await renderer.render(template);
console.log(`Gerendert in ${result.renderTime}ms mit ${result.workersUsed} Workern`);
workersCount wählen: Setzen Sie dies auf die Anzahl der verfügbaren CPU-Kerne auf Ihrer Maschine. Zum Beispiel funktioniert eine 8-Kern-Maschine gut mit 8 Workern. Über Ihre Kernanzahl hinauszugehen fügt Overhead durch Context-Switching hinzu, ohne den Durchsatz zu verbessern.
+------------------+
| Coordinator |
| (your process) |
+--------+---------+
|
+-----+-----+-----+-----+
| | | | |
+--v--+ +--v-+ +-v--+ +-v--+
| C1 | | C2 | | C3 | | C4 | ... Docker Container
+--+--+ +--+-+ +-+--+ +-+--+
| | | |
v v v v
+--+------+-----+------+--+
| Shared Volume |
| /tmp/rendervid-work |
+-------------+-------------+
|
v
+-------+--------+
| Merger |
+-------+---------+
|
v
+-------+---------+
| /output/video |
+-----------------+
Jeder Docker-Container ist ein eigenständiger Worker mit vorinstalliertem Node.js, Playwright und FFmpeg. Worker lesen ihre Frame-Zuweisungen vom gemeinsamen Volume, rendern die Frames und schreiben die Ergebnisse zurück. Der Koordinator fügt dann alle Segmente zur finalen Ausgabe zusammen.
Rendervid unterstützt Motion Blur durch temporales Supersampling. Anstatt einen einzelnen Moment pro Frame zu rendern, erfasst der Renderer mehrere Sub-Frames zu leicht unterschiedlichen Zeitpunkten und mischt sie zusammen. Dies erzeugt die natürliche Unschärfe, die Kameras erzeugen, wenn sich Objekte während einer Belichtung bewegen.
| Voreinstellung | Samples pro Frame | Renderzeit-Multiplikator | Visuelle Qualität |
|---|---|---|---|
low | 5 | 5x | Subtile Glättung |
medium | 10 | 10x | Merkliche Unschärfe bei schneller Bewegung |
high | 16 | 16x | Kinematografischer Motion Blur |
ultra | 32 | 32x | Filmqualität, starke Unschärfe |
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/cinematic.mp4",
motionBlur: {
enabled: true,
quality: "high", // 16 Samples pro Frame
},
});
Frame N (ohne Motion Blur): Frame N (mit Motion Blur, 5 Samples):
Einzelner Moment: 5 Sub-Frames gemischt:
+--------+ +--------+ +--------+ +--------+
| O | | O | + | O | + | O | ...
+--------+ +--------+ +--------+ +--------+
|
v
+--------+
| ~O~ | <- Gemischtes Ergebnis
+--------+
Jeder Sub-Frame schreitet die Animations-Timeline um ein winziges Inkrement voran (1/fps geteilt durch die Sample-Anzahl). Die Sub-Frames werden dann alpha-gemischt, um den finalen Frame zu erzeugen. Objekte, die sich zwischen Sub-Frames bewegt haben, erscheinen entlang ihres Bewegungspfades verschwommen, während stationäre Elemente scharf bleiben.
Motion Blur multipliziert die Renderzeit proportional zur Sample-Anzahl. Ein 10-Sekunden-Video bei 30fps hat 300 Frames. Mit high-Qualität (16 Samples) muss der Renderer 4.800 Sub-Frames anstelle von 300 generieren. Verwenden Sie draft-Qualität während der Entwicklung und wechseln Sie nur für finale Exports zu high oder ultra.
Cloud-Rendering und Docker-paralleles Rendering funktionieren gut mit Motion Blur, da die Pro-Frame-Kosten auf Worker verteilt werden. Eine 16x Pro-Frame-Erhöhung geteilt durch 16 Worker ergibt ungefähr dieselbe Gesamt-Renderzeit wie ein nicht-verschwommener Render auf einer Maschine.
Rendervids GIF-Export geht weit über eine einfache Frame-zu-GIF-Konvertierung hinaus. Es verwendet FFmpegs Palettengenerierungs-Pipeline, um optimierte, hochqualitative animierte GIFs mit konfigurierbarem Dithering, Farbanzahlen und Dateigrößenbeschränkungen zu erzeugen.
Standard-GIF-Kodierung verwendet eine einzelne globale Palette von 256 Farben, was oft zu Banding und schlechter Farbwiedergabe führt. Rendervid verwendet einen zweistufigen Ansatz:
| Voreinstellung | Auflösung | Max. Farben | Ziel-Anwendungsfall |
|---|---|---|---|
social | 480x480 | 256 | Instagram, Twitter, Slack |
web | 640x480 | 256 | Blogbeiträge, Dokumentation |
email | 320x240 | 128 | E-Mail-Kampagnen, Newsletter |
| Algorithmus | Qualität | Dateigröße | Beschreibung |
|---|---|---|---|
floyd_steinberg | Beste | Größte | Fehlerdiffusions-Dithering, sanfte Verläufe |
bayer | Gut | Mittel | Geordnetes Dithering, konsistentes Muster |
none | Niedrigste | Kleinste | Kein Dithering, flache Farbbereiche |
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/animation.gif",
gif: {
preset: "social", // 480x480 Auflösung
colors: 256, // 2-256 Farbpalette
dithering: "floyd_steinberg",
targetSizeKB: 5000, // Auto-Optimierung unter 5MB
fps: 15, // Niedrigere FPS = kleinere Datei
},
});
console.log(`GIF-Größe: ${(result.fileSize / 1024).toFixed(0)} KB`);
console.log(`Geschätzte Größe war: ${result.estimatedSizeKB} KB`);
Wenn Sie ein targetSizeKB festlegen, schätzt Rendervid die Ausgabedateigröße vor dem Rendering und passt automatisch Parameter (Farbanzahl, Auflösung, FPS) an, um das Ziel zu erreichen. Dies ist besonders nützlich für Plattformen mit Dateigrößenbeschränkungen (z.B. Slacks 50 MB-Limit, typische 10 MB-Beschränkung für E-Mails).
// Auto-Optimierung für 2MB E-Mail-Beschränkung
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/email-banner.gif",
gif: {
preset: "email",
targetSizeKB: 2000,
},
});
Rendervid ist als Monorepo mit 13 Paketen organisiert. Jedes Paket hat eine fokussierte Verantwortung, und sie fügen sich zusammen, um jedes Deployment-Szenario zu unterstützen.
@rendervid/
├── core Engine, Typen, Validierung, Animationssystem
│ ├── Template-Parser und Validator (AJV + JSON Schema)
│ ├── Animations-Engine (40+ Presets, 30+ Easing-Funktionen)
│ ├── Layer-System (text, image, video, shape, audio, group, lottie, custom)
│ └── Szenen-Management und Übergänge (17 Typen)
│
├── renderer-browser Clientseitiges Rendering
│ ├── Canvas-basiertes Frame-Rendering
│ ├── MediaRecorder für WebM-Export
│ └── WebAssembly MP4-Encoder
│
├── renderer-node Serverseitiges Rendering
│ ├── Playwright/Puppeteer Headless-Browser
│ ├── FFmpeg-Integration (fluent-ffmpeg)
│ ├── GPU-Beschleunigung
│ └── GIF-Optimierungs-Pipeline
│
├── cloud-rendering Multi-Cloud-Orchestrierung
│ ├── AWS Lambda Provider
│ ├── Azure Functions Provider
│ ├── Google Cloud Functions Provider
│ ├── Docker Local Provider
│ ├── Chunk-Splitter und Merger
│ └── Object Storage Adapter (S3, Blob, GCS)
│
├── player Video/Template-Player-Komponente
├── editor Visueller Template-Editor (Zustand State)
├── components Vorgefertigte React-Komponenten
│ ├── AnimatedLineChart
│ ├── AuroraBackground
│ ├── WaveBackground
│ ├── SceneTransition
│ └── TypewriterEffect
│
├── templates Template-Definitionen und Beispiele (100+)
├── testing Testing-Utilities
│ ├── Vitest Custom Matchers
│ ├── Snapshot-Testing-Helfer
│ └── Visual Regression Utilities
│
├── editor-playground Editor-Entwicklungsumgebung
├── player-playground Player-Entwicklungsumgebung
├── mcp Model Context Protocol Server
└── docs VitePress-Dokumentationsseite
renderer-node und verteilt seine Arbeit auf Cloud-Funktionen oder Docker-Container.Rendervid basiert auf einem modernen TypeScript-Stack, der für Zuverlässigkeit, Performance und Entwicklererfahrung ausgewählt wurde.
| Ebene | Technologie | Zweck |
|---|---|---|
| Sprache | TypeScript | Typsicherheit über alle 13 Pakete |
| Build | tsup, Vite | Schnelle Builds, Tree-Shaking, ESM/CJS-Ausgabe |
| Testing | Vitest | Unit-Tests, Snapshot-Tests, Custom Matchers |
| UI Framework | React 18.3.1 | Komponenten-Rendering, Template-Komposition |
| State Management | Zustand | Editor-State (leichtgewichtig, kein Boilerplate) |
| Styling | Tailwind CSS | Editor- und Player-UI |
| Validierung | AJV mit JSON Schema | Template-Validierung vor dem Rendering |
| Browser-Rendering | HTML Canvas API | Frame-für-Frame-Zeichnung im Browser |
| Headless Browser | Playwright, Puppeteer | Serverseitige Frame-Erfassung |
| Videokodierung | FFmpeg (fluent-ffmpeg) | H.264, H.265, VP9, ProRes, GIF-Kodierung |
| 3D-Grafiken | Three.js (optional), CSS 3D | 3D-Szenen und Perspektiv-Transformationen |
| Dokumentation | VitePress | Paket-Dokumentationsseite |
Rendervid enthält ein dediziertes Testing-Paket (@rendervid/testing), das Custom Vitest Matchers, Snapshot-Testing-Helfer und Visual Regression Utilities zur Validierung von Templates bereitstellt.
import { describe, it, expect } from "vitest";
import "@rendervid/testing/matchers";
describe("Product Showcase Template", () => {
it("sollte ein gültiges Template sein", () => {
expect(template).toBeValidTemplate();
});
it("sollte die richtigen Abmessungen haben", () => {
expect(template).toHaveResolution(1920, 1080);
});
it("sollte mindestens eine Text-Ebene enthalten", () => {
expect(template).toContainLayerOfType("text");
});
it("sollte Animationen auf der Überschrift haben", () => {
expect(template.scenes[0].layers[0]).toHaveAnimation("entrance");
});
});
Snapshot-Testing rendert ein Template zu einem Bild und vergleicht es mit einer gespeicherten Referenz. Jede visuelle Änderung führt dazu, dass der Test fehlschlägt, was es einfach macht, unbeabsichtigte Regressionen zu erkennen.
import { describe, it } from "vitest";
import { renderSnapshot } from "@rendervid/testing";
describe("Template Visual Regression", () => {
it("sollte mit dem Referenz-Snapshot bei Frame 0 übereinstimmen", async () => {
const snapshot = await renderSnapshot(template, { frame: 0 });
expect(snapshot).toMatchImageSnapshot();
});
it("sollte mit dem Referenz-Snapshot am Mittelpunkt übereinstimmen", async () => {
const totalFrames = template.fps * template.scenes[0].duration;
const snapshot = await renderSnapshot(template, {
frame: Math.floor(totalFrames / 2),
});
expect(snapshot).toMatchImageSnapshot();
});
});
Integrieren Sie Visual Regression Tests in Ihre CI/CD-Pipeline, um Rendering-Änderungen zu erkennen, bevor sie die Produktion erreichen:
# .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
Um die schnellstmöglichen Renderzeiten zu erzielen, müssen Sie verstehen, wo Zeit verbracht wird und welche Hebel Sie ziehen können. Hier sind die wirkungsvollsten Optimierungsstrategien.
| Szenario | Bestes Ziel |
|---|---|
| Schnelle Vorschau während der Bearbeitung | Browser |
| Einzelnes Video, Produktionsqualität | Node.js |
| Batch von 10-100 Videos | Node.js oder Docker |
| Batch von 100+ Videos oder zeitkritisch | Cloud (AWS/Azure/GCP) |
draft-Qualität während Entwicklung und Testing. Wechseln Sie nur für finale Exports zu high oder lossless.renderWaitTime weise verwendenDie renderWaitTime-Option pausiert das Rendering, damit externe Medien (Bilder, Videos, Schriften) geladen werden können. Setzen Sie dies auf den Minimalwert, der sicherstellt, dass alle Assets geladen sind. Ein Wert von 500-2000ms ist typisch. Zu hoch eingestellt verschwendet Zeit bei jedem Frame.
await renderer.render(template, {
renderWaitTime: 1000, // 1 Sekunde ist normalerweise genug
});
Für jedes Video länger als 10 Sekunden ist paralleles Rendering (Docker oder Cloud) schneller als sequenzielles Rendering. Der Break-Even-Punkt hängt von Ihrer Hardware und Cloud-Konfiguration ab, aber als Faustregel:
GIFs sind von Natur aus groß. Um Dateigrößen handhabbar zu halten:
social, web, email).targetSizeKB verwenden, um Rendervid Parameter automatisch optimieren zu lassen.none), wenn Dateigröße wichtiger ist als Verlaufsqualität.Auf Maschinen mit kompatiblen GPUs kann hardware-beschleunigte Kodierung die Renderzeiten für den Kodierungsschritt um das 2-5-fache reduzieren. Dies ist am wirkungsvollsten für hohe Auflösungen (4K+) und hohe Bitraten-Ausgaben.
Wenn Ihr Template externe Bilder oder Videos referenziert, laden Sie diese vor dem Rendering auf lokalen Speicher herunter. Netzwerk-Latenz während des Renderings ist die häufigste Ursache für langsame oder fehlgeschlagene Renders.
Rendervid unterstützt vier Deployment-Optionen: Browser-basiertes Rendering für clientseitige Vorschauen und Web-Apps, Node.js-Rendering für serverseitige Stapelverarbeitung mit FFmpeg, Cloud-Rendering auf AWS Lambda/Azure Functions/GCP für 10-50x parallele Beschleunigung und Docker für kostenloses lokales paralleles Rendering.
Cloud-Rendering kostet ungefähr $0.02 pro Minute auf AWS Lambda, Azure Functions oder Google Cloud Functions—etwa $1 pro Stunde Rendering. Docker-basiertes lokales Rendering ist völlig kostenlos und bietet die gleichen parallelen Rendering-Vorteile.
Cloud-Rendering verwendet einen Koordinator, der Videos in Frame-Chunks aufteilt, diese an Worker-Funktionen (Lambda/Azure/GCP) verteilt, wobei jeder Worker seine zugewiesenen Frames rendert, ein Merger alle Frames zum finalen Video kombiniert und die Ausgabe in Object Storage (S3/Azure Blob/GCS) gespeichert wird.
Für Browser-Rendering funktioniert jeder moderne Browser mit Canvas-Unterstützung. Für Node.js-Rendering benötigen Sie Node.js 18+, Playwright oder Puppeteer und FFmpeg installiert. Für Cloud-Rendering benötigen Sie ein AWS/Azure/GCP-Konto oder Docker lokal installiert.
Ja, der Node.js-Renderer unterstützt Hardware-Beschleunigung für schnelleres Rendering. GPU-Beschleunigung kann das Rendering erheblich beschleunigen, insbesondere für komplexe Templates mit vielen Ebenen, Effekten und hohen Auflösungen.
Rendervid implementiert Motion Blur mithilfe von temporalem Supersampling, wobei mehrere Sub-Frames pro Ausgabe-Frame gerendert und zusammengemischt werden. Qualitätsvoreinstellungen reichen von niedrig (5 Samples, 5x Renderzeit) bis ultra (32 Samples, 32x Renderzeit) und erzeugen kinematografische Geschmeidigkeit.
Wir helfen Unternehmen wie Ihrem, intelligente Chatbots, MCP-Server, KI-Tools oder andere Arten von KI-Automatisierungen zu entwickeln, um Menschen bei sich wiederholenden Aufgaben in Ihrer Organisation zu ersetzen.

Vollständiger Leitfaden zum Rendervid Template-System. Lernen Sie, wie Sie JSON-Video-Templates erstellen, dynamische Variablen mit {{variable}}-Syntax verwende...

Entdecken Sie alle Rendervid-Komponenten: 8 integrierte Ebenentypen (Text, Bild, Video, Form, Audio, Gruppe, Lottie, benutzerdefiniert), vorgefertigte React-Kom...

Integrieren Sie FlowHunt mit dem DevRev MCP-Server, um die Verwaltung von Work Items, Parts, Meetings und Workflows zu automatisieren. Nutzen Sie KI-gestützte W...