AI file guide

Fix Files Rejected by ChatGPT, Claude, or Gemini

Find out why an AI upload failed, fix the file if needed, and check whether the problem is with your account or the service.

4 min read Updated Aug 29, 2026
Different files being inspected locally and routed to targeted repairs before AI destinations.
Quick answer

What you need to know

Read the upload error and check the service's format and size limits. Convert, resize, or compress only if the file breaks one of those rules, then check that its content is still readable. If a small supported test file also fails, check your account limits, connection, and service status.

Best for
Anyone trying to upload an image, PDF, document, or audio file to an AI service.
Start with
Prepare a File for AI
Upload troubleshooting

What does the upload failure actually tell you?

Check the rules for the app or API you are using, inspect your file, and change only what the error calls for.

  1. Step 1

    Name the destination

    Consumer apps, projects, workspaces, and APIs can publish different file rules.

  2. Step 2

    Check the file

    Compare detected format, byte size, dimensions, animation, and relevant PDF properties with the current published rules.

A small supported test also fails

Check non-file causes

Review account access, quota, workspace policy, browser session, network, and service status.

About this visual: Illustrated diagnostic path. A local check narrows the problem but cannot guarantee acceptance or usable AI results.
Do this first

Fix a Failed AI Upload

Read the error first, then change only what needs fixing.

  1. 1

    Choose the app or API

    Select the service and the place you are uploading. Chats, projects, and APIs can have different file rules.

  2. 2

    Check format and size

    Compare the file's actual format, size, dimensions, and available PDF details with the service's published rules.

  3. 3

    Fix the identified problem

    Use the matching tool to convert, resize, compress, extract pages, or recognize scanned text. Inspect the result before trying again.

  4. 4

    Retry with the saved copy

    Upload the repaired copy once; if a small supported test file also fails, check quota, account access, policy, session, network, and service status.

01

Know What a Local Compatibility Check Can Prove

A browser can inspect concrete file properties, but it cannot promise that an external AI service will accept, index, understand, or answer accurately from the file.

  • Locally checkable properties include detectable format, byte size, image dimensions, animation state, and selected PDF page or text properties.
  • Published rules differ by product surface: ChatGPT image and general file uploads, Claude chats, projects and vision inputs, Gemini Apps, and API endpoints have separate limits.
  • Passing means the file meets the rules that were checked; it is not an acceptance, comprehension, or answer-quality guarantee.
Use the tool

Open Prepare a File for AI

Choose the AI service, check your file against its format and size rules, and open a tool to fix any mismatch.

02

Match the Repair to the Destination and Error

The safest repair preserves the source and changes only the property that conflicts with a current rule or a specific upload message.

  • ChatGPT's image guidance lists PNG, JPEG, and non-animated GIF with a 20 MB per-image limit, while general file uploads publish a separate 512 MB hard limit and document rules.
  • Claude's upload and vision documentation separates chat, project, PDF, and image constraints; use the rule for the surface you are using rather than mixing those limits.
  • Gemini Apps publishes file-count, file-size, duration, and account-dependent rules, while OpenAI transcription API inputs have their own supported media formats and endpoint limits.
  • Keep the original. Create a repair copy, then compare transparency, animation, page completeness, searchable text, readability, and audio playback as applicable.
03

Check Quality and Non-File Causes Before Repeating the Upload

Some problems cannot be reduced to a green or red file rule, so finish with a visual or listening check and one controlled retry.

  • Treat rotation, tiny text, dense charts, scan contrast, aggressive compression, and noisy audio as quality guidance that needs human review.
  • If the original and a small supported test file both fail, investigate account entitlements, quotas, workspace policy, browser session, network, and service availability.
  • Recheck official documentation when a platform changes behavior; AI upload limits and supported surfaces can change independently.
Quick questions

AI File Compatibility FAQ

Why does ChatGPT reject an image that opens on my computer?

