If one is worried about scale, it's pretty easy to throw them behind a CDN like Cloudflare or Bunny.net. They'll cache the static file for you so that your web server isn't always delivering it.
I used to upload assets for apps to S3 to be served from there when I just started thinking that my CDN is going to be taking the vast majority of hits for static files so why should I be adding a step to my deploy process?
99,99% of people are overestimating their blogging needs. Unless you're Scott Hanselman the cheapest Hetzner VPS will cover all their hosting needs. It's amazing that even many developers nowadays don't really understand how far just basic hosting will take you before you need edge, cdn, s3 or anything else.
Netlify and similar services have replaced me ever launching my own server ever again for personal projects that involve static content. Not sure how Netlify affords to serve all the traffic but so far so good on the free tier.
Modern static hosting providers have generous free tiers, amazing UX, zero maintenance, and handle all the same if you have 1 or 1 million visitors (the only difference being your bill).
> What problem would that solve? Using Cloudflare is very straightforward.
From the original question:
> I am curious what are the current best practices and offerings for hosting images (or short videos, gifs, etc.) for small to mid scale websites?
At that point your images are in the same place, and have the same workflows, as your entire site. If your blog / landing page is spread among different services, it'll take more time to maintain, more time to train a newcomer to understand, more points of failure...
IE, if you use one of the "git repo -> CDN" products, your images and static content are part of the same workflow, and the CDN handles all of your scalability issues. Your update process simply becomes a "one and done" pull request with 100% off-the-shelf automation.
> Using Cloudflare is very straightforward
Last weekend I hit a bug in Cloudcannon -> Cloudflare's certificate handling. Our landing page was down for about half a day. Fortunately it was Sunday night and most of our customers aren't the kind of people who'd be browsing our landing page on a Sunday. It was resolved quick enough, but it would have been a lot more frustrating if we were a consumer product or our blog was a lot more integral to our business.
I'm not entirely sure where to point the finger, though. We "bring our own cert" instead of using Cloudflare's (or Cloudcannon's) automatically-generated certificate.
This is what I’ve done - if you want to be a bit more protective you can do some things to make sure they’re not hotlinked from elsewhere, but that’s up to you.
I took it one step further: I don't have an image-heavy site, so I degrade the resolution to make images as small as possible, then embed them in the HTML as base64 strings. Very portable!
I used to upload assets for apps to S3 to be served from there when I just started thinking that my CDN is going to be taking the vast majority of hits for static files so why should I be adding a step to my deploy process?