Back Home
TOC Loading..
Keyframes
References
Github Repo
Webflow Cloneable

Using Videos Effectively in Webflow (Without Losing Your Mind)

If you’ve ever used Webflow’s native background video component and thought “damn, that looks rough” I'm here for you

Let me provide you with the scapegoat, Webflow.

In this guide, I’m going to break down why I host videos externally, where you can host them, how to deal with transparent videos, browser quirks, performance, and how to let non-technical team members manage everything without touching the code.

Why We Host Videos Externally

Because Webflow’s background videos… suck.
There’s no polite way to say it.

Let’s run through the issues quickly:

1. You can’t lazy-load them

This alone is enough of a reason.
Above-the-fold heavy media kills LCP.
Below-the-fold heavy media kills bandwidth.

Webflow loads it immediately either way.

2. Autoplay + loop break constantly

Safari? Maybe.
Mobile? Meh.
Low-power mode? Doubt it.

3. Webflow’s compression is horrendous

This is a big one.

Let me illustrate it with a short story.

I uploaded a 23MB MP4.

I press publish

I open Webflow

I downloaded the video I uploaded

Now it's 1.9MB YIPEEE.

The final result looked as if it had been forwarded through three rounds of WhatsApp.

Back to the drawing board

4. You can’t manipulate playback programmatically

Technically, you can select the <video> Webflow generates…
…but you can’t add attributes, control types, set playsinline, use multiple sources, or do anything real.

When you add classes or attributes to the Webflow background element, you're actually adding them to a div that wraps the video. The real HTML looks more like this.

<div class="this-is-your-custom-class" data-my-awesome-attribute="yes">
  <video>
    <source></source> <- This is your compressed video MP4
    <source></source> <- This is a webM Webflow makes from your MP4
  </video>
</div>

5. Hard 30MB upload limit

Most high-quality .mov exports, especially transparent ones, break this instantly.
And Webflow does not support uploading .webm directly.

While I appreciate a 30mb limit, I also appreciate being able to make my own mistakes.

6. No multiple sources

Proper video tags use:

1<video>
2  <source src="video.webm" type="video/webm" />
3  <source src="video.mp4" type="video/mp4" />
4</video>

Webflow gives you one file.

And then it generates a low-quality WebM for you that you'd never willingly use.

All of this stacks up to a single conclusion:

If you want good performance, visual clarity, control, caching, or transparency…

Do not use Webflow background videos.

Now. A very brief aside that I feel obligated to mention. If you already know this, then skip ahead, big brain.

YouTube iframe or Embedded <video>

This is a surprisingly common misunderstanding.

YouTube iframe

Use when the user is supposed to interact with the video.

  • Play/pause
  • Scrub
  • Volume
  • Watch full screen
  • Leave comments (clients love pretending users do this)
  • You want YouTube’s compression, tracking, and analytics

Embedded video

Use when the video plays automatically, loops, and is part of the design.

  • No audio
  • UI animations
  • Background loops
  • Visual texture
  • Logo stings
  • Transparent overlays
  • Anything scroll-linked or manipulated with GSAP

Here's a 1-step cheat sheet.

  1. Does the video have audio that the users need to hear?
    1. Yes: Iframe
    2. No: Embed

Yes, there are nuances, but if you knew them, you wouldn't be here.

Where Should You Host Videos?

There isn’t one “best” platform (cough Cloudflare cough), only better for specific use cases.
Here’s the short version:

1. Cloudflare Stream

My preferred option for clients.

Pros

  • Handles transcoding for you
  • Great caching
  • Smooth playback
  • Simple interface for non-technical team members
  • Beautiful player if you need it
  • Strong privacy and bandwidth tools

Cons

  • No transparency support
  • Slightly opinionated API

Use for: all normal non-transparent autoplaying videos.

2. Cloudflare R2

Basically, “S3 but cheaper, simpler, and built into my CF pipeline”.

Pros

  • Perfect for hosting raw video files
  • Predictable URLs
  • Works beautifully with Workers
  • Great for transparent WebM or MP4 sequences
  • The cheapest option by far
  • Full CORS control

Cons

  • You handle your own compression/encoding
  • No built-in streaming player
  • No automatic device-aware transcoding

Use for: transparent videos.

3. AWS S3

Very powerful but less friendly.

Pros

  • Industry standard
  • Full control over every detail
  • Can integrate with CloudFront CDN for insane performance
  • Good for enterprise teams already on AWS

Cons

  • Confusing UI
  • Overkill for most Webflow sites
  • Slightly more expensive
  • Permissions can be a nightmare

Use for: teams already using AWS, or advanced dev builds.

4. Vimeo

My old go-to.

Pros

  • Easy for clients
  • Nice UI
  • Good for long-form content
  • Privacy and domain restrictions
  • Reliable