The local app may support a format or file size that the ChatGPT upload surface does not. Check the detected format and byte size first, then orientation, animation, dimensions, and the exact upload error.

Does passing the checker mean Claude or Gemini will accept my file?

No. A local check can show that selected published file rules are met, but it cannot see account limits, workspace policy, outages, or every server-side validation rule.

Should I convert every AI image upload to JPG?

No. Convert only when the destination rejects the source format and a still JPG copy is appropriate. JPG removes transparency and animation and can introduce compression artifacts.

Why can an AI upload a PDF but miss text or charts inside it?

Upload acceptance is different from content extraction. Scanned pages, tiny text, rotation, complex layouts, and product-specific PDF handling can reduce usable results even when the file passes basic checks.

How do I know whether the file or the AI service is failing?

Retry with a small supported test file in the same account and session. If that also fails, account access, quota, policy, network, session, or service availability is more likely than the original file.

Can I use the same limits for an AI website and its API?

Do not assume so. Consumer apps, projects, enterprise workspaces, and API endpoints can publish different supported formats, size limits, page limits, and duration rules.

Remember this

The short version

  • Check destination-specific rules before converting the file.
  • Separate hard, locally inspectable properties from quality guidance and non-file failures.
  • A passed local check narrows the problem; only the destination can confirm upload acceptance and usable results.
  • Preserve the source and make the smallest repair that the evidence supports.
Ready to work

Open the tool you need

Choose the tool for the change your file needs.

  • Image Resizer — Reduce image dimensions when a published pixel limit or an oversized scan is the specific problem.
  • Compress PDF — Create a smaller PDF copy when file size is the verified blocker, then inspect readability before uploading it.
