Every limit, listed plainly.
No fine print. Each ceiling below names its value, why it exists, and what to do when you hit it.
| Limit | Value | Why | When hit |
|---|---|---|---|
| Image intake per file | 50 MB — same for guests and signed-in users | Local compute costs nothing, so the gate exists only for browser memory and abuse (src/utils/fileSizeLimits.ts, src/lib/planTiers.ts CATEGORY_CAPS). | Compress or resize the image first (Image Compressor, Image Resizer), or split the job across files. |
| PDF intake per file | 125 MB — same for guests and signed-in users | Same memory/abuse guard as above; PDF renderers hold whole documents in memory. | Compress the PDF or split it (Split PDF), then process the parts. |
| Audio intake per file | 100 MB — same for guests and signed-in users | Decoded audio buffers expand far beyond file size in RAM. | Convert to a compressed format first (Audio Converter) or trim the clip. |
| Video intake per file | 250 MB — same for guests and signed-in users | Video frames are the heaviest in-memory workload; the ceiling protects the tab from crashing. | Compress or trim the video, or process it in shorter segments. |
| Anything else per file | 150 MB — same for guests and signed-in users | Fallback ceiling (CATEGORY_CAPS.other) for formats without their own category. | Same playbook: shrink, split, or compress before retrying. |
| Server-reported file cap — guest | 30 MB max file, 5-file batches, 1 thread | FILE_CAPS for the anon plan, served by /api/check-plan for tools that ask the server. | Sign in free to lift the cap, or process files one small batch at a time. |
| Server-reported file cap — signed in free | 150 MB max file, 25-file batches, 1 thread | FILE_CAPS for the signedin plan — the account proves you are not a bot, so batches grow. | Upgrade to Pro for larger batches, or split work into 25-file runs. |
| Server-reported file cap — Pro | 2 GB max file, 500-file batches, 6 parallel threads | Pro FILE_CAPS: paying users fund the abuse headroom, so every gate opens wide. | You are at the top tier — if a 2 GB file still fails, it is device memory, not policy. |
| Pro-tool downloads — guest | 0 per day (blocked, sign-in required) | downloadLimit(anon, pro-tool) = 0: premium output is the one metered surface. | Sign in free — that alone unlocks a daily taste of every Pro tool. |
| Pro-tool downloads — signed in free | 2 per day | downloadLimit(signedin, pro-tool) = 2: enough to evaluate any premium tool. | Wait for the daily reset, or upgrade to Pro for unlimited downloads. |
| Local-tool downloads — everyone | Unlimited, no account needed | Local compute costs nothing, so local output is never metered. | There is nothing to hit — if a download fails, it is the browser, not a quota. |
| AI credits — signed in free | 5 credits, one-time trial, never refills | FREE_TRIAL_CREDITS: a capped trial bounds cost while staying a real trial. | Upgrade to Pro for the monthly allowance; local (non-AI) tools stay free forever. |
| AI credits — Pro | 200 credits per 30-day cycle | PRO_CREDITS with CREDIT_RESET_DAYS = 30: a recurring budget, not a balance. | Wait for the monthly reset, or use a free local alternative for the same task. |
| AI requests per minute | 2/min free, 5/min Pro | aiRateLimit(): a 60-second sliding window protecting the AI provider from bursts. | Slow down for a minute — the window slides, so brief pauses clear it. |
| URL shortener | 10 requests per minute per IP | Per-IP D1-backed window (functions/api/url-shorten.ts); shortening calls free third-party providers (TinyURL, is.gd). | Wait a minute and retry; for bulk jobs, shorten in small groups. |
| Bulk URL status checker | 15 requests per minute per IP, max 45 URLs per request | functions/api/url-status-check.ts: each request can fan out to dozens of subrequests. | Split lists longer than 45 URLs across requests spaced a minute apart. |
| Page fetcher (screenshot / SEO tools) | 20 requests per minute per IP, 15 s timeout, 1.5 MB page cap | functions/api/fetch-page.ts TIMEOUT_MS / MAX_BYTES: upstream pages must be HTML and bounded. | Retry slow pages later; pages over 1.5 MB or non-HTML are rejected by design. |
| RDAP / domain lookup | 20 requests per minute per IP; 6 s bootstrap, 10 s query timeout | functions/api/rdap-lookup.ts plus src/lib/rdap.ts: authoritative servers vary in speed. | Wait a minute, then retry — ambiguous answers return unsupported so callers fall back. |
| Status-check fetch behaviour | 8 s per fetch, up to 5 redirect hops, 45-subrequest budget | TIMEOUT_MS / MAX_REDIRECTS / SUBREQUEST_BUDGET: long redirect chains cost real worker subrequests. | Direct (non-redirecting) URLs check fastest; chains over 5 hops stop at the last hop. |
| Tool module loading | 15 s import timeout before the slow-load notice | DynamicModuleWrapper IMPORT_TIMEOUT_MS: code-split chunks load on demand. | Reload the page — chunk loads are cached after the first success. |
| Browser memory — the final ceiling | Intake ceilings above; device memory is the last constraint | After the per-type intake caps, the only remaining limit is how much RAM your browser can spare. | Close other tabs, process fewer files per batch, or move to a desktop for huge jobs. |
Limit questions, answered.
Are the intake limits different for guests and signed-in users?
No. The per-category intake ceilings (images 50 MB, PDFs 125 MB, audio 100 MB, video 250 MB, other 150 MB) are identical for guests and signed-in users — they guard browser memory, not accounts. Only the server-reported batch caps and Pro-tool download budgets differ by plan.
What happens when I hit a rate limit?
You get an HTTP 429 response with a Retry-After header telling you to wait about a minute. All API rate limits use a 60-second sliding window per IP address, so a short pause clears them — nothing is locked or penalised.
Do local tools really have no download limit?
Correct. Downloads from local (client-side) tools are unlimited for everyone with no account needed. The only metered downloads are Pro-tool outputs: blocked for guests, 2 per day for signed-in free users, unlimited for Pro.
Why did my large file fail if limits are generous?
The one ceiling we cannot lift is your device's memory. Browsers hold decoded files in RAM — a 250 MB video can need gigabytes once decoded. Close other tabs, use smaller batches, or switch to a desktop with more RAM.