Cons

  • Doesn’t support transparency
  • Harder to get pure file URLs
  • Most expensive

Use for: Projects that already use video as a video platform.

Why I stopped using it: Cloudflare is cheaper and better but not SO much better that it's worth paying for both.

Transparent Videos (Alpha Channels)

This is where things get fun.

Transparency in videos is hard and developers go to great lengths to make it happen. If your video is basically all SVGs then you're probably better off using Rive or Lottie and stopping the article here (or keep going, it will give me a warm fuzzy feeling when I ask ChatGPT to interpret google analytics for me)

If that isn't possible for you, then here you go!

Your options:

  • Transparent WebM
    Best quality-to-size ratio. Not supported on Safari iOS.
  • HEVC .mov with alpha
    Works on Safari. Insanely heavy.
  • Use both sources & let the browser pick
    This is the correct approach.

Example:

1<video autoplay playsinline muted loop>
2  <source src="video.webm" type="video/webm" />
3  <source src="fallback.mov" type="video/quicktime" />
4</video>

R2 is perfect for this because:

  • You control filenames
  • No compression
  • You can store both formats
  • Predictable URLs make scripting easy

Never upload HEVC .mov to Webflow, the 30MB limit will laugh at you.

Browser Compatibility

For when it's 2 hours before launch and the client opens Safari for the first time.

Format Chrome Firefox Safari iOS Safari
WebM
MP4 (H.264)
HEVC .mov with alpha ⚠️ (sometimes janky)

This is why we use multiple sources.

This is also why hosting externally is so important. Webflow doesn't let you supply multiple formats.

How External Hosting Improves Performance

One word: Caching.

When your video lives on:

  • Cloudflare R2
  • Cloudflare Stream
  • AWS S3 with CloudFront

…it’s served from g̶l̶o̶b̶a̶l̶l̶y̶ ̶d̶i̶s̶t̶r̶i̶b̶u̶t̶e̶d̶ ̶e̶d̶g̶e̶ ̶n̶o̶d̶e̶s̶ a fancy server really close to you.

Once a user loads the video:

  • It gets cached
  • Nearby users instantly get the cached copy
  • Webflow never gets touched
  • Your site feels 10× faster
  • Your Webflow bandwidth doesn't move

You also avoid:

  • Webflow’s compression
  • Webflow’s CDN rename URLs
  • Sad clients

Most importantly:
Your video no longer blocks page rendering or load time.

Soon you too will be posting out of context lighthouse screenshots on Linkedin!

How Non-Technical Team Members Can Manage Videos

This is the part clients love.

The workflow I usually set up:

Cloudflare Stream (for simple video content)

  • Client logs into Cloudflare
  • Uploads a new video
  • Cloudflare produces a download URL
  • That URL is copy-pasted into Webflow’s CMS or a text field
  • The embed updates automatically

R2 (for developers and designers)

  • You give editors a folder
  • They drag new files into it
  • Filenames matter → you can control them with naming conventions
  • Editors update a CMS field or attribute in Webflow

Bonus: You can automate this

  • Upload to Notion → sync to R2
  • Upload through a client portal → sync to cloud
  • Use a backend worker to generate WebM/MP4 variants automatically
  • Sending a folder to your developer and they magically return some urls.

Now get out there and show the world what your editor can do! and remember, if you autoplay a video with audio without consent {insert threat here}.

Writings

Building a Webflow to Algolia Sync with Cloudflare Workers

Build an automated sync between Webflow's CMS and Algolia's search service using Cloudflare Workers.

Webflow + Cloudflare reverse proxy. Why and How

As more companies move to Webflow and demand for Webflow Enterprise grows, you’ll see more teams leaning on reverse proxies to solve some of Webflow’s infrastructure limitations.

How (and why) to add keyboard shortcuts to your Webflow site

A small keyboard shortcut can make a marketing site feel faster, more intentional, and “app-like” with almost no extra design or development

Useful GSAP utilities

A practical, code-heavy dive into GSAP’s utility functions—keyframes, pipe, clamp, normalize, and interpolate—and why they’re so much more than just shortcuts for animation math.

Using Functions as Property Values in GSAP (And Why You Probably Should)

GSAP lets you pass _functions_ as property values. I've known this for a while but never really explored it particularly deeply. Over the last couple of weeks I've been testing, experimenting and getting creative with it to deepen my understanding.

Organising JavaScript in Webflow: Exploring Scalable Patterns

Exploring ways to keep JavaScript modular and maintainable in Webflow — from Slater to GitHub to a custom window.functions pattern. A look at what’s worked (and what hasn’t) while building more scalable websites.

Building a Scroll-Based Image Sequencer with GSAP

An exploration in building a scroll-driven image sequence animation using GSAP and HTML5 canvas. Using Avif file compression with the Avif CLI, hosting strategies (Webflow vs AWS), GSAP and the quirks of working with canvas.