Rendervid Template System - JSON Templates, Variables, Animations & Transitions

Rendervid Video Rendering Templates Open Source

Rendervid is a programmatic video rendering engine built around a declarative, JSON-based template system. Instead of manually editing video in a timeline, you define every aspect of your video – scenes, layers, animations, transitions, and output settings – in a single JSON document. This approach makes templates stateless, version-controllable, and machine-generatable, opening the door to AI-driven video production, batch rendering pipelines, and fully automated content workflows.

This guide covers the complete Rendervid template system from top to bottom: root-level configuration, output settings, the variable and input system, scenes and composition, all eight layer types, 40+ animation presets, 30+ easing functions, 17 scene transitions, visual effects, font configuration, and output formats.


Template Structure Overview

Every Rendervid template is a JSON object with a well-defined set of root-level fields. Here is the skeleton of a complete template:

{
  "name": "my-template",
  "output": { ... },
  "inputs": [ ... ],
  "composition": {
    "scenes": [ ... ]
  },
  "fonts": { ... },
  "customComponents": { ... },
  "defaults": { ... }
}

Root-Level Fields

FieldTypeRequiredDescription
namestringYesHuman-readable template identifier
outputobjectYesVideo or image output configuration (dimensions, fps, duration, format)
inputsarrayNoDynamic input definitions for template variables
compositionobjectYesContains the scenes array that defines all visual content
fontsobjectNoGoogle Fonts and custom font declarations
customComponentsobjectNoRegistered custom layer components
defaultsobjectNoDefault values applied to all layers unless overridden

The name field is for organizational purposes – it does not affect rendering. The output and composition fields are the two pillars every template must have. Everything else is optional but unlocks powerful capabilities.


Output Configuration

The output object controls the final rendered file: its format, dimensions, frame rate, duration, and background color.

{
  "output": {
    "type": "video",
    "width": 1920,
    "height": 1080,
    "fps": 30,
    "duration": 10,
    "backgroundColor": "#000000"
  }
}

Output Fields

FieldTypeDefaultDescription
typestring"video"Output type: "video" or "image"
widthnumber1920Width in pixels (up to 7680 for 8K)
heightnumber1080Height in pixels (up to 4320 for 8K)
fpsnumber30Frames per second (1-120)
durationnumberTotal duration in seconds
backgroundColorstring"#000000"Background color as hex, RGB, or named color

Common Presets

Here are output configurations for popular formats:

1080p Full HD (YouTube, general purpose):

{
  "type": "video",
  "width": 1920,
  "height": 1080,
  "fps": 30,
  "duration": 60,
  "backgroundColor": "#000000"
}

Instagram Reels / TikTok (9:16 vertical):

{
  "type": "video",
  "width": 1080,
  "height": 1920,
  "fps": 30,
  "duration": 30,
  "backgroundColor": "#FFFFFF"
}

4K UHD:

{
  "type": "video",
  "width": 3840,
  "height": 2160,
  "fps": 60,
  "duration": 120,
  "backgroundColor": "#000000"
}

Open Graph / Social Share Image:

{
  "type": "image",
  "width": 1200,
  "height": 630,
  "backgroundColor": "#1a1a2e"
}

For image output, fps and duration are ignored – the renderer captures a single frame.


Template Variables & Inputs

The input and variable system is what makes Rendervid templates reusable. Instead of hardcoding text, colors, or URLs into your template, you define inputs and reference them using the {{variableName}} syntax anywhere in the template.

Defining Inputs

Inputs are declared in the top-level inputs array. Each input object describes a single variable:

{
  "inputs": [
    {
      "key": "title",
      "type": "string",
      "label": "Title",
      "description": "Main title text displayed in the intro scene",
      "required": true,
      "default": "Hello World"
    },
    {
      "key": "brandColor",
      "type": "color",
      "label": "Brand Color",
      "description": "Primary brand color used for backgrounds and accents",
      "required": false,
      "default": "#FF5733"
    },
    {
      "key": "showSubtitle",
      "type": "boolean",
      "label": "Show Subtitle",
      "description": "Toggle subtitle visibility",
      "required": false,
      "default": true
    }
  ]
}

Input Field Reference

FieldTypeRequiredDescription
keystringYesUnique identifier used in {{key}} references
typestringYesData type: string, number, boolean, color, url, array
labelstringNoHuman-readable label for UI rendering
descriptionstringNoExplanation of what this input controls
requiredbooleanNoWhether the input must be provided at render time
defaultanyNoFallback value if no input is provided

