October DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsWindows FixRecommendedWindows errors stealing your time? Find the fix fastScan stability, cleanup and performance issues.Fix NowOctober DealsAmazon USDeal season is back - check today's better picksAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
Cloudinary

How to Host Images for a Website for Free (with the Limits That Matter)

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

For a small static site, put optimized images in a public GitHub repository and publish them with GitHub Pages. For a site where editors upload files, images need resizing, or traffic is unpredictable, use a managed image service such as Cloudinary or ImageKit instead. Imgur can produce a quick direct link for a prototype, but it is not established as durable production hosting.

In every case, the practical workflow is the same: upload the file, copy its HTTPS URL, and use that URL in an <img> element. The important differences are ownership, delivery features, quotas, and whether the provider’s policy fits your site.

Choose the right free option first

Option Best fit What you get Important limits or cautions
GitHub Pages Personal portfolio, documentation, class project, hobby site Images stored with your code and served from an HTTPS static site Published site limit is 1 GB and the soft bandwidth limit is 100 GB per month. GitHub says Pages is not intended or allowed as free hosting for online businesses, e-commerce sites, or sites primarily facilitating commercial transactions or SaaS.
Cloudinary Free plan Upload-driven sites needing CDN delivery, responsive images, and transformations Dashboard, SDK, or upload API; URL transformations and optimized delivery Usage is metered against a 30-day free-credit allowance. Check the current allowance before importing a large library or serving high traffic.
ImageKit free plan Small projects that need storage connections and media transformations Connect existing storage, upload to ImageKit storage, render media, and transform it The cited overview does not provide a complete quota table; verify current storage and bandwidth limits on the plan page.
Imgur One-off prototype, forum post, or temporary embed Web upload and a direct share link The upload help page does not establish a production SLA, durable-retention guarantee, or commercial hotlink policy.

Before choosing, check four things: whether you can export your originals, how resizing and caching work, how storage and bandwidth are counted, and whether commercial use and hotlinking are permitted.

Method 1: Host images with GitHub Pages

GitHub Pages is the simplest route when the images belong in version control and your site is a public static project. It is available with GitHub Free for public repositories. Read GitHub’s Pages setup instructions and its current limits before using it.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Set up the repository

  1. Create a public repository on GitHub, or open your existing public site repository.
  2. Add an image directory such as assets/images/. Use stable, descriptive filenames such as team-photo.webp; avoid spaces and names that will change later.
  3. Compress and resize files before committing. Keep a high-quality original in a separate local or versioned archive rather than publishing a multi-megabyte camera original.
  4. Commit and push the files.
  5. Open Settings → Pages. Under Build and deployment, choose the branch and folder containing your site, then save. GitHub will show the published HTTPS address after deployment.

Reference the published URL

If the file is at assets/images/team-photo.webp and your site is published at https://username.github.io/project/, the image URL is:

<img src="https://username.github.io/project/assets/images/team-photo.webp"
     alt="Team standing outside the office"
     width="1200" height="800" loading="lazy">

Use the exact path and capitalization. A 404 usually means the URL does not match the repository path, the deployment has not finished, or the repository is private.

When GitHub Pages is the wrong choice

GitHub documents a 1 GB published-site limit and a soft 100 GB/month bandwidth limit. It also says Pages should not be used for sensitive transactions such as sending passwords or credit-card numbers. Most importantly for businesses, GitHub says Pages is not intended or allowed as free hosting for online businesses, e-commerce, or sites primarily facilitating commercial transactions or SaaS. Choose a service whose terms explicitly fit that use case instead of assuming a public repository is acceptable.

Method 2: Use Cloudinary for uploads and transformations

Cloudinary is a better fit when non-developers upload images, the same source must be delivered at several sizes, or you want CDN delivery and URL-based transformations. Its Free plan documentation says the plan supports almost all features, can be used in production within its 30-day free-credit allowance, permits two additional users, and does not require a credit card. Its image-delivery documentation explains CDN delivery, responsive images, and transformation parameters.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Upload and embed

  1. Create a Cloudinary account and note your cloud name.
  2. Upload through the Media Library, an SDK, or the upload API.
  3. Copy the HTTPS delivery URL and record the public ID in your asset inventory.
  4. Use a transformed URL for the rendered size rather than routinely serving the original.
<img src="https://res.cloudinary.com/YOUR_CLOUD/image/upload/w_1200,q_auto,f_auto/team-photo.jpg"
     alt="Team standing outside the office"
     width="1200" height="800" loading="lazy">

Keep the original and public ID somewhere you control. If you later change providers, an exportable source library prevents a rebuild of every image.

Watch the free-credit meter

Cloudinary’s free allowance is credit-based, not an unlimited storage-and-bandwidth promise. A large import or high-traffic gallery can consume credits quickly. Check the current plan and usage dashboard before launch and set an operational alert or review cadence.

Method 3: Use ImageKit for a small project

ImageKit’s overview describes a free plan for small-scale projects. It supports connecting existing storage, uploading media to ImageKit storage, rendering images and videos, and applying transformations.

  1. Create an ImageKit account and configure either ImageKit storage or an existing storage connection.
  2. Upload an image through the dashboard or your integration.
  3. Copy the generated HTTPS URL.
  4. Add transformation parameters for the dimensions and format your page needs.

The cited overview does not state a complete quota table, so verify current storage, bandwidth, and transformation limits before relying on the free plan for production traffic. As with any managed service, retain originals outside the provider and keep a list of file IDs and URLs.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Method 4: Get a temporary direct link with Imgur

