
Rendervid Mallsystem - JSON-mallar, Variabler, Animationer & Övergångar
Komplett guide till Rendervid-mallsystemet. Lär dig hur du skapar JSON-videomallar, använder dynamiska variabler med {{variable}}-syntax, konfigurerar 40+ anima...

Distribuera Rendervid var som helst: webbläsarbaserad rendering för förhandsvisningar, Node.js för batchbearbetning på serversidan, eller molnrendering på AWS Lambda, Azure Functions, GCP och Docker för 10-50x snabbare parallell rendering.
Rendervid är designad för att rendera var som helst ditt arbetsflöde kräver. Oavsett om du behöver omedelbara förhandsvisningar i webbläsaren, videokodning av produktionskvalitet på en server, eller massivt parallell rendering över molninfrastruktur, tillhandahåller Rendervid ett dedikerat paket för varje miljö. Varje distributionsmål delar samma mallsystem och komponentbibliotek , så en mall som fungerar i webbläsaren fungerar identiskt på AWS Lambda eller i en Docker-container.
Denna guide täcker alla fyra distributionsmiljöer, renderingsalternativen tillgängliga i var och en, och avancerade funktioner som rörelseoskärpa, GIF-export och prestandaoptimering. I slutet kommer du att veta exakt vilken distributionsväg som passar ditt projekt och hur du konfigurerar den.
+---------------------+
| 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 |
+-----------------+
Paketet @rendervid/renderer-browser hanterar rendering på klientsidan helt och hållet inom användarens webbläsare. Ingen serverinfrastruktur krävs. Detta gör det till den snabbaste vägen från mall till förhandsvisning.
npm install @rendervid/renderer-browser
Webbläsarrendering använder HTML Canvas API för att rita varje bildruta av mallen. Renderaren går igenom varje scen och lager, tillämpar animationer och easing-funktioner, komponerar resultatet på ett canvas-element och fångar varje bildruta. För videoutdata kodas bildrutorna med hjälp av webbläsarens inbyggda MediaRecorder API (WebM) eller en WebAssembly-baserad MP4-kodare.
| Format | Filändelse | Anteckningar |
|---|---|---|
| MP4 | .mp4 | H.264 via WebAssembly-kodare |
| WebM | .webm | VP8/VP9 via MediaRecorder API |
| PNG | .png | Enkel bildruta eller bildsekvens |
| JPEG | .jpeg | Enkel bildruta, konfigurerbar kvalitet |
| WebP | .webp | Enkel bildruta, mindre filstorlek |
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: "Hej från webbläsaren",
fontSize: 72,
color: "#ffffff",
position: { x: 960, y: 540 },
animation: {
entrance: { type: "fadeIn", duration: 1 },
},
},
],
},
],
};
// Rendera till ett canvas-element för förhandsvisning
const canvas = document.getElementById("preview") as HTMLCanvasElement;
await renderer.preview(template, canvas);
// Exportera som MP4
const mp4Blob = await renderer.render(template, {
format: "mp4",
quality: "standard",
});
// Exportera en enkel bildruta som PNG
const pngBlob = await renderer.renderFrame(template, {
format: "png",
frameNumber: 0,
});
Paketet @rendervid/renderer-node tillhandahåller rendering på serversidan med full FFmpeg-integration. Det använder Playwright eller Puppeteer för att rendera varje bildruta i en huvudlös webbläsare, sedan skickar bildrutorna till FFmpeg för professionell videokodning.
# Installera renderaren
npm install @rendervid/renderer-node
# Installera Playwright (inkluderar webbläsarbinärer)
npx playwright install chromium
# Installera FFmpeg (krävs för videokodning)
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt-get install ffmpeg
# Windows (via Chocolatey)
choco install ffmpeg
| Format | Filändelse | Codec | Anteckningar |
|---|---|---|---|
| MP4 | .mp4 | H.264 | Universell kompatibilitet |
| MP4 | .mp4 | H.265/HEVC | 50% mindre filer, nyare enheter |
| WebM | .webm | VP8/VP9 | Webboptimerad |
| MOV | .mov | ProRes | Professionella redigeringsarbetsflöden |
| GIF | .gif | Palettbaserad | Animerad med optimering |
| PNG | .png | Förlustfri | Bildsekvens eller enkel bildruta |
| JPEG | .jpeg | Förlustbehäftad | Konfigurerbar kvalitet |
| WebP | .webp | Förlustbehäftad/Förlustfri | Modernt webbformat |
Rendervid tillhandahåller fyra kvalitetsförinställningar som styr kodningsparametrar:
| Förinställning | Bithastighet | Användningsfall |
|---|---|---|
draft | Låg | Snabba förhandsvisningar under utveckling |
standard | Medium | Allmänt utdata, bra kvalitet/storlek |
high | Hög | Marknadsföringsmaterial, slutliga leveranser |
lossless | Maximal | Arkivering, ytterligare redigering, ingen kvalitetsförlust |
Node.js-renderaren stöder hårdvaruacceleration för att avlasta kodning till GPU:n. Detta minskar avsevärt renderingstiden för komplexa mallar med många lager, höga upplösningar och effekter.
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/video.mp4",
hardwareAcceleration: true,
});
GPU-acceleration är tillgänglig på system med kompatibel NVIDIA (NVENC), AMD (AMF) eller Intel (Quick Sync) hårdvara. FFmpeg måste vara kompilerad med motsvarande kodarstöd.
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: "Rubrik",
default: "Din produkt, upphöjd",
},
},
};
// Rendera med anpassade indata
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/promo.mp4",
renderWaitTime: 2000, // Vänta 2s för att media ska laddas
inputs: {
headline: "Sommarrea — 50% rabatt på allt",
},
});
console.log(`Renderad: ${result.outputPath}`);
console.log(`Varaktighet: ${result.duration}s`);
console.log(`Filstorlek: ${(result.fileSize / 1024 / 1024).toFixed(2)} MB`);
För bearbetning av många mallar i sekvens, använd 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 verklig parallell rendering på en enda maskin, se avsnittet Docker lokal rendering nedan.
Paketet @rendervid/cloud-rendering möjliggör distribuerad, parallell rendering över molninfrastruktur. Istället för att rendera bildrutor sekventiellt på en maskin, delar molnrendering upp arbetet över många arbetsfunktioner som renderar bildrutor samtidigt, sedan slår ihop dem till den slutliga utdata.
+------------------+
| 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 |
+------------------+
Hur det fungerar steg för steg:
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",
});
Det fullständiga konfigurationsgränssnittet:
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 är det vanligaste molndistributionsmålet. Varje arbetsfunktion körs i en separat Lambda-anrop, vilket möjliggör massiv parallellism.
Förutsättningar:
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(`Renderad på ${result.renderTime}ms`);
console.log(`Arbetare använda: ${result.workersUsed}`);
console.log(`Utdata: ${result.outputUrl}`);
Typisk 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);
| Leverantör | Kostnad per minut | Kostnad per timme | Anteckningar |
|---|---|---|---|
| AWS Lambda | ~$0.02 | ~$1.00 | Betala per 1ms av beräkning |
| Azure Functions | ~$0.02 | ~$1.00 | Förbrukningsplan prissättning |
| Google Cloud Functions | ~$0.02 | ~$1.00 | Betala per 100ms av beräkning |
| Docker (lokal) | Gratis | Gratis | Använder din egen hårdvara |
Alla molnleverantörer erbjuder gratisplaner som täcker betydande renderingsarbetsbelastningar under utveckling och lågvolymproduktion.
Molnrendering uppnår en 10-50x snabbhet jämfört med sekventiell rendering på en enda maskin. Den exakta snabbheten beror på antalet arbetare, mallkomplexitet och videovaraktighet.
| Videovaraktighet | Sekventiell (1 maskin) | Moln (50 arbetare) | Snabbhet |
|---|---|---|---|
| 30 sekunder | ~90 sekunder | ~5 sekunder | 18x |
| 2 minuter | ~6 minuter | ~15 sekunder | 24x |
| 10 minuter | ~30 minuter | ~45 sekunder | 40x |
| 30 minuter | ~90 minuter | ~2 minuter | 45x |
Längre videor drar nytta mer av parallellism eftersom overhead för arbetarstart och bildsammanslagning amorteras över fler bildrutor.
Docker-baserad rendering ger dig samma parallella renderingsarkitektur som molnrendering, men körs helt på din lokala maskin. Det är helt gratis, använder inga molnkonton och är idealiskt för självhostade installationer, utveckling och team som vill ha parallell rendering utan molnkostnader.
# Se till att Docker är installerat och körs
docker --version
# Installera molnrenderingspaketet
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, // Antal Docker-containrar att köra parallellt
},
});
const result = await renderer.render(template);
console.log(`Renderad på ${result.renderTime}ms med ${result.workersUsed} arbetare`);
Välja workersCount: Ställ in detta till antalet CPU-kärnor tillgängliga på din maskin. Till exempel fungerar en 8-kärnig maskin bra med 8 arbetare. Att gå över ditt kärnantal lägger till overhead från kontextväxling utan att förbättra genomströmningen.
+------------------+
| 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 |
+-----------------+
Varje Docker-container är en självständig arbetare med Node.js, Playwright och FFmpeg förinstallerat. Arbetare läser sina bildrutetilldelningar från den delade volymen, renderar bildrutorna och skriver resultaten tillbaka. Koordinatorn slår sedan samman alla segment till den slutliga utdata.
Rendervid stöder rörelseoskärpa genom temporal supersampling. Istället för att rendera ett enda ögonblick per bildruta, fångar renderaren flera underbilder vid något olika tidpunkter och blandar dem tillsammans. Detta ger den naturliga oskärpa som kameror skapar när objekt rör sig under en exponering.
| Förinställning | Sampel per bildruta | Renderingstidsmultiplikator | Visuell kvalitet |
|---|---|---|---|
low | 5 | 5x | Subtil utjämning |
medium | 10 | 10x | Märkbar oskärpa vid snabb rörelse |
high | 16 | 16x | Cinematisk rörelseoskärpa |
ultra | 32 | 32x | Filmkvalitet, kraftig oskärpa |
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/cinematic.mp4",
motionBlur: {
enabled: true,
quality: "high", // 16 sampel per bildruta
},
});
Frame N (ingen rörelseoskärpa): Frame N (med rörelseoskärpa, 5 sampel):
Enstaka ögonblick: 5 underbilder blandade:
+--------+ +--------+ +--------+ +--------+
| O | | O | + | O | + | O | ...
+--------+ +--------+ +--------+ +--------+
|
v
+--------+
| ~O~ | <- Blandat resultat
+--------+
Varje underbild avancerar animationstidslinjen med ett litet steg (1/fps delat med samplingsantalet). Underbilderna blandas sedan med alfa för att producera den slutliga bildrutan. Objekt som rörde sig mellan underbilder verkar suddiga längs sin rörelseväg, medan stationära element förblir skarpa.
Rörelseoskärpa multiplicerar renderingstiden proportionellt mot samplingsantalet. En 10-sekunders video vid 30fps har 300 bildrutor. Med high kvalitet (16 sampel) måste renderaren generera 4 800 underbilder istället för 300. Använd draft kvalitet under utveckling och byt till high eller ultra endast för slutliga exporter.
Molnrendering och Docker parallell rendering fungerar bra med rörelseoskärpa eftersom kostnaden per bildruta distribueras över arbetare. En 16x ökning per bildruta delad över 16 arbetare resulterar i ungefär samma totala renderingstid som en icke-suddig rendering på en maskin.
Renderids GIF-export går långt bortom en enkel bildruta-till-GIF-konvertering. Den använder FFmpegs palettgenereringspipeline för att producera optimerade, högkvalitativa animerade GIF:ar med konfigurerbar dithering, färgantal och filstorleksbegränsningar.
Standard GIF-kodning använder en enda global palett med 256 färger, vilket ofta resulterar i banding och dålig färgåtergivning. Rendervid använder en tvåpassmetod:
| Förinställning | Upplösning | Max färger | Målscenario |
|---|---|---|---|
social | 480x480 | 256 | Instagram, Twitter, Slack |
web | 640x480 | 256 | Blogginlägg, dokumentation |
email | 320x240 | 128 | E-postkampanjer, nyhetsbrev |
| Algoritm | Kvalitet | Filstorlek | Beskrivning |
|---|---|---|---|
floyd_steinberg | Bäst | Störst | Feldiffusionsdithering, mjuka gradienter |
bayer | Bra | Medium | Ordnad dithering, konsekvent mönster |
none | Lägst | Minst | Ingen dithering, platta färgregioner |
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/animation.gif",
gif: {
preset: "social", // 480x480 upplösning
colors: 256, // 2-256 färgpalett
dithering: "floyd_steinberg",
targetSizeKB: 5000, // Auto-optimera för att hålla sig under 5MB
fps: 15, // Lägre FPS = mindre fil
},
});
console.log(`GIF-storlek: ${(result.fileSize / 1024).toFixed(0)} KB`);
console.log(`Uppskattad storlek var: ${result.estimatedSizeKB} KB`);
När du ställer in en targetSizeKB, uppskattar Rendervid utdatafilstorleken innan rendering och justerar automatiskt parametrar (färgantal, upplösning, FPS) för att uppfylla målet. Detta är särskilt användbart för plattformar med filstorleksgränser (t.ex. Slacks 50 MB-gräns, e-postens typiska 10 MB-begränsning).
// Auto-optimera för att passa inom en 2MB e-postbegränsning
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/email-banner.gif",
gif: {
preset: "email",
targetSizeKB: 2000,
},
});
Rendervid är organiserad som en monorepo med 13 paket. Varje paket har ett fokuserat ansvar, och de komponerar tillsammans för att stödja varje distributionsscenario.
@rendervid/
├── core Motor, typer, validering, animationssystem
│ ├── Mallparser och validator (AJV + JSON Schema)
│ ├── Animationsmotor (40+ förinställningar, 30+ easing-funktioner)
│ ├── Lagersystem (text, bild, video, form, ljud, grupp, lottie, anpassad)
│ └── Scenhantering och övergångar (17 typer)
│
├── renderer-browser Rendering på klientsidan
│ ├── Canvas-baserad bildruterendering
│ ├── MediaRecorder för WebM-export
│ └── WebAssembly MP4-kodare
│
├── renderer-node Rendering på serversidan
│ ├── Playwright/Puppeteer huvudlös webbläsare
│ ├── FFmpeg-integration (fluent-ffmpeg)
│ ├── GPU-acceleration
│ └── GIF-optimeringspipeline
│
├── cloud-rendering Multi-molnorkestrering
│ ├── AWS Lambda-leverantör
│ ├── Azure Functions-leverantör
│ ├── Google Cloud Functions-leverantör
│ ├── Docker lokal leverantör
│ ├── Segmentdelare och sammanslagare
│ └── Objektlagringsadaptrar (S3, Blob, GCS)
│
├── player Video/mallspelarkomponent
├── editor Visuell mallredigerare (Zustand-tillstånd)
├── components Förbyggda React-komponenter
│ ├── AnimatedLineChart
│ ├── AuroraBackground
│ ├── WaveBackground
│ ├── SceneTransition
│ └── TypewriterEffect
│
├── templates Malldefinitioner och exempel (100+)
├── testing Testverktyg
│ ├── Vitest anpassade matchare
│ ├── Snapshot-testhjälpare
│ └── Visuella regressionsverktyg
│
├── editor-playground Redigerarens utvecklingsmiljö
├── player-playground Spelarens utvecklingsmiljö
├── mcp Model Context Protocol-server
└── docs VitePress dokumentationswebbplats
renderer-node och distribuerar sitt arbete över molnfunktioner eller Docker-containrar.Rendervid är byggd på en modern TypeScript-stack vald för tillförlitlighet, prestanda och utvecklarupplevelse.
| Lager | Teknologi | Syfte |
|---|---|---|
| Språk | TypeScript | Typsäkerhet över alla 13 paket |
| Byggverktyg | tsup, Vite | Snabba byggen, tree-shaking, ESM/CJS-utdata |
| Testning | Vitest | Enhetstester, snapshot-tester, anpassade matchare |
| UI-ramverk | React 18.3.1 | Komponentrendering, mallkomposition |
| Tillståndshantering | Zustand | Redigerartillstånd (lättviktig, ingen boilerplate) |
| Styling | Tailwind CSS | Redigerare och spelar-UI |
| Validering | AJV med JSON Schema | Mallvalidering före rendering |
| Webbläsarrendering | HTML Canvas API | Bildruta-för-bildruta-ritning i webbläsaren |
| Huvudlös webbläsare | Playwright, Puppeteer | Bildrutefångst på serversidan |
| Videokodning | FFmpeg (fluent-ffmpeg) | H.264, H.265, VP9, ProRes, GIF-kodning |
| 3D-grafik | Three.js (valfritt), CSS 3D | 3D-scener och perspecktivtransformationer |
| Dokumentation | VitePress | Paketdokumentationswebbplats |
Rendervid inkluderar ett dedikerat testpaket (@rendervid/testing) som tillhandahåller anpassade Vitest-matchare, snapshot-testhjälpare och visuella regressionsverktyg för validering av mallar.
import { describe, it, expect } from "vitest";
import "@rendervid/testing/matchers";
describe("Product Showcase Template", () => {
it("should be a valid template", () => {
expect(template).toBeValidTemplate();
});
it("should have the correct dimensions", () => {
expect(template).toHaveResolution(1920, 1080);
});
it("should contain at least one text layer", () => {
expect(template).toContainLayerOfType("text");
});
it("should have animations on the headline", () => {
expect(template.scenes[0].layers[0]).toHaveAnimation("entrance");
});
});
Snapshot-testning renderar en mall till en bild och jämför den mot en lagrad referens. Alla visuella ändringar orsakar att testet misslyckas, vilket gör det enkelt att fånga oavsiktliga regressioner.
import { describe, it } from "vitest";
import { renderSnapshot } from "@rendervid/testing";
describe("Template Visual Regression", () => {
it("should match the reference snapshot at frame 0", async () => {
const snapshot = await renderSnapshot(template, { frame: 0 });
expect(snapshot).toMatchImageSnapshot();
});
it("should match the reference snapshot at the midpoint", async () => {
const totalFrames = template.fps * template.scenes[0].duration;
const snapshot = await renderSnapshot(template, {
frame: Math.floor(totalFrames / 2),
});
expect(snapshot).toMatchImageSnapshot();
});
});
Integrera visuella regressionstester i din CI/CD-pipeline för att fånga renderingsändringar innan de når produktion:
# .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
Att få snabbast möjliga renderingstider kräver förståelse för var tid spenderas och vilka spakar du kan dra i. Här är de mest effektfulla optimeringsstrategierna.
| Scenario | Bästa mål |
|---|---|
| Snabb förhandsvisning under redigering | Webbläsare |
| Enkel video, produktionskvalitet | Node.js |
| Batch av 10-100 videor | Node.js eller Docker |
| Batch av 100+ videor eller tidskritisk | Moln (AWS/Azure/GCP) |
draft kvalitet under utveckling och testning. Byt till high eller lossless endast för slutliga exporter.renderWaitTime kloktAlternativet renderWaitTime pausar rendering för att tillåta extern media (bilder, videor, typsnitt) att ladda. Ställ in detta till minimivärdet som säkerställer att alla tillgångar är laddade. Ett värde på 500-2000ms är typiskt. Att ställa in det för högt slösar tid på varje bildruta.
await renderer.render(template, {
renderWaitTime: 1000, // 1 sekund är vanligtvis tillräckligt
});
För alla videor längre än 10 sekunder kommer parallell rendering (Docker eller moln) att vara snabbare än sekventiell rendering. Brytpunkten beror på din hårdvara och molnkonfiguration, men som en tumregel:
GIF:ar är i sig stora. För att hålla filstorlekarna hanterbara:
social, web, email).targetSizeKB för att låta Rendervid auto-optimera parametrar.none) om filstorlek spelar större roll än gradientkvalitet.På maskiner med kompatibla GPU:er kan hårdvaruaccelererad kodning minska renderingstider med 2-5x för kodningssteget. Detta är mest effektfullt för hög upplösning (4K+) och höga bithastighetsutdata.
Om din mall refererar till externa bilder eller videor, förladda dem till lokal lagring innan rendering. Nätverksfördröjning under rendering är den vanligaste orsaken till långsamma eller misslyckade renderingar.
Rendervid stöder fyra distributionsalternativ: webbläsarbaserad rendering för förhandsvisningar på klientsidan och webbappar, Node.js-rendering för batchbearbetning på serversidan med FFmpeg, molnrendering på AWS Lambda/Azure Functions/GCP för 10-50x parallell snabbhet, och Docker för gratis lokal parallell rendering.
Molnrendering kostar ungefär $0.02 per minut på AWS Lambda, Azure Functions eller Google Cloud Functions—ungefär $1 per timme av rendering. Docker-baserad lokal rendering är helt gratis och ger samma parallella renderingsfördelar.
Molnrendering använder en koordinator som delar upp videor i bildsegment, distribuerar dem till arbetsfunktioner (Lambda/Azure/GCP), varje arbetare renderar sina tilldelade bilder, en sammanslagare kombinerar alla bilder till den slutliga videon, och utdata lagras i objektlagring (S3/Azure Blob/GCS).
För webbläsarrendering fungerar alla moderna webbläsare med Canvas-stöd. För Node.js-rendering behöver du Node.js 18+, Playwright eller Puppeteer, och FFmpeg installerat. För molnrendering behöver du ett AWS/Azure/GCP-konto eller Docker installerat lokalt.
Ja, Node.js-renderaren stöder hårdvaruacceleration för snabbare rendering. GPU-acceleration kan avsevärt snabba upp renderingen, särskilt för komplexa mallar med många lager, effekter och höga upplösningar.
Rendervid implementerar rörelseoskärpa med hjälp av temporal supersampling, renderar flera underbilder per utdatabild och blandar dem tillsammans. Kvalitetsförinställningar sträcker sig från låg (5 sampel, 5x renderingstid) till ultra (32 sampel, 32x renderingstid), vilket ger cinematisk mjukhet.
Vi hjälper företag som ditt att utveckla smarta chatbotar, MCP-servrar, AI-verktyg eller andra typer av AI-automatisering för att ersätta människor i repetitiva uppgifter i din organisation.

Komplett guide till Rendervid-mallsystemet. Lär dig hur du skapar JSON-videomallar, använder dynamiska variabler med {{variable}}-syntax, konfigurerar 40+ anima...

Utforska alla Rendervid-komponenter: 8 inbyggda lagertyper (text, bild, video, form, ljud, grupp, lottie, anpassad), färdiga React-komponenter, den visuella mal...

Lär dig hur du integrerar Rendervid med AI-agenter med hjälp av MCP (Model Context Protocol). Generera videor från naturliga språkkommandon med Claude Code, Cur...