{"record":{"id":"b0879392d46311f5","repo":"remotion-dev/remotion","slug":"owner-repo-is-larger-than-the-100-mb-browser","errorCode":null,"errorMessage":"${owner}/${repo} is larger than the 100 MB Browser Studio limit.","messagePattern":"(.+?)/(.+?) is larger than the 100 MB Browser Studio limit\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/browser-studio/src/load-github-repository.ts","lineNumber":186,"sourceCode":"\tconst fileEntries = tree.tree.filter(\n\t\t(entry): entry is GitHubTreeEntry & {type: 'blob'} => entry.type === 'blob',\n\t);\n\tfor (const file of fileEntries) {\n\t\tvalidateRepositoryPath(file.path);\n\t}\n\n\tif (fileEntries.length > maximumRepositoryFiles) {\n\t\tthrow new Error(\n\t\t\t`${owner}/${repo} has ${fileEntries.length.toLocaleString()} files. Browser Studio supports up to ${maximumRepositoryFiles.toLocaleString()}.`,\n\t\t);\n\t}\n\n\tconst totalBytes = fileEntries.reduce(\n\t\t(total, entry) => total + (entry.size ?? 0),\n\t\t0,\n\t);\n\tif (totalBytes > maximumRepositoryBytes) {\n\t\tthrow new Error(\n\t\t\t`${owner}/${repo} is larger than the 100 MB Browser Studio limit.`,\n\t\t);\n\t}\n\n\tlet loadedBytes = 0;\n\tlet loadedFiles = 0;\n\tconst files: Record<string, string> = {};\n\tconst publicFiles: Record<string, VirtualProjectPublicFile> = {};\n\tconst hasPublicFiles = fileEntries.some((file) =>\n\t\tfile.path.startsWith('public/'),\n\t);\n\tconst publicFileStorage = hasPublicFiles\n\t\t? await createBrowserStudioProjectStorage()\n\t\t: null;\n\tconst totalFiles = fileEntries.length;\n\tconst reportDownloadProgress = () =>\n\t\tonProgress?.({\n\t\t\tloadedBytes,","sourceCodeStart":168,"sourceCodeEnd":204,"githubUrl":"https://github.com/remotion-dev/remotion/blob/10db9de07356446fb0edb3c3ae211369b693d18b/packages/browser-studio/src/load-github-repository.ts#L168-L204","documentation":"The declared size of every blob in the tree is summed and compared against maximumRepositoryBytes = 100 MB (104,857,600 bytes). Repositories whose tracked files total more than that are rejected before downloading starts, because every byte would have to be fetched into browser memory or OPFS storage.","triggerScenarios":"Calling loadGitHubRepository on a repo where the sum of tree entry sizes (entry.size) exceeds 100MB - typically committed video/audio assets, PSDs, or large datasets. The reduce() over fileEntries crosses maximumRepositoryBytes and the load aborts before any fetch.","commonSituations":"Asset-heavy Remotion projects with committed MP4s or image sequences; repositories that bundle large model or data files; users migrating a desktop-size project into Browser Studio.","solutions":["Reduce total tracked size below 100MB by moving large media out of the repository","Remove large binaries from git history's tip (and avoid committing node_modules)","Load a lighter branch or start from a minimal template and re-add assets selectively"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  await loadGitHubRepository({repoUrl, onProgress});\n} catch (e) {\n  if (/100 MB Browser Studio limit/.test(String((e as Error).message))) {\n    // guide the user to move large media out of the repo (host externally or use a lighter branch)\n  } else throw e;\n}","preventionTips":["Do not commit large binaries; keep total tracked size under 100MB","Strip assets before sharing a repo for browser loading","Remember the limit sums every blob's declared size, so many medium files count too"],"tags":["browser-studio","github","repository-size","size-limit"],"backgroundTag":"repository-size-limit-exceeded","analyzedSha":"10db9de07356446fb0edb3c3ae211369b693d18b","analyzedAt":"2026-08-22T21:45:17.748Z","contentChangedAt":"2026-08-22T21:45:17.748Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}