For a friend’s memorial I signed up to make a batch of images into a slideshow. All I wanted was the Simplest Possible Thing: a web page that would cycle through a batch of images. It’s been a while since I did something like this, so I looked around and didn’t find anything that seemed simple enough. The recipes I found felt like overkill. Here’s all I wanted to do:
- Put the images we’re gathering into a local folder
- Run one command to build slideshow.html
- Push the images plus slideshow.html to a web folder
Step 1 turned out to be harder than expected because a bunch of the images I got are in Apple’s HEIC format, so I had to find a tool that would convert those to JPG. Sigh.
For step 2 I wrote the script below. A lot of similar recipes you’ll find for this kind of thing will create a trio of HTML, CSS, and JavaScript files. That feels to me like overkill for something as simple as this, I want as few moving parts as possible, so the Python script bundles everything into slideshow.html which is the only thing that needs to be uploaded (along with the images).
Step 3 was simple: I uploaded the JPGs and slideshow.html to a web folder.
Except, whoa, not so fast there, old-timer! True, it’s easy for me, I’ve maintained a personal web server for decades and I don’t think twice about pushing files to it. Once upon a time, when you signed up with an ISP, that was a standard part of the deal: you’d get web hosting, and would use an FTP client — or some kind of ISP-provided web app — to move files to your server.
As I realized a few years ago, that’s now a rare experience. It seems that for most people, it’s far from obvious how to push a chunk of basic web stuff to a basic web server. People know how to upload stuff to Google Drive, or WordPress, but those are not vanilla web hosting environments.
It’s a weird situation. The basic web platform has never been more approachable. Browsers have converged nicely on the core standards. Lots of people could write a simple app like this one. Many more could at least /use/ it. But I suspect it will be easier for many nowadays to install Python and run this script than to push its output to a web server.
I hate to sound like a Grumpy Old Fart. Nobody likes that guy. I don’t want to be that guy. So I’ll just ask: What am I missing here? Are there reasons why it’s no longer important or useful for most people to be able to use the most basic kind of web hosting?


import os
l = [i for i in os.listdir() if i.endswith('.jpg')]
divs = ''
for i in l:
divs += f"""
<div class="slide">
<img src="{i}">
</div>
"""
# Note: In a Python f-string, CSS/JS squiggies ({}) need to be doubled
html = f"""
<html>
<head>
<title>My Title</title>
<style>
body {{ background-color: black }}
.slide {{ text-align: center; display: none; }}
img {{ height: 100% }}
</style>
</head>
<body>
<div id="slideshow">
<div role="list">
{divs}
</div>
</div>
<script>
const slides = document.querySelectorAll('.slide')
const time = 5000
slides[0].style.display = 'block';
let i = 0
setInterval( () => {{
i++
if (i === slides.length) {{
i = 0
}}
for (let j = 0; j <= i; j++ ) {{
if ( j === i ) {{
slides[j].style.display = 'block'
}} else {{
slides[j].style.display = 'none'
}}
}}
}}, time)
</script>
</body>
</html>
"""
with open('slideshow.html', 'w') as f:
f.write(html)