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 paid third-party providers. | 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 | Nothing is rejected for size except by device memory | Every tool runs client-side; the only uncapped variable is your device's RAM. | Close other tabs, process fewer files per batch, or move to a desktop for huge jobs. |
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.
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.
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.
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.