{
  "version": "2026.10.19",
  "verified": "2026-10-19",
  "reference": { "width": 1080, "height": 1920 },
  "notes": "Every platform publishes safe zones for ads, not for the organic player. Organic UI moves between app versions. Official mode uses ad-guide numbers. Measured mode is included only where the 2026-10-19 research pass recorded a conflicting community number. A safe default that fits all five: 1080×1920, 9:16, 30 fps, H.264 High + AAC, moov at the front, ≤140 s (X free) or ≤90 s (Facebook API) or ≤3 min (Shorts and Instagram reach), under 300 MB (Instagram API) or 512 MB (X free).",
  "platforms": [
    {
      "id": "tiktok",
      "name": "TikTok",
      "shortName": "TikTok",
      "blurb": "Web uploads through TikTok Studio run up to 30 minutes. 720×1280 is the published floor and 1080×1920 is the size creators should actually export.",
      "safeZone": {
        "official": {
          "top": 240,
          "bottom": 660,
          "left": 120,
          "right": 120,
          "rects": [
            {
              "id": "right-rail",
              "x": 780,
              "y": 840,
              "width": 300,
              "height": 420,
              "label": "Action column"
            }
          ],
          "source": {
            "url": "https://ads.tiktok.com/help/article/tiktok-auction-in-feed-ads",
            "title": "TikTok auction in-feed ads",
            "verified": "2026-10-19",
            "confidence": "cited"
          },
          "note": "Scaled ×1.5 from TikTok's 720×1280 in-feed template (top 160, bottom 440, sides 80). The right action column is an approximate cited range of about 180–300 px wide starting near y=840; this overlay draws the wide end, 300×420."
        },
        "measured": {
          "top": 200,
          "bottom": 500,
          "left": 0,
          "right": 250,
          "source": {
            "url": "https://adkit.so/tools/safe-zones/tiktok",
            "title": "AdKit TikTok safe zone",
            "verified": "2026-10-19",
            "confidence": "community-measured"
          },
          "note": "Organic write-ups disagree: top 130–200, bottom 370–500, right rail 140–250. Measured mode draws the high end of that range. A left inset is not consistently published, so it stays 0. See also https://www.socialync.io/tools/safe-zones."
        }
      },
      "rules": [
        {
          "id": "tiktok-duration-web",
          "kind": "duration-max",
          "severity": "fail",
          "label": "Web upload length",
          "detail": "TikTok Studio on the web accepts uploads up to 30 minutes. In-app recording is shorter (about 10 minutes in secondary write-ups) and the app upload cap cited elsewhere is 60 minutes.",
          "display": "30 min",
          "appliesTo": "video",
          "value": 1800,
          "source": {
            "url": "https://support.tiktok.com/en/using-tiktok/creating-videos/creator-tools-on-tiktok",
            "title": "TikTok Creator tools",
            "verified": "2026-10-19",
            "confidence": "official"
          }
        },
        {
          "id": "tiktok-rewards-length",
          "kind": "duration-min",
          "severity": "warn",
          "label": "Creator Rewards length",
          "detail": "Clips need to run over 1 minute to qualify for Creator Rewards. Shorter videos can still be posted.",
          "display": "1 min",
          "appliesTo": "video",
          "value": 60,
          "source": {
            "url": "https://trackmedia.app/blog/how-to-post-videos-on-tiktok",
            "title": "How to post videos on TikTok (TrackMedia)",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "tiktok-min-frame",
          "kind": "min-frame",
          "severity": "fail",
          "label": "Minimum vertical frame",
          "detail": "The web uploader asks for 720×1280 or higher.",
          "display": "720×1280",
          "appliesTo": "both",
          "when": "portrait",
          "width": 720,
          "height": 1280,
          "fix": "pad-9-16",
          "source": {
            "url": "https://support.tiktok.com/en/using-tiktok/creating-videos/creator-tools-on-tiktok",
            "title": "TikTok Creator tools",
            "verified": "2026-10-19",
            "confidence": "official"
          }
        },
        {
          "id": "tiktok-recommended-frame",
          "kind": "min-frame",
          "severity": "warn",
          "label": "Recommended frame",
          "detail": "1080×1920 is the export size that fills a phone without an extra upscale.",
          "display": "1080×1920",
          "appliesTo": "both",
          "when": "portrait",
          "width": 1080,
          "height": 1920,
          "fix": "pad-9-16",
          "source": {
            "url": "https://support.tiktok.com/en/using-tiktok/creating-videos/creator-tools-on-tiktok",
            "title": "TikTok Creator tools",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "tiktok-aspect",
          "kind": "aspect-preferred",
          "severity": "warn",
          "label": "Aspect ratio",
          "detail": "9:16 is the recommended full-screen shape. Other shapes can be posted; TikTok crops or pads them in the player.",
          "display": "9:16",
          "appliesTo": "both",
          "value": 0.02,
          "values": [0.5625],
          "fix": "crop-9-16",
          "source": {
            "url": "https://ads.tiktok.com/help/article/tiktok-auction-in-feed-ads",
            "title": "TikTok auction in-feed ads",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "tiktok-file-size",
          "kind": "file-size-max",
          "severity": "fail",
          "label": "Web file size",
          "detail": "Web upload limit is under 10 GB. Ads are capped much lower (500 MB). The Content Posting API cap cited elsewhere is 4 GB.",
          "display": "10 GB",
          "appliesTo": "video",
          "value": 10000000000,
          "source": {
            "url": "https://support.tiktok.com/en/using-tiktok/creating-videos/creator-tools-on-tiktok",
            "title": "TikTok Creator tools",
            "verified": "2026-10-19",
            "confidence": "official"
          }
        },
        {
          "id": "tiktok-container",
          "kind": "containers",
          "severity": "warn",
          "label": "Container",
          "detail": "The web uploader publishes MP4 or WebM.",
          "display": "MP4 or WebM",
          "appliesTo": "video",
          "list": ["mp4", "webm"],
          "fix": "reencode",
          "source": {
            "url": "https://support.tiktok.com/en/using-tiktok/creating-videos/creator-tools-on-tiktok",
            "title": "TikTok Creator tools",
            "verified": "2026-10-19",
            "confidence": "official"
          }
        },
        {
          "id": "tiktok-codecs",
          "kind": "video-codecs",
          "severity": "warn",
          "label": "Video codec",
          "detail": "The Content Posting API cites H.264, H.265, VP8, and VP9. That list was not on the web-uploader page our research fetched.",
          "display": "H.264, HEVC, VP8, VP9",
          "appliesTo": "video",
          "list": ["h264", "hevc", "vp8", "vp9"],
          "fix": "reencode",
          "source": {
            "url": "https://trackmedia.app/blog/how-to-post-videos-on-tiktok",
            "title": "How to post videos on TikTok (TrackMedia)",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "tiktok-fps-min",
          "kind": "fps-min",
          "severity": "warn",
          "label": "Minimum frame rate",
          "detail": "API guidance cites 23–60 fps. The web uploader page does not publish a floor. 30 fps is the safe export.",
          "display": "23 fps",
          "appliesTo": "video",
          "value": 23,
          "fix": "reencode",
          "source": {
            "url": "https://trackmedia.app/blog/how-to-post-videos-on-tiktok",
            "title": "How to post videos on TikTok (TrackMedia)",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "tiktok-fps-max",
          "kind": "fps-max",
          "severity": "warn",
          "label": "Maximum frame rate",
          "detail": "API guidance cites a 60 fps ceiling.",
          "display": "60 fps",
          "appliesTo": "video",
          "value": 60,
          "fix": "reencode",
          "source": {
            "url": "https://trackmedia.app/blog/how-to-post-videos-on-tiktok",
            "title": "How to post videos on TikTok (TrackMedia)",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        }
      ]
    },
    {
      "id": "instagram",
      "name": "Instagram Reels",
      "shortName": "Reels",
      "blurb": "Reels can run 20 minutes, but anything past 3 minutes is a poor bet for new audiences. The Help Center wants at least 30 fps.",
      "safeZone": {
        "official": {
          "top": 269,
          "bottom": 672,
          "left": 65,
          "right": 65,
          "source": {
            "url": "https://help.instagram.com/1038071743007909",
            "title": "Instagram Help — Reels",
            "verified": "2026-10-19",
            "confidence": "cited"
          },
          "note": "14% top, 35% bottom, 6% each side of a 1080×1920 frame (269 / 672 / 65 / 65), from Meta's Reels ads guide. The Help Center pages cover length and frame rate; the ads-guide percentages were recorded in the 2026-10-19 research pass and are also cited by https://postminion.com/blog/instagram-reels-length-and-size-limits."
        },
        "measured": null
      },
      "rules": [
        {
          "id": "ig-duration-max",
          "kind": "duration-max",
          "severity": "fail",
          "label": "In-app length",
          "detail": "Instagram Reels can run up to 20 minutes in the app. The API window cited alongside that is 3 seconds to 15 minutes.",
          "display": "20 min",
          "appliesTo": "video",
          "value": 1200,
          "source": {
            "url": "https://help.instagram.com/1038071743007909",
            "title": "Instagram Help — Reels",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "ig-duration-reach",
          "kind": "duration-max",
          "severity": "warn",
          "label": "Length for new audiences",
          "detail": "Reels over 3 minutes are not recommended if you want reach with people who do not follow you.",
          "display": "3 min",
          "appliesTo": "video",
          "value": 180,
          "fix": "trim-180",
          "source": {
            "url": "https://help.instagram.com/2720958398006062",
            "title": "Instagram Help — Reels recommendations",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "ig-duration-min",
          "kind": "duration-min",
          "severity": "warn",
          "label": "API minimum length",
          "detail": "The publishing API cites a 3 second minimum. Very short clips can still be awkward in the app.",
          "display": "3 s",
          "appliesTo": "video",
          "value": 3,
          "source": {
            "url": "https://postminion.com/blog/instagram-reels-length-and-size-limits",
            "title": "Instagram Reels length and size limits (Postminion, citing Help Center)",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "ig-aspect-min",
          "kind": "aspect-min",
          "severity": "fail",
          "label": "Narrowest aspect",
          "detail": "Reels accepts from 9:16 through 1.91:1. Taller than 9:16 is outside that window.",
          "display": "9:16",
          "appliesTo": "both",
          "value": 0.5625,
          "fix": "crop-9-16",
          "source": {
            "url": "https://postminion.com/blog/instagram-reels-length-and-size-limits",
            "title": "Instagram Reels length and size limits (Postminion)",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "ig-aspect-max",
          "kind": "aspect-max",
          "severity": "fail",
          "label": "Widest aspect",
          "detail": "The wide end of the accepted window is 1.91:1. 16:9 still fits. Wider than that does not.",
          "display": "1.91:1",
          "appliesTo": "both",
          "value": 1.91,
          "fix": "crop-9-16",
          "source": {
            "url": "https://postminion.com/blog/instagram-reels-length-and-size-limits",
            "title": "Instagram Reels length and size limits (Postminion)",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "ig-aspect-preferred",
          "kind": "aspect-preferred",
          "severity": "warn",
          "label": "Recommended aspect",
          "detail": "9:16 (1080×1920) is the shape that fills the Reels player.",
          "display": "9:16",
          "appliesTo": "both",
          "value": 0.02,
          "values": [0.5625],
          "fix": "crop-9-16",
          "source": {
            "url": "https://help.instagram.com/1038071743007909",
            "title": "Instagram Help — Reels",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "ig-short-edge",
          "kind": "min-short-edge",
          "severity": "fail",
          "label": "Minimum resolution",
          "detail": "The short edge should be at least 720 px.",
          "display": "720px",
          "appliesTo": "both",
          "value": 720,
          "fix": "pad-9-16",
          "source": {
            "url": "https://postminion.com/blog/instagram-reels-length-and-size-limits",
            "title": "Instagram Reels length and size limits (Postminion)",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "ig-recommended-frame",
          "kind": "min-frame",
          "severity": "warn",
          "label": "Recommended frame",
          "detail": "1080×1920 is the resolution Meta's own guides show for a full-screen Reel.",
          "display": "1080×1920",
          "appliesTo": "both",
          "when": "portrait",
          "width": 1080,
          "height": 1920,
          "fix": "pad-9-16",
          "source": {
            "url": "https://help.instagram.com/1038071743007909",
            "title": "Instagram Help — Reels",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "ig-file-size",
          "kind": "file-size-max",
          "severity": "warn",
          "label": "API file size",
          "detail": "The publishing API caps uploads at 300 MB. Instagram has not published an in-app file-size limit, so this is a warning rather than a hard fail.",
          "display": "300 MB",
          "appliesTo": "video",
          "value": 300000000,
          "fix": "compress-300",
          "source": {
            "url": "https://postminion.com/blog/instagram-reels-length-and-size-limits",
            "title": "Instagram Reels length and size limits (Postminion)",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "ig-fps-min",
          "kind": "fps-min",
          "severity": "fail",
          "label": "Minimum frame rate",
          "detail": "The Help Center requires at least 30 fps. 24 fps AI clips and screen recordings fail this even when the picture looks fine.",
          "display": "30 fps",
          "appliesTo": "video",
          "value": 30,
          "fix": "reencode",
          "source": {
            "url": "https://help.instagram.com/1038071743007909",
            "title": "Instagram Help — Reels",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "ig-fps-max",
          "kind": "fps-max",
          "severity": "warn",
          "label": "API maximum frame rate",
          "detail": "API guidance cites a 60 fps ceiling.",
          "display": "60 fps",
          "appliesTo": "video",
          "value": 60,
          "fix": "reencode",
          "source": {
            "url": "https://postminion.com/blog/instagram-reels-length-and-size-limits",
            "title": "Instagram Reels length and size limits (Postminion)",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "ig-codecs",
          "kind": "video-codecs",
          "severity": "warn",
          "label": "Video codec",
          "detail": "API guidance cites H.264 or HEVC, AAC audio at up to 48 kHz, and a bitrate up to 25 Mbps.",
          "display": "H.264 or HEVC",
          "appliesTo": "video",
          "list": ["h264", "hevc"],
          "fix": "reencode",
          "source": {
            "url": "https://postminion.com/blog/instagram-reels-length-and-size-limits",
            "title": "Instagram Reels length and size limits (Postminion)",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "ig-audio",
          "kind": "audio-codecs",
          "severity": "warn",
          "label": "Audio codec",
          "detail": "API guidance cites AAC. Silent video is allowed.",
          "display": "AAC",
          "appliesTo": "video",
          "list": ["aac"],
          "fix": "reencode",
          "source": {
            "url": "https://postminion.com/blog/instagram-reels-length-and-size-limits",
            "title": "Instagram Reels length and size limits (Postminion)",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "ig-container",
          "kind": "containers",
          "severity": "warn",
          "label": "Container",
          "detail": "Export MP4. MOV often works in the app but is not the format the API describes.",
          "display": "MP4",
          "appliesTo": "video",
          "list": ["mp4", "mov"],
          "fix": "reencode",
          "source": {
            "url": "https://postminion.com/blog/instagram-reels-length-and-size-limits",
            "title": "Instagram Reels length and size limits (Postminion)",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "ig-faststart",
          "kind": "faststart",
          "severity": "warn",
          "label": "Fast start",
          "detail": "The API asks for the moov atom at the front of the file so playback can start before the download finishes.",
          "display": "moov before mdat",
          "appliesTo": "video",
          "fix": "reencode",
          "source": {
            "url": "https://postminion.com/blog/instagram-reels-length-and-size-limits",
            "title": "Instagram Reels length and size limits (Postminion)",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        }
      ]
    },
    {
      "id": "youtube",
      "name": "YouTube Shorts",
      "shortName": "Shorts",
      "blurb": "A Short is square or vertical and at most 3 minutes. Google's ad safe zone (288 / 672 / 48 / 192) is stricter than most organic templates.",
      "safeZone": {
        "official": {
          "top": 288,
          "bottom": 672,
          "left": 48,
          "right": 192,
          "source": {
            "url": "https://support.google.com/google-ads/answer/13547298",
            "title": "Google Ads — vertical video specs",
            "verified": "2026-10-19",
            "confidence": "cited"
          },
          "note": "Taken from Google's vertical ad safe-zone image, also cited by https://www.socialync.io/tools/safe-zones. These margins are for ads. The organic Shorts player is not the same picture."
        },
        "measured": {
          "top": 380,
          "bottom": 380,
          "left": 0,
          "right": 0,
          "source": {
            "url": "https://checksafe.zone/",
            "title": "CheckSafe.Zone",
            "verified": "2026-10-19",
            "confidence": "community-measured"
          },
          "note": "CheckSafe.Zone lists Shorts top and bottom at 380 px, which disagrees with Google's 288 / 672 ad image. Side insets were not recorded from that page, so measured mode does not invent them."
        }
      },
      "rules": [
        {
          "id": "yt-duration",
          "kind": "duration-max",
          "severity": "fail",
          "label": "Shorts length",
          "detail": "Square or vertical uploads on or after 15 October 2024 can be Shorts up to 3 minutes. Longer than that, the upload is a regular video.",
          "display": "3 min",
          "appliesTo": "video",
          "value": 180,
          "fix": "trim-180",
          "source": {
            "url": "https://support.google.com/youtube/answer/15424877",
            "title": "YouTube Help — Shorts",
            "verified": "2026-10-19",
            "confidence": "official"
          }
        },
        {
          "id": "yt-content-id",
          "kind": "duration-max",
          "severity": "warn",
          "label": "Content ID window",
          "detail": "A Short over 1 minute that picks up any Content ID claim is blocked globally. This is a risk, not a length rejection.",
          "display": "1 min",
          "appliesTo": "video",
          "value": 60,
          "source": {
            "url": "https://support.google.com/youtube/answer/15424877",
            "title": "YouTube Help — Shorts",
            "verified": "2026-10-19",
            "confidence": "official"
          }
        },
        {
          "id": "yt-aspect",
          "kind": "aspect-max",
          "severity": "fail",
          "label": "Square or vertical",
          "detail": "Landscape video is not a Short. The frame has to be square or taller.",
          "display": "square or taller",
          "appliesTo": "both",
          "value": 1.02,
          "fix": "crop-9-16",
          "source": {
            "url": "https://support.google.com/youtube/answer/15424877",
            "title": "YouTube Help — Shorts",
            "verified": "2026-10-19",
            "confidence": "official"
          }
        },
        {
          "id": "yt-aspect-preferred",
          "kind": "aspect-preferred",
          "severity": "warn",
          "label": "Recommended aspect",
          "detail": "1080×1920 fills the Shorts player. Square still counts as a Short.",
          "display": "9:16",
          "appliesTo": "both",
          "value": 0.02,
          "values": [0.5625],
          "fix": "crop-9-16",
          "source": {
            "url": "https://support.google.com/google-ads/answer/13547298",
            "title": "Google Ads — vertical video specs",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "yt-min-frame",
          "kind": "min-frame",
          "severity": "fail",
          "label": "Minimum vertical frame",
          "detail": "Google Ads lists 720×1280 as the minimum vertical size.",
          "display": "720×1280",
          "appliesTo": "both",
          "when": "portrait",
          "width": 720,
          "height": 1280,
          "fix": "pad-9-16",
          "source": {
            "url": "https://support.google.com/google-ads/answer/13547298",
            "title": "Google Ads — vertical video specs",
            "verified": "2026-10-19",
            "confidence": "official"
          }
        },
        {
          "id": "yt-recommended-frame",
          "kind": "min-frame",
          "severity": "warn",
          "label": "Recommended frame",
          "detail": "1080×1920 is the resolution YouTube shows in its own Shorts guidance.",
          "display": "1080×1920",
          "appliesTo": "both",
          "when": "portrait",
          "width": 1080,
          "height": 1920,
          "fix": "pad-9-16",
          "source": {
            "url": "https://support.google.com/youtube/answer/15424877",
            "title": "YouTube Help — Shorts",
            "verified": "2026-10-19",
            "confidence": "official"
          }
        },
        {
          "id": "yt-file-size",
          "kind": "file-size-max",
          "severity": "fail",
          "label": "Upload size",
          "detail": "YouTube's upload limit is 256 GB. You will hit duration and codec issues long before this.",
          "display": "256 GB",
          "appliesTo": "video",
          "value": 256000000000,
          "source": {
            "url": "https://support.google.com/youtube/answer/15424877",
            "title": "YouTube Help — Shorts",
            "verified": "2026-10-19",
            "confidence": "official"
          }
        },
        {
          "id": "yt-codecs",
          "kind": "video-codecs",
          "severity": "warn",
          "label": "Video codec",
          "detail": "YouTube accepts a long list, including HEVC and WebM. H.264 in an MP4 is still the file that survives every other app in this check.",
          "display": "H.264, HEVC, VP8, VP9, AV1",
          "appliesTo": "video",
          "list": ["h264", "hevc", "vp8", "vp9", "av1"],
          "fix": "reencode",
          "source": {
            "url": "https://support.google.com/youtube/answer/15424877",
            "title": "YouTube Help — Shorts",
            "verified": "2026-10-19",
            "confidence": "official"
          }
        },
        {
          "id": "yt-container",
          "kind": "containers",
          "severity": "warn",
          "label": "Container",
          "detail": "MP4 is the recommended container. WebM and MOV are widely accepted too.",
          "display": "MP4, WebM, or MOV",
          "appliesTo": "video",
          "list": ["mp4", "webm", "mov"],
          "fix": "reencode",
          "source": {
            "url": "https://support.google.com/youtube/answer/15424877",
            "title": "YouTube Help — Shorts",
            "verified": "2026-10-19",
            "confidence": "official"
          }
        }
      ]
    },
    {
      "id": "facebook",
      "name": "Facebook Reels",
      "shortName": "Facebook",
      "blurb": "As of June 2025 Meta treats Facebook video as Reels and dropped the organic length cap. The Page API is still 3–90 seconds.",
      "safeZone": {
        "official": {
          "top": 269,
          "bottom": 672,
          "left": 65,
          "right": 65,
          "source": {
            "url": "https://about.fb.com/news/2025/06/making-it-easier-create-videos-facebook/",
            "title": "Meta newsroom — Facebook video, June 2025",
            "verified": "2026-10-19",
            "confidence": "cited"
          },
          "note": "Assumed identical to Instagram Reels (14% / 35% / 6% / 6%) because Meta's Reels ads guidance uses one safe zone for both apps. Not confirmed for the Facebook organic player. See also https://sproutsocial.com/insights/social-media-video-specs-guide."
        },
        "measured": null
      },
      "rules": [
        {
          "id": "fb-api-duration",
          "kind": "duration-max",
          "severity": "warn",
          "label": "Page API length",
          "detail": "The Page publishing API still wants 3–90 seconds. Organic Facebook video has had no length limit since June 2025, so a longer file is a warning, not a rejection.",
          "display": "90 s (API)",
          "appliesTo": "video",
          "value": 90,
          "fix": "trim-90",
          "source": {
            "url": "https://developers.facebook.com/docs/video-api/guides/reels-publishing",
            "title": "Facebook Reels Publishing API",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "fb-duration-min",
          "kind": "duration-min",
          "severity": "warn",
          "label": "API minimum length",
          "detail": "The Page API cites a 3 second minimum.",
          "display": "3 s",
          "appliesTo": "video",
          "value": 3,
          "source": {
            "url": "https://developers.facebook.com/docs/video-api/guides/reels-publishing",
            "title": "Facebook Reels Publishing API",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "fb-aspect",
          "kind": "aspect-preferred",
          "severity": "warn",
          "label": "Recommended aspect",
          "detail": "9:16 at 1080×1920 is the recommended Reel. The API minimum frame cited for that shape is 540×960.",
          "display": "9:16",
          "appliesTo": "both",
          "value": 0.02,
          "values": [0.5625],
          "fix": "crop-9-16",
          "source": {
            "url": "https://developers.facebook.com/docs/video-api/guides/reels-publishing",
            "title": "Facebook Reels Publishing API",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "fb-min-frame",
          "kind": "min-frame",
          "severity": "warn",
          "label": "API minimum frame",
          "detail": "540×960 is the API minimum. Organic playback is more forgiving, so this stays a warning.",
          "display": "540×960",
          "appliesTo": "both",
          "when": "portrait",
          "width": 540,
          "height": 960,
          "fix": "pad-9-16",
          "source": {
            "url": "https://developers.facebook.com/docs/video-api/guides/reels-publishing",
            "title": "Facebook Reels Publishing API",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "fb-recommended-frame",
          "kind": "min-frame",
          "severity": "warn",
          "label": "Recommended frame",
          "detail": "1080×1920 is the size to export.",
          "display": "1080×1920",
          "appliesTo": "both",
          "when": "portrait",
          "width": 1080,
          "height": 1920,
          "fix": "pad-9-16",
          "source": {
            "url": "https://sproutsocial.com/insights/social-media-video-specs-guide",
            "title": "Sprout Social video specs guide",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "fb-fps-min",
          "kind": "fps-min",
          "severity": "warn",
          "label": "Minimum frame rate",
          "detail": "Published range is 24–60 fps. 30 fps also satisfies Instagram, which is the reason the safe export is 30 rather than 24.",
          "display": "24 fps",
          "appliesTo": "video",
          "value": 24,
          "fix": "reencode",
          "source": {
            "url": "https://sproutsocial.com/insights/social-media-video-specs-guide",
            "title": "Sprout Social video specs guide",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "fb-fps-max",
          "kind": "fps-max",
          "severity": "warn",
          "label": "Maximum frame rate",
          "detail": "Published ceiling is 60 fps.",
          "display": "60 fps",
          "appliesTo": "video",
          "value": 60,
          "fix": "reencode",
          "source": {
            "url": "https://sproutsocial.com/insights/social-media-video-specs-guide",
            "title": "Sprout Social video specs guide",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "fb-codecs",
          "kind": "video-codecs",
          "severity": "warn",
          "label": "Video codec",
          "detail": "H.264, H.265, VP9, and AV1 are the codecs cited for Facebook video. Pair with AAC-LC.",
          "display": "H.264, HEVC, VP9, AV1",
          "appliesTo": "video",
          "list": ["h264", "hevc", "vp9", "av1"],
          "fix": "reencode",
          "source": {
            "url": "https://sproutsocial.com/insights/social-media-video-specs-guide",
            "title": "Sprout Social video specs guide",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "fb-audio",
          "kind": "audio-codecs",
          "severity": "warn",
          "label": "Audio codec",
          "detail": "AAC-LC, 48 kHz, stereo, 128 kbps or higher is the cited audio target. Silent video is allowed.",
          "display": "AAC-LC",
          "appliesTo": "video",
          "list": ["aac"],
          "fix": "reencode",
          "source": {
            "url": "https://sproutsocial.com/insights/social-media-video-specs-guide",
            "title": "Sprout Social video specs guide",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "fb-container",
          "kind": "containers",
          "severity": "warn",
          "label": "Container",
          "detail": "MP4 is the container cited for Facebook Reels.",
          "display": "MP4",
          "appliesTo": "video",
          "list": ["mp4"],
          "fix": "reencode",
          "source": {
            "url": "https://developers.facebook.com/docs/video-api/guides/reels-publishing",
            "title": "Facebook Reels Publishing API",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        }
      ]
    },
    {
      "id": "x",
      "name": "X",
      "shortName": "X",
      "blurb": "Free accounts get 2 minutes 20 seconds and 512 MB. Premium lasts longer, but the published paid caps do not agree with each other. There is no official safe zone.",
      "safeZone": {
        "official": null,
        "measured": null,
        "unavailableNote": "X has not published a safe zone. Nothing is drawn for this platform, and it is left out of the combined overlay so we do not invent a margin."
      },
      "rules": [
        {
          "id": "x-duration",
          "kind": "duration-max",
          "severity": "fail",
          "label": "Free account length",
          "detail": "Free accounts are limited to 2 minutes 20 seconds (140 s). Premium allows longer video; secondary sources conflict between roughly 3 hours / 8 GB and 4 hours / 16 GB, so the paid cap is not encoded as a number.",
          "display": "2 min 20 s",
          "appliesTo": "video",
          "value": 140,
          "fix": "trim-140",
          "source": {
            "url": "https://help.x.com/en/using-x/premium-longer-videos",
            "title": "X Help — longer videos on Premium",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "x-file-size",
          "kind": "file-size-max",
          "severity": "fail",
          "label": "Free account file size",
          "detail": "Free accounts are cited at 512 MB. The Premium size cap is disputed, same as the duration cap.",
          "display": "512 MB",
          "appliesTo": "video",
          "value": 512000000,
          "fix": "compress-512",
          "source": {
            "url": "https://clideo.com/resources/twitter-video-specs",
            "title": "Clideo — X video specs",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "x-aspect-min",
          "kind": "aspect-min",
          "severity": "fail",
          "label": "Narrowest aspect",
          "detail": "The API accepts aspects from 1:3 through 3:1. 9:16 sits inside that window and plays full screen.",
          "display": "1:3",
          "appliesTo": "both",
          "value": 0.333,
          "fix": "crop-9-16",
          "source": {
            "url": "https://docs.x.com/x-api/media/quickstart/best-practices",
            "title": "X API — media best practices",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "x-aspect-max",
          "kind": "aspect-max",
          "severity": "fail",
          "label": "Widest aspect",
          "detail": "Wider than 3:1 is outside the API window.",
          "display": "3:1",
          "appliesTo": "both",
          "value": 3,
          "fix": "crop-9-16",
          "source": {
            "url": "https://docs.x.com/x-api/media/quickstart/best-practices",
            "title": "X API — media best practices",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "x-aspect-preferred",
          "kind": "aspect-preferred",
          "severity": "warn",
          "label": "Recommended aspects",
          "detail": "16:9 and 1:1 are the recommended shapes. 9:16 is accepted and plays full screen, so it counts as a match here.",
          "display": "16:9, 1:1, or 9:16",
          "appliesTo": "both",
          "value": 0.02,
          "values": [1.7778, 1, 0.5625],
          "source": {
            "url": "https://docs.x.com/x-api/media/quickstart/best-practices",
            "title": "X API — media best practices",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "x-fps",
          "kind": "fps-max",
          "severity": "warn",
          "label": "Maximum frame rate",
          "detail": "Keep the file at or under 60 fps.",
          "display": "60 fps",
          "appliesTo": "video",
          "value": 60,
          "fix": "reencode",
          "source": {
            "url": "https://docs.x.com/x-api/media/quickstart/best-practices",
            "title": "X API — media best practices",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "x-codec",
          "kind": "video-codecs",
          "severity": "warn",
          "label": "Video codec",
          "detail": "H.264, High profile, 4:2:0. Up to 1920×1080 or 1080×1920, with 1280×720 listed as the recommended landscape size.",
          "display": "H.264",
          "appliesTo": "video",
          "list": ["h264"],
          "fix": "reencode",
          "source": {
            "url": "https://docs.x.com/x-api/media/quickstart/best-practices",
            "title": "X API — media best practices",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "x-profile",
          "kind": "h264-profile",
          "severity": "warn",
          "label": "H.264 profile",
          "detail": "X asks for High profile. Baseline and Main are a compatibility warning, not a guaranteed rejection.",
          "display": "High",
          "appliesTo": "video",
          "list": ["high"],
          "fix": "reencode",
          "source": {
            "url": "https://docs.x.com/x-api/media/quickstart/best-practices",
            "title": "X API — media best practices",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "x-audio",
          "kind": "audio-codecs",
          "severity": "warn",
          "label": "Audio codec",
          "detail": "AAC-LC. Silent video is allowed.",
          "display": "AAC-LC",
          "appliesTo": "video",
          "list": ["aac"],
          "fix": "reencode",
          "source": {
            "url": "https://docs.x.com/x-api/media/quickstart/best-practices",
            "title": "X API — media best practices",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        },
        {
          "id": "x-container",
          "kind": "containers",
          "severity": "warn",
          "label": "Container",
          "detail": "MP4 or MOV.",
          "display": "MP4 or MOV",
          "appliesTo": "video",
          "list": ["mp4", "mov"],
          "fix": "reencode",
          "source": {
            "url": "https://buzzvoice.com/blog/how-long-can-twitter-videos-be",
            "title": "BuzzVoice — how long X videos can be",
            "verified": "2026-10-19",
            "confidence": "cited"
          }
        }
      ]
    }
  ]
}