(function() { const title = document.querySelector('h1'); const actionRegion = document.querySelector('.action-container, .action-body'); if (!title || !actionRegion || title.querySelector('.tool-hero-mark')) return; const path = window.location.pathname.replace(/\/$/, ''); if (!path || path === '/' || path.startsWith('/converters') || path === '/about' || path === '/contact' || path === '/support' || path === '/privacy-policy') { return; } const lowerKey = path.replace(/^\/(video|audio)\//, '').replace(/^\//, '').toLowerCase(); if (!lowerKey) return; let category = 'image'; if (path.startsWith('/video/')) category = 'video'; if (path.startsWith('/audio/')) category = 'audio'; const isUtility = lowerKey.includes('ascii') || lowerKey === 'check-my-file' || lowerKey === 'prepare-for-ai' || lowerKey.includes('resizer') || lowerKey.includes('metadata') || lowerKey.includes('compress') || lowerKey.includes('base64') || lowerKey.includes('background') || lowerKey.includes('crop') || lowerKey.includes('watermark') || lowerKey.includes('remove-pages') || lowerKey.includes('unlock') || lowerKey.includes('protect') || lowerKey.includes('editor') || lowerKey.includes('excel') || lowerKey.includes('upscale') || lowerKey.includes('merge') || lowerKey.includes('split') || lowerKey.includes('ocr') || lowerKey.includes('sign') || lowerKey.includes('trim') || lowerKey.includes('favicon'); if (category === 'image' && isUtility) category = 'tool'; const labelMap = { jpg: 'JPG', jpeg: 'JPEG', png: 'PNG', gif: 'GIF', svg: 'SVG', pdf: 'PDF', heic: 'HEIC', jfif: 'JFIF', webp: 'WEBP', bmp: 'BMP', ico: 'ICO', word: 'DOCX', docx: 'DOCX', excel: 'Excel', xls: 'XLS', xlsx: 'Excel', mp4: 'MP4', mov: 'MOV', avi: 'AVI', mp3: 'MP3', aac: 'AAC', flac: 'FLAC', wav: 'WAV', webm: 'WEBM', cr2: 'CR2', arw: 'ARW', nef: 'NEF', raf: 'RAF' }; const formatLabel = (value) => labelMap[value] || value.toUpperCase(); function getFormatMeta(key) { if (key === 'check-my-file') { return {primary: 'Check', secondary: 'File', connector: 'dot'}; } if (key === 'prepare-for-ai') { return {primary: 'Prepare', secondary: 'AI', connector: 'dot'}; } const directMatch = key.match(/^([a-z0-9]+)-to-([a-z0-9]+)$/); const convertMatch = key.match(/^convert-([a-z0-9]+)-to-([a-z0-9]+)$/); const convertToMatch = key.match(/^convert-to-([a-z0-9]+)$/); if (directMatch) { return {primary: formatLabel(directMatch[1]), secondary: formatLabel(directMatch[2]), connector: 'arrow'}; } if (convertMatch) { return {primary: formatLabel(convertMatch[1]), secondary: formatLabel(convertMatch[2]), connector: 'arrow'}; } if (convertToMatch) { return {primary: 'Any', secondary: formatLabel(convertToMatch[1]), connector: 'arrow'}; } if (key.startsWith('compress-')) { return {primary: 'Compress', secondary: formatLabel(key.replace('compress-', '')), connector: 'dot'}; } if (key.includes('base64') && key.includes('decode')) { return {primary: 'Base64', secondary: 'Decode', connector: 'dot'}; } if (key.startsWith('base64-to-')) { return {primary: 'Base64', secondary: formatLabel(key.replace('base64-to-', '')), connector: 'arrow'}; } if (key.includes('-to-base64')) { const from = key.replace('convert-', '').replace('-to-base64', ''); return {primary: formatLabel(from), secondary: 'Base64', connector: 'arrow'}; } if (key.includes('base64')) { return {primary: 'Base64', secondary: 'Encode', connector: 'dot'}; } if (key.includes('ascii')) { return {primary: 'ASCII', secondary: 'Art', connector: 'dot'}; } if (key.includes('resizer')) { return {primary: 'Resize', secondary: 'Pixels', connector: 'dot'}; } if (key.includes('remove-pages')) { return {primary: 'Remove', secondary: 'Pages', connector: 'dot'}; } if (key.includes('crop') && key.includes('pdf')) { return {primary: 'Crop', secondary: 'PDF', connector: 'dot'}; } if (key.includes('pdf-editor')) { return {primary: 'Edit', secondary: 'PDF', connector: 'dot'}; } if (key.includes('unlock')) { return {primary: 'Unlock', secondary: 'PDF', connector: 'dot'}; } if (key.includes('protect')) { return {primary: 'Protect', secondary: 'PDF', connector: 'dot'}; } if (key.includes('pdf') && key.includes('metadata')) { return {primary: 'Clean', secondary: 'Metadata', connector: 'dot'}; } if (key.includes('metadata')) { return {primary: 'EXIF', secondary: 'Clean', connector: 'dot'}; } if (key.includes('background')) { return {primary: 'Remove', secondary: 'Background', connector: 'dot'}; } if (key.includes('crop')) { return {primary: 'Crop', secondary: 'Image', connector: 'dot'}; } if (key.includes('watermark')) { return {primary: 'Watermark', secondary: 'Image', connector: 'dot'}; } if (key.includes('upscale')) { return {primary: 'Upscale', secondary: 'Image', connector: 'dot'}; } if (key.includes('merge')) { return {primary: 'Merge', secondary: 'PDF', connector: 'dot'}; } if (key.includes('split')) { return {primary: 'Split', secondary: 'PDF', connector: 'dot'}; } if (key.includes('ocr')) { return {primary: 'OCR', secondary: 'PDF', connector: 'dot'}; } if (key.includes('sign')) { return {primary: 'Sign', secondary: 'PDF', connector: 'dot'}; } if (key.includes('trim')) { return {primary: 'Trim', secondary: 'Video', connector: 'dot'}; } return {primary: 'Tool', secondary: '', connector: 'dot'}; } function getIconClass(key, categoryName) { const toFormat = key.split('-to-')[1]; if (key === 'check-my-file') return 'bi-file-earmark-check'; if (key === 'prepare-for-ai') return 'bi-ui-checks-grid'; if (key.includes('ascii')) return 'bi-textarea-t'; if (key.includes('resizer')) return 'bi-aspect-ratio'; if (key.includes('metadata')) return 'bi-shield-slash'; if (key.includes('compress')) return 'bi-file-earmark-zip'; if (key.includes('base64')) return 'bi-journal-code'; if (key.includes('background')) return 'bi-scissors'; if (key.includes('crop')) return 'bi-crop'; if (key.includes('watermark')) return 'bi-type'; if (key.includes('remove-pages')) return 'bi-trash'; if (key.includes('unlock')) return 'bi-unlock'; if (key.includes('protect')) return 'bi-lock'; if (key.includes('editor')) return 'bi-pencil-square'; if (key.includes('excel')) return 'bi-file-earmark-spreadsheet'; if (key.includes('upscale')) return 'bi-arrows-angle-expand'; if (key.includes('merge')) return 'bi-files'; if (key.includes('split')) return 'bi-scissors'; if (key.includes('ocr')) return 'bi-file-earmark-text'; if (key.includes('sign')) return 'bi-pen'; if (key.includes('trim')) return 'bi-scissors'; if (toFormat) { switch (toFormat) { case 'jpg': case 'jpeg': return 'bi-filetype-jpg'; case 'png': return 'bi-filetype-png'; case 'gif': return 'bi-filetype-gif'; case 'svg': return 'bi-filetype-svg'; case 'pdf': return 'bi-filetype-pdf'; case 'word': case 'docx': return 'bi-file-earmark-word'; case 'xls': case 'xlsx': case 'excel': return 'bi-file-earmark-spreadsheet'; case 'heic': return 'bi-filetype-heic'; case 'webp': return 'bi-filetype-webp'; case 'bmp': return 'bi-filetype-bmp'; case 'ico': return 'bi-file-image'; case 'mp4': return 'bi-filetype-mp4'; case 'mov': return 'bi-filetype-mov'; case 'mp3': return 'bi-filetype-mp3'; case 'wav': return 'bi-filetype-wav'; case 'avi': return 'bi-filetype-avi'; default: return 'bi-file-earmark-image'; } } if (categoryName === 'video') return 'bi-film'; if (categoryName === 'audio') return 'bi-music-note-beamed'; if (categoryName === 'image') return 'bi-file-earmark-image'; return 'bi-gear'; } const formatMeta = getFormatMeta(lowerKey); const connectorIcon = formatMeta.connector === 'arrow' ? 'bi-arrow-right-short' : 'bi-dot'; const iconClass = getIconClass(lowerKey, category); const mark = document.createElement('span'); mark.className = `tool-hero-mark converter-mark converter-mark--${category}`; const iconWrap = document.createElement('span'); iconWrap.className = 'converter-mark__icon'; const icon = document.createElement('i'); icon.className = iconClass; iconWrap.appendChild(icon); mark.appendChild(iconWrap); const formatWrap = document.createElement('span'); formatWrap.className = 'converter-format'; const primary = document.createElement('span'); primary.className = 'format-pill'; primary.textContent = formatMeta.primary; formatWrap.appendChild(primary); if (formatMeta.secondary) { const connector = document.createElement('span'); connector.className = 'format-connector'; const connectorIconEl = document.createElement('i'); connectorIconEl.className = connectorIcon; connector.appendChild(connectorIconEl); formatWrap.appendChild(connector); const secondary = document.createElement('span'); secondary.className = 'format-pill format-pill--secondary'; secondary.textContent = formatMeta.secondary; formatWrap.appendChild(secondary); } mark.appendChild(formatWrap); title.classList.add('tool-hero-title'); title.prepend(mark); })();