> ## Documentation Index
> Fetch the complete documentation index at: https://www.openpmm.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Media guidelines

> Learn the video and image limits that OpenPMM applies to each supported Destination.

Each provider has its own media rules. One destination accepts a video, and another destination refuses the same video. OpenPMM compares your media with the rules of every selected destination before it publishes the post.

Use this page for the general rules. Use the destination pages for the exact limits.

## What you can upload

| Asset kind | Content           | File types           | Maximum size |
| ---------- | ----------------- | -------------------- | ------------ |
| `video`    | Video             | MP4, MOV, WebM       | 500 MiB      |
| `card`     | Image             | PNG, JPEG, WebP, GIF | 500 MiB      |
| `poster`   | Image for a video | PNG, JPEG, WebP, GIF | 500 MiB      |

The 500 MiB limit is an OpenPMM limit. Some providers accept a larger file, but OpenPMM does not. Send the exact `content_type` and `byte_size` of the file when you create the upload. For the three upload steps, see [Upload assets](/docs/guides/upload-assets).

`video` identifies the uploaded file type. It does not select a provider
placement. For YouTube, set `destination_options.youtube.kind` to `video` or
`short`. Provider pages describe the equivalent placement options for other
Destinations.

## Publication checks

Upload the file, attach it to the Post, and publish normally. OpenPMM returns
no separate compatibility result when the file can publish.

If a selected Destination needs a different file, OpenPMM returns status `422`
with code `media_change_required`. No provider request has started. Each entry
in `errors` identifies the Asset, Destination, property, actual value, required
value, and allowed actions.

A readable file stays in the Workspace library even when it cannot publish to
one Destination. You can use it for a different Destination.

See [Resolve media changes](/docs/guides/media-compatibility) for the error shape and
recovery workflow.

<Warning>
  A provider can still refuse media for rights, moderation, or account rules.
  Read the Post after publication to get the provider result.
</Warning>

## Destination guidelines

<CardGroup cols={2}>
  <Card title="X" icon="x-twitter" href="/docs/media/x">
    Up to four assets. Short video with strict dimensions.
  </Card>

  <Card title="LinkedIn" icon="linkedin" href="/docs/media/linkedin">
    One video, or up to 20 images. MP4 video only.
  </Card>

  <Card title="Bluesky" icon="bluesky" href="/docs/media/bluesky">
    Publish text with up to four sanitized images.
  </Card>

  <Card title="Facebook" icon="facebook" href="/docs/media/facebook">
    One video for a Reel. Images for a feed post.
  </Card>

  <Card title="Instagram" icon="instagram" href="/docs/media/instagram">
    One video for a Reel or a Story. Up to 10 images for a post.
  </Card>

  <Card title="Threads" icon="threads" href="/docs/media/threads">
    Up to 20 assets. MP4 fast start for video.
  </Card>

  <Card title="TikTok" icon="tiktok" href="/docs/media/tiktok">
    Exactly one video. Your creator account adds a duration limit.
  </Card>

  <Card title="YouTube" icon="youtube" href="/docs/media/youtube">
    Exactly one video. Shorts have their own limits.
  </Card>

  <Card title="Mastodon" icon="mastodon" href="/docs/media/mastodon">
    Your instance reports the media limits.
  </Card>
</CardGroup>
