yt-shortmaker

JSON Plano (Template) Format for YT ShortMaker

“Planos” are JSON files that define the visual composition of your Shorts. They allow you to position the original video, add overlays, effects, and animated backgrounds.

Basic Structure

A plano is an array of objects. Order matters: the first objects are drawn at the back, and the last ones at the front (layers).

[
  { "type": "shader", ... }, // Background (Layer 0)
  { "type": "clip", ... },   // Middle (Layer 1)
  { "type": "image", ... }   // Front (Layer 2)
]

Common Properties: Position and Size

Almost all objects have a position property with x, y, width, and height.

Values can be:

"position": {
  "x": "center",
  "y": 0,
  "width": "100%",
  "height": "50%"
}

Object Types

1. Clip (clip)

Represents the source video being processed. You can use it multiple times.

2. Image (image)

Overlays a static image (png, jpg). Ideal for frames, logos, or watermarks.

3. Video (video)

Background or overlay video (e.g., background gameplay, particle effects).

4. Shader (shader)

Applies a visual effect to what is behind it. Currently supports blur.

Complete Example

[
  // 1. Blurred background (Stretched original video + Blur)
  {
    "type": "clip",
    "position": { "x": 0, "y": 0, "width": "full", "height": "full" },
    "comment": "Base blurred background"
  },
  {
    "type": "shader",
    "effect": { "type": "blur", "intensity": 30 },
    "position": { "x": 0, "y": 0, "width": "full", "height": "full" }
  },

  // 2. Main video centered
  {
    "type": "clip",
    "position": { "x": "center", "y": "center", "width": "100%", "height": "40%" },
  },

  // 3. Watermark
  {
    "type": "image",
    "path": "./logo.png",
    "position": { "x": "center", "y": 1700, "width": 200, "height": "auto" },
    "opacity": 0.8
  }
]

Common Use Cases and Examples

Here are several practical examples. Copy and paste the JSON code into your .json plano file.

1. Simple Blur Background (Default)

The original video is used as a background (stretched and blurred) and also as the main element in the center.

Example Blur

[
  {
    "type": "clip",
    "position": {
      "width": "full",
      "height": "full"
    },
    "fit": "stretch",
    "comment": "Stretched background"
  },
  {
    "type": "shader",
    "effect": {
      "type": "blur",
      "intensity": 20
    },
    "position": {
      "width": "full",
      "height": "full"
    }
  },
  {
    "type": "clip",
    "position": {
      "x": "center",
      "y": "center",
      "width": "100%",
      "height": "40%"
    },
    "comment": "Main video"
  }
]

2. Gameplay Background (External Video)

A “gameplay” video (e.g., Minecraft, GTA) loops in the background, with the original video centered.

Example Gameplay

[
  {
    "type": "video",
    "path": "./media/gameplay_background.mp4",
    "position": { "width": "full", "height": "full" },
    "loop_video": true,
    "fit": "cover",
    "opacity": 1.0,
    "comment": "Looping background video"
  },
  {
    "type": "clip",
    "position": { "x": "center", "y": "center", "width": "100%", "height": "40%" },
    "comment": "Main clip over gameplay"
  }
]

3. Split Screen

Two videos stacked vertically. Useful for comparisons or reaction videos. (Here we use the same clip twice, but you could use video for the second one).

Example Split Screen

[
  {
    "type": "clip",
    "position": {
      "x": 0,
      "y": 0,
      "height": "50%"
    },
    "crop": {
      "x_from": 420,
      "x_to": 1500
    },
    "comment": "Top part"
  },
  {
    "type": "clip",
    "position": {
      "x": 0,
      "y": "50%",
      "width": "100%",
      "height": "50%"
    },
    "crop": {
      "x_from": 1300,
      "x_to": 1920,
      "y_from": 500,
      "y_to": 1080
    },
    "comment": "Bottom part"
  }
]

4. Frame / Overlay

Video with a transparent PNG image overlaid (frame, stats, branding).

Example Overlay

[
  {
    "type": "clip",
    "position": { "width": "full", "height": "full" },
    "fit": "cover"
  },
  {
    "type": "image",
    "path": "./media/frame_overlay.png",
    "position": { "x": 0, "y": 0, "width": "full", "height": "full" },
    "opacity": 1.0,
    "comment": "PNG image with transparency"
  }
]