
Système de Templates Rendervid - Templates JSON, Variables, Animations et Transitions
Guide complet du système de templates Rendervid. Apprenez à créer des templates vidéo JSON, utiliser des variables dynamiques avec la syntaxe {{variable}}, conf...

Déployez Rendervid n’importe où : rendu basé sur navigateur pour les aperçus, Node.js pour le traitement par lots côté serveur, ou rendu cloud sur AWS Lambda, Azure Functions, GCP et Docker pour un rendu parallèle 10 à 50 fois plus rapide.
Rendervid est conçu pour effectuer le rendu partout où votre flux de travail l’exige. Que vous ayez besoin d’aperçus instantanés dans le navigateur, d’encodage vidéo de qualité professionnelle sur un serveur, ou d’un rendu massivement parallèle sur une infrastructure cloud, Rendervid fournit un package dédié pour chaque environnement. Chaque cible de déploiement partage le même système de modèles et la même bibliothèque de composants , de sorte qu’un modèle qui fonctionne dans le navigateur fonctionne de manière identique sur AWS Lambda ou dans un conteneur Docker.
Ce guide couvre les quatre environnements de déploiement, les options de rendu disponibles dans chacun, et les fonctionnalités avancées comme le flou de mouvement, l’export GIF et l’optimisation des performances. À la fin, vous saurez exactement quel chemin de déploiement convient à votre projet et comment le configurer.
+---------------------+
| Modèle JSON |
+----------+----------+
|
+--------------------+--------------------+
| | |
+--------v--------+ +-------v--------+ +-------v---------+
| Navigateur | | Node.js | | Cloud |
| @rendervid/ | | @rendervid/ | | @rendervid/ |
| renderer-browser | | renderer-node | | cloud-rendering |
+---------+--------+ +-------+--------+ +-------+---------+
| | |
Canvas / WebM FFmpeg / Playwright Workers parallèles
| | |
+---------v--------+ +------v---------+ +-------v---------+
| MP4, WebM, PNG, | | MP4, WebM, MOV,| | AWS Lambda |
| JPEG, WebP | | GIF, H.265 | | Azure Functions |
+------------------+ +----------------+ | GCP Functions |
| Docker |
+-----------------+
Le package @rendervid/renderer-browser gère le rendu côté client entièrement dans le navigateur de l’utilisateur. Aucune infrastructure serveur n’est requise. Cela en fait le chemin le plus rapide du modèle à l’aperçu.
npm install @rendervid/renderer-browser
Le rendu navigateur utilise l’API HTML Canvas pour dessiner chaque image du modèle. Le moteur de rendu parcourt chaque scène et calque, applique les animations et les fonctions d’assouplissement, compose le résultat sur un élément canvas et capture chaque image. Pour la sortie vidéo, les images sont encodées en utilisant l’API MediaRecorder intégrée au navigateur (WebM) ou un encodeur MP4 basé sur WebAssembly.
| Format | Extension | Notes |
|---|---|---|
| MP4 | .mp4 | H.264 via encodeur WebAssembly |
| WebM | .webm | VP8/VP9 via API MediaRecorder |
| PNG | .png | Image unique ou séquence d’images |
| JPEG | .jpeg | Image unique, qualité configurable |
| WebP | .webp | Image unique, taille de fichier réduite |
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: "Bonjour depuis le navigateur",
fontSize: 72,
color: "#ffffff",
position: { x: 960, y: 540 },
animation: {
entrance: { type: "fadeIn", duration: 1 },
},
},
],
},
],
};
// Rendu sur un élément canvas pour l'aperçu
const canvas = document.getElementById("preview") as HTMLCanvasElement;
await renderer.preview(template, canvas);
// Export en MP4
const mp4Blob = await renderer.render(template, {
format: "mp4",
quality: "standard",
});
// Export d'une seule image en PNG
const pngBlob = await renderer.renderFrame(template, {
format: "png",
frameNumber: 0,
});
Le package @rendervid/renderer-node fournit un rendu côté serveur avec une intégration FFmpeg complète. Il utilise Playwright ou Puppeteer pour rendre chaque image dans un navigateur sans interface graphique, puis envoie les images à FFmpeg pour un encodage vidéo de qualité professionnelle.
# Installer le moteur de rendu
npm install @rendervid/renderer-node
# Installer Playwright (inclut les binaires du navigateur)
npx playwright install chromium
# Installer FFmpeg (requis pour l'encodage vidéo)
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt-get install ffmpeg
# Windows (via Chocolatey)
choco install ffmpeg
| Format | Extension | Codec | Notes |
|---|---|---|---|
| MP4 | .mp4 | H.264 | Compatibilité universelle |
| MP4 | .mp4 | H.265/HEVC | Fichiers 50% plus petits, appareils récents |
| WebM | .webm | VP8/VP9 | Optimisé pour le web |
| MOV | .mov | ProRes | Flux de travail d’édition professionnelle |
| GIF | .gif | Basé sur palette | Animé avec optimisation |
| PNG | .png | Sans perte | Séquence d’images ou image unique |
| JPEG | .jpeg | Avec perte | Qualité configurable |
| WebP | .webp | Avec/sans perte | Format web moderne |
Rendervid fournit quatre préréglages de qualité qui contrôlent les paramètres d’encodage :
| Préréglage | Débit | Cas d’utilisation |
|---|---|---|
draft | Faible | Aperçus rapides pendant le développement |
standard | Moyen | Sortie polyvalente, bon rapport qualité/taille |
high | Élevé | Matériel marketing, livrables finaux |
lossless | Maximum | Archivage, édition ultérieure, aucune perte de qualité |
Le moteur de rendu Node.js prend en charge l’accélération matérielle pour décharger l’encodage sur le GPU. Cela réduit considérablement le temps de rendu pour les modèles complexes avec de nombreux calques, hautes résolutions et effets.
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/video.mp4",
hardwareAcceleration: true,
});
L’accélération GPU est disponible sur les systèmes avec du matériel compatible NVIDIA (NVENC), AMD (AMF) ou Intel (Quick Sync). FFmpeg doit être compilé avec la prise en charge de l’encodeur correspondant.
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: "Titre",
default: "Votre produit, sublimé",
},
},
};
// Rendu avec entrées personnalisées
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/promo.mp4",
renderWaitTime: 2000, // Attendre 2s pour le chargement des médias
inputs: {
headline: "Soldes d'été — 50% de réduction sur tout",
},
});
console.log(`Rendu : ${result.outputPath}`);
console.log(`Durée : ${result.duration}s`);
console.log(`Taille du fichier : ${(result.fileSize / 1024 / 1024).toFixed(2)} Mo`);
Pour traiter de nombreux modèles en séquence, utilisez l’API de traitement par lots :
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,
});
}
Pour un véritable rendu parallèle sur une seule machine, consultez la section Rendu local Docker ci-dessous.
Le package @rendervid/cloud-rendering permet un rendu distribué et parallèle sur une infrastructure cloud. Au lieu de rendre les images séquentiellement sur une seule machine, le rendu cloud divise le travail entre de nombreuses fonctions worker qui rendent les images simultanément, puis les fusionne dans la sortie finale.
+------------------+
| Votre appli |
| (Coordinateur) |
+--------+---------+
|
| 1. Diviser la vidéo en morceaux d'images
v
+--------+---------+
| Diviseur de |
| morceaux |
+--------+---------+
|
| 2. Distribuer les morceaux aux workers
v
+--------+---+---+---+---+--------+
| Worker 1 | Worker 2 | Worker N |
| (Lambda/ | (Lambda/ | (Lambda/ |
| Azure/ | Azure/ | Azure/ |
| GCP) | GCP) | GCP) |
+-----+------+----+------+----+----+
| | |
| 3. Chaque worker rend ses images
v v v
+-----+------+----+------+----+----+
| Images | Images | Images |
| 001-030 | 031-060 | 061-090|
+-----+------+----+------+----+----+
| | |
+------+-----+-----+----+
|
v
+-------+--------+
| Fusionneur |
| (FFmpeg concat) |
+-------+---------+
|
| 4. Combiner en vidéo finale
v
+-------+---------+
| Stockage objet |
| S3 / Blob / GCS|
+------------------+
|
| 5. Télécharger ou servir
v
+-------+---------+
| Sortie finale |
| video.mp4 |
+------------------+
Comment ça fonctionne étape par étape :
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",
});
L’interface de configuration complète :
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 est la cible de déploiement cloud la plus courante. Chaque fonction worker s’exécute dans une invocation Lambda séparée, permettant un parallélisme massif.
Prérequis :
Configuration :
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(`Rendu en ${result.renderTime}ms`);
console.log(`Workers utilisés : ${result.workersUsed}`);
console.log(`Sortie : ${result.outputUrl}`);
Configuration typique AWS Lambda :
const renderer = new CloudRenderer({
provider: "azure",
quality: "standard",
downloadToLocal: true,
outputPath: "/output/video.mp4",
azureConfig: {
resourceGroup: "rendervid-rg",
storageAccount: "rendervidstore",
containerName: "renders",
},
});
const result = await renderer.render(template);
const renderer = new CloudRenderer({
provider: "gcp",
quality: "standard",
downloadToLocal: true,
outputPath: "/output/video.mp4",
gcpConfig: {
projectId: "my-project-id",
bucketName: "rendervid-output",
region: "us-central1",
},
});
const result = await renderer.render(template);
| Fournisseur | Coût par minute | Coût par heure | Notes |
|---|---|---|---|
| AWS Lambda | ~0,02 $ | ~1,00 $ | Paiement par 1ms de calcul |
| Azure Functions | ~0,02 $ | ~1,00 $ | Tarification plan de consommation |
| Google Cloud Functions | ~0,02 $ | ~1,00 $ | Paiement par 100ms de calcul |
| Docker (local) | Gratuit | Gratuit | Utilise votre propre matériel |
Tous les fournisseurs cloud offrent des niveaux gratuits qui couvrent des charges de travail de rendu importantes pendant le développement et la production à faible volume.
Le rendu cloud atteint une accélération de 10 à 50 fois par rapport au rendu séquentiel sur une seule machine. L’accélération exacte dépend du nombre de workers, de la complexité du modèle et de la durée de la vidéo.
| Durée vidéo | Séquentiel (1 machine) | Cloud (50 workers) | Accélération |
|---|---|---|---|
| 30 secondes | ~90 secondes | ~5 secondes | 18x |
| 2 minutes | ~6 minutes | ~15 secondes | 24x |
| 10 minutes | ~30 minutes | ~45 secondes | 40x |
| 30 minutes | ~90 minutes | ~2 minutes | 45x |
Les vidéos plus longues bénéficient davantage du parallélisme car le surcoût de démarrage des workers et de fusion des images est amorti sur plus d’images.
Le rendu basé sur Docker vous offre la même architecture de rendu parallèle que le rendu cloud, mais s’exécutant entièrement sur votre machine locale. Il est totalement gratuit, n’utilise aucun compte cloud et est idéal pour les configurations auto-hébergées, le développement et les équipes qui souhaitent un rendu parallèle sans coûts cloud.
# Assurez-vous que Docker est installé et en cours d'exécution
docker --version
# Installer le package de rendu cloud
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, // Nombre de conteneurs Docker à exécuter en parallèle
},
});
const result = await renderer.render(template);
console.log(`Rendu en ${result.renderTime}ms en utilisant ${result.workersUsed} workers`);
Choix de workersCount : Définissez cette valeur au nombre de cœurs CPU disponibles sur votre machine. Par exemple, une machine à 8 cœurs fonctionne bien avec 8 workers. Aller au-delà du nombre de cœurs ajoute un surcoût de changement de contexte sans améliorer le débit.
+------------------+
| Coordinateur |
| (votre processus)|
+--------+---------+
|
+-----+-----+-----+-----+
| | | | |
+--v--+ +--v-+ +-v--+ +-v--+
| C1 | | C2 | | C3 | | C4 | ... Conteneurs Docker
+--+--+ +--+-+ +-+--+ +-+--+
| | | |
v v v v
+--+------+-----+------+--+
| Volume partagé |
| /tmp/rendervid-work |
+-------------+-------------+
|
v
+-------+--------+
| Fusionneur |
+-------+---------+
|
v
+-------+---------+
| /output/video |
+-----------------+
Chaque conteneur Docker est un worker autonome avec Node.js, Playwright et FFmpeg pré-installés. Les workers lisent leurs affectations d’images depuis le volume partagé, rendent les images et écrivent les résultats. Le coordinateur fusionne ensuite tous les segments dans la sortie finale.
Rendervid prend en charge le flou de mouvement grâce au suréchantillonnage temporel. Au lieu de rendre un seul instant par image, le moteur de rendu capture plusieurs sous-images à des moments légèrement différents et les mélange ensemble. Cela produit le flou naturel que les caméras créent lorsque les objets se déplacent pendant une exposition.
| Préréglage | Échantillons par image | Multiplicateur temps de rendu | Qualité visuelle |
|---|---|---|---|
low | 5 | 5x | Lissage subtil |
medium | 10 | 10x | Flou notable sur mouvement rapide |
high | 16 | 16x | Flou de mouvement cinématographique |
ultra | 32 | 32x | Qualité film, flou intense |
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/cinematic.mp4",
motionBlur: {
enabled: true,
quality: "high", // 16 échantillons par image
},
});
Image N (sans flou de mouvement) : Image N (avec flou de mouvement, 5 échantillons) :
Instant unique : 5 sous-images mélangées :
+--------+ +--------+ +--------+ +--------+
| O | | O | + | O | + | O | ...
+--------+ +--------+ +--------+ +--------+
|
v
+--------+
| ~O~ | <- Résultat mélangé
+--------+
Chaque sous-image fait avancer la timeline d’animation d’un petit incrément (1/fps divisé par le nombre d’échantillons). Les sous-images sont ensuite mélangées en alpha pour produire l’image finale. Les objets qui se sont déplacés entre les sous-images apparaissent flous le long de leur trajectoire de mouvement, tandis que les éléments stationnaires restent nets.
Le flou de mouvement multiplie le temps de rendu proportionnellement au nombre d’échantillons. Une vidéo de 10 secondes à 30fps a 300 images. Avec une qualité high (16 échantillons), le moteur de rendu doit générer 4 800 sous-images au lieu de 300. Utilisez la qualité draft pendant le développement et passez à high ou ultra uniquement pour les exports finaux.
Le rendu cloud et le rendu parallèle Docker fonctionnent bien avec le flou de mouvement car le coût par image est distribué entre les workers. Une augmentation de 16x par image divisée par 16 workers résulte en un temps de rendu total à peu près identique à un rendu sans flou sur une seule machine.
L’export GIF de Rendervid va bien au-delà d’une simple conversion image vers GIF. Il utilise le pipeline de génération de palette de FFmpeg pour produire des GIF animés optimisés et de haute qualité avec tramage configurable, nombre de couleurs et contraintes de taille de fichier.
L’encodage GIF standard utilise une seule palette globale de 256 couleurs, ce qui entraîne souvent des bandes et une mauvaise reproduction des couleurs. Rendervid utilise une approche en deux passes :
| Préréglage | Résolution | Couleurs max | Cas d’utilisation cible |
|---|---|---|---|
social | 480x480 | 256 | Instagram, Twitter, Slack |
web | 640x480 | 256 | Articles de blog, documentation |
email | 320x240 | 128 | Campagnes email, newsletters |
| Algorithme | Qualité | Taille fichier | Description |
|---|---|---|---|
floyd_steinberg | Meilleure | Plus grande | Tramage par diffusion d’erreur, dégradés lisses |
bayer | Bonne | Moyenne | Tramage ordonné, motif cohérent |
none | Plus faible | Plus petite | Pas de tramage, régions de couleur plates |
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/animation.gif",
gif: {
preset: "social", // résolution 480x480
colors: 256, // palette de 2-256 couleurs
dithering: "floyd_steinberg",
targetSizeKB: 5000, // Auto-optimiser pour rester sous 5Mo
fps: 15, // FPS plus bas = fichier plus petit
},
});
console.log(`Taille GIF : ${(result.fileSize / 1024).toFixed(0)} Ko`);
console.log(`Taille estimée était : ${result.estimatedSizeKB} Ko`);
Lorsque vous définissez un targetSizeKB, Rendervid estime la taille du fichier de sortie avant le rendu et ajuste automatiquement les paramètres (nombre de couleurs, résolution, FPS) pour atteindre la cible. Ceci est particulièrement utile pour les plateformes avec des limites de taille de fichier (par exemple, limite de 50 Mo de Slack, contrainte typique de 10 Mo pour les emails).
// Auto-optimiser pour tenir dans une contrainte email de 2Mo
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/email-banner.gif",
gif: {
preset: "email",
targetSizeKB: 2000,
},
});
Rendervid est organisé comme un monorepo avec 13 packages. Chaque package a une responsabilité ciblée, et ils se composent ensemble pour prendre en charge chaque scénario de déploiement.
@rendervid/
├── core Moteur, types, validation, système d'animation
│ ├── Parseur et validateur de modèle (AJV + JSON Schema)
│ ├── Moteur d'animation (40+ préréglages, 30+ fonctions d'assouplissement)
│ ├── Système de calques (texte, image, vidéo, forme, audio, groupe, lottie, personnalisé)
│ └── Gestion des scènes et transitions (17 types)
│
├── renderer-browser Rendu côté client
│ ├── Rendu d'images basé sur Canvas
│ ├── MediaRecorder pour export WebM
│ └── Encodeur MP4 WebAssembly
│
├── renderer-node Rendu côté serveur
│ ├── Navigateur sans interface Playwright/Puppeteer
│ ├── Intégration FFmpeg (fluent-ffmpeg)
│ ├── Accélération GPU
│ └── Pipeline d'optimisation GIF
│
├── cloud-rendering Orchestration multi-cloud
│ ├── Fournisseur AWS Lambda
│ ├── Fournisseur Azure Functions
│ ├── Fournisseur Google Cloud Functions
│ ├── Fournisseur Docker local
│ ├── Diviseur et fusionneur de morceaux
│ └── Adaptateurs de stockage d'objets (S3, Blob, GCS)
│
├── player Composant lecteur vidéo/modèle
├── editor Éditeur visuel de modèles (état Zustand)
├── components Composants React pré-construits
│ ├── AnimatedLineChart
│ ├── AuroraBackground
│ ├── WaveBackground
│ ├── SceneTransition
│ └── TypewriterEffect
│
├── templates Définitions et exemples de modèles (100+)
├── testing Utilitaires de test
│ ├── Matchers personnalisés Vitest
│ ├── Helpers de test snapshot
│ └── Utilitaires de régression visuelle
│
├── editor-playground Environnement de développement éditeur
├── player-playground Environnement de développement lecteur
├── mcp Serveur Model Context Protocol
└── docs Site de documentation VitePress
renderer-node et distribue son travail entre les fonctions cloud ou les conteneurs Docker.Rendervid est construit sur un stack TypeScript moderne choisi pour la fiabilité, la performance et l’expérience développeur.
| Couche | Technologie | Objectif |
|---|---|---|
| Langage | TypeScript | Sécurité de type sur les 13 packages |
| Build | tsup, Vite | Builds rapides, tree-shaking, sortie ESM/CJS |
| Tests | Vitest | Tests unitaires, tests snapshot, matchers personnalisés |
| Framework UI | React 18.3.1 | Rendu de composants, composition de modèles |
| Gestion d’état | Zustand | État de l’éditeur (léger, sans boilerplate) |
| Styles | Tailwind CSS | UI éditeur et lecteur |
| Validation | AJV avec JSON Schema | Validation de modèle avant rendu |
| Rendu navigateur | API HTML Canvas | Dessin image par image dans le navigateur |
| Navigateur headless | Playwright, Puppeteer | Capture d’image côté serveur |
| Encodage vidéo | FFmpeg (fluent-ffmpeg) | Encodage H.264, H.265, VP9, ProRes, GIF |
| Graphiques 3D | Three.js (optionnel), CSS 3D | Scènes 3D et transformations de perspective |
| Documentation | VitePress | Site de documentation des packages |
Rendervid inclut un package de test dédié (@rendervid/testing) qui fournit des matchers Vitest personnalisés, des helpers de test snapshot et des utilitaires de régression visuelle pour valider les modèles.
import { describe, it, expect } from "vitest";
import "@rendervid/testing/matchers";
describe("Modèle vitrine produit", () => {
it("devrait être un modèle valide", () => {
expect(template).toBeValidTemplate();
});
it("devrait avoir les bonnes dimensions", () => {
expect(template).toHaveResolution(1920, 1080);
});
it("devrait contenir au moins un calque de texte", () => {
expect(template).toContainLayerOfType("text");
});
it("devrait avoir des animations sur le titre", () => {
expect(template.scenes[0].layers[0]).toHaveAnimation("entrance");
});
});
Les tests snapshot rendent un modèle en image et le comparent à une référence stockée. Tout changement visuel fait échouer le test, facilitant la détection des régressions non intentionnelles.
import { describe, it } from "vitest";
import { renderSnapshot } from "@rendervid/testing";
describe("Régression visuelle du modèle", () => {
it("devrait correspondre au snapshot de référence à l'image 0", async () => {
const snapshot = await renderSnapshot(template, { frame: 0 });
expect(snapshot).toMatchImageSnapshot();
});
it("devrait correspondre au snapshot de référence au point médian", async () => {
const totalFrames = template.fps * template.scenes[0].duration;
const snapshot = await renderSnapshot(template, {
frame: Math.floor(totalFrames / 2),
});
expect(snapshot).toMatchImageSnapshot();
});
});
Intégrez les tests de régression visuelle dans votre pipeline CI/CD pour détecter les changements de rendu avant qu’ils n’atteignent la production :
# .github/workflows/visual-regression.yml
name: Tests de régression visuelle
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
Obtenir les temps de rendu les plus rapides possibles nécessite de comprendre où le temps est dépensé et quels leviers vous pouvez actionner. Voici les stratégies d’optimisation les plus impactantes.
| Scénario | Meilleure cible |
|---|---|
| Aperçu rapide pendant l’édition | Navigateur |
| Vidéo unique, qualité production | Node.js |
| Lot de 10-100 vidéos | Node.js ou Docker |
| Lot de 100+ vidéos ou urgent | Cloud (AWS/Azure/GCP) |
draft pendant le développement et les tests. Passer à high ou lossless uniquement pour les exports finaux.renderWaitTime judicieusementL’option renderWaitTime met en pause le rendu pour permettre aux médias externes (images, vidéos, polices) de se charger. Définissez cette valeur au minimum qui garantit que tous les assets sont chargés. Une valeur de 500-2000ms est typique. La définir trop haut gaspille du temps sur chaque image.
await renderer.render(template, {
renderWaitTime: 1000, // 1 seconde est généralement suffisante
});
Pour toute vidéo de plus de 10 secondes, le rendu parallèle (Docker ou cloud) sera plus rapide que le rendu séquentiel. Le point d’équilibre dépend de votre matériel et de votre configuration cloud, mais en règle générale :
Les GIF sont intrinsèquement volumineux. Pour garder les tailles de fichiers gérables :
social, web, email).targetSizeKB pour laisser Rendervid auto-optimiser les paramètres.none) si la taille du fichier compte plus que la qualité des dégradés.Sur les machines avec des GPU compatibles, l’encodage accéléré par matériel peut réduire les temps de rendu de 2 à 5 fois pour l’étape d’encodage. Ceci est plus impactant pour les sorties haute résolution (4K+) et à haut débit.
Si votre modèle référence des images ou vidéos externes, pré-téléchargez-les vers le stockage local avant le rendu. La latence réseau pendant le rendu est la cause la plus courante de rendus lents ou échoués.
Rendervid prend en charge quatre options de déploiement : le rendu basé sur navigateur pour les aperçus côté client et les applications web, le rendu Node.js pour le traitement par lots côté serveur avec FFmpeg, le rendu cloud sur AWS Lambda/Azure Functions/GCP pour une accélération parallèle de 10 à 50 fois, et Docker pour un rendu parallèle local gratuit.
Le rendu cloud coûte environ 0,02 $ par minute sur AWS Lambda, Azure Functions ou Google Cloud Functions, soit environ 1 $ par heure de rendu. Le rendu local basé sur Docker est totalement gratuit et offre les mêmes avantages de rendu parallèle.
Le rendu cloud utilise un coordinateur qui divise les vidéos en morceaux d'images, les distribue aux fonctions worker (Lambda/Azure/GCP), chaque worker rend ses images assignées, un fusionneur combine toutes les images dans la vidéo finale, et la sortie est stockée dans le stockage d'objets (S3/Azure Blob/GCS).
Pour le rendu navigateur, tout navigateur moderne avec prise en charge Canvas fonctionne. Pour le rendu Node.js, vous avez besoin de Node.js 18+, Playwright ou Puppeteer, et FFmpeg installé. Pour le rendu cloud, vous avez besoin d'un compte AWS/Azure/GCP ou de Docker installé localement.
Oui, le moteur de rendu Node.js prend en charge l'accélération matérielle pour un rendu plus rapide. L'accélération GPU peut considérablement accélérer le rendu, en particulier pour les modèles complexes avec de nombreux calques, effets et hautes résolutions.
Rendervid implémente le flou de mouvement en utilisant le suréchantillonnage temporel, en rendant plusieurs sous-images par image de sortie et en les mélangeant ensemble. Les préréglages de qualité vont de faible (5 échantillons, temps de rendu x5) à ultra (32 échantillons, temps de rendu x32), produisant une fluidité cinématographique.
Nous aidons les entreprises comme la vôtre à développer des chatbots intelligents, des serveurs MCP, des outils d'IA ou d'autres types d'automatisation par IA pour remplacer l'humain dans les tâches répétitives de votre organisation.

Guide complet du système de templates Rendervid. Apprenez à créer des templates vidéo JSON, utiliser des variables dynamiques avec la syntaxe {{variable}}, conf...

Explorez tous les composants Rendervid : 8 types de calques intégrés (texte, image, vidéo, forme, audio, groupe, lottie, personnalisé), composants React prêts à...

Découvrez notre test approfondi de Flux 1.1 Proxa0! Nous analysons ses points forts, ses faiblesses et sa créativité sur une variété de prompts texte-image. Voy...