If not, store it on your database as blobs.
Regardless on which one above you choose, if you implement something like Cloudflare, you can get a CDN for those images. If you don't want everything behind Cloudflare, you can have the images served under a different subdomain and have that under cloudflare.
If not, an alternative to S3 is Google Cloud Storage. Create a bucket. Set it as public (everything in the bucket is available) and then you just need to worry about upload.
Here's a quick example in python, https://pypi.org/project/google-cloud-storage/
bucket = client.get_bucket('bucket-id')
new_blob = bucket.blob('remote/path/storage.txt')
new_blob.upload_from_filename(filename='/local/path.txt')
# or
blob.upload_from_string('New contents!')
Free teir offers up to 25GB of net viewing bandwidth. Plenty for what ur doing.