# BUD-05 ## Media optimization endpoints `draft` `optional` Defines the `PUT /media` endpoint for processing and optimizing media ## PUT /media The `PUT /media` endpoint MUST accept binary data in the body of the request and MAY use the `Content-Type` and `Content-Length` headers to get the MIME type and size of the media The server should preform any optimizations or conversions it deems necessary in order to make the media more suitable for distribution The endpoint MUST respond with a `2xx` status and a [blob descriptor](./02.md#blob-descriptor) of the new processed blob Servers MAY reject media uploads for any reason and should respond with the appropriate HTTP `4xx` status code and an error message explaining the reason for the rejection ### Upload Authorization Servers MAY require a `media` [authorization event](./02.md#upload-authorization-required) to identify the uploader If a server requires a `media` authorization event it MUST perform the following checks 1. The `t` tag MUST be set to `media` 2. MUST contain at least one `x` tag matching the sha256 hash of the body of the request ## HEAD /media Servers MUST respond to `HEAD` requests on the `/media` endpoint in a similar way to the `HEAD /upload` endpoint defined in [BUD-06](./06.md) ## Limitations This endpoint is intentionally limited to optimizing a single blob with the goal of making it easier to distribute How the blob is optimized is the sole responsibility of the server and the client should have no say in what optimization process is used The goal of this endpoint is to provide a simple "trusted" optimization endpoint clients can use to optimize media for distribution If a longer optimization or transformation process is needed, or if the client needs to specify how a blob should be transformed. there are other tools and protocol that should be used. ## Client Implementation Clients MAY let a user selected a "trusted processing" server for uploading images or short videos Once a server has been selected, the client uploads the original media to the `/media` endpoint of the trusted server and get the optimized blob back Then the client can ask the user to sign another `upload` authorization event for the new optimized blob and call the `/mirror` endpoint on other servers to distribute the blob