📤 Set up Cloudinary (free photo & video upload)

5-minute one-time setup ¡ 100% free forever

To upload photos and videos directly in the ViralDM Post Scheduler, you need a free Cloudinary account. Cloudinary gives you 25 GB storage + 25 GB monthly bandwidth forever, with no credit card. You only add 4 environment variables to your server dashboard.

Why Cloudinary? The Instagram Content Publishing API needs a public direct file URL — one that opens the image or video itself, not a web page. Google Drive share links, WhatsApp links and the like do not work. Cloudinary gives you instant public URLs that Instagram accepts.
1

Create a free Cloudinary account

No card, no upgrade prompts. Just sign up with an email.

  1. Open cloudinary.com/users/register_free
  2. Sign up with email and password (Google sign-in also works)
  3. Choose account type "Developer" (the default is fine)
  4. Verify your email (check your inbox)
2

Copy your Cloud Name

This is your unique Cloudinary identifier.

  1. On the dashboard, "Cloud name" appears in the top-left corner (e.g. dxabc123)
  2. Copy it — you will need it in Step 5
The cloud name is URL-safe (lowercase, numbers and dashes only). Copy it from the dashboard rather than typing it.
3

Create an unsigned upload preset

"Unsigned" means the browser can upload directly, so your server carries no load. It stays safe because the restrictions live inside the preset.

  1. Open Settings (âš™ī¸ gear icon) from the left sidebar
  2. Go to the Upload tab
  3. Scroll down to the "Upload presets" section
  4. Click "Add upload preset"
  5. Name the preset viraldm_unsigned (any name works)
  6. Signing Mode: choose "Unsigned" (this one matters)
  7. Folder (optional): set viraldm to keep things tidy
  8. Optional restrictions, for safety:
    • Max file size: 100000000 (100 MB)
    • Allowed formats: jpg,png,gif,webp,mp4,mov
  9. Click Save
  10. Copy the preset name you just set (e.g. viraldm_unsigned)
4

Get your API key and secret (for auto-delete)

Once a post is published, ViralDM deletes the file from Cloudinary to save storage. That delete is a signed API call, so it needs admin credentials.

  1. Open the Cloudinary dashboard
  2. Click your avatar in the top-right corner → "Settings"
  3. Left sidebar → "API Keys" tab
  4. You will see the API Key (a 15-digit number) and the API Secret (click "Reveal")
  5. Copy both and keep them safe — you need them in Step 5
âš ī¸ Never make the secret public — do not paste it into a GitHub commit, Slack or a screenshot. It belongs only in a server environment variable.
5

Add the environment variables to your server

This tells ViralDM which Cloudinary account to use, and which credentials to delete with.

  1. Open your hosting dashboard and select the ViralDM app
  2. Open the Environment Variables section
  3. Add these four variables:
KeyValue
CLOUDINARY_CLOUD_NAMEdxabc123 (Step 2)
CLOUDINARY_UPLOAD_PRESETviraldm_unsigned (Step 3)
CLOUDINARY_API_KEY123456789012345 (Step 4 — for auto-delete)
CLOUDINARY_API_SECRETabc...xyz (Step 4 — keep this secret)

Save and redeploy (about 2 minutes).

6

Test it

To confirm everything is working.

  1. After the redeploy, open /dashboard/posts
  2. The "Photo / Video" section now shows a drag & drop area instead of a URL box
  3. Drag in a test image — an upload progress bar appears
  4. When the upload finishes you get a preview
  5. Done ✅
đŸ—‘ī¸ Auto-cleanup is on: once Instagram or Facebook publishes successfully, ViralDM deletes the file from Cloudinary by itself. Instagram keeps its own copy on its CDN, so your storage stays free. Files from FAILED posts are swept after 7 days. In practice your storage never fills up.

FAQ

Is it really free forever?

Yes. Cloudinary's free tier is permanent — 25 GB storage and 25 GB bandwidth a month. For a solo creator that can last years, and you do not need to add a card unless you cross the limit, which most people never do.

Will my users upload to my Cloudinary account?

Yes — all your end users share one central Cloudinary account, yours. That is the standard SaaS pattern, and 25 GB holds thousands of posts.

What if the storage fills up?

In practice it will not — ViralDM cleans up automatically. The moment Instagram publishes a post, the file is deleted from Cloudinary (Instagram serves its own CDN copy). Only scheduled-but-not-yet-published files sit there, which averages 50-200 MB at any time even with thousands of creators.

Is this approved by Instagram?

Yes. Cloudinary CDN URLs are HTTPS and are accepted directly as image_url / video_url by the Instagram Content Publishing API. Many large SaaS products use exactly this (Hootsuite, Buffer and others).

What are the alternatives to Cloudinary?

ImageKit.io (20 GB free, an Indian company) and Bunny.net ($0.01/GB after the free credit) are both good. Cloudinary's free tier is simply the most generous for video.

âš ī¸ Important: until you set these environment variables, users have to paste a URL — which most Instagram users do not have. It is worth doing: five minutes of setup, and the experience is night-and-day better.
← Back to Post Scheduler