{
  "version": "1.0.0",
  "generated_at": "2026-08-10",
  "license": "CC-BY-4.0",
  "attribution": "OpenNolan — https://www.opennolan.com",
  "canonical_url": "https://www.opennolan.com/specs.json",
  "human_url": "https://www.opennolan.com/tools/video-specs",
  "about": "Short-form vertical video specs and caption safe zones for Instagram Reels, TikTok and YouTube Shorts. Every value carries the source it came from and the date it was last checked. Values we could not verify against an official source are marked confidence: \"estimate\" — do not cite them as platform-official.",
  "confidence_legend": {
    "official": "Taken from, or measured directly out of, a first-party asset or help page published by the platform.",
    "estimate": "Not published by the platform. Widely-used community consensus figure. Treat as approximate."
  },
  "sources": {
    "meta_safe_zone": {
      "title": "About text overlays and the safe zone for ads on Facebook and Instagram — Meta Business Help Center",
      "url": "https://www.facebook.com/business/help/980593475366490",
      "publisher": "Meta",
      "official": true,
      "last_verified": "2026-08-09",
      "note": "Describes the safe zone qualitatively (\"keep the edges free of key creative elements, text and logos\") and gives exactly one number: for Reels ads carrying disclaimers, leave the bottom 40% free. Meta publishes no pixel-level safe-zone rectangle."
    },
    "meta_ig_media_api": {
      "title": "IG User Media — Reels specifications — Instagram Platform, Meta for Developers",
      "url": "https://developers.facebook.com/docs/instagram-platform/instagram-graph-api/reference/ig-user/media/",
      "publisher": "Meta",
      "official": true,
      "last_verified": "2026-08-09"
    },
    "meta_ig_stories_ads": {
      "title": "Design requirements for Instagram Stories ads — Meta Business Help Center",
      "url": "https://www.facebook.com/business/help/2222978001316177",
      "publisher": "Meta",
      "official": true,
      "last_verified": "2026-08-09"
    },
    "tiktok_infeed_ads": {
      "title": "TikTok Auction In-Feed Ads — TikTok Ads Manager help",
      "url": "https://ads.tiktok.com/help/article/tiktok-auction-in-feed-ads",
      "publisher": "TikTok",
      "official": true,
      "last_verified": "2026-08-09"
    },
    "tiktok_safe_zone_template": {
      "title": "In-Feed-Standard Version LTR.zip — TikTok's own downloadable in-feed safe-zone template (In-Feed/Feed.png, 2880x5120)",
      "url": "https://ads.tiktok.com/help/article/tiktok-auction-in-feed-ads",
      "asset_url": "https://lf-tt4b.tiktokcdn.com/obj/i18nblog/tt4b_cms/en-US/5jqet0ab9qci-10e7f5Vig4uhAscNP8XPB0.zip",
      "publisher": "TikTok",
      "official": true,
      "last_verified": "2026-08-09",
      "note": "The safe-zone rectangle below was measured pixel-by-pixel out of this template's alpha channel and scaled to a 1080x1920 frame."
    },
    "google_ads_video_specs": {
      "title": "About video ad specs — Universal safe zones for video ads on YouTube — Google Ads Help",
      "url": "https://support.google.com/google-ads/answer/13547298",
      "asset_url": "https://services.google.com/fh/files/misc/youtubesafezoneoverlay_vertical_final.png",
      "publisher": "Google",
      "official": true,
      "last_verified": "2026-08-09",
      "note": "The safe-zone rectangle below was measured pixel-by-pixel out of Google's own 1080x1920 vertical safe-zone overlay PNG."
    },
    "youtube_shorts_help": {
      "title": "Create YouTube Shorts — YouTube Help",
      "url": "https://support.google.com/youtube/answer/10059070",
      "publisher": "YouTube",
      "official": true,
      "last_verified": "2026-08-09"
    },
    "youtube_encoding": {
      "title": "Recommended upload encoding settings — YouTube Help",
      "url": "https://support.google.com/youtube/answer/1722171",
      "publisher": "YouTube",
      "official": true,
      "last_verified": "2026-08-09"
    },
    "community_reels_safe_zone": {
      "title": "Meta Reels safe zone: 14% top / 35% bottom / 6% sides",
      "url": "https://behaviour.digital/post/meta-reels-safe-zone-14-top-35-bottom-6-sides-the-2026-official-guide",
      "publisher": "behaviour.digital",
      "official": false,
      "last_verified": "2026-08-09",
      "note": "Not a Meta publication and it cites no Meta document. Included only to attribute the community-consensus percentages used for the Instagram Reels estimate."
    }
  },
  "platforms": [
    {
      "id": "instagram-reels",
      "name": "Instagram Reels",
      "vendor": "Meta",
      "source_url": "https://developers.facebook.com/docs/instagram-platform/instagram-graph-api/reference/ig-user/media/",
      "last_verified": "2026-08-09",
      "aspect_ratio": {
        "recommended": "9:16",
        "accepted": "0.01:1 to 10:1",
        "confidence": "official",
        "scope": "Instagram Platform content-publishing API",
        "source": "meta_ig_media_api",
        "note": "Verbatim: \"required aspect ratio is between 0.01:1 and 10:1 but we recommend 9:16 to avoid cropping or blank space\"."
      },
      "resolution": {
        "recommended_px": {
          "width": 1080,
          "height": 1920
        },
        "minimum_px": {
          "width": 600,
          "height": 1067
        },
        "max_horizontal_px": 1920,
        "confidence": "official",
        "scope": "recommended/minimum from Meta's 9:16 Instagram ad design requirements; max_horizontal_px from the publishing API",
        "source": "meta_ig_stories_ads",
        "also_see": "meta_ig_media_api"
      },
      "duration": {
        "min_seconds": 3,
        "max_seconds": 900,
        "confidence": "official",
        "scope": "Instagram Platform content-publishing API (\"15 mins maximum, 3 seconds minimum\"). The in-app Reels camera imposes its own shorter limit, which Meta does not publish in a citable spec page — it is deliberately omitted here.",
        "source": "meta_ig_media_api"
      },
      "max_file_size_mb": {
        "value": 300,
        "confidence": "official",
        "scope": "Instagram Platform content-publishing API",
        "source": "meta_ig_media_api"
      },
      "container": {
        "value": "MOV or MP4 (MPEG-4 Part 14), no edit lists, moov atom at the front of the file",
        "confidence": "official",
        "source": "meta_ig_media_api"
      },
      "video": {
        "codec": "HEVC or H.264, progressive scan, closed GOP, 4:2:0 chroma subsampling",
        "bitrate": "VBR, 25 Mbps maximum",
        "confidence": "official",
        "source": "meta_ig_media_api"
      },
      "frame_rate": {
        "min_fps": 23,
        "max_fps": 60,
        "confidence": "official",
        "source": "meta_ig_media_api"
      },
      "audio": {
        "codec": "AAC",
        "max_sample_rate_hz": 48000,
        "channels": "1 or 2 (mono or stereo)",
        "bitrate": "128 kbps",
        "confidence": "official",
        "source": "meta_ig_media_api"
      },
      "safe_zones": {
        "confidence": "estimate",
        "reference_frame_px": {
          "width": 1080,
          "height": 1920
        },
        "source": "community_reels_safe_zone",
        "official_source": "meta_safe_zone",
        "last_verified": "2026-08-09",
        "warning": "Meta publishes no pixel-level safe zone for Reels, so this rectangle is the community-consensus estimate (14% top, 35% bottom, 6% each side). Design against it; do not cite it as a Meta specification.",
        "official_constraints": [
          "Keep the top, bottom and side edges free of key creative elements, text and logos for 9:16 creative in Stories, Reels and Feed.",
          "If your Reels ad includes disclaimers, leave the bottom 40% (768 px of 1920) free of text, logos and other key creative elements.",
          "On screens taller than 9:16 Meta may zoom the creative to fill the screen, which can crop anything outside the safe zone."
        ],
        "safe_area_px": {
          "x": 65,
          "y": 269,
          "width": 950,
          "height": 979
        },
        "safe_area_norm": {
          "x": 0.0602,
          "y": 0.1401,
          "width": 0.8796,
          "height": 0.5099
        },
        "regions": [
          {
            "id": "top",
            "label": "Top bar",
            "covers": "Account name, follow button and system status area",
            "px": {
              "x": 0,
              "y": 0,
              "width": 1080,
              "height": 269
            },
            "norm": {
              "x": 0,
              "y": 0,
              "width": 1,
              "height": 0.1401
            }
          },
          {
            "id": "bottom",
            "label": "Caption block",
            "covers": "Username, caption, audio attribution and the app's bottom navigation",
            "px": {
              "x": 0,
              "y": 1248,
              "width": 1080,
              "height": 672
            },
            "norm": {
              "x": 0,
              "y": 0.65,
              "width": 1,
              "height": 0.35
            }
          },
          {
            "id": "left",
            "label": "Left edge",
            "covers": "Edge crop on taller-than-9:16 screens",
            "px": {
              "x": 0,
              "y": 269,
              "width": 65,
              "height": 979
            },
            "norm": {
              "x": 0,
              "y": 0.1401,
              "width": 0.0602,
              "height": 0.5099
            }
          },
          {
            "id": "right",
            "label": "Action rail",
            "covers": "Like, comment, share, save and audio disc",
            "px": {
              "x": 1015,
              "y": 269,
              "width": 65,
              "height": 979
            },
            "norm": {
              "x": 0.9398,
              "y": 0.1401,
              "width": 0.0602,
              "height": 0.5099
            }
          }
        ]
      }
    },
    {
      "id": "tiktok",
      "name": "TikTok",
      "vendor": "TikTok",
      "source_url": "https://ads.tiktok.com/help/article/tiktok-auction-in-feed-ads",
      "last_verified": "2026-08-09",
      "aspect_ratio": {
        "recommended": "9:16",
        "accepted": "9:16, 1:1, 16:9",
        "confidence": "official",
        "scope": "TikTok Auction In-Feed Ads",
        "source": "tiktok_infeed_ads"
      },
      "resolution": {
        "minimum_px": {
          "width": 540,
          "height": 960
        },
        "confidence": "official",
        "scope": "TikTok Auction In-Feed Ads. TikTok publishes a minimum here, not a recommended resolution — none is invented for this dataset.",
        "source": "tiktok_infeed_ads"
      },
      "duration": {
        "max_seconds": 600,
        "confidence": "official",
        "scope": "TikTok Auction In-Feed Ads, non-Spark (Spark Ads have no duration restriction). TikTok does not publish a citable organic in-app maximum, so none is listed.",
        "source": "tiktok_infeed_ads"
      },
      "max_file_size_mb": {
        "value": 500,
        "confidence": "official",
        "scope": "TikTok Auction In-Feed Ads",
        "source": "tiktok_infeed_ads"
      },
      "container": {
        "value": ".mp4, .mov, .mpeg, .3gp, .avi",
        "confidence": "official",
        "source": "tiktok_infeed_ads"
      },
      "video": {
        "bitrate": "516 kbps or higher",
        "confidence": "official",
        "source": "tiktok_infeed_ads",
        "note": "TikTok's in-feed ad spec does not name a required video codec, so none is listed here."
      },
      "safe_zones": {
        "confidence": "official",
        "reference_frame_px": {
          "width": 1080,
          "height": 1920
        },
        "source": "tiktok_safe_zone_template",
        "last_verified": "2026-08-09",
        "method": "Measured out of the alpha channel of TikTok's own In-Feed safe-zone template (In-Feed/Feed.png, 2880x5120, LTR) and scaled to 1080x1920. The template's own labels — 80 px sides, 160 px top, 440 px bottom, 120 px right column on a 720x1280 frame — agree with the measurement.",
        "safe_area_px": {
          "x": 120,
          "y": 240,
          "width": 660,
          "height": 1020
        },
        "safe_area_norm": {
          "x": 0.1111,
          "y": 0.125,
          "width": 0.6111,
          "height": 0.5313
        },
        "regions": [
          {
            "id": "top",
            "label": "Top bar",
            "covers": "Following / For You tabs and search",
            "px": {
              "x": 0,
              "y": 0,
              "width": 1080,
              "height": 240
            },
            "norm": {
              "x": 0,
              "y": 0,
              "width": 1,
              "height": 0.125
            }
          },
          {
            "id": "bottom",
            "label": "Caption block",
            "covers": "Username, caption, sound title and the bottom navigation bar",
            "px": {
              "x": 0,
              "y": 1260,
              "width": 1080,
              "height": 660
            },
            "norm": {
              "x": 0,
              "y": 0.65625,
              "width": 1,
              "height": 0.34375
            }
          },
          {
            "id": "left",
            "label": "Left edge",
            "covers": "Edge crop on taller-than-9:16 screens",
            "px": {
              "x": 0,
              "y": 240,
              "width": 120,
              "height": 1020
            },
            "norm": {
              "x": 0,
              "y": 0.125,
              "width": 0.1111,
              "height": 0.5313
            }
          },
          {
            "id": "right",
            "label": "Action rail",
            "covers": "Profile, like, comment, bookmark, share and the spinning record",
            "px": {
              "x": 780,
              "y": 240,
              "width": 300,
              "height": 1020
            },
            "norm": {
              "x": 0.7222,
              "y": 0.125,
              "width": 0.2778,
              "height": 0.5313
            }
          }
        ]
      }
    },
    {
      "id": "youtube-shorts",
      "name": "YouTube Shorts",
      "vendor": "Google",
      "source_url": "https://support.google.com/google-ads/answer/13547298",
      "last_verified": "2026-08-09",
      "aspect_ratio": {
        "recommended": "9:16",
        "accepted": "9:16, 2:3, 4:5",
        "confidence": "official",
        "scope": "YouTube video ad specs (vertical)",
        "source": "google_ads_video_specs"
      },
      "resolution": {
        "recommended_px": {
          "width": 1080,
          "height": 1920
        },
        "minimum_px": {
          "width": 720,
          "height": 1280
        },
        "confidence": "official",
        "scope": "YouTube video ad specs. Shorts themselves upload at a maximum of 1080p.",
        "source": "google_ads_video_specs",
        "also_see": "youtube_shorts_help"
      },
      "duration": {
        "max_seconds": 180,
        "confidence": "official",
        "scope": "A Short is \"up to 3 minutes long\".",
        "source": "youtube_shorts_help"
      },
      "max_file_size_gb": {
        "value": 256,
        "confidence": "official",
        "scope": "YouTube video ad / upload ceiling, not a Shorts-specific limit",
        "source": "google_ads_video_specs"
      },
      "container": {
        "value": "MP4 with the moov atom at the front of the file (Fast Start)",
        "confidence": "official",
        "source": "youtube_encoding"
      },
      "video": {
        "codec": "H.264, High Profile, closed GOP of half the frame rate, 4:2:0 chroma subsampling, 2 consecutive B frames",
        "bitrate": "1080p SDR: 8 Mbps standard frame rate, 12 Mbps high frame rate. 1080p HDR: 10 Mbps / 15 Mbps.",
        "color_space": "BT.709 for SDR",
        "confidence": "official",
        "source": "youtube_encoding"
      },
      "frame_rate": {
        "value": "Upload at the frame rate it was recorded at. Common rates: 24, 25, 30, 48, 50, 60 fps.",
        "confidence": "official",
        "source": "youtube_encoding"
      },
      "audio": {
        "codec": "AAC-LC (Opus and Eclipsa Audio also accepted)",
        "bitrate": "384 kbps stereo",
        "confidence": "official",
        "source": "youtube_encoding"
      },
      "safe_zones": {
        "confidence": "official",
        "reference_frame_px": {
          "width": 1080,
          "height": 1920
        },
        "source": "google_ads_video_specs",
        "last_verified": "2026-08-09",
        "method": "Measured out of the alpha channel of Google's own 1080x1920 vertical safe-zone overlay PNG for YouTube video ads. Google publishes the overlay, not the numbers.",
        "scope": "Google's universal safe zone for vertical YouTube video ads. It is the most conservative published rectangle for the Shorts frame; organic Shorts UI covers a little less.",
        "safe_area_px": {
          "x": 48,
          "y": 288,
          "width": 840,
          "height": 960
        },
        "safe_area_norm": {
          "x": 0.0444,
          "y": 0.15,
          "width": 0.7778,
          "height": 0.5
        },
        "regions": [
          {
            "id": "top",
            "label": "Top bar",
            "covers": "Search, subtitles and the more menu",
            "px": {
              "x": 0,
              "y": 0,
              "width": 1080,
              "height": 288
            },
            "norm": {
              "x": 0,
              "y": 0,
              "width": 1,
              "height": 0.15
            }
          },
          {
            "id": "bottom",
            "label": "Caption block",
            "covers": "Channel name, title, sound row, progress bar and the bottom navigation",
            "px": {
              "x": 0,
              "y": 1248,
              "width": 1080,
              "height": 672
            },
            "norm": {
              "x": 0,
              "y": 0.65,
              "width": 1,
              "height": 0.35
            }
          },
          {
            "id": "left",
            "label": "Left edge",
            "covers": "Edge crop on taller-than-9:16 screens",
            "px": {
              "x": 0,
              "y": 288,
              "width": 48,
              "height": 960
            },
            "norm": {
              "x": 0,
              "y": 0.15,
              "width": 0.0444,
              "height": 0.5
            }
          },
          {
            "id": "right",
            "label": "Action rail",
            "covers": "Like, dislike, comment, share, remix and the channel avatar",
            "px": {
              "x": 888,
              "y": 288,
              "width": 192,
              "height": 960
            },
            "norm": {
              "x": 0.8222,
              "y": 0.15,
              "width": 0.1778,
              "height": 0.5
            }
          }
        ]
      }
    }
  ]
}
