Uploading errors with GIFs and images (PNG, SVG, JPG)

Hi team,

We are encountering consistent issues when uploading media files, specifically GIFs and images over the past 3-4 months.

For GIFs, uploads fail entirely regardless of file size. We tested multiple GIF files with different sizes and sources, and none were successfully uploaded.

For images, the behavior is inconsistent. The issue does not appear to be related to file size, permission level, or file format. In several cases, larger files uploaded successfully, while smaller files of the same format failed. Also, I have the higher permission level (manager).

We also observed that when an upload error occurs, slightly modifying the image, such as changing the file size or cropping it, sometimes allows the same image to upload successfully. This happens across PNG, SVG, and JPG formats. We are aware of the media file size limits ( Media file size limits ).

Any additional diagnostics would be helpful.

Thanks in advance.

Are you self hosting? If so, dig into your server logs. And it’d be a good idea to include some more details about your setup if asking for help.

The page you linked is specific to the Ghost.org product. Are you hosting with them? If you’re in managed hosting, you should contact your host.

2 Likes

Sorry for the late response, yes, I confirmed that it was self-hosted and was able to check the error log. It says as follows:

2026-01-25 09:21:56.953	
----------------------------------------
2026-01-25 09:21:56.953	

2026-01-25 09:21:56.953	
    dba4ad80-f983-11f0-aa8c-1f2e39121a48
2026-01-25 09:21:56.953	
Error ID:
2026-01-25 09:21:56.953	

2026-01-25 09:21:56.953	
Too many attempts.
2026-01-25 09:21:56.953	

2026-01-25 09:21:56.953	
[2026-01-25 00:21:56] ERROR "GET /learn-api/ghost/api/content/posts/?key=116d1afcdf52fefb896b89a408&filter=visibility%3Apublic%2Btag%3Atrading-api%2Btag%3Ause-cases&include=authors%2Ctags&order=published_at+DESC&limit=6&page=1" 429 0ms
2026-01-25 09:21:56.952	

2026-01-25 09:21:56.952	
    at /var/lib/ghost/versions/5.96.2/node_modules/cors/lib/index.js:224:17
2026-01-25 09:21:56.952	
    at cors (/var/lib/ghost/versions/5.96.2/node_modules/cors/lib/index.js:188:7)
2026-01-25 09:21:56.952	
    at next (/var/lib/ghost/versions/5.96.2/node_modules/express/lib/router/index.js:280:10)
2026-01-25 09:21:56.952	
    at Function.process_params (/var/lib/ghost/versions/5.96.2/node_modules/express/lib/router/index.js:346:12)
2026-01-25 09:21:56.952	
    at /var/lib/ghost/versions/5.96.2/node_modules/express/lib/router/index.js:284:15
2026-01-25 09:21:56.952	
    at Layer.handle [as handle_request] (/var/lib/ghost/versions/5.96.2/node_modules/express/lib/router/layer.js:95:5)
2026-01-25 09:21:56.952	
    at Route.dispatch (/var/lib/ghost/versions/5.96.2/node_modules/express/lib/router/route.js:119:3)
2026-01-25 09:21:56.952	
    at next (/var/lib/ghost/versions/5.96.2/node_modules/express/lib/router/route.js:149:13)
2026-01-25 09:21:56.952	
    at Layer.handle [as handle_request] (/var/lib/ghost/versions/5.96.2/node_modules/express/lib/router/layer.js:95:5)
2026-01-25 09:21:56.952	
    at contentApiKey (/var/lib/ghost/versions/5.96.2/core/server/web/shared/middleware/brute.js:71:11)
2026-01-25 09:21:56.952	
    at module.exports.<anonymous> (/var/lib/ghost/versions/5.96.2/node_modules/express-brute/index.js:47:3)
2026-01-25 09:21:56.952	
    at keyFunc (/var/lib/ghost/versions/5.96.2/node_modules/express-brute/index.js:39:41)
2026-01-25 09:21:56.952	
    at module.exports.<anonymous> (/var/lib/ghost/versions/5.96.2/node_modules/express-brute/index.js:82:15)
2026-01-25 09:21:56.952	
    at MemoryStore.get (/var/lib/ghost/versions/5.96.2/node_modules/express-brute/lib/MemoryStore.js:38:35)
2026-01-25 09:21:56.952	
    at module.exports.<anonymous> (/var/lib/ghost/versions/5.96.2/node_modules/express-brute/index.js:146:44)
2026-01-25 09:21:56.952	
    at failCallback (/var/lib/ghost/versions/5.96.2/core/server/web/shared/middleware/api/spam-prevention.js:357:29)
2026-01-25 09:21:56.952	
TooManyRequestsError: Too many attempts.
2026-01-25 09:21:56.952	

2026-01-25 09:21:56.952	
----------------------------------------

It says HTTP 429, which means rate limited, right? Do we have a cap on how many media we can upload? I only updated 4 images in 1 mins.

You are self hosting, so you can set your own caps. But no, the default should not stop you from uploading a lot more than 4x per minute

I see. Thanks for the info! I’ll check with the engineering team internally to investigate this further