Upload R2 Asset
SkillFiles & storageLets your agent upload large media files to Cloudflare R2 and swap local assets for hosted URLs.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Upload R2 Asset skill
About this capability
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.
What this skill tells your AI
The instructions your AI receives, as published by remotion-dev/remotion in .agents/skills/upload-r2/SKILL.md and read by ahel’s review.
Use this for large media assets that should be hosted on https://remotion.media/ instead of committed to Git.
Workflow
-
Find the main worktree:
git worktree list --porcelainPrefer the worktree on
refs/heads/main, usually/Users/jonathanburger/remotion. -
Load R2 credentials from the main worktree:
--env-file=/Users/jonathanburger/remotion/packages/remotion-media/.envDo not print secret values. The required variables are
AWS_ACCESS_KEY_IDandAWS_SECRET_ACCESS_KEY. -
Upload the file to the
parser-mediabucket using Bun's S3-compatible client: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:
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()rejectshttp://andhttps://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.
Signals
- GitHub stars
- 59k
- Forks
- 4k
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
upload-r2- Source
- github.com/remotion-dev/remotion