{"record":{"id":"5eb91a96bbfc9d0c","repo":"remotion-dev/remotion","slug":"inputtypefilereader-only-supports-file-objects","errorCode":null,"errorMessage":"`inputTypeFileReader` only supports `File` objects","messagePattern":"`inputTypeFileReader` only supports `File` objects","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/media-parser/src/readers/from-web-file.ts","lineNumber":10,"sourceCode":"import type {\n\tCreateAdjacentFileSource,\n\tMediaParserReaderInterface,\n\tReadContent,\n\tReadWholeAsText,\n} from './reader';\n\nexport const webFileReadContent: ReadContent = ({src, range, controller}) => {\n\tif (typeof src === 'string' || src instanceof URL) {\n\t\tthrow new Error('`inputTypeFileReader` only supports `File` objects');\n\t}\n\n\tconst part =\n\t\trange === null\n\t\t\t? src\n\t\t\t: typeof range === 'number'\n\t\t\t\t? src.slice(range)\n\t\t\t\t: src.slice(range[0], range[1] + 1);\n\n\tconst stream = part.stream();\n\tconst streamReader = stream.getReader();\n\n\tif (controller) {\n\t\tcontroller._internals.signal.addEventListener(\n\t\t\t'abort',\n\t\t\t() => {\n\t\t\t\tstreamReader.cancel();\n\t\t\t},","sourceCodeStart":1,"sourceCodeEnd":28,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/media-parser/src/readers/from-web-file.ts#L1-L28","documentation":"Thrown by webFileReadContent when src is a string or URL. The webFileReader is designed exclusively for File/Blob objects and uses Blob.prototype.slice/.stream, which do not exist on strings or URLs. Passing a URL/string indicates the wrong reader was selected.","triggerScenarios":"Calling parseMedia with srcType 'web-file' (or webFileReader) while passing a URL string or object URL instead of a File/Blob. The reader immediately rejects because it cannot slice/stream a string.","commonSituations":"Selecting inputTypeFileReader/webFileReader for a remote URL instead of fetchReader. Forgetting to wrap a fetched response body into a Blob. Mixing up srcType values when porting between local-file and remote-URL code paths.","solutions":["Use fetchReader for http(s) URL strings and URL objects.","If you have a File from <input type=file>, keep webFileReader; do not pass object URLs to it.","If you only have an object URL string, fetch it into a Blob first, or switch the reader to fetchReader."],"exampleFix":"// before\nawait parseMedia({ src: 'https://.../video.mp4', fields: {...} }); // web-file reader\n\n// after\nawait parseMedia({ src: 'https://.../video.mp4', srcType: 'fetch', fields: {...} });","handlingStrategy":"validation","validationCode":"if (typeof src === 'string' || src instanceof URL) throw new TypeError('webFileReader requires a File/Blob');\nawait parseMedia({ src, srcType: 'web-file', fields });","typeGuard":"const isFileOrBlob = (s: unknown): s is Blob => typeof Blob !== 'undefined' && s instanceof Blob;","tryCatchPattern":"try { await parseMedia({ src, srcType: 'web-file', fields }); } catch (e) { if (/only supports `File` objects/.test(String((e as Error).message))) { /* switch to fetchReader */ } else throw e; }","preventionTips":["Use webFileReader only for File/Blob inputs from <input type=file> or fetch-blob.","Route URLs through fetchReader.","Centralize srcType selection by src type."],"tags":["media-parser","reader","web-file","blob","type-validation"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}