remotion-dev/remotion · error · Error

The repository contains an unsupported path: ${path}

Error message

The repository contains an unsupported path: ${path}

What it means

Before downloading anything, loadGitHubRepository runs every tree path through validateRepositoryPath(): no backslashes, no NUL bytes, and no empty, '.', or '..' path segments. This is a security guard against path traversal and escape when repository files are written into the virtual project and OPFS storage. A single offending filename blocks the entire repository from loading.

Source

Thrown at packages/browser-studio/src/load-github-repository.ts:115

	return response.statusText || `HTTP ${response.status}`;
};

const encodePath = (path: string) =>
	path
		.split('/')
		.map((segment) => encodeURIComponent(segment))
		.join('/');

const validateRepositoryPath = (path: string) => {
	if (
		path.includes('\\') ||
		path.includes('\0') ||
		path
			.split('/')
			.some((segment) => segment === '' || segment === '.' || segment === '..')
	) {
		throw new Error(`The repository contains an unsupported path: ${path}`);
	}
};

const decodeTextFile = (contents: Uint8Array) => {
	if (contents.includes(0)) {
		return null;
	}

	try {
		return new TextDecoder('utf-8', {fatal: true}).decode(contents);
	} catch {
		return null;
	}
};

export const loadGitHubRepository = async ({
	onProgress,
	repoUrl,

View on GitHub (pinned to 10db9de073)

Solutions

  1. Rename the offending file in the repository (git mv 'src\video.ts' src/video.ts) and push, then reload
  2. Remove files with backslashes or control characters in their names from the repo
  3. If you do not own the repo, it cannot be loaded in Browser Studio - clone it locally and fix the names first

Example fix

// before: repo tree contains a blob path 'src\video.ts'
// loadGitHubRepository({repoUrl}) -> Error: The repository contains an unsupported path: src\video.ts

// after: fix the filename in the repo
git mv 'src\video.ts' src/video.ts
git commit -m 'fix path separator' && git push
Defensive patterns

Strategy: try-catch

Try / catch

try {
  await loadGitHubRepository({repoUrl, signal});
} catch (e) {
  const msg = String((e as Error).message);
  if (/unsupported path/.test(msg)) {
    // extract the path from the message and tell the repo owner to rename it (git mv) and push
  } else throw e;
}

Prevention

When it happens

Trigger: Loading a GitHub repository whose tree contains any blob path with a backslash (e.g. 'src\video.ts', usually created via the GitHub API by tooling), a NUL byte, or an empty/'.'/'..' segment. The check runs over every blob entry before the file-count and size checks.

Common situations: Third-party repositories you do not control, where CI or scripts committed filenames containing backslashes or control characters; almost never caused by the Browser Studio user's own actions.

Understand the failure class

Background: Path traversal blocked: "path escapes the workspace" and "outside site root" errors when a path will not stay inside its allowed directory — this error's family across 26 libraries.

Related errors


AI-assisted analysis of remotion-dev/remotion@10db9de073 (2026-08-22). Data as JSON: /api/errors/aeedf7c30f666da2. Report an issue: GitHub.