Private by design. Processed in your browser on your device. No account required. How it works
AI file guide

Fix Files Rejected by ChatGPT, Claude, or Gemini

Check a file against published AI upload rules, choose the smallest useful repair, and tell a file problem from an account, quota, network, or service failure.

5 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

Start with the destination's current rules, then check the file's detected format, size, image dimensions, and PDF page or text properties that can be inspected locally. Treat rotation, tiny text, scan quality, and heavy compression as quality guidance. If a compliant test file also fails, investigate account, quota, policy, network, or service status instead of repeatedly converting the original.

Best for
People preparing images, PDFs, documents, or audio for ChatGPT, Claude, Gemini, or an AI transcription workflow.
Start with
Prepare a File for AI
Privacy
Processed in your browser
Compatibility repair map

What does the upload failure actually tell you?

Check the exact AI product and upload surface, inspect only the file properties that can be checked locally, and make the smallest repair supported by the evidence.

  1. Step 1

    Name the destination

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

  2. Step 2

    Check local properties

    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

Repair an AI Upload Without Guessing

Use the same order for an image, PDF, document, or audio file so each change answers a specific question.

  1. 1

    Choose the exact AI destination

    Select the product and upload surface you are actually using because ChatGPT, Claude, Gemini, and their APIs do not share one universal rule set.

  2. 2

    Inspect locally checkable rules

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

  3. 3

    Apply one targeted repair

    Convert, resize, compress, extract pages, or improve searchable text only when the check or exact error points to that change.

  4. 4

    Retry and separate service failures

    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.
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.
Go deeper

Fix a PDF That Will Not Upload

Find the likely cause of a failed PDF upload, including file size, password protection, damage, filename issues, or unsupported document features.

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

Pick the step that matches your file. Each tool runs in your browser.

(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); })();