Login
Videos
Login

Hosting videos on websites is always a game of tradeoffs.

Art Menagerie aims for simplicity and is unlikely to compete with projects focused on video like PeerTube or large video platforms like YouTube, Vimeo, Patreon, etc. These platforms encode your video into multiple resolutions and qualities, and break videos up into many chunks rather than one big file to stream them (e.g. HLS), but not all browsers support streaming natively so these projects need to also include a client (often in JavaScript) for the browser to play the video.

In contrast, Art Menagerie allows you to upload a video file which remains mostly untouched (metadata gets removed, but the video is never re-transcoded) when generating your website. A single video file is supported natively by almost all browsers, and some can even stream from a single file (using a Range request). However, this means we do not offer multiple resolutions or qualities of the same video.

Ideally you want to create videos that are as small and compatible as you can. It is recommended to only post short videos or teasers with Art Menagerie. You can always post your videos with a link to the high quality and/or full video on another project or platform.

⚠️ Please keep copies of your original high quality video! This allows you to re-encode from the original in the future and may help you prove that you own the original copy in the future.

Embeds: As of Release 2026.07.00-alpha, Art Menagerie supports embedding YouTube videos. Consider this as an alternative to hosting videos from your own website.

Recommendations

To keep your videos small and compatible:

These recommendations are to help you have a starting point. If you want to upload large files, the size limit can be increased in your site configuration settings. Art Menagerie stores your videos directly in the database and loads to RAM to store and retrieve.

Both video formats are highly compatible. See Can I use H.264 video and Can I use WebM. The main difference is that whether they work in link previews.

.mp4 H.264/AAC advantages:

.webm VP9/Opus advantages:

Not all services allow you to play the video in the link preview, but most will fallback to showing the thumbnail image. This table shows the services that have been tested:

Service .mp4 H.264 .webm VP9
Telegram video image
Discord video video
Mastodon image image
Blusky image image

Encoding with HandBrake

HandBrake is a graphical video transcoding tool.

To use it with the recommended settings, you can simply download my preset:

Import the preset using the interface:

  1. Open the presets panel
  2. Open the extra options menu
  3. Select import

Screenshot of importing a preset into HandBrake. Step 1 is to open the presets panel. Step 2 is to open the extra options menu. Step 3 is to select the import option.

Next, select the preset from the preset dropdown menu.

Screenshot of selecting a custom preset from the Handbrake preset dropdown menu. A folder named "My Presets" is expanded showing two imported presets with the first one highlighted in purple.

Then you can press the Start button to encode your video.

If your video is vertical, you can open the Dimensions tab and set a Custom size. For example, 720x1280 for a vertical 720p video.

Note: You can usually hover over a setting or click on the question mark buttons to get more information.

MP4 H.254/AAC HandBrake Settings

WebM VP9/Opus HandBrake Settings

Command-Line Transcode with ffmpeg

FFmpeg is a powerful command-line tool for transcoding video.

MP4 H.254/AAC ffmpeg Command

This commands encodes your INPUT video with recommended settings.

ffmpeg -i INPUT \
    -c:v libx264 -preset slower -crf 24 \
    -pix_fmt yuv420p \
    -vf "scale=-1:720" \
    -c:a aac -b:a 128k \
    OUTPUT

Replace -vf "scale=-1:720" with -vf "scale=720:-1" for vertical videos.

Replace OUPUT with path to the desired output video file. Make sure the file extension is .mp4 so FFmpeg uses the MP4 container format.

For more options and info, see:

WebM VP9/Opus ffmpeg Command

These commands perform a 2-pass encode of your INPUT video file.

First, run the 1st pass:

ffmpeg -i INPUT \
    -codec:v libvpx-vp9 -b:v 0 -crf 31 \
    -vf "scale=-1:720" \
    -pass 1 -an -f null /dev/null

Replace INPUT with the path to your input video file.

Replace -vf "scale=-1:720" with -vf "scale=720:-1" for vertical videos.

Note that this will create a file like ffmpeg2pass-0.log which you can delete after the next command.

Finally, run the 2nd pass:

ffmpeg -i INPUT \
    -codec:v libvpx-vp9 -b:v 0 -crf 31 \
    -vf "scale=-1:720" \
    -pass 2 -c:a libopus -b:a 96k \
    OUTPUT.webm

Replace OUPUT with path to the desired output video file. Make sure the file extension is .webm so FFmpeg uses the WebM container format.

For more options and info, see:


Attachments: