Tutorials

Create Product Showcase

1. Complete example

{
  "meta": {
    "version": "2.0.0",
    "width": 1920,
    "height": 1080,
    "fps": 30,
    "background": "#050816"
  },
  "assets": {
    "images": [
      {
        "id": "product-shot",
        "src": "https://example.com/product.png"
      }
    ]
  },
  "tracks": [
    {
      "id": "main",
      "clips": [
        {
          "type": "rect",
          "start": 0,
          "duration": 8,
          "transform": {
            "x": "50%",
            "y": "50%",
            "width": "100%",
            "height": "100%"
          },
          "style": {
            "fill": {
              "type": "linear",
              "angle": 135,
              "stops": [
                { "offset": 0, "color": "#020617" },
                { "offset": 1, "color": "#1d4ed8" }
              ]
            }
          }
        },
        {
          "type": "image",
          "start": 0,
          "duration": 8,
          "src": { "$ref": "product-shot" },
          "transform": {
            "x": "30%",
            "y": "54%",
            "width": 560,
            "height": 560
          },
          "style": {
            "objectFit": "contain"
          }
        },
        {
          "type": "text",
          "start": 0.5,
          "duration": 7.5,
          "text": "New Release",
          "transform": {
            "x": "72%",
            "y": "28%"
          },
          "style": {
            "fontSize": 30,
            "fontWeight": 600,
            "fill": "#93c5fd"
          },
          "animations": [
            {
              "type": "fadeIn",
              "duration": 0.4
            }
          ]
        },
        {
          "type": "text",
          "start": 0.8,
          "duration": 7.2,
          "text": "Smart Watch Pro",
          "transform": {
            "x": "72%",
            "y": "40%"
          },
          "style": {
            "fontSize": 72,
            "fontWeight": 800,
            "fill": "#ffffff"
          },
          "animations": [
            {
              "type": "slideIn",
              "direction": "right",
              "distance": 140,
              "duration": 0.6
            }
          ]
        },
        {
          "type": "text",
          "start": 1.4,
          "duration": 6.6,
          "text": "$299",
          "transform": {
            "x": "72%",
            "y": "56%"
          },
          "style": {
            "fontSize": 56,
            "fontWeight": 700,
            "fill": "#22c55e"
          }
        }
      ]
    }
  ]
}

2. Composition logic

  • Use one full-screen rect as the background
  • Put the product image on one side
  • Keep headline, title, and price on the other side
  • Stagger text timing instead of animating everything at once

3. Notes

  • Prefer assets.images + $ref when you reuse media
  • Use Image Element for objectFit behavior
  • For a real CTA block, add another text or rect + text pair