Image Hosting Options for Photography Gallery#
Since GitHub has file size limits and you don’t want to store large photography images in your repository, here are the best options for external image hosting.
Quick Comparison#
Service | Free Tier | Bandwidth | Processing | Best For | Cost |
---|---|---|---|---|---|
Cloudflare R2 | 10GB storage | 10GB/month (free) | No | Cost-conscious | $0.015/GB storage after free tier |
ImageKit | 20GB bandwidth | 20GB/month | Yes | Performance | Free tier generous, $49/mo after |
Cloudinary | 25 credits | ~25GB/month | Yes | Full features | Free tier good, $89/mo Pro |
imgix | Connect your storage | Varies | Yes | High volume | $49/mo minimum |
Bunny CDN | No free tier | Pay as you go | Optional | Full control | $0.01/GB (very cheap) |
Recommended Options#
1. Cloudflare R2 (Best Value)#
Pros:
- Extremely cost-effective ($0.015/GB storage, $0.01/GB bandwidth after free tier)
- No egress fees (unlike S3)
- Fast global CDN
- S3-compatible API
- 10GB free storage
Cons:
- No built-in image processing
- Manual image optimization needed
- More technical setup
Setup:
- Create Cloudflare account
- Navigate to R2 Object Storage
- Create a bucket (e.g., “skb-photos”)
- Enable public access for read
- Upload images
- Get public URL:
https://pub-xxxxx.r2.dev/your-image.jpg
Usage:
2. ImageKit (Best for Ease of Use)#
Pros:
- Automatic image optimization
- Real-time transformations (resize, crop, format conversion)
- URL-based image manipulation
- Generous free tier (20GB bandwidth)
- Easy to use dashboard
Cons:
- More expensive at scale
- 20GB storage limit on free tier
Setup:
- Sign up at https://imagekit.io/
- Go to Media Library
- Upload images
- Get URL endpoint:
https://ik.imagekit.io/yourname/
Usage with Transformations:
Transformations:
w-1200
- width 1200pxq-80
- quality 80%f-webp
- convert to WebP format
3. Cloudinary (Best Full-Featured)#
Pros:
- Powerful image processing
- Automatic format selection
- AI-powered features
- Great free tier
- CDN included
Cons:
- Credit system can be confusing
- Expensive after free tier
Setup:
- Sign up at https://cloudinary.com/
- Upload images via Media Library
- Get cloud name:
https://res.cloudinary.com/yourcloudname/
Usage:
Recommendations by Use Case#
Just Starting Out#
ImageKit - Easiest to use, good free tier, automatic optimization
Cost-Conscious#
Cloudflare R2 - Cheapest at scale, but requires manual optimization
High-Quality Photography Portfolio#
Cloudinary or imgix - Best image processing, professional features
High Traffic Site#
Bunny CDN or Cloudflare R2 - Most cost-effective bandwidth
Image Optimization Tips#
Before Upload#
Resize images:
- Max width: 2000-2400px for high-res displays
- Use 1200-1600px for regular display
Compress images:
- Use tools like:
- TinyPNG
- Squoosh
- ImageOptim (Mac)
- Use tools like:
Choose format:
- WebP for modern browsers (best compression)
- JPEG for photos
- PNG for graphics with transparency
Using Image Transformations#
With ImageKit or Cloudinary, you can serve responsive images:
Hugo Image Processing Alternative#
If you want to store some images in your repo (smaller ones), Hugo has built-in image processing:
Hugo will automatically:
- Generate multiple sizes
- Create WebP versions
- Optimize for performance
But this increases build time and repo size, so use sparingly.
Gallery Structure Recommendation#
Organize by Collection#
content/
└── gallery/
├── _index.md
├── japan-2024/
│ ├── index.md
│ └── [metadata]
├── street-photography/
│ ├── index.md
│ └── [metadata]
└── nature/
├── index.md
└── [metadata]
Example Gallery Post#
---
title: "Japan 2024"
date: 2025-10-15
description: "Photography from my trip to Japan"
tags: ["travel", "japan", "photography"]
---
## Tokyo Nights
Shibuya Crossing, Tokyo
Neon streets of Shinjuku
## Kyoto Temples
Thousands of torii gates at Fushimi Inari
Cost Estimation Examples#
Small Site (< 1000 visitors/month)#
- Free tier: ImageKit, Cloudinary, Cloudflare R2 (all free)
Medium Site (10,000 visitors/month, ~50GB bandwidth)#
- Cloudflare R2: ~$0.50/month
- ImageKit: Free tier might suffice, or $49/month
- Cloudinary: ~$89/month
Large Site (100,000 visitors/month, 500GB bandwidth)#
- Cloudflare R2: ~$5/month
- Bunny CDN: ~$5/month
- ImageKit: $149/month
- Cloudinary: Custom pricing
My Recommendation#
Start with ImageKit for ease of use and automatic optimization. If your site grows and bandwidth costs become significant, migrate to Cloudflare R2 + manual optimization for the best value.
Migration Between Services#
All these services support S3-compatible APIs, so migration is straightforward:
- Export images from current service
- Upload to new service
- Update URLs in your content using search & replace
- Test thoroughly before deactivating old service
Questions?#
- Check service documentation
- Test with a few images first
- Monitor bandwidth usage
- Set up billing alerts