
Sistema de Templates Rendervid - Templates JSON, Variáveis, Animações e Transições
Guia completo do sistema de templates Rendervid. Aprenda a criar templates de vídeo JSON, usar variáveis dinâmicas com sintaxe {{variável}}, configurar mais de ...

Automação de IA
Implante o Rendervid em qualquer lugar: renderização baseada em navegador para pré-visualizações, Node.js para processamento em lote no servidor ou renderização na nuvem no AWS Lambda, Azure Functions, GCP e Docker para renderização paralela 10-50x mais rápida.
O Rendervid foi projetado para renderizar em qualquer lugar que seu fluxo de trabalho exija. Se você precisa de pré-visualizações instantâneas no navegador, codificação de vídeo de qualidade de produção em um servidor, ou renderização massivamente paralela em infraestrutura de nuvem, o Rendervid fornece um pacote dedicado para cada ambiente. Cada destino de implantação compartilha o mesmo sistema de modelos e biblioteca de componentes , então um modelo que funciona no navegador funciona de forma idêntica no AWS Lambda ou em um contêiner Docker.
Este guia cobre todos os quatro ambientes de implantação, as opções de renderização disponíveis em cada um, e recursos avançados como motion blur, exportação de GIF e otimização de desempenho. Ao final, você saberá exatamente qual caminho de implantação se adequa ao seu projeto e como configurá-lo.
+---------------------+
| Modelo JSON |
+----------+----------+
|
+--------------------+--------------------+
| | |
+--------v--------+ +-------v--------+ +-------v---------+
| Navegador | | Node.js | | Nuvem |
| @rendervid/ | | @rendervid/ | | @rendervid/ |
| renderer-browser | | renderer-node | | cloud-rendering |
+---------+--------+ +-------+--------+ +-------+---------+
| | |
Canvas / WebM FFmpeg / Playwright Trabalhadores Paralelos
| | |
+---------v--------+ +------v---------+ +-------v---------+
| MP4, WebM, PNG, | | MP4, WebM, MOV,| | AWS Lambda |
| JPEG, WebP | | GIF, H.265 | | Azure Functions |
+------------------+ +----------------+ | GCP Functions |
| Docker |
+-----------------+
O pacote @rendervid/renderer-browser lida com renderização do lado do cliente inteiramente dentro do navegador do usuário. Nenhuma infraestrutura de servidor é necessária. Isso torna o caminho mais rápido do modelo para a pré-visualização.
npm install @rendervid/renderer-browser
A renderização no navegador usa a API HTML Canvas para desenhar cada quadro do modelo. O renderizador percorre cada cena e camada, aplica animações e funções de suavização, compõe o resultado em um elemento canvas e captura cada quadro. Para saída de vídeo, os quadros são codificados usando a API MediaRecorder integrada do navegador (WebM) ou um codificador MP4 baseado em WebAssembly.
| Formato | Extensão | Observações |
|---|---|---|
| MP4 | .mp4 | H.264 via codificador WebAssembly |
| WebM | .webm | VP8/VP9 via API MediaRecorder |
| PNG | .png | Quadro único ou sequência de imagens |
| JPEG | .jpeg | Quadro único, qualidade configurável |
| WebP | .webp | Quadro único, tamanho de arquivo menor |
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: "Olá do Navegador",
fontSize: 72,
color: "#ffffff",
position: { x: 960, y: 540 },
animation: {
entrance: { type: "fadeIn", duration: 1 },
},
},
],
},
],
};
// Renderizar para um elemento canvas para pré-visualização
const canvas = document.getElementById("preview") as HTMLCanvasElement;
await renderer.preview(template, canvas);
// Exportar como MP4
const mp4Blob = await renderer.render(template, {
format: "mp4",
quality: "standard",
});
// Exportar um único quadro como PNG
const pngBlob = await renderer.renderFrame(template, {
format: "png",
frameNumber: 0,
});
O pacote @rendervid/renderer-node fornece renderização do lado do servidor com integração completa do FFmpeg. Ele usa Playwright ou Puppeteer para renderizar cada quadro em um navegador headless, então canaliza os quadros para o FFmpeg para codificação de vídeo de nível profissional.
# Instalar o renderizador
npm install @rendervid/renderer-node
# Instalar Playwright (inclui binários do navegador)
npx playwright install chromium
# Instalar FFmpeg (necessário para codificação de vídeo)
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt-get install ffmpeg
# Windows (via Chocolatey)
choco install ffmpeg
| Formato | Extensão | Codec | Observações |
|---|---|---|---|
| MP4 | .mp4 | H.264 | Compatibilidade universal |
| MP4 | .mp4 | H.265/HEVC | Arquivos 50% menores, dispositivos mais novos |
| WebM | .webm | VP8/VP9 | Otimizado para web |
| MOV | .mov | ProRes | Fluxos de trabalho de edição profissional |
| GIF | .gif | Baseado em paleta | Animado com otimização |
| PNG | .png | Sem perda | Sequência de imagens ou quadro único |
| JPEG | .jpeg | Com perda | Qualidade configurável |
| WebP | .webp | Com/Sem perda | Formato web moderno |
O Rendervid fornece quatro predefinições de qualidade que controlam parâmetros de codificação:
| Predefinição | Bitrate | Caso de Uso |
|---|---|---|
draft | Baixo | Pré-visualizações rápidas durante desenvolvimento |
standard | Médio | Saída de uso geral, boa qualidade/tamanho |
high | Alto | Materiais de marketing, entregas finais |
lossless | Máximo | Arquivamento, edição adicional, sem perda de qualidade |
O renderizador Node.js suporta aceleração de hardware para descarregar a codificação para a GPU. Isso reduz significativamente o tempo de renderização para modelos complexos com muitas camadas, altas resoluções e efeitos.
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/video.mp4",
hardwareAcceleration: true,
});
A aceleração por GPU está disponível em sistemas com hardware compatível NVIDIA (NVENC), AMD (AMF) ou Intel (Quick Sync). O FFmpeg deve ser compilado com o suporte ao codificador correspondente.
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: "Título",
default: "Seu Produto, Elevado",
},
},
};
// Renderizar com entradas personalizadas
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/promo.mp4",
renderWaitTime: 2000, // Aguardar 2s para carregar mídia
inputs: {
headline: "Promoção de Verão — 50% de Desconto em Tudo",
},
});
console.log(`Renderizado: ${result.outputPath}`);
console.log(`Duração: ${result.duration}s`);
console.log(`Tamanho do arquivo: ${(result.fileSize / 1024 / 1024).toFixed(2)} MB`);
Para processar muitos modelos em sequência, use a API de lote:
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,
});
}
Para renderização verdadeiramente paralela em uma única máquina, consulte a seção Renderização Local Docker abaixo.
O pacote @rendervid/cloud-rendering permite renderização distribuída e paralela em infraestrutura de nuvem. Em vez de renderizar quadros sequencialmente em uma máquina, a renderização na nuvem divide o trabalho entre muitas funções trabalhadoras que renderizam quadros simultaneamente, depois os mescla na saída final.
+------------------+
| Sua App |
| (Coordenador) |
+--------+---------+
|
| 1. Dividir vídeo em blocos de quadros
v
+--------+---------+
| Divisor de Blocos|
+--------+---------+
|
| 2. Distribuir blocos para trabalhadores
v
+--------+---+---+---+---+--------+
| Trabalhador 1 | Trabalhador 2 | Trabalhador N |
| (Lambda/ | (Lambda/ | (Lambda/ |
| Azure/ | Azure/ | Azure/ |
| GCP) | GCP) | GCP) |
+-----+------+----+------+----+----+
| | |
| 3. Cada trabalhador renderiza seus quadros
v v v
+-----+------+----+------+----+----+
| Quadros | Quadros | Quadros|
| 001-030 | 031-060 | 061-090|
+-----+------+----+------+----+----+
| | |
+------+-----+-----+----+
|
v
+-------+--------+
| Mesclador |
| (FFmpeg concat) |
+-------+---------+
|
| 4. Combinar em vídeo final
v
+-------+---------+
|Armazenamento de Objetos|
| S3 / Blob / GCS |
+------------------+
|
| 5. Baixar ou servir
v
+-------+---------+
| Saída Final |
| video.mp4 |
+------------------+
Como funciona passo a passo:
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",
});
A interface de configuração completa:
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 é o destino de implantação em nuvem mais comum. Cada função trabalhadora é executada em uma invocação Lambda separada, permitindo paralelismo massivo.
Pré-requisitos:
Configuração:
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(`Renderizado em ${result.renderTime}ms`);
console.log(`Trabalhadores usados: ${result.workersUsed}`);
console.log(`Saída: ${result.outputUrl}`);
Configuração típica do 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);
| Provedor | Custo por Minuto | Custo por Hora | Observações |
|---|---|---|---|
| AWS Lambda | ~$0,02 | ~$1,00 | Pagar por 1ms de computação |
| Azure Functions | ~$0,02 | ~$1,00 | Preço do plano de consumo |
| Google Cloud Functions | ~$0,02 | ~$1,00 | Pagar por 100ms de computação |
| Docker (local) | Grátis | Grátis | Usa seu próprio hardware |
Todos os provedores de nuvem oferecem camadas gratuitas que cobrem cargas de trabalho significativas de renderização durante o desenvolvimento e produção de baixo volume.
A renderização na nuvem alcança uma aceleração de 10-50x comparada à renderização sequencial em uma única máquina. A aceleração exata depende do número de trabalhadores, complexidade do modelo e duração do vídeo.
| Duração do Vídeo | Sequencial (1 máquina) | Nuvem (50 trabalhadores) | Aceleração |
|---|---|---|---|
| 30 segundos | ~90 segundos | ~5 segundos | 18x |
| 2 minutos | ~6 minutos | ~15 segundos | 24x |
| 10 minutos | ~30 minutos | ~45 segundos | 40x |
| 30 minutos | ~90 minutos | ~2 minutos | 45x |
Vídeos mais longos se beneficiam mais do paralelismo porque a sobrecarga de inicialização do trabalhador e mesclagem de quadros é amortizada em mais quadros.
A renderização baseada em Docker oferece a mesma arquitetura de renderização paralela que a renderização na nuvem, mas executando inteiramente em sua máquina local. É completamente gratuita, não usa contas de nuvem, e é ideal para configurações auto-hospedadas, desenvolvimento e equipes que desejam renderização paralela sem custos de nuvem.
# Garantir que o Docker está instalado e em execução
docker --version
# Instalar o pacote de renderização na nuvem
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, // Número de contêineres Docker para executar em paralelo
},
});
const result = await renderer.render(template);
console.log(`Renderizado em ${result.renderTime}ms usando ${result.workersUsed} trabalhadores`);
Escolhendo workersCount: Defina isso para o número de núcleos de CPU disponíveis em sua máquina. Por exemplo, uma máquina de 8 núcleos funciona bem com 8 trabalhadores. Ir além da contagem de núcleos adiciona sobrecarga de troca de contexto sem melhorar o rendimento.
+------------------+
| Coordenador |
| (seu processo) |
+--------+---------+
|
+-----+-----+-----+-----+
| | | | |
+--v--+ +--v-+ +-v--+ +-v--+
| C1 | | C2 | | C3 | | C4 | ... Contêineres Docker
+--+--+ +--+-+ +-+--+ +-+--+
| | | |
v v v v
+--+------+-----+------+--+
| Volume Compartilhado |
| /tmp/rendervid-work |
+-------------+-------------+
|
v
+-------+--------+
| Mesclador |
+-------+---------+
|
v
+-------+---------+
| /output/video |
+-----------------+
Cada contêiner Docker é um trabalhador auto-contido com Node.js, Playwright e FFmpeg pré-instalados. Os trabalhadores leem suas atribuições de quadros do volume compartilhado, renderizam os quadros e escrevem os resultados de volta. O coordenador então mescla todos os segmentos na saída final.
O Rendervid suporta motion blur através de superamostragem temporal. Em vez de renderizar um único instante por quadro, o renderizador captura múltiplos sub-quadros em pontos ligeiramente diferentes no tempo e os mescla juntos. Isso produz o desfoque natural que as câmeras criam quando objetos se movem durante uma exposição.
| Predefinição | Amostras por Quadro | Multiplicador de Tempo de Renderização | Qualidade Visual |
|---|---|---|---|
low | 5 | 5x | Suavização sutil |
medium | 10 | 10x | Desfoque perceptível em movimento rápido |
high | 16 | 16x | Motion blur cinematográfico |
ultra | 32 | 32x | Nível de filme, desfoque pesado |
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/cinematic.mp4",
motionBlur: {
enabled: true,
quality: "high", // 16 amostras por quadro
},
});
Quadro N (sem motion blur): Quadro N (com motion blur, 5 amostras):
Instante único: 5 sub-quadros mesclados:
+--------+ +--------+ +--------+ +--------+
| O | | O | + | O | + | O | ...
+--------+ +--------+ +--------+ +--------+
|
v
+--------+
| ~O~ | <- Resultado mesclado
+--------+
Cada sub-quadro avança a linha do tempo da animação por um incremento minúsculo (1/fps dividido pela contagem de amostras). Os sub-quadros são então mesclados com alfa para produzir o quadro final. Objetos que se moveram entre sub-quadros aparecem desfocados ao longo de seu caminho de movimento, enquanto elementos estacionários permanecem nítidos.
Motion blur multiplica o tempo de renderização proporcionalmente à contagem de amostras. Um vídeo de 10 segundos a 30fps tem 300 quadros. Com qualidade high (16 amostras), o renderizador deve gerar 4.800 sub-quadros em vez de 300. Use qualidade draft durante o desenvolvimento e mude para high ou ultra apenas para exportações finais.
A renderização na nuvem e a renderização paralela Docker funcionam bem com motion blur porque o custo por quadro é distribuído entre os trabalhadores. Um aumento de 16x por quadro dividido entre 16 trabalhadores resulta aproximadamente no mesmo tempo total de renderização que uma renderização sem desfoque em uma máquina.
A exportação de GIF do Rendervid vai muito além de uma simples conversão de quadro para GIF. Ela usa o pipeline de geração de paleta do FFmpeg para produzir GIFs animados otimizados e de alta qualidade com pontilhamento configurável, contagens de cores e restrições de tamanho de arquivo.
A codificação GIF padrão usa uma única paleta global de 256 cores, o que frequentemente resulta em bandas e reprodução de cores ruim. O Rendervid usa uma abordagem de duas passagens:
| Predefinição | Resolução | Máx. Cores | Caso de Uso Alvo |
|---|---|---|---|
social | 480x480 | 256 | Instagram, Twitter, Slack |
web | 640x480 | 256 | Posts de blog, documentação |
email | 320x240 | 128 | Campanhas de email, newsletters |
| Algoritmo | Qualidade | Tamanho do Arquivo | Descrição |
|---|---|---|---|
floyd_steinberg | Melhor | Maior | Pontilhamento por difusão de erro, gradientes suaves |
bayer | Bom | Médio | Pontilhamento ordenado, padrão consistente |
none | Menor | Menor | Sem pontilhamento, regiões de cores planas |
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/animation.gif",
gif: {
preset: "social", // resolução 480x480
colors: 256, // paleta de 2-256 cores
dithering: "floyd_steinberg",
targetSizeKB: 5000, // Auto-otimizar para ficar abaixo de 5MB
fps: 15, // FPS menor = arquivo menor
},
});
console.log(`Tamanho do GIF: ${(result.fileSize / 1024).toFixed(0)} KB`);
console.log(`Tamanho estimado era: ${result.estimatedSizeKB} KB`);
Quando você define um targetSizeKB, o Rendervid estima o tamanho do arquivo de saída antes de renderizar e ajusta automaticamente os parâmetros (contagem de cores, resolução, FPS) para atender ao alvo. Isso é particularmente útil para plataformas com limites de tamanho de arquivo (por exemplo, limite de 50 MB do Slack, restrição típica de 10 MB de email).
// Auto-otimizar para caber dentro de uma restrição de email de 2MB
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/email-banner.gif",
gif: {
preset: "email",
targetSizeKB: 2000,
},
});
O Rendervid é organizado como um monorepo com 13 pacotes. Cada pacote tem uma responsabilidade focada, e eles se compõem juntos para suportar cada cenário de implantação.
@rendervid/
├── core Motor, tipos, validação, sistema de animação
│ ├── Analisador e validador de modelo (AJV + JSON Schema)
│ ├── Motor de animação (40+ predefinições, 30+ funções de suavização)
│ ├── Sistema de camadas (texto, imagem, vídeo, forma, áudio, grupo, lottie, personalizado)
│ └── Gerenciamento de cenas e transições (17 tipos)
│
├── renderer-browser Renderização do lado do cliente
│ ├── Renderização de quadros baseada em Canvas
│ ├── MediaRecorder para exportação WebM
│ └── Codificador MP4 WebAssembly
│
├── renderer-node Renderização do lado do servidor
│ ├── Navegador headless Playwright/Puppeteer
│ ├── Integração FFmpeg (fluent-ffmpeg)
│ ├── Aceleração por GPU
│ └── Pipeline de otimização de GIF
│
├── cloud-rendering Orquestração multi-nuvem
│ ├── Provedor AWS Lambda
│ ├── Provedor Azure Functions
│ ├── Provedor Google Cloud Functions
│ ├── Provedor Docker local
│ ├── Divisor de blocos e mesclador
│ └── Adaptadores de armazenamento de objetos (S3, Blob, GCS)
│
├── player Componente de reprodução de vídeo/modelo
├── editor Editor visual de modelo (estado Zustand)
├── components Componentes React pré-construídos
│ ├── AnimatedLineChart
│ ├── AuroraBackground
│ ├── WaveBackground
│ ├── SceneTransition
│ └── TypewriterEffect
│
├── templates Definições e exemplos de modelos (100+)
├── testing Utilitários de teste
│ ├── Matchers personalizados Vitest
│ ├── Auxiliares de teste de snapshot
│ └── Utilitários de regressão visual
│
├── editor-playground Ambiente de desenvolvimento do editor
├── player-playground Ambiente de desenvolvimento do player
├── mcp Servidor Model Context Protocol
└── docs Site de documentação VitePress
renderer-node e distribui seu trabalho entre funções de nuvem ou contêineres Docker.O Rendervid é construído em uma stack TypeScript moderna escolhida por confiabilidade, desempenho e experiência do desenvolvedor.
| Camada | Tecnologia | Propósito |
|---|---|---|
| Linguagem | TypeScript | Segurança de tipo em todos os 13 pacotes |
| Build | tsup, Vite | Builds rápidos, tree-shaking, saída ESM/CJS |
| Teste | Vitest | Testes unitários, testes de snapshot, matchers personalizados |
| Framework de UI | React 18.3.1 | Renderização de componentes, composição de modelos |
| Gerenciamento de Estado | Zustand | Estado do editor (leve, sem boilerplate) |
| Estilização | Tailwind CSS | UI do editor e player |
| Validação | AJV com JSON Schema | Validação de modelo antes da renderização |
| Renderização no Navegador | HTML Canvas API | Desenho quadro a quadro no navegador |
| Navegador Headless | Playwright, Puppeteer | Captura de quadros do lado do servidor |
| Codificação de Vídeo | FFmpeg (fluent-ffmpeg) | Codificação H.264, H.265, VP9, ProRes, GIF |
| Gráficos 3D | Three.js (opcional), CSS 3D | Cenas 3D e transformações de perspectiva |
| Documentação | VitePress | Site de documentação de pacotes |
O Rendervid inclui um pacote de teste dedicado (@rendervid/testing) que fornece matchers Vitest personalizados, auxiliares de teste de snapshot e utilitários de regressão visual para validar modelos.
import { describe, it, expect } from "vitest";
import "@rendervid/testing/matchers";
describe("Modelo de Apresentação de Produto", () => {
it("deve ser um modelo válido", () => {
expect(template).toBeValidTemplate();
});
it("deve ter as dimensões corretas", () => {
expect(template).toHaveResolution(1920, 1080);
});
it("deve conter pelo menos uma camada de texto", () => {
expect(template).toContainLayerOfType("text");
});
it("deve ter animações no título", () => {
expect(template.scenes[0].layers[0]).toHaveAnimation("entrance");
});
});
O teste de snapshot renderiza um modelo para uma imagem e compara com uma referência armazenada. Qualquer mudança visual faz o teste falhar, facilitando a detecção de regressões não intencionais.
import { describe, it } from "vitest";
import { renderSnapshot } from "@rendervid/testing";
describe("Regressão Visual do Modelo", () => {
it("deve corresponder ao snapshot de referência no quadro 0", async () => {
const snapshot = await renderSnapshot(template, { frame: 0 });
expect(snapshot).toMatchImageSnapshot();
});
it("deve corresponder ao snapshot de referência no ponto médio", async () => {
const totalFrames = template.fps * template.scenes[0].duration;
const snapshot = await renderSnapshot(template, {
frame: Math.floor(totalFrames / 2),
});
expect(snapshot).toMatchImageSnapshot();
});
});
Integre testes de regressão visual em seu pipeline de CI/CD para detectar mudanças de renderização antes que cheguem à produção:
# .github/workflows/visual-regression.yml
name: Testes de Regressão Visual
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
Obter os tempos de renderização mais rápidos possíveis requer entender onde o tempo é gasto e quais alavancas você pode puxar. Aqui estão as estratégias de otimização mais impactantes.
| Cenário | Melhor Destino |
|---|---|
| Pré-visualização rápida durante edição | Navegador |
| Vídeo único, qualidade de produção | Node.js |
| Lote de 10-100 vídeos | Node.js ou Docker |
| Lote de 100+ vídeos ou crítico em tempo | Nuvem (AWS/Azure/GCP) |
draft durante desenvolvimento e teste. Mude para high ou lossless apenas para exportações finais.renderWaitTime com SabedoriaA opção renderWaitTime pausa a renderização para permitir que mídia externa (imagens, vídeos, fontes) carregue. Defina isso para o valor mínimo que garante que todos os recursos sejam carregados. Um valor de 500-2000ms é típico. Definir muito alto desperdiça tempo em cada quadro.
await renderer.render(template, {
renderWaitTime: 1000, // 1 segundo geralmente é suficiente
});
Para qualquer vídeo mais longo que 10 segundos, a renderização paralela (Docker ou nuvem) será mais rápida que a renderização sequencial. O ponto de equilíbrio depende do seu hardware e configuração de nuvem, mas como regra geral:
GIFs são inerentemente grandes. Para manter tamanhos de arquivo gerenciáveis:
social, web, email).targetSizeKB para deixar o Rendervid auto-otimizar parâmetros.none) se o tamanho do arquivo importa mais que a qualidade do gradiente.Em máquinas com GPUs compatíveis, a codificação acelerada por hardware pode reduzir os tempos de renderização em 2-5x para a etapa de codificação. Isso é mais impactante para saídas de alta resolução (4K+) e alta taxa de bits.
Se seu modelo referencia imagens ou vídeos externos, pré-baixe-os para armazenamento local antes de renderizar. Latência de rede durante a renderização é a causa mais comum de renderizações lentas ou com falha.
O Rendervid suporta quatro opções de implantação: renderização baseada em navegador para pré-visualizações do lado do cliente e aplicações web, renderização Node.js para processamento em lote no servidor com FFmpeg, renderização na nuvem no AWS Lambda/Azure Functions/GCP para aceleração paralela de 10-50x, e Docker para renderização paralela local gratuita.
A renderização na nuvem custa aproximadamente $0,02 por minuto no AWS Lambda, Azure Functions ou Google Cloud Functions—cerca de $1 por hora de renderização. A renderização local baseada em Docker é completamente gratuita e fornece os mesmos benefícios de renderização paralela.
A renderização na nuvem usa um coordenador que divide vídeos em blocos de quadros, distribui-os para funções trabalhadoras (Lambda/Azure/GCP), cada trabalhador renderiza seus quadros atribuídos, um mesclador combina todos os quadros no vídeo final, e a saída é armazenada em armazenamento de objetos (S3/Azure Blob/GCS).
Para renderização no navegador, qualquer navegador moderno com suporte a Canvas funciona. Para renderização Node.js, você precisa do Node.js 18+, Playwright ou Puppeteer, e FFmpeg instalado. Para renderização na nuvem, você precisa de uma conta AWS/Azure/GCP ou Docker instalado localmente.
Sim, o renderizador Node.js suporta aceleração de hardware para renderização mais rápida. A aceleração por GPU pode acelerar significativamente a renderização, especialmente para modelos complexos com muitas camadas, efeitos e altas resoluções.
O Rendervid implementa motion blur usando superamostragem temporal, renderizando múltiplos sub-quadros por quadro de saída e mesclando-os juntos. As predefinições de qualidade variam de baixa (5 amostras, tempo de renderização 5x) a ultra (32 amostras, tempo de renderização 32x), produzindo suavidade cinematográfica.
Ajudamos empresas como a sua a desenvolver chatbots inteligentes, servidores MCP, ferramentas de IA ou outros tipos de automação de IA para substituir humanos em tarefas repetitivas em sua organização.

Guia completo do sistema de templates Rendervid. Aprenda a criar templates de vídeo JSON, usar variáveis dinâmicas com sintaxe {{variável}}, configurar mais de ...

Explore todos os componentes Rendervid: 8 tipos de camadas integradas (texto, imagem, vídeo, forma, áudio, grupo, lottie, personalizado), componentes React pré-...

Descubra o Rendervid, a alternativa gratuita e de código aberto ao Remotion para geração de vídeo programática. Design voltado para IA com integração MCP, templ...