Imgur’s official upload help explains uploading through its website and obtaining share links, including a direct link after upload.

  1. Open Imgur’s upload page and select the image.
  2. After upload, copy the direct image URL rather than the gallery page URL.
  3. Paste it into your HTML:
<img src="https://i.imgur.com/IMAGE_ID.webp"
     alt="Descriptive text" width="1200" height="800" loading="lazy">

This is convenient for a prototype or forum post. The cited documentation does not establish a production SLA, durable retention guarantee, or commercial hotlink policy, so do not make Imgur the default asset pipeline for a business site without confirming current terms.

Use the same embedding pattern everywhere

Once you have an HTTPS URL, use meaningful alternative text, reserve layout space with intrinsic dimensions, and load below-the-fold images lazily:

<img src="https://your-provider.example/path/photo.webp"
     alt="Descriptive text"
     width="1200" height="800" loading="lazy">

Serve an appropriate size

Do not send a 4,000-pixel original to a 400-pixel card. Generate or request a rendition close to the largest size the layout displays, and use modern formats when your provider supports them. Keep a local or versioned original so provider changes do not destroy your library.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Use responsive sources when needed

<img
  src="https://your-provider.example/photo-1200.webp"
  srcset="https://your-provider.example/photo-480.webp 480w,
          https://your-provider.example/photo-800.webp 800w,
          https://your-provider.example/photo-1200.webp 1200w"
  sizes="(max-width: 600px) 100vw, 800px"
  alt="A red bicycle beside a brick wall"
  width="1200" height="800" loading="lazy">

Test from a clean browser session and from a slow connection. Confirm that the URL returns an image content type, not an HTML login page or a redirect that your browser blocks.

Or skip the browser setup

If what you really need is a screenshot of a web page—not a permanent image library—ScreenshotNeo provides a website screenshot API and MCP server. It accepts consent banners before capture and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each step can be disabled. Bot checks, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers identify the page verdict and billing status.

A single request returns PNG, JPEG, WebP, or PDF. The API supports full-page captures with lazy images loaded, CSS-selector element capture, dark mode, 12 device presets plus custom viewports, retina scale, PDF paper settings and page ranges, HTML/CSS rendering, custom JavaScript, clicks, waits, request blocking, headers, cookies, user agents, authorization, timezone, geolocation, transparent backgrounds, resizing, chosen cache TTLs, signed links, asynchronous jobs with signed webhooks, bulk capture of up to 100 URLs per call, a usage API, and an OpenAPI specification. Parameter names used by other screenshot APIs also work.

cURL

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

Python

import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
r.raise_for_status()
open("shot.webp", "wb").write(r.content)

Node.js

const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const buffer = Buffer.from(await res.arrayBuffer());
await import('node:fs/promises').then(fs => fs.writeFile('shot.webp', buffer));

See the ScreenshotNeo documentation for options and headers. The Free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000. An MCP server supplies take_screenshot, get_page_info, and capture_pdf to Claude, Cursor, and other MCP clients. Sign up free to try it.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Performance, portability, and policy checklist

  • Ownership: Keep originals in a repository or exportable archive.
  • Delivery: Prefer HTTPS, CDN caching, resizing, and format conversion when your site needs them.
  • Accounting: Track storage, bandwidth, transformations, and Cloudinary’s 30-day credits separately.
  • Policy: Confirm commercial use, hotlinking, acceptable content, and retention terms.
  • HTML quality: Add alt text, width, height, and a suitable loading value.
  • Security: Never put private credentials in an image URL or expose sensitive files through a public repository.

Troubleshooting common failures

The image shows a 404

Check the published branch, folder, filename capitalization, and project-path prefix. GitHub Pages deployments can also take time to complete; open the exact URL directly before debugging your HTML.

The URL returns a page instead of an image

You probably copied a dashboard, gallery, or login URL. Inspect the response’s content type and copy the provider’s direct HTTPS delivery URL.

The image is blurry or too large

Request a rendition near the rendered dimensions and preserve the width and height attributes. Do not repeatedly recompress an already compressed derivative.

A managed service stops delivering

Check the usage meter and credit/quota status first. Cloudinary’s free plan is limited by its 30-day credit allowance; ImageKit’s exact free quotas must be verified on its current plan page.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A business site is rejected by policy

GitHub Pages’ documented commercial-use restriction may apply. Move the assets to a provider whose terms explicitly permit your commercial or SaaS use, and retain an exportable copy during migration.

Which approach should you pick?

  • Choose GitHub Pages for a public, small static project where images belong beside the code.
  • Choose Cloudinary when uploads, responsive delivery, and transformations matter and you can monitor credits.
  • Choose ImageKit for a small project that benefits from connected storage and transformations, after checking current quotas.
  • Choose Imgur only when a quick, temporary direct link is more important than production guarantees.

Frequently Asked Questions

Can I use a GitHub Pages image URL on another website?

Technically a public HTTPS path can be referenced elsewhere, but review GitHub’s Pages limits and intended-use rules before treating it as a general hotlinking service.

Should I upload original camera files?

No. Publish an optimized rendition sized for the page and retain the original in a local or versioned archive.

How do I migrate providers later?

Export or recover your originals, preserve stable filenames or IDs, update the URL mapping in your site, and test every page for missing images.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What is the difference between a gallery URL and a direct image URL?

A gallery URL returns an HTML page; a direct image URL returns the image file itself and can be used in the src attribute.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Read next

Recommended PC Tool
Recommended PC Tool
Outdated Drivers Are Slowing You DownFree scan - exact matches
PC Slower Than It Used to Be?Free scan - under a minute

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.