Migrate from Cloudinary
You are probably buying a DAM to store avatars
Cloudinary is a media platform with a genuinely excellent transformation engine. If what you actually needed was avatars, receipts and a private download link, you are paying for a great deal of product you never open.
Before and after
The same attachment, both ways
Cloudinary
<%# The crop is part of the URL, so it is part of your codebase %>
<img src="https://res.cloudinary.com/acme/image/upload/
w_256,h_256,c_fill,g_face,q_auto,f_auto/v1/<%= user.avatar_id %>">FileHutch
<%# The crop is a setting. Change it in the dashboard, no deploy. %>
<%= image_tag user.avatar_transform_url("avatar") %>Why people move
What changes, and why it matters
- Transformations live in the URL
- w_256,h_256,c_fill sits in your templates and, sooner or later, in your database. Changing a crop means finding every string. A FileHutch transform is a name, and the name never changes.
- Usage is metered in credits
- Transformations, storage and bandwidth all draw on one pooled number, so a traffic spike and a bulk re-crop cost the same thing and the bill is hard to predict. FileHutch is a flat monthly price with a storage allowance.
- The bytes live in their account
- Leaving means re-uploading everything and rewriting every URL you stored. With bring-your-own-bucket the files are already in your account and moving is a settings change.
- Most of it is a DAM
- Collections, approvals, tagging, video pipelines. Real features, and a real reason to stay if you use them — but a lot of surface to keep in your head if you do not.
Side by side
Where each one is stronger
| Aspect | Cloudinary | FileHutch |
|---|---|---|
| Transform reference | Parameters in the URL | A name you define once |
| Pricing unit | Pooled credits | Flat monthly + storage allowance |
| Where bytes live | Their account | Yours, or our managed bucket |
| Bandwidth | Metered | R2 egress is free; we never meter it |
| DAM features | Extensive | None, deliberately |
| Video | Full pipeline | Stored, not processed |
The move, in order
Every step is reversible until the last one.
-
1
Create a project and matching transforms
Name them after what they are for — avatar, thumb, hero — not after their dimensions.
-
2
Point a project at your own bucket
R2, S3 or B2. Credentials are scoped and encrypted at rest, and you can test the connection before saving.
-
3
Copy the assets across
Pull each asset at its original size and upload it. You are copying originals only — the crops are regenerated from the named transforms.
-
4
Replace URL building with transform names
Every w_,h_,c_ string becomes a name. This is the step that pays for the move.
-
5
Cut over and keep the old account for a month
Nothing references Cloudinary once the templates are changed, but keep it until you are sure.
What does not change
- Images still render from a CDN edge
- Format and quality negotiation is still automatic
- You can still store the original and crop later
When to stay where you are
Cloudinary's transformation engine is better than ours and it is not close — overlays, face detection, video, generative fill. If you use those, stay. This page is for people who are paying for them and using none.
Try the move on one attachment first.
The free plan is enough to migrate a single model and see whether the rest is worth it.