Quick Adventure in Migrating IPFS Pinning Services for NFTs
Unless you have recoverable on-chain NFTs, a challenge for anyone creating or owning NFTs is storing them. You hit this wall quickly. As many will know, one of the most prominent methods of storage is IPFS. I love this model — and IPFS is amazing. But it has all the limitations that you’d expect. Primary among these limitations is the risk of impermanence—no nodes pinning your assets, no assets for you.
I won’t rehash¹ these details. I can think of two fantastic posts relevant to this. One is predictably from Artnome, who is creating a great solution with Club NFT. Another is a great post about the risks and state of the market by Nifty Table: highly recommended.
The goal here: Backup your NFTs, and ensure you’ve pinned them on reliable services (even your own maintained IPFS node, if you can).
But even when using a solid IPFS service, things can get tricky.
This brief post is about one of the most prominent IPFS pinning services: Pinata. It is a great service, but Pinata made a curious decision lately. It has a fantastic free-tier service. It was limited, but you could work with it (basically unlimited pinned files but limited to 1 GB). They’ve decided, come July 23rd (tomorrow), to limit this to 100 pins. 100 files only. That’s a massive change.
The issue is that I have well more than 100 pins at this point for various projects and websites (including ones I host via ENS). So I needed to find a new service.
Filebase was my choice (NFT.Storage also seems great). If you’re interested in trying IPFS through a service, Filebase has a very generous free tier. You create “buckets” (each with pinned files in them), and these buckets have unlimited pins. The catch is that you can only pin 5 GB of data on their service.
I wanted an exact mirror of all files (and CIDs) on Pinata. Note to future self: Maintain a list of CIDs and an exact local mirror of your service’s repository for everything. Pinata has a very workable API to help with this. Using its
pinList endpoint, you can download your entire batch of pins with CIDs and more information.
So now I had an exact mirrored list of CIDs.
As a mirrored backup, I retrieved these files directly (I wrote my own script to do so, because it was only about 200 files, many of them small). However if you have a very large set of files, you can consider Filebase’s documentation as they have hooks into some data migration tools (pointers here). In my case, I simply uploaded files into new Filebase buckets. Note: If you are preserving folder containers, make sure the files inside the migrated folders are precisely the same (name, etc.) on the original service (a folder container’s CID depends on file names; see this great thread by skøgard for more discussion of directory storage).
I like Filebase’s “bucket” approach, so I organized my materials into a new series of buckets, and mirrored them in a local folder. I then used the excellent IPFS Desktop to double check that all CIDs from Pinata were represented.
Lessons for me and perhaps for all creators and collectors:
- Maintain a single, cross-project repository mirrored to your chosen service so you can quickly migrate (it makes migration instant).
- Use more than one service if you can (e.g., Pinata, Filebase, NFT.Storage, IPFS CLI or Desktop). Basic packages aren’t too expensive if you can swing it (Filebase’s service goes up to 1 TB for $5.99 per month).
- Although much of this process is automatic, expect to double check CIDs for critical material simply for peace of mind. Learning the API from these tools is helpful (all three services mentioned have an API, consider IPFS CLI too).
- Easier in some ways but costly in others — setup a persistent node of your own so changes to existing services won’t ever be an issue. There’re some tutorials about doing this here. Note important privacy considerations, though.
Take a look at Club NFT too. Their import tool creates a convenient ZIP archive you can download for all your NFTs. That way, you can maintain a local backup, too.
(Note: None of these services paid me for this post. They’re all great services and we all have a general interest in supporting and maintaining our projects via IPFS. Pinata really does have a great service if you’re willing to pay for a subscription ($20/mo), but I’m glad there were alternatives. I’m on Twitter, and have some creative projects and other writing.)