
Rendervid Template System - JSON-maler, Variabler, Animasjoner og Overganger
Komplett guide til Rendervid template system. Lær hvordan du lager JSON-videomaler, bruker dynamiske variabler med {{variable}} syntaks, konfigurerer 40+ animas...

Distribuer Rendervid hvor som helst: nettleserbasert rendering for forhåndsvisninger, Node.js for server-side batch-prosessering, eller sky-rendering på AWS Lambda, Azure Functions, GCP, og Docker for 10-50x raskere parallell rendering.
Rendervid er designet for å rendre hvor som helst arbeidsflyten din krever det. Enten du trenger umiddelbare forhåndsvisninger i nettleseren, produksjonskvalitet videokoding på en server, eller massivt parallell rendering på tvers av skyinfrastruktur, gir Rendervid en dedikert pakke for hvert miljø. Hvert distribusjonsmål deler samme malsystem og komponentbibliotek , så en mal som fungerer i nettleseren fungerer identisk på AWS Lambda eller i en Docker-container.
Denne guiden dekker alle fire distribusjonsmiljøer, renderingsalternativene som er tilgjengelige i hver, og avanserte funksjoner som motion blur, GIF-eksport og ytelsesoptimalisering. Ved slutten vil du vite nøyaktig hvilken distribusjonssti som passer til prosjektet ditt og hvordan du konfigurerer det.
+---------------------+
| 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 |
+-----------------+
@rendervid/renderer-browser-pakken håndterer klient-side rendering helt innenfor brukerens nettleser. Ingen serverinfrastruktur er nødvendig. Dette gjør det til den raskeste veien fra mal til forhåndsvisning.
npm install @rendervid/renderer-browser
Nettleser-rendering bruker HTML Canvas API til å tegne hvert bilde av malen. Rendereren går gjennom hver scene og lag, bruker animasjoner og easing-funksjoner, komponerer resultatet på et canvas-element, og fanger hvert bilde. For videoutdata kodes bildene ved bruk av nettleserens innebygde MediaRecorder API (WebM) eller en WebAssembly-basert MP4-koder.
| Format | Utvidelse | Merknader |
|---|---|---|
| MP4 | .mp4 | H.264 via WebAssembly-koder |
| WebM | .webm | VP8/VP9 via MediaRecorder API |
| PNG | .png | Enkelt bilde eller bildesekvens |
| JPEG | .jpeg | Enkelt bilde, konfigurerbar kvalitet |
| WebP | .webp | Enkelt bilde, mindre filstørrelse |
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: "Hei fra nettleseren",
fontSize: 72,
color: "#ffffff",
position: { x: 960, y: 540 },
animation: {
entrance: { type: "fadeIn", duration: 1 },
},
},
],
},
],
};
// Render til et canvas-element for forhåndsvisning
const canvas = document.getElementById("preview") as HTMLCanvasElement;
await renderer.preview(template, canvas);
// Eksporter som MP4
const mp4Blob = await renderer.render(template, {
format: "mp4",
quality: "standard",
});
// Eksporter et enkelt bilde som PNG
const pngBlob = await renderer.renderFrame(template, {
format: "png",
frameNumber: 0,
});
@rendervid/renderer-node-pakken gir server-side rendering med full FFmpeg-integrasjon. Den bruker Playwright eller Puppeteer til å rendre hvert bilde i en hodeløs nettleser, deretter sender bildene til FFmpeg for profesjonell videokoding.
# Installer rendereren
npm install @rendervid/renderer-node
# Installer Playwright (inkluderer nettleser-binærfiler)
npx playwright install chromium
# Installer FFmpeg (påkrevd for videokoding)
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt-get install ffmpeg
# Windows (via Chocolatey)
choco install ffmpeg
| Format | Utvidelse | Kodek | Merknader |
|---|---|---|---|
| MP4 | .mp4 | H.264 | Universell kompatibilitet |
| MP4 | .mp4 | H.265/HEVC | 50% mindre filer, nyere enheter |
| WebM | .webm | VP8/VP9 | Web-optimalisert |
| MOV | .mov | ProRes | Profesjonelle redigeringsarbeidsflyter |
| GIF | .gif | Palettbasert | Animert med optimalisering |
| PNG | .png | Tapsfri | Bildesekvens eller enkelt bilde |
| JPEG | .jpeg | Tapsbeheftet | Konfigurerbar kvalitet |
| WebP | .webp | Tapsbeheftet/Tapsfri | Moderne webformat |
Rendervid tilbyr fire kvalitetspreseter som kontrollerer kodingsparametere:
| Preset | Bitrate | Bruksområde |
|---|---|---|
draft | Lav | Raske forhåndsvisninger under utvikling |
standard | Medium | Generell utdata, god kvalitet/størrelse |
high | Høy | Markedsføringsmateriell, endelige leveranser |
lossless | Maksimum | Arkivering, videre redigering, ingen kvalitetstap |
Node.js-rendereren støtter maskinvareakselerasjon for å avlaste koding til GPU-en. Dette reduserer renderingstiden betydelig for komplekse maler med mange lag, høye oppløsninger og effekter.
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/video.mp4",
hardwareAcceleration: true,
});
GPU-akselerasjon er tilgjengelig på systemer med kompatibel NVIDIA (NVENC), AMD (AMF), eller Intel (Quick Sync) maskinvare. FFmpeg må være kompilert med tilsvarende koderstøtte.
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: "Overskrift",
default: "Ditt produkt, løftet",
},
},
};
// Render med tilpassede inndata
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/promo.mp4",
renderWaitTime: 2000, // Vent 2s på at media skal laste
inputs: {
headline: "Sommersalg — 50% rabatt på alt",
},
});
console.log(`Rendret: ${result.outputPath}`);
console.log(`Varighet: ${result.duration}s`);
console.log(`Filstørrelse: ${(result.fileSize / 1024 / 1024).toFixed(2)} MB`);
For prosessering av mange maler i sekvens, bruk 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,
});
}
For ekte parallell rendering på en enkelt maskin, se Docker Lokal Rendering-seksjonen nedenfor.
@rendervid/cloud-rendering-pakken muliggjør distribuert, parallell rendering på tvers av skyinfrastruktur. I stedet for å rendre bilder sekvensielt på én maskin, deler sky-rendering arbeidet på tvers av mange arbeidsfunksjoner som rendrer bilder samtidig, og slår dem deretter sammen til den endelige utdataen.
+------------------+
| 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 |
+------------------+
Hvordan det fungerer steg for 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 fullstendige konfigurasjonsgrensesnittet:
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 er det vanligste skydistribusjonsmålet. Hver arbeidsfunksjon kjører i en separat Lambda-påkalling, som muliggjør massiv parallellisme.
Forutsetninger:
Konfigurasjon:
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(`Rendret på ${result.renderTime}ms`);
console.log(`Arbeidere brukt: ${result.workersUsed}`);
console.log(`Utdata: ${result.outputUrl}`);
Typisk AWS Lambda-konfigurasjon:
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);
| Leverandør | Kostnad per minutt | Kostnad per time | Merknader |
|---|---|---|---|
| AWS Lambda | ~$0.02 | ~$1.00 | Betal per 1ms beregning |
| Azure Functions | ~$0.02 | ~$1.00 | Forbruksplanprising |
| Google Cloud Functions | ~$0.02 | ~$1.00 | Betal per 100ms beregning |
| Docker (lokal) | Gratis | Gratis | Bruker din egen maskinvare |
Alle skyleverandører tilbyr gratis nivåer som dekker betydelige renderingsarbeidsbelastninger under utvikling og lavvolumproduksjon.
Sky-rendering oppnår en 10-50x hastighetsøkning sammenlignet med enkeltmaskin sekvensiell rendering. Den nøyaktige hastighetsøkningen avhenger av antall arbeidere, malkompleksitet og videovarighet.
| Videovarighet | Sekvensiell (1 maskin) | Sky (50 arbeidere) | Hastighetsøkning |
|---|---|---|---|
| 30 sekunder | ~90 sekunder | ~5 sekunder | 18x |
| 2 minutter | ~6 minutter | ~15 sekunder | 24x |
| 10 minutter | ~30 minutter | ~45 sekunder | 40x |
| 30 minutter | ~90 minutter | ~2 minutter | 45x |
Lengre videoer drar større nytte av parallellisme fordi overhead fra arbeideroppstart og bildesammenslåing amortiseres over flere bilder.
Docker-basert rendering gir deg samme parallelle renderingsarkitektur som sky-rendering, men kjører helt på din lokale maskin. Det er helt gratis, bruker ingen skykontoer, og er ideelt for selvhostede oppsett, utvikling, og team som ønsker parallell rendering uten skykostnader.
# Sørg for at Docker er installert og kjører
docker --version
# Installer sky-renderingspakken
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, // Antall Docker-containere som skal kjøres parallelt
},
});
const result = await renderer.render(template);
console.log(`Rendret på ${result.renderTime}ms ved bruk av ${result.workersUsed} arbeidere`);
Valg av workersCount: Sett denne til antall CPU-kjerner som er tilgjengelige på maskinen din. For eksempel fungerer en 8-kjerne maskin godt med 8 arbeidere. Å gå utover kjerneantallet ditt legger til overhead fra kontekstbytte uten å forbedre gjennomstrø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 |
+-----------------+
Hver Docker-container er en selvstendig arbeider med Node.js, Playwright og FFmpeg forhåndsinstallert. Arbeidere leser sine bildetildelinger fra det delte volumet, rendrer bildene, og skriver resultatene tilbake. Koordinatoren slår deretter sammen alle segmenter til den endelige utdataen.
Rendervid støtter motion blur gjennom temporal supersampling. I stedet for å rendre et enkelt øyeblikk per bilde, fanger rendereren flere sub-bilder på litt forskjellige tidspunkter og blander dem sammen. Dette produserer den naturlige uskarphet som kameraer skaper når objekter beveger seg under en eksponering.
| Preset | Sampler per bilde | Renderingstidsmultiplikator | Visuell kvalitet |
|---|---|---|---|
low | 5 | 5x | Subtil utjevning |
medium | 10 | 10x | Merkbar uskarphet på rask bevegelse |
high | 16 | 16x | Kinematisk motion blur |
ultra | 32 | 32x | Filmkvalitet, tung uskarphet |
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/cinematic.mp4",
motionBlur: {
enabled: true,
quality: "high", // 16 sampler per bilde
},
});
Frame N (ingen motion blur): Frame N (med motion blur, 5 sampler):
Enkelt øyeblikk: 5 sub-bilder blandet:
+--------+ +--------+ +--------+ +--------+
| O | | O | + | O | + | O | ...
+--------+ +--------+ +--------+ +--------+
|
v
+--------+
| ~O~ | <- Blandet resultat
+--------+
Hvert sub-bilde fremmer animasjonstidslinjen med en liten økning (1/fps delt på sampleantallet). Sub-bildene er deretter alfa-blandet for å produsere det endelige bildet. Objekter som beveget seg mellom sub-bilder vises uskarpe langs bevegelsesveien, mens stasjonære elementer forblir skarpe.
Motion blur multipliserer renderingstid proporsjonalt med sampleantallet. En 10-sekunders video ved 30fps har 300 bilder. Med high kvalitet (16 sampler), må rendereren generere 4 800 sub-bilder i stedet for 300. Bruk draft kvalitet under utvikling og bytt til high eller ultra kun for endelige eksporter.
Sky-rendering og Docker parallell rendering fungerer godt med motion blur fordi per-bilde-kostnaden er distribuert på tvers av arbeidere. En 16x per-bilde-økning delt på tvers av 16 arbeidere resulterer i omtrent samme totale renderingstid som en ikke-uskarp rendering på én maskin.
Renderivds GIF-eksport går langt utover en enkel bilde-til-GIF-konvertering. Den bruker FFmpegs palettgenereringspipeline for å produsere optimaliserte, høykvalitets animerte GIF-er med konfigurerbar dithering, fargeantall og filstørrelsebegrensninger.
Standard GIF-koding bruker en enkelt global palett på 256 farger, som ofte resulterer i banding og dårlig fargegjengivelse. Rendervid bruker en to-pass tilnærming:
| Preset | Oppløsning | Maks farger | Målbruksområde |
|---|---|---|---|
social | 480x480 | 256 | Instagram, Twitter, Slack |
web | 640x480 | 256 | Blogginnlegg, dokumentasjon |
email | 320x240 | 128 | E-postkampanjer, nyhetsbrev |
| Algoritme | Kvalitet | Filstørrelse | Beskrivelse |
|---|---|---|---|
floyd_steinberg | Best | Størst | Feil-diffusjonsdithering, glatte gradienter |
bayer | God | Medium | Ordnet dithering, konsistent mønster |
none | Lavest | Minst | Ingen dithering, flate fargeregioner |
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/animation.gif",
gif: {
preset: "social", // 480x480 oppløsning
colors: 256, // 2-256 fargepalett
dithering: "floyd_steinberg",
targetSizeKB: 5000, // Auto-optimaliser for å holde seg under 5MB
fps: 15, // Lavere FPS = mindre fil
},
});
console.log(`GIF-størrelse: ${(result.fileSize / 1024).toFixed(0)} KB`);
console.log(`Estimert størrelse var: ${result.estimatedSizeKB} KB`);
Når du setter en targetSizeKB, estimerer Rendervid utdatafilstørrelsen før rendering og justerer automatisk parametere (fargeantall, oppløsning, FPS) for å møte målet. Dette er spesielt nyttig for plattformer med filstørrelsesgrenser (f.eks. Slacks 50 MB-grense, e-posts typiske 10 MB-begrensning).
// Auto-optimaliser for å passe innenfor en 2MB e-postbegrensning
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/email-banner.gif",
gif: {
preset: "email",
targetSizeKB: 2000,
},
});
Rendervid er organisert som en monorepo med 13 pakker. Hver pakke har et fokusert ansvar, og de komponerer sammen for å støtte hvert distribusjonsscenario.
@rendervid/
├── core Motor, typer, validering, animasjonssystem
│ ├── Malparser og validator (AJV + JSON Schema)
│ ├── Animasjonsmotor (40+ preseter, 30+ easing-funksjoner)
│ ├── Lagsystem (tekst, bilde, video, form, lyd, gruppe, lottie, tilpasset)
│ └── Scenehåndtering og overganger (17 typer)
│
├── renderer-browser Klient-side rendering
│ ├── Canvas-basert bilderendering
│ ├── MediaRecorder for WebM-eksport
│ └── WebAssembly MP4-koder
│
├── renderer-node Server-side rendering
│ ├── Playwright/Puppeteer hodeløs nettleser
│ ├── FFmpeg-integrasjon (fluent-ffmpeg)
│ ├── GPU-akselerasjon
│ └── GIF-optimaliseringspipeline
│
├── cloud-rendering Multi-sky-orkestrering
│ ├── AWS Lambda-leverandør
│ ├── Azure Functions-leverandør
│ ├── Google Cloud Functions-leverandør
│ ├── Docker lokal leverandør
│ ├── Chunk-splitter og sammenslåer
│ └── Objektlagringsadaptere (S3, Blob, GCS)
│
├── player Video/malspiller-komponent
├── editor Visuell malredigerer (Zustand-tilstand)
├── components Ferdigbygde React-komponenter
│ ├── AnimatedLineChart
│ ├── AuroraBackground
│ ├── WaveBackground
│ ├── SceneTransition
│ └── TypewriterEffect
│
├── templates Maldefinisjoner og eksempler (100+)
├── testing Testverktøy
│ ├── Vitest tilpassede matchere
│ ├── Snapshot-testhjelpere
│ └── Visuell regresjonsverktøy
│
├── editor-playground Redigeringutviklingsmiljø
├── player-playground Spillerutviklingsmiljø
├── mcp Model Context Protocol-server
└── docs VitePress dokumentasjonsside
renderer-node og distribuerer arbeidet på tvers av skyfunksjoner eller Docker-containere.Rendervid er bygget på en moderne TypeScript-stakk valgt for pålitelighet, ytelse og utvikleropplevelse.
| Lag | Teknologi | Formål |
|---|---|---|
| Språk | TypeScript | Typesikkerhet på tvers av alle 13 pakker |
| Bygg | tsup, Vite | Raske bygg, tree-shaking, ESM/CJS-utdata |
| Testing | Vitest | Enhetstester, snapshot-tester, tilpassede matchere |
| UI-rammeverk | React 18.3.1 | Komponentrendering, malkomposisjon |
| Tilstandshåndtering | Zustand | Editortilstand (lettvekts, ingen boilerplate) |
| Styling | Tailwind CSS | Editor og spiller-UI |
| Validering | AJV med JSON Schema | Malvalidering før rendering |
| Nettleser-rendering | HTML Canvas API | Bilde-for-bilde tegning i nettleseren |
| Hodeløs nettleser | Playwright, Puppeteer | Server-side bildeopptaking |
| Videokoding | FFmpeg (fluent-ffmpeg) | H.264, H.265, VP9, ProRes, GIF-koding |
| 3D-grafikk | Three.js (valgfritt), CSS 3D | 3D-scener og perspektivtransformasjoner |
| Dokumentasjon | VitePress | Pakkedokumentasjonsside |
Rendervid inkluderer en dedikert testpakke (@rendervid/testing) som gir tilpassede Vitest-matchere, snapshot-testhjelpere og visuell regresjonsverktøy for validering av maler.
import { describe, it, expect } from "vitest";
import "@rendervid/testing/matchers";
describe("Produktvisningsmal", () => {
it("skal være en gyldig mal", () => {
expect(template).toBeValidTemplate();
});
it("skal ha de riktige dimensjonene", () => {
expect(template).toHaveResolution(1920, 1080);
});
it("skal inneholde minst ett tekstlag", () => {
expect(template).toContainLayerOfType("text");
});
it("skal ha animasjoner på overskriften", () => {
expect(template.scenes[0].layers[0]).toHaveAnimation("entrance");
});
});
Snapshot-testing rendrer en mal til et bilde og sammenligner det med en lagret referanse. Enhver visuell endring får testen til å feile, noe som gjør det enkelt å fange opp utilsiktede regresjoner.
import { describe, it } from "vitest";
import { renderSnapshot } from "@rendervid/testing";
describe("Mal visuell regresjon", () => {
it("skal matche referansesnapshot ved bilde 0", async () => {
const snapshot = await renderSnapshot(template, { frame: 0 });
expect(snapshot).toMatchImageSnapshot();
});
it("skal matche referansesnapshot ved midtpunktet", async () => {
const totalFrames = template.fps * template.scenes[0].duration;
const snapshot = await renderSnapshot(template, {
frame: Math.floor(totalFrames / 2),
});
expect(snapshot).toMatchImageSnapshot();
});
});
Integrer visuelle regresjonstester i din CI/CD-pipeline for å fange opp renderingsendringer før de når produksjon:
# .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
Å få raskest mulig renderingstider krever forståelse av hvor tid brukes og hvilke spaker du kan trekke i. Her er de mest effektive optimaliseringsstrategiene.
| Scenario | Beste mål |
|---|---|
| Rask forhåndsvisning under redigering | Nettleser |
| Enkelt video, produksjonskvalitet | Node.js |
| Batch på 10-100 videoer | Node.js eller Docker |
| Batch på 100+ videoer eller tidskritisk | Sky (AWS/Azure/GCP) |
draft kvalitet under utvikling og testing. Bytt til high eller lossless kun for endelige eksporter.renderWaitTime kloktrenderWaitTime-alternativet pauser rendering for å la ekstern media (bilder, videoer, fonter) laste. Sett dette til minimumsverdien som sikrer at alle ressurser er lastet. En verdi på 500-2000ms er typisk. Å sette den for høyt kaster bort tid på hvert bilde.
await renderer.render(template, {
renderWaitTime: 1000, // 1 sekund er vanligvis nok
});
For enhver video lengre enn 10 sekunder vil parallell rendering (Docker eller sky) være raskere enn sekvensiell rendering. Break-even-punktet avhenger av maskinvaren din og skykonfigurasjonen, men som en tommelfingerregel:
GIF-er er iboende store. For å holde filstørrelsene håndterbare:
social, web, email).targetSizeKB for å la Rendervid auto-optimalisere parametere.none) hvis filstørrelse betyr mer enn gradientkvalitet.På maskiner med kompatible GPU-er kan maskinvareakselerert koding redusere renderingstider med 2-5x for kodingstrinnet. Dette er mest effektivt for høy oppløsning (4K+) og høy bitrate-utdata.
Hvis malen din refererer til eksterne bilder eller videoer, forhåndslast dem til lokal lagring før rendering. Nettverkslatens under rendering er den vanligste årsaken til treg eller mislykket rendering.
Rendervid støtter fire distribusjonsalternativer: nettleserbasert rendering for klient-side forhåndsvisninger og webapper, Node.js rendering for server-side batch-prosessering med FFmpeg, sky-rendering på AWS Lambda/Azure Functions/GCP for 10-50x parallell hastighetsøkning, og Docker for gratis lokal parallell rendering.
Sky-rendering koster omtrent $0.02 per minutt på AWS Lambda, Azure Functions, eller Google Cloud Functions—omtrent $1 per time med rendering. Docker-basert lokal rendering er helt gratis og gir de samme parallelle rendering-fordelene.
Sky-rendering bruker en koordinator som deler videoer inn i bildebiter, distribuerer dem til arbeidsfunksjoner (Lambda/Azure/GCP), hver arbeider rendrer sine tildelte bilder, en sammenslåer kombinerer alle bilder til den endelige videoen, og utdataene lagres i objektlagring (S3/Azure Blob/GCS).
For nettleser-rendering fungerer enhver moderne nettleser med Canvas-støtte. For Node.js rendering trenger du Node.js 18+, Playwright eller Puppeteer, og FFmpeg installert. For sky-rendering trenger du en AWS/Azure/GCP-konto eller Docker installert lokalt.
Ja, Node.js-rendereren støtter maskinvareakselerasjon for raskere rendering. GPU-akselerasjon kan betydelig øke renderingshastigheten, spesielt for komplekse maler med mange lag, effekter og høye oppløsninger.
Rendervid implementerer motion blur ved bruk av temporal supersampling, rendering av flere sub-bilder per utdatabilde og blanding av dem sammen. Kvalitetspreseter varierer fra lav (5 sampler, 5x renderingstid) til ultra (32 sampler, 32x renderingstid), som produserer kinematisk mykhet.
Vi hjelper bedrifter som din med å utvikle smarte chatboter, MCP-servere, AI-verktøy eller andre typer AI-automatisering for å erstatte mennesker i repeterende oppgaver i organisasjonen din.

Komplett guide til Rendervid template system. Lær hvordan du lager JSON-videomaler, bruker dynamiske variabler med {{variable}} syntaks, konfigurerer 40+ animas...

Utforsk alle Rendervid-komponenter: 8 innebygde lagtyper (tekst, bilde, video, form, lyd, gruppe, lottie, tilpasset), ferdigbygde React-komponenter, den visuell...

Oppdag Rendervid, det gratis åpen kildekode-alternativet til Remotion for programmatisk videogenerering. AI-først design med MCP-integrasjon, JSON-maler, skygje...