This guide walks you through four free methods for creating and hosting IIIF manifests from images that you’ve downloaded to your local device. There are no fees for processing and hosting through any of these methods.
Internet Archive
The Internet Archive, or archive.org, has a public upload feature that allows users to upload their own content to the repository and share it with others. Images uploaded this way are automatically IIIF compliant, since the IIIF Image API is embedded in its image services. This method only works if the image you’re uploading is outside of copyright, is covered under a Creative Commons license (see licenses for specific parameters for sharing), or is owned by you. Material with current copyrights cannot be shared this way, since all images are public.
To create an IIIF Manifest for an image using the Internet Archive:
- Create an Internet Archive account using an email and password. Note that the Internet Archive experienced cyberattacks in 2024 that allowed the hackers to steal user emails, so we suggest being cautious when creating accounts. We do not suggest adding your full name, personal information, etc. to your account.
- Go to upload in the top right corner of the screen. Drag or select an image from your local device to upload.
- Once the image has loaded, add metadata to your image. Certain fields are required: Description and Subject Tags.
- Select No next to “Test Items”; this is required for this method to work.
- Click the Upload button at the bottom of the screen. Wait for the image to load in a new tab.
- Scroll down on the image page to the Identifier field. Copy the identifier.
- Paste the identifier into the following URL scheme: https://iiif.archive.org/iiif/[identifier]/manifest.json.
- Paste the URL into whatever viewer you wish.
IIIF Workbench and GitHub
In September 2024, the Internet Archive suspended its services temporarily due to cyberattacks and lawsuits (see Hatchette vs Internet Archive and UMG Recordings, Inc. et al vs. Internet Archive). It became necessary to find an alternate method of rendering and serving IIIF manifests for free from images. A Cantaloupe or self-hosted server does not solve the problem, since this would have to be hosted by the Cornell Reclaim Hosting space (a paid space) to be able to share images across the web instead of my local computer server.
The caveats of this method are that IIIF Workbench is slow at rendering images with the tiler, so it can take a while for images to upload. IIIF Workbench also sometimes never generates tiles for an image—it just loads on “Generating tiles” forever, which you wouldn’t be able to tell until you’ve already waited 15 minutes for your image to load. Lastly, it does not work with an organizational GitHub account because you can’t log into organizational accounts. This means a lot of annoying manual file-editing and transferring once you’ve uploaded all of your images and manifests. Regardless, it is a free and useful alternative to the Internet Archive method.
Here’s how to use IIIF Workbench:
- Download images from your repository of choice. TIFs are best, JPEG 2000s are the next best and JPEGs are the next next best.
- Check the file sizes. Export images that are over 100mb to smaller JPEGs, as close to lossless as possible. If you’re working on a Mac, you can do this in Preview by going to File > Export and selecting JPEG.
- Log into a personal GitHub account.
- Open the IIIF Workbench link. Allow access to your GitHub repositories.
- Create a new project and upload all images to the workbench, one by one.
- Wait 2-15 minutes for the images to process, generate tiles, upload to GitHub, and publish to the web. This may take a while, so try to have patience.
- After the images load, copy the info.json URI below an image.
- Open a manifest editor in a browser and add a canvas. Copy the URI into the canvas.
- Manually add metadata for each image. I often copy the metadata from the repository catalog record, but you can determine your scheme and make your own fields.
- Save the manifest to local machine. Then upload the manifest to the IIIF Workbench.
- Test manifest URIs in a viewer.
If you want the manifests to be hosted by a personal GitHub account, you can stop here. However, if you would like them to be hosted by an organizational GitHub account, do the following:
- Open the repository on GitHub and transfer ownership of the project repository. Alternatively, you can download all images and manifests files and reupload them to the organizational GitHub account one by one.
- Do a search in your repository for the personal account username. Edit files to remove the username for the personal GitHub account and replace it with organizational GitHub username. Commit your changes.
- Test manifest URIs in a viewer.
iiif-tiler.jar and GitHub
Method 3 using GitHub is slightly more hands-on, but cuts out IIIF Workbench as the middleman and thus lets the user take more ownership of their processing, metadata creation, etc. This method uses a Java-run iiif-tiler on your local machine, run through the Terminal on your local device, to process the images into Level 0 IIIF-compliant images. It then uses GitHub to host those images and present them using the IIIF Presentation API through GitHub Pages.
This method is not for the faint of heart; it requires patience and attention to detail, but goes faster than the IIIF Workbench method:
- Create a folder/directory “iiif-workshop” on your local device.
- Log into your organizational or personal GitHub account.
- In the repository, create a manifests folder, an images folder, and update your README.md with appropriate information about the project. If you’d like to use GitHub Pages to create a viewable hub for manifests and images, copy the code from glenrobson’s iiif-workbench repository’s plugins directory and index.md file.
- Download iiif-tiler.jar and place it in your iiif-workshop directory.
- Download images from your repository of choice. TIFs are best, JPEG 2000s are the next best and JPEGs are the next next best.
- Check the file sizes. Export images that are over 100mb to smaller JPEGs, as close to lossless as possible. If you’re working on a Mac, you can do this in Preview by going to File > Export and selecting JPEG.
- Make sure your file names are distinct. Files must have different names or the tiler will concatenate them.
- Place all images in a directory titled iiif-workshop on your local device.
- Run a command for cd ~/iiif-workshop java -jar iiif-tiler.jar in the Terminal on your local device. If you don’t have Java installed for whatever reason, you’ll have to do that first.
- Wait for a directory titled iiif to appear in the iiif-workshop directory. When you open the new iiif directory, you’ll find folders containing the tiles of each image and an info.json file.
- Create a new directory in your GitHub repository’s images directory for each image. It’s easiest to name the directory, the image, and the manifest all the same thing so you don’t get confused.
- For each image, upload the info.json file and all tile files into the appropriately named GitHub directory. You may have to do this in batches, since GitHub has a cap on uploads with file size and amount.
- After all files have uploaded succesfully, copy URIs for each image from the info.json file. Add /info.json on the end.
- Open a manifest editor in a browser and add a canvas. Copy the URI into the canvas.
- Manually add metadata for each image. I often copy the metadata from the repository catalog record, but you can determine your scheme and make your own fields.
- Save the manifest to your local machine.
- Upload the manifests to the manifests directory of your GitHub repository.
- Edit each manifest in the manifests directory to correct the @id so that it reads “https://[user].github.io/[repo]/manifests/[manifest name].json“.
- Commit changes. Test new manifest URIs.
libvips and GitHub
This method is very similar to Method 3, but uses libvips, an image-processing library, instead of IIIF-Tiler to create Level 0 IIIF-compliant image tiles. It then uses GitHub to host those images and present them using the IIIF Presentation API through GitHub Pages.
This method is the most intense:
- Install libvips to your local machine. Follow the libvips installation instructions.
- Log into your organizational or personal GitHub.com account.
- Create a new repository. In the repository, create a manifests folder and an images folder.
- On your local machine, create a new folder to store all of your images.
- Download images from your repository of choice. TIFFs are best, JPEG 2000s are the next best and JPEGs are third best.
- Place all images in the folder you created in step 3.
- Open the command line. Change directories to the directory that your image is in, e.g.: cd Downloads
- Run a command: vips dzsave yourimagename –layout iiif mypyr.zip
- Wait for a folder named mypyr.zip to appear on your computer. When you open the zip file, you’ll find folders containing the tiles of your image and an info.json file.
- Create a new folder in your GitHub repository’s images folder for each image. Going forward, it’s easiest to name the image folder and the manifest the same thing so you don’t get confused.
- For each image, upload the info.json file and all tile files into the appropriately named image folder in your GitHub repository. You may have to do this in batches, since GitHub has a cap on uploads with file size and amount.
- After all files have uploaded successfully, open the info.json file for each image and update the @id field to: “https://YOUR-GITHUB-USERNAME.github.io/YOUR-REPO-NAME/images/YOUR-IMAGE-NAME/”
- Open a manifest editor in a browser and add a canvas. Copy the @id above and add /info.json to the end. Paste this URI into the canvas.
- Manually add metadata for each image. I often copy the metadata from the repository catalog record, but you can determine your scheme and make your own fields.
- Save the manifest to your local machine.
- Upload the manifests to the manifests directory of your GitHub repository.
- Open each manifest file to correct the @id so that it reads: “https://YOUR-GITHUB-USERNAME.github.io/YOUR-REPO-NAME/manifests/YOUR-IMAGE-NAME/”
- Commit changes. Wait for the changes to finish processing.
- Test your new manifest URLs. Your new manifest URLs should be the same as the @id field you just edited in step 17.
Note that these methods are just some of the easiest ways you can use various programs to create static tiles and Level-0 compliant images. Given the pervasiveness and usefulness of IIIF for serving and presenting images, there are plenty of Python, Ruby, and Javascript libraries and tools for generating tiles. For more tools, see the community-built Awesome IIIF GitHub repository.