Short answer: 5 MB per page, 10 seconds per fetch, 30 page loads a minute
Limits: sizes, times and counts
Recolor (recolor.page) limits a page to 5 MB of HTML and gives a site 10 seconds to answer; stylesheets may be 2 MB each and 8 MB together, fonts and masks 10 MB. Each address gets 30 page loads a minute, and a palette holds 2 to 10 colors.
Last updated
src/worker/limits.ts, wrangler.jsonc, the app's store and the built engine, checked October 8, 2026| Limit | Value | Past the limit |
|---|---|---|
| HTML of a page from a web address | 5 MB | Not loaded: too large |
| Uploaded or dropped file | 5 MB, .html or .htm | Not loaded: too large |
| Time for a site to answer | 10 seconds | Not loaded: took too long |
| Redirects followed | 5 | Not loaded |
| One stylesheet | 2 MB, 8 seconds | Left as a link, read per element |
| Stylesheets per page | 60, 8 MB in all | The rest left as links |
| Everything a page pulls in | 15 seconds in all | The rest left as links |
Nested @import | 3 levels | Deeper imports left as links |
| Font or CSS mask through Recolor | 10 MB, 10 seconds | That font or mask is missing |
| Page loads per address | 30 a minute | Refused for a minute |
| Font and mask requests per address | 600 a minute | Refused for a minute |
| Prepared page in the cache | 60 seconds | Fetched again |
| Colors in a palette | 2 to 10 | Add and remove stop |
| Undo steps | 100 | The oldest step goes |
| Saved palettes, in this browser | 50 | The oldest goes |
| The engine script | 59.3 KB minified, 21.9 KB gzip | Budget 80 KB |
Page size and time
A page you load by address reaches Recolor through its Worker, which reads at most 5 MB of HTML. It counts the bytes as they arrive, so a page that declares a larger size is refused before it is read, and one that keeps sending stops at the limit. An uploaded or dropped file has the same ceiling of 5 MB; the app checks it before it sends anything. Past the limit the preview shows "The page is too large", with the line "Recolor loads pages and files up to 5 MB."
A site has 10 seconds to answer. If it is slower, the preview shows "The site took too long", with the line "It did not answer within 10 seconds. Try again, or try another page." Recolor follows up to 5 redirects, and checks every new address before it asks for it, as What Recolor stores and fetches explains. Every error message and what to do about it is on Loading a page.
Stylesheets, fonts and images
To read a page's colors, Recolor needs its CSS as text it may read, so the Worker fetches each stylesheet and puts it inline. One sheet may be 2 MB and take 8 seconds; a page may have 60 sheets and 8 MB of CSS in all, fetched within 15 seconds together. Imports inside a sheet are followed 3 levels deep.
A sheet past any of these stays a normal link. The page still looks right, but the engine cannot read that sheet's rules, so it repaints those elements one by one and their hover colors keep the original. The status line then names the unreadable sheets; How Recolor repaints a page has the details.
Fonts and CSS masks need a header that a sandboxed preview cannot get from other sites, so they pass through Recolor's asset route, up to 10 MB in 10 seconds each. Ordinary images, video and background images load straight from the site, with no limit from Recolor.
How many pages a minute
Each address gets 30 page loads a minute, counted over web addresses, uploads and samples together, and 600 font and mask requests a minute. Past it the preview shows "Too many pages in a short time", with the line "Wait a minute and try again." Pressing Space never counts: a new palette is computed in your browser and written into the page there.
The count runs on Cloudflare's rate limiting binding, which Cloudflare describes as permissive and eventually consistent, so it stops floods rather than the exact 31st load.
The same address with the same Scripts setting comes from a cache for 60 seconds, which makes a reload or a Retry fast. Uploaded files are never cached. Which sites load at all, and why some do not, is on Which sites load.
Palette, history and saved palettes
A palette holds 2 to 10 colors and starts with 5. The + between two swatches adds one until there are 10; the x on a swatch removes one until there are 2. The palette lives in the address bar, in the format of the URL hash, so a link carries it.
Undo and redo keep 100 steps of new palettes, edits, reorders and overrides; locking a color is not a step. Saved palettes stay in this browser's local storage, 50 at most, newest first; saving a palette again moves it to the top.
The engine
The engine is the script Recolor puts into the previewed page to read and repaint its colors. It is 59.3 KB minified and 21.9 KB gzipped, against a budget of 80 KB. Most of it is the color code that parses every CSS color syntax. How long it takes to read a real site is in the table on Which sites load.
Common questions
Can Recolor load a page larger than 5 MB?
No. The Worker stops reading at 5 MB of HTML, and an upload is checked against the same 5 MB before it is sent. Stylesheets, images and fonts do not count towards it.
Does every new palette count towards the limit of 30 a minute?
No. Only page loads count. A new palette, an undo or a moved swatch is computed in your browser and written into the page there, with no request to Recolor.
Can a palette have more than 10 colors?
No. A palette has 2 to 10 colors, in the app and in a shared link; a link with more is ignored.
Are saved palettes kept on Recolor's server?
No. They stay in your browser's local storage, up to 50. Another browser or a cleared browser has none; a link keeps a palette anywhere.
Does Recolor cache the pages I load?
Yes, for 60 seconds: the same address with the same Scripts setting comes from Cloudflare's cache within that minute. Uploaded files are never cached.
Is there a size limit for images on the page?
No. Images, video and background images load straight from the site. Only fonts and CSS masks pass through Recolor, up to 10 MB each.
Sources
- Rate limiting binding, Cloudflare Workers docs developers.cloudflare.com
- Cache API, Cloudflare Workers docs developers.cloudflare.com
- Window: localStorage property, MDN developer.mozilla.org