Upload R2
Upload large Remotion repository assets to the Cloudflare R2 bucket behind remotion.media and replace local public/ assets with hosted URLs. Use when a file is too large for Git or when a PR should avoid committing media binaries by hosting them on remotion.media.
- Skill ID
- remotion-dev/remotion/upload-r2
- Publisher
- remotion-dev
- Repository
- remotion
- Installs
- 0
- Files
- 1
- Synced
- Sep 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
remotion-dev/remotion/upload-r2Installs these files- SKILL.md
What this skill tells the agent
Upload R2 Asset
Use this for large media assets that should be hosted on https://remotion.media/ instead of committed to Git.
Workflow
- Find the main worktree: ``
bash git worktree list --porcelain`Prefer the worktree onrefs/heads/main, usually/Users/jonathanburger/remotion`.
- Load R2 credentials from the main worktree: ``
bash --env-file=/Users/jonathanburger/remotion/packages/remotion-media/.env`Do not print secret values. The required variables areAWS_ACCESS_KEY_IDandAWS_SECRET_ACCESS_KEY`.
- Upload the file to the
parser-mediabucket using Bun's S3-compatible client: ``bash bun --env-file=/Users/jonathanburger/remotion/packages/remotion-media/.env -e "import {S3Client} from 'bun'; const filePath='<local-file>'; const key='<remote-file-name>'; const client=new S3Client({accessKeyId:Bun.env.AWS_ACCESS_KEY_ID, secretAccessKey:Bun.env.AWS_SECRET_ACCESS_KEY, endpoint:'https://2fe488b3b0f4deee223aef7464784c46.r2.cloudflarestorage.com', bucket:'parser-media'}); const file=Bun.file(filePath); if (await client.exists(key)) { const stat=await client.stat(key); if (stat.size===file.size) { console.log('exists-same-size', key, file.size); process.exit(0); } } await client.write(key, file); const stat=await client.stat(key); console.log('uploaded', key, stat.size);"``
- Verify the public URL: ``
bash curl -I --fail https://remotion.media/<remote-file-name>``
- Replace local asset usage with the hosted URL and delete the local binary.
Do not wrap remote URLs in staticFile(): staticFile() rejects http:// and https:// URLs. Use the URL string directly, for example:
<Video src="https://remotion.media/example.mp4" />- Run the focused lint or stylecheck for touched packages, then commit and push.
More from remotion-dev
Use this skill in a project
Open any RiverX project, search the Skills panel for remotion-dev/remotion/upload-r2, and install it in one click.