Input Types

  • string – Free-form text. Use for titles, descriptions, captions, or any text content.
  • number – Numeric values. Use for durations, sizes, positions, opacity levels, or counts.
  • boolean – True/false toggles. Use for conditional visibility, feature flags, or on/off switches.
  • color – Color values in hex (#FF5733), RGB (rgb(255,87,51)), or named format. Use for backgrounds, text colors, and accents.
  • url – Valid URL strings. Use for image sources, video sources, links, and font URLs.
  • array – Lists of values. Use for image galleries, text lists, slide content, or any repeated data.

Using Variables in the Template

Once inputs are defined, reference them anywhere in the template using double curly braces:

{
  "type": "text",
  "text": "{{title}}",
  "style": {
    "color": "{{brandColor}}",
    "fontSize": "{{titleSize}}"
  }
}

Variables are resolved at render time. When you call the Rendervid API or CLI, you pass the actual values:

{
  "title": "Summer Sale 2026",
  "brandColor": "#E63946",
  "titleSize": 72
}

Full Input Example

Here is a complete template with multiple input types working together:

{
  "name": "product-promo",
  "output": {
    "type": "video",
    "width": 1080,
    "height": 1080,
    "fps": 30,
    "duration": 15
  },
  "inputs": [
    {
      "key": "productName",
      "type": "string",
      "label": "Product Name",
      "description": "Name of the product being promoted",
      "required": true,
      "default": "Product"
    },
    {
      "key": "price",
      "type": "number",
      "label": "Price",
      "description": "Product price displayed in the video",
      "required": true,
      "default": 29.99
    },
    {
      "key": "productImage",
      "type": "url",
      "label": "Product Image URL",
      "description": "URL to the product image",
      "required": true
    },
    {
      "key": "accentColor",
      "type": "color",
      "label": "Accent Color",
      "description": "Color used for CTA buttons and highlights",
      "required": false,
      "default": "#FF6B35"
    },
    {
      "key": "showBadge",
      "type": "boolean",
      "label": "Show Sale Badge",
      "description": "Whether to display the sale badge overlay",
      "required": false,
      "default": false
    },
    {
      "key": "features",
      "type": "array",
      "label": "Product Features",
      "description": "List of feature bullet points",
      "required": false,
      "default": ["Feature 1", "Feature 2", "Feature 3"]
    }
  ],
  "composition": {
    "scenes": [
      {
        "name": "hero",
        "duration": 15,
        "layers": [
          {
            "type": "image",
            "src": "{{productImage}}",
            "position": { "x": 540, "y": 400 },
            "size": { "width": 600, "height": 600 }
          },
          {
            "type": "text",
            "text": "{{productName}}",
            "style": { "fontSize": 48, "fontWeight": 700, "color": "#FFFFFF" },
            "position": { "x": 540, "y": 80 }
          },
          {
            "type": "text",
            "text": "${{price}}",
            "style": { "fontSize": 64, "fontWeight": 900, "color": "{{accentColor}}" },
            "position": { "x": 540, "y": 900 }
          }
        ]
      }
    ]
  }
}

This single template can generate thousands of unique product videos by simply changing the input values at render time – no template modifications needed.


Scenes & Composition

The composition object is where your video’s content lives. It contains a scenes array, and each scene represents a distinct segment of the video with its own duration, layers, and transition.

{
  "composition": {
    "scenes": [
      {
        "name": "intro",
        "duration": 5,
        "transition": {
          "type": "fade",
          "duration": 1
        },
        "layers": [ ... ]
      },
      {
        "name": "main-content",
        "duration": 20,
        "transition": {
          "type": "slide",
          "duration": 0.5,
          "direction": "left"
        },
        "layers": [ ... ]
      },
      {
        "name": "outro",
        "duration": 5,
        "layers": [ ... ]
      }
    ]
  }
}

Scene Fields

FieldTypeRequiredDescription
namestringNoIdentifier for the scene (for readability and debugging)
durationnumberYesScene length in seconds
transitionobjectNoTransition effect when entering this scene from the previous one
layersarrayYesOrdered array of layer objects rendered bottom-to-top

Scenes play in sequence. The total video duration is the sum of all scene durations (minus any transition overlap). Layers within a scene are rendered in array order – the first layer sits at the bottom of the visual stack, and the last layer sits on top.

If no transition is specified, the scene uses a hard cut by default.


Layer System

Rendervid supports eight distinct layer types. Each layer type serves a specific purpose and accepts its own set of properties on top of the shared base configuration.

Shared Layer Properties

Every layer, regardless of type, supports these base properties:

{
  "position": { "x": 100, "y": 100 },
  "size": { "width": 500, "height": 200 },
  "rotation": 0,
  "scale": { "x": 1, "y": 1 },
  "anchor": { "x": 0.5, "y": 0.5 },
  "opacity": 1,
  "blendMode": "normal",
  "from": 0,
  "duration": -1,
  "filters": [],
  "style": {},
  "className": ""
}
PropertyTypeDefaultDescription
positionobject{x: 0, y: 0}X/Y coordinates in pixels
sizeobjectWidth and height in pixels
rotationnumber0Rotation angle in degrees
scaleobject{x: 1, y: 1}Scale multiplier for X and Y axes
anchorobject{x: 0.5, y: 0.5}Anchor point for transforms (0-1 range, 0.5 = center)
opacitynumber1Layer opacity (0 = transparent, 1 = opaque)
blendModestring"normal"CSS blend mode for compositing
fromnumber0Start time in seconds (relative to scene start)
durationnumber-1Layer duration in seconds (-1 = full scene duration)
filtersarray[]Array of visual filter objects
styleobject{}Additional CSS-like style properties
classNamestring""CSS class name for custom styling

The Eight Layer Types

  1. text – Renders styled text with full control over font, size, color, alignment, line height, letter spacing, text shadows, and more. Supports the {{variable}} syntax for dynamic content.

  2. image – Displays static images from URLs or local paths. Supports cropping, object-fit modes, border radius, and image filters.

  3. video – Embeds video clips within a scene. Supports trimming (start/end), volume control, playback rate, looping, and muting.

  4. shape – Renders geometric primitives: rectangles, circles, ellipses, lines, and polygons. Supports fill, stroke, border radius, gradients, and shadows.

  5. audio – Adds audio tracks to a scene. Supports volume, fade in/out, trimming, and looping. Audio layers have no visual representation.

  6. group – A container layer that holds child layers. Groups allow you to apply transforms, animations, and effects to multiple layers at once.

  7. lottie – Renders Lottie/Bodymovin JSON animations. Supports playback speed, looping, and segment control for playing specific frame ranges.

  8. custom – Loads registered custom components defined in the customComponents field. Use this for reusable, parameterized layer templates.

For detailed configuration of each layer type, including all available properties and code examples, see the Rendervid Components Reference .


Animation System

Rendervid includes over 40 built-in animation presets organized into four categories: entrance, exit, emphasis, and keyframe. Animations are attached to any layer and control how that layer appears, disappears, or behaves during its lifetime.

Animation Configuration

{
  "type": "text",
  "text": "Animated Title",
  "animations": [
    {
      "type": "entrance",
      "effect": "fadeInUp",
      "duration": 30,
      "delay": 10,
      "easing": "easeOutCubic",
      "loop": 0,
      "alternate": false
    }
  ]
}

Animation Fields

FieldTypeDefaultDescription
typestringAnimation category: entrance, exit, emphasis, keyframe
effectstringPreset name (e.g., fadeInUp, pulse, bounceOut)
durationnumber30Duration in frames
delaynumber0Delay before animation starts, in frames
easingstring"ease"Easing function name
loopnumber0Number of loops (0 = no loop, -1 = infinite)
alternatebooleanfalseReverse direction on alternate loops

Entrance Animations (20 presets)

Entrance animations control how a layer appears on screen. They run once when the layer’s start time is reached.

PresetDescription
fadeInSimple opacity fade from 0 to 1
fadeInUpFades in while sliding upward
fadeInDownFades in while sliding downward
fadeInLeftFades in while sliding from the left
fadeInRightFades in while sliding from the right
slideInUpSlides in from below the frame
slideInDownSlides in from above the frame
slideInLeftSlides in from the left edge
slideInRightSlides in from the right edge
scaleInScales up from 0 to full size
zoomInZooms in from a smaller scale with slight overshoot
rotateInRotates into position from an offset angle
bounceInBounces into position with elastic overshoot
flipInX3D flip on the X axis (horizontal flip)
flipInY3D flip on the Y axis (vertical flip)
typewriterCharacters appear one at a time (text layers)
revealLeftMask reveal sliding from the left
revealRightMask reveal sliding from the right
revealUpMask reveal sliding upward
revealDownMask reveal sliding downward

Exit Animations (9 presets)

Exit animations control how a layer disappears. They run at the end of the layer’s duration.

PresetDescription
fadeOutSimple opacity fade from 1 to 0
slideOutUpSlides out through the top of the frame
slideOutDownSlides out through the bottom of the frame
scaleOutScales down from full size to 0
zoomOutZooms out to a smaller scale and fades
rotateOutRotates out of position to an offset angle
bounceOutBounces outward with elastic overshoot before disappearing
flipOutX3D flip out on the X axis
flipOutY3D flip out on the Y axis

Emphasis Animations (10 presets)

Emphasis animations draw attention to a layer while it remains visible. They work well with looping.

PresetDescription
pulseRhythmic scale pulse (grows and shrinks)
shakeRapid horizontal shaking
bounceVertical bouncing motion
swingPendulum-like swinging rotation
wobbleOff-axis wobble combining rotation and translation
flashRapid opacity flashes
rubberBandElastic stretch and snap effect
heartbeatDouble-pulse heartbeat rhythm
floatGentle floating up-and-down motion
spinContinuous 360-degree rotation

Keyframe Animations

For full creative control, keyframe animations let you define custom frame-by-frame property changes:

{
  "type": "keyframe",
  "keyframes": [
    { "frame": 0, "opacity": 0, "x": -100 },
    { "frame": 15, "opacity": 1, "x": 0 },
    { "frame": 30, "opacity": 1, "x": 0 },
    { "frame": 45, "opacity": 0, "x": 100 }
  ],
  "easing": "easeInOutCubic"
}

Keyframe animations can animate any numeric property: opacity, x, y, rotation, scaleX, scaleY, and more. Each keyframe specifies a frame number and the property values at that frame. The renderer interpolates between keyframes using the specified easing function.

Combining Animations

A single layer can have multiple animations. For example, an entrance animation followed by an emphasis loop, then an exit animation:

{
  "animations": [
    {
      "type": "entrance",
      "effect": "fadeInUp",
      "duration": 20,
      "easing": "easeOutCubic"
    },
    {
      "type": "emphasis",
      "effect": "pulse",
      "duration": 30,
      "delay": 20,
      "loop": -1
    },
    {
      "type": "exit",
      "effect": "fadeOut",
      "duration": 15,
      "easing": "easeInCubic"
    }
  ]
}

Easing Functions

Easing functions control the rate of change during an animation, determining whether motion feels linear, smooth, bouncy, or elastic. Rendervid includes over 30 built-in easing functions.

Basic Easing

FunctionDescription
linearConstant speed from start to finish, no acceleration
easeDefault CSS-like easing with gentle acceleration and deceleration
easeInStarts slow, accelerates toward the end
easeOutStarts fast, decelerates toward the end
easeInOutAccelerates in the first half, decelerates in the second

Quadratic Easing

FunctionDescription
easeInQuadQuadratic acceleration (t^2)
easeOutQuadQuadratic deceleration
easeInOutQuadQuadratic acceleration then deceleration

Cubic Easing

FunctionDescription
easeInCubicCubic acceleration (t^3) – more pronounced than quadratic
easeOutCubicCubic deceleration – smooth and natural-feeling stop
easeInOutCubicCubic ease in and out – the most commonly used easing

Quartic Easing

FunctionDescription
easeInQuartQuartic acceleration (t^4)
easeOutQuartQuartic deceleration
easeInOutQuartQuartic ease in and out

Quintic Easing

FunctionDescription
easeInQuintQuintic acceleration (t^5) – very sharp start
easeOutQuintQuintic deceleration – very sharp stop
easeInOutQuintQuintic ease in and out

Sinusoidal Easing

FunctionDescription
easeInSineSine-based acceleration – the gentlest easing curve
easeOutSineSine-based deceleration
easeInOutSineSine-based ease in and out

Exponential Easing

FunctionDescription
easeInExpoExponential acceleration – nearly flat then sharp
easeOutExpoExponential deceleration – sharp then nearly flat
easeInOutExpoExponential ease in and out

Circular Easing

FunctionDescription
easeInCircCircular acceleration curve
easeOutCircCircular deceleration curve
easeInOutCircCircular ease in and out

Back Easing

FunctionDescription
easeInBackPulls back slightly before accelerating forward (anticipation)
easeOutBackOvershoots the target then settles back (overshoot)
easeInOutBackAnticipation on entry, overshoot on exit

Elastic Easing

FunctionDescription
easeInElasticElastic wobble on acceleration – spring-like wind-up
easeOutElasticElastic wobble on deceleration – spring-like snap
easeInOutElasticElastic on both ends

Bounce Easing

FunctionDescription
easeInBounceBouncing effect on entry – like a ball dropped in reverse
easeOutBounceBouncing effect on exit – like a ball hitting the ground
easeInOutBounceBouncing on both ends

Choosing the Right Easing

  • UI elements and text: easeOutCubic or easeOutQuart for natural-feeling entrances
  • Attention-grabbing motion: easeOutElastic or easeOutBack for playful overshoot
  • Smooth looping: easeInOutSine for gentle, continuous motion
  • Dramatic reveals: easeInExpo for builds, easeOutExpo for snappy stops
  • Physical simulation: easeOutBounce for gravity-like effects

Scene Transitions

Transitions control how one scene flows into the next. Rendervid provides 17 transition types ranging from simple cuts to cinematic 3D effects.

Transition Configuration

{
  "name": "scene-two",
  "duration": 10,
  "transition": {
    "type": "fade",
    "duration": 1,
    "direction": "left"
  },
  "layers": [ ... ]
}

The transition object is placed on the incoming scene (the scene being transitioned to). The direction property applies only to directional transitions like slide, wipe, and push.

All 17 Transition Types

TransitionDescription
cutInstant switch with no visual effect (default)
fadeCrossfade between scenes – the outgoing scene fades out as the incoming scene fades in
zoomZooms into the outgoing scene while the incoming scene appears
slideThe incoming scene slides over the outgoing scene from a configurable direction (left, right, up, down)
wipeA hard-edge wipe reveals the incoming scene, moving across the frame in the given direction
pushThe incoming scene pushes the outgoing scene off-screen in the specified direction
rotateThe outgoing scene rotates away while the incoming scene rotates in
flip3D flip transition – the frame flips like a card to reveal the next scene
blurThe outgoing scene blurs out while the incoming scene sharpens into focus
circleA circular mask expands from the center (or a specified point) to reveal the next scene
glitchDigital glitch distortion effect with chromatic aberration and displacement
dissolvePixel-level dissolve where individual pixels transition randomly between scenes
cube3D cube rotation – the scenes are on adjacent faces of a rotating cube
swirlSpiral distortion that swirls the outgoing scene into the incoming scene
diagonal-wipeA diagonal hard-edge wipe moving from one corner to the opposite
irisCircular iris that opens or closes like a camera aperture
crosszoomBoth scenes zoom simultaneously – the outgoing zooms in, the incoming zooms out

Transition Examples

Cinematic fade with a long crossfade:

{
  "transition": {
    "type": "fade",
    "duration": 2
  }
}

Slide from the right (common for sequential content):

{
  "transition": {
    "type": "slide",
    "duration": 0.5,
    "direction": "right"
  }
}

3D cube rotation (dynamic, modern feel):

{
  "transition": {
    "type": "cube",
    "duration": 1
  }
}

Glitch effect (energetic, tech-forward):

{
  "transition": {
    "type": "glitch",
    "duration": 0.3
  }
}

Visual Effects

Rendervid layers support a range of visual effects through filters, blend modes, shadows, and transforms.

Filters

Filters are applied via the filters array on any layer. Each filter is an object with a type and value:

{
  "filters": [
    { "type": "blur", "value": 5 },
    { "type": "brightness", "value": 1.2 },
    { "type": "contrast", "value": 1.1 },
    { "type": "grayscale", "value": 0.5 },
    { "type": "saturate", "value": 1.5 }
  ]
}
FilterValue RangeDescription
blur0+ (pixels)Gaussian blur – higher values produce more blur
brightness0+ (multiplier)0 = black, 1 = normal, 2 = double brightness
contrast0+ (multiplier)0 = gray, 1 = normal, 2 = double contrast
grayscale0-10 = full color, 1 = fully desaturated
hue-rotate0-360 (degrees)Rotates colors around the color wheel
invert0-10 = normal, 1 = fully inverted colors
saturate0+ (multiplier)0 = desaturated, 1 = normal, 2 = double saturation
sepia0-10 = normal, 1 = full sepia tone

Blend Modes

The blendMode property controls how a layer composites with the layers beneath it:

{
  "type": "shape",
  "blendMode": "multiply",
  "opacity": 0.8
}

Supported blend modes: normal, multiply, screen, overlay, darken, lighten, color-dodge, color-burn, hard-light, soft-light, difference, exclusion, hue, saturation, color, luminosity.

Shadows

Text and shape layers support shadow effects through the style property:

{
  "style": {
    "shadow": {
      "color": "rgba(0, 0, 0, 0.5)",
      "offsetX": 4,
      "offsetY": 4,
      "blur": 10
    }
  }
}

Combining Effects

Filters, blend modes, opacity, and shadows can all be combined on a single layer for sophisticated visual treatments:

{
  "type": "image",
  "src": "{{backgroundImage}}",
  "opacity": 0.7,
  "blendMode": "overlay",
  "filters": [
    { "type": "blur", "value": 3 },
    { "type": "brightness", "value": 0.8 }
  ],
  "style": {
    "shadow": {
      "color": "rgba(0, 0, 0, 0.3)",
      "offsetX": 0,
      "offsetY": 10,
      "blur": 20
    }
  }
}

Font Configuration

Rendervid supports both Google Fonts (100+ families built in) and custom fonts loaded from external URLs.

Google Fonts

Declare Google Fonts in the fonts.google array:

{
  "fonts": {
    "google": [
      { "family": "Roboto", "weights": [400, 700] },
      { "family": "Open Sans", "weights": [300, 400, 600, 700] },
      { "family": "Montserrat", "weights": [400, 500, 700, 900] },
      { "family": "Playfair Display", "weights": [400, 700] }
    ]
  }
}

Each font object requires:

FieldTypeDescription
familystringGoogle Font family name (exact match required)
weightsarrayArray of numeric weights to load (100-900)

Common font weights: 100 (Thin), 200 (Extra Light), 300 (Light), 400 (Regular), 500 (Medium), 600 (Semi Bold), 700 (Bold), 800 (Extra Bold), 900 (Black).

Custom Fonts

Load fonts from external URLs using the fonts.custom array:

{
  "fonts": {
    "custom": [
      {
        "family": "MyBrandFont",
        "src": "https://example.com/fonts/brand-font.woff2",
        "weight": 400,
        "style": "normal"
      },
      {
        "family": "MyBrandFont",
        "src": "https://example.com/fonts/brand-font-bold.woff2",
        "weight": 700,
        "style": "normal"
      }
    ]
  }
}

Supported font formats: WOFF2 (recommended for smallest file size), WOFF, TTF, and OTF.

Using Fonts in Layers

Reference declared fonts by family name in text layer styles:

{
  "type": "text",
  "text": "{{headline}}",
  "style": {
    "fontFamily": "Montserrat",
    "fontWeight": 700,
    "fontSize": 64,
    "color": "#FFFFFF"
  }
}

Rendervid includes platform-specific font fallback chains to ensure consistent rendering across different environments. If a specified font is unavailable, the renderer falls back to system fonts matching the same classification (serif, sans-serif, monospace).


Output Formats

Rendervid supports a wide range of output formats and codecs for both video and image rendering.

Video Formats

FormatCodecFile ExtensionBest For
MP4H.264.mp4Maximum compatibility – web, mobile, social media
WebMVP8 / VP9.webmWeb embedding with smaller file sizes
MOVProRes.movProfessional editing workflows, lossless quality
GIF.gifShort animations, social sharing, email
MP4H.265 / HEVC.mp4Newer devices, 50% smaller files than H.264 at same quality
WebMAV1.webmNext-generation codec, best compression efficiency

Image Formats

FormatFile ExtensionBest For
PNG.pngLossless quality, transparency support
JPEG.jpgPhotographs, smaller file sizes
WebP.webpModern web, best balance of quality and size

Quality Presets

PresetDescription
draftFast rendering with reduced quality – ideal for previewing
standardBalanced quality and file size – good for most use cases
highHigher bitrate and quality – for final deliverables
losslessMaximum quality with no compression artifacts

Resolution Support

Rendervid supports resolutions from small thumbnails up to 8K:

ResolutionDimensionsCommon Use
SD640 x 480Thumbnails, previews
HD1280 x 720Web video, email
Full HD1920 x 1080YouTube, presentations
2K2560 x 1440High-quality displays
4K UHD3840 x 2160Professional, broadcast
8K7680 x 4320Maximum resolution, future-proof

Frame rates from 1 fps (slideshows) to 120 fps (slow motion, gaming content) are supported. Common choices are 24 fps (cinematic), 30 fps (web/social), and 60 fps (smooth motion).


Complete Example

Here is a full Rendervid template that demonstrates the template system’s key features working together: dynamic inputs, multiple scenes with transitions, layered compositions, animations with easing, fonts, and visual effects.

{
  "name": "tech-product-launch",
  "output": {
    "type": "video",
    "width": 1920,
    "height": 1080,
    "fps": 30,
    "duration": 20,
    "backgroundColor": "#0A0A0A"
  },
  "inputs": [
    {
      "key": "productName",
      "type": "string",
      "label": "Product Name",
      "required": true,
      "default": "ProductX"
    },
    {
      "key": "tagline",
      "type": "string",
      "label": "Tagline",
      "required": true,
      "default": "The future is here."
    },
    {
      "key": "heroImage",
      "type": "url",
      "label": "Hero Image",
      "required": true
    },
    {
      "key": "primaryColor",
      "type": "color",
      "label": "Primary Color",
      "default": "#6C63FF"
    },
    {
      "key": "ctaText",
      "type": "string",
      "label": "Call to Action",
      "default": "Learn More"
    }
  ],
  "fonts": {
    "google": [
      { "family": "Inter", "weights": [400, 600, 800] },
      { "family": "JetBrains Mono", "weights": [400] }
    ]
  },
  "composition": {
    "scenes": [
      {
        "name": "intro",
        "duration": 6,
        "layers": [
          {
            "type": "shape",
            "shape": "rectangle",
            "position": { "x": 960, "y": 540 },
            "size": { "width": 1920, "height": 1080 },
            "style": {
              "fill": "{{primaryColor}}",
              "opacity": 0.1
            }
          },
          {
            "type": "text",
            "text": "{{productName}}",
            "position": { "x": 960, "y": 400 },
            "anchor": { "x": 0.5, "y": 0.5 },
            "style": {
              "fontFamily": "Inter",
              "fontWeight": 800,
              "fontSize": 96,
              "color": "#FFFFFF",
              "textAlign": "center"
            },
            "animations": [
              {
                "type": "entrance",
                "effect": "fadeInUp",
                "duration": 30,
                "delay": 15,
                "easing": "easeOutCubic"
              }
            ]
          },
          {
            "type": "text",
            "text": "{{tagline}}",
            "position": { "x": 960, "y": 520 },
            "anchor": { "x": 0.5, "y": 0.5 },
            "style": {
              "fontFamily": "Inter",
              "fontWeight": 400,
              "fontSize": 36,
              "color": "{{primaryColor}}",
              "textAlign": "center",
              "letterSpacing": 4
            },
            "animations": [
              {
                "type": "entrance",
                "effect": "fadeIn",
                "duration": 25,
                "delay": 40,
                "easing": "easeOutSine"
              }
            ]
          },
          {
            "type": "shape",
            "shape": "rectangle",
            "position": { "x": 960, "y": 600 },
            "size": { "width": 80, "height": 3 },
            "style": {
              "fill": "{{primaryColor}}"
            },
            "animations": [
              {
                "type": "entrance",
                "effect": "scaleIn",
                "duration": 20,
                "delay": 60,
                "easing": "easeOutQuart"
              }
            ]
          }
        ]
      },
      {
        "name": "product-showcase",
        "duration": 8,
        "transition": {
          "type": "slide",
          "duration": 0.8,
          "direction": "left"
        },
        "layers": [
          {
            "type": "image",
            "src": "{{heroImage}}",
            "position": { "x": 1200, "y": 540 },
            "size": { "width": 800, "height": 800 },
            "anchor": { "x": 0.5, "y": 0.5 },
            "filters": [
              { "type": "brightness", "value": 1.1 },
              { "type": "contrast", "value": 1.05 }
            ],
            "animations": [
              {
                "type": "entrance",
                "effect": "zoomIn",
                "duration": 40,
                "easing": "easeOutBack"
              },
              {
                "type": "emphasis",
                "effect": "float",
                "duration": 120,
                "delay": 40,
                "loop": -1,
                "alternate": true
              }
            ]
          },
          {
            "type": "text",
            "text": "Introducing",
            "position": { "x": 400, "y": 350 },
            "anchor": { "x": 0.5, "y": 0.5 },
            "style": {
              "fontFamily": "JetBrains Mono",
              "fontSize": 18,
              "color": "{{primaryColor}}",
              "textTransform": "uppercase",
              "letterSpacing": 6
            },
            "animations": [
              {
                "type": "entrance",
                "effect": "typewriter",
                "duration": 30,
                "delay": 10,
                "easing": "linear"
              }
            ]
          },
          {
            "type": "text",
            "text": "{{productName}}",
            "position": { "x": 400, "y": 430 },
            "anchor": { "x": 0.5, "y": 0.5 },
            "style": {
              "fontFamily": "Inter",
              "fontWeight": 800,
              "fontSize": 72,
              "color": "#FFFFFF"
            },
            "animations": [
              {
                "type": "entrance",
                "effect": "revealLeft",
                "duration": 25,
                "delay": 20,
                "easing": "easeOutQuart"
              }
            ]
          },
          {
            "type": "text",
            "text": "{{tagline}}",
            "position": { "x": 400, "y": 520 },
            "anchor": { "x": 0.5, "y": 0.5 },
            "style": {
              "fontFamily": "Inter",
              "fontWeight": 400,
              "fontSize": 24,
              "color": "#CCCCCC",
              "lineHeight": 1.6
            },
            "animations": [
              {
                "type": "entrance",
                "effect": "fadeInUp",
                "duration": 20,
                "delay": 40,
                "easing": "easeOutCubic"
              }
            ]
          }
        ]
      },
      {
        "name": "cta",
        "duration": 6,
        "transition": {
          "type": "fade",
          "duration": 1.2
        },
        "layers": [
          {
            "type": "shape",
            "shape": "rectangle",
            "position": { "x": 960, "y": 540 },
            "size": { "width": 1920, "height": 1080 },
            "style": {
              "fill": "{{primaryColor}}",
              "opacity": 0.15
            }
          },
          {
            "type": "text",
            "text": "{{productName}}",
            "position": { "x": 960, "y": 380 },
            "anchor": { "x": 0.5, "y": 0.5 },
            "style": {
              "fontFamily": "Inter",
              "fontWeight": 800,
              "fontSize": 80,
              "color": "#FFFFFF",
              "textAlign": "center"
            },
            "animations": [
              {
                "type": "entrance",
                "effect": "bounceIn",
                "duration": 35,
                "easing": "easeOutElastic"
              }
            ]
          },
          {
            "type": "shape",
            "shape": "rectangle",
            "position": { "x": 960, "y": 550 },
            "size": { "width": 280, "height": 60 },
            "style": {
              "fill": "{{primaryColor}}",
              "borderRadius": 30
            },
            "animations": [
              {
                "type": "entrance",
                "effect": "scaleIn",
                "duration": 25,
                "delay": 30,
                "easing": "easeOutBack"
              },
              {
                "type": "emphasis",
                "effect": "pulse",
                "duration": 60,
                "delay": 60,
                "loop": -1,
                "alternate": true
              }
            ]
          },
          {
            "type": "text",
            "text": "{{ctaText}}",
            "position": { "x": 960, "y": 550 },
            "anchor": { "x": 0.5, "y": 0.5 },
            "style": {
              "fontFamily": "Inter",
              "fontWeight": 600,
              "fontSize": 22,
              "color": "#FFFFFF",
              "textAlign": "center"
            },
            "animations": [
              {
                "type": "entrance",
                "effect": "fadeIn",
                "duration": 20,
                "delay": 40,
                "easing": "easeOutSine"
              }
            ]
          }
        ]
      }
    ]
  }
}

This template creates a 20-second product launch video with three scenes: a typographic intro with staggered text animations, a product showcase with a floating image and typewriter effect, and a closing call-to-action scene with a pulsing button. All text, colors, and images are driven by template variables, making it fully reusable.


Next Steps

  • Layer Components Reference – Deep dive into each of the 8 layer types with full property documentation and examples
  • AI Integration – Learn how to generate and manipulate Rendervid templates using AI, including LLM-powered template generation and content-aware rendering
  • Deployment Guide – Set up Rendervid for production: server-side rendering, cloud deployment, batch processing, and API integration

Frequently asked questions

What is the Rendervid template format?

Rendervid templates are JSON files that define the structure, content, animations, and output settings of a video or image. Each template includes an output configuration (dimensions, fps, duration), input definitions for dynamic variables, a composition with scenes and layers, and optional font and custom component configurations.

How do template variables work in Rendervid?

Template variables use the {{variableName}} syntax. You define inputs in the template's inputs array with a key, type (string, number, boolean, color, url, array), label, description, and default value. At render time, these variables are replaced with actual values, making templates reusable and dynamic.

How many animation presets does Rendervid have?

Rendervid includes 40+ built-in animation presets organized into four categories: entrance animations (fadeIn, slideIn, scaleIn, bounceIn, etc.), exit animations (fadeOut, slideOut, zoomOut, etc.), emphasis animations (pulse, shake, bounce, swing, heartbeat, etc.), and fully customizable keyframe animations with 30+ easing functions.

What scene transitions are available?

Rendervid offers 17 scene transition types: cut, fade, zoom, slide, wipe, push, rotate, flip (3D), blur, circle, glitch, dissolve, cube (3D), swirl, diagonal-wipe, iris, and crosszoom. Each transition can be configured with duration and direction parameters.

What output formats does Rendervid support?

Rendervid supports multiple output formats including MP4 (H.264), WebM (VP8/VP9), MOV (ProRes), GIF for video, and PNG, JPEG, WebP for images. Advanced codecs like H.265/HEVC and AV1 are also supported. Resolution goes up to 8K (7680x4320) with frame rates from 1 to 120 fps.

Can I use custom fonts in Rendervid templates?

Yes, Rendervid supports 100+ built-in Google Fonts and custom font loading from URLs in WOFF2, WOFF, TTF, and OTF formats. You can specify font weights from 100-900 and configure platform-specific fallbacks for cross-environment compatibility.

Let us build your own AI Team

We help companies like yours to develop smart chatbots, MCP Servers, AI tools or other types of AI automation to replace human in repetitive tasks in your organization.

Learn more

Rendervid Deployment - Browser, Node.js, Cloud & Docker Rendering
Rendervid Deployment - Browser, Node.js, Cloud & Docker Rendering

Rendervid Deployment - Browser, Node.js, Cloud & Docker Rendering

Deploy Rendervid anywhere: browser-based rendering for previews, Node.js for server-side batch processing, or cloud rendering on AWS Lambda, Azure Functions, GC...

19 min read
Rendervid Deployment +3
Rendervid Components - Layer Types, React Components & Visual Editor
Rendervid Components - Layer Types, React Components & Visual Editor

Rendervid Components - Layer Types, React Components & Visual Editor

Explore all Rendervid components: 8 built-in layer types (text, image, video, shape, audio, group, lottie, custom), pre-built React components, the visual templ...

14 min read
Rendervid Components +3