ContentVault
Content packs for Lucky Robots. Each pack contains a metadata.yaml, a thumbnail.png, and a .zip with the pack contents.
Clone
git clone https://huggingface.co/luckyrobots/ContentVault
Content Packs
| Pack | Description |
|---|---|
| Bunglalow | Bungalow environment |
| Go2VelocityTracking | Unitree Go2 velocity tracking |
| Loft | Loft environment |
| MujocoExample | MuJoCo simulation example |
| Office | Office environment |
| Oscillator | Oscillator environment |
| Panda | Franka Panda robot |
| Piper | Piper robot |
| PiperBlockStacking | Piper block stacking task |
| PiperPickPlace | Piper pick and place task |
| PiperUnscrewCap | Piper cap unscrewing task |
| PodGallery | Editable native Pod gallery with materials, articulated exhibits and elastic cables (2026.3+) |
| SO100PickAndPlace | SO-100 pick and place task |
| Skies-Vol-1 | Sky HDRIs volume 1 |
| UnitreeG1 | Unitree G1 humanoid |
| UnitreeGo2 | Unitree Go2 quadruped |
| UnitreeH1 | Unitree H1 humanoid model (developer pack; no controller) |
| UnitreeH2 | Standard Unitree H2 humanoid (developer pack; fixed hands, no controller) |
| UnitreeH2PlusSharpa | Unitree H2 Plus with articulated Sharpa hands (developer pack; no controller) |
| Welcome | Welcome / intro pack |
Project engine versions
Project packs that require a legacy-to-Pod migration have separate archives for
engines through 2026.2 and for 2026.3 onward. The newer folder and ZIP names append Pod to the
original pack ID, while keeping the same display name and packs/devpacks
membership. For example, CupCleanerPod/CupCleanerPod.zip contains the Pod
version of CupCleaner. Welcome and the existing WelcomePod already form
this pair; both are indexed under packs.
EngineVersion.Max is exclusive: the original packs use Max: "2026.3"
to include every 2026.2 release. The new packs use Min: "2026.3". Both use
Behaviour: Hide, so incompatible variants disappear instead of becoming disabled
cards. Existing lower bounds on the original packs are preserved.
The new archives use Pod motion and animation graphs, retaining asset handles, scene inputs, clip bindings and script controls. Archives retained for legacy engines are unchanged.
SimplePick already uses Pod and remains one pack with Min: "2026.3" and
Behaviour: Hide. BlankProject contains no graphs, remains one pack without
an engine-version restriction, and continues to serve the editor's starter cards.
CDN
All content packs are served globally via Cloudflare CDN:
https://contentvault.luckyrobots.com/{PackName}/{filename}
For example:
https://contentvault.luckyrobots.com/Loft/metadata.yaml
https://contentvault.luckyrobots.com/Loft/Loft.zip
How sync works
A Cloudflare Worker (worker/) listens for webhooks from HuggingFace. When a push is made to this repo, the Worker:
- Parses the commit diff to find changed files
- Streams each file directly to Cloudflare R2 (no buffering, handles large zip files)
- Deletes removed files from R2
- R2 serves the files through Cloudflare's CDN with a 30-day cache at 300+ edge locations worldwide
Worker setup
cd worker
npm install
Secrets (set via wrangler)
npx wrangler secret put HF_WEBHOOK_SECRET
npx wrangler secret put HF_TOKEN
Deploy
npx wrangler deploy
Setup
# Install huggingface_hub with fast upload backend
pip install -U "huggingface_hub[hf_xet]"
# Login (requires write-access token from https://huggingface.co/settings/tokens)
hf auth login
CLI Commands
Upload entire folder
hf upload luckyrobots/ContentVault <local-folder> . --commit-message "Your message"
Upload a single pack/subfolder
hf upload luckyrobots/ContentVault <local-folder>/<pack-name> <pack-name> --commit-message "Add <pack-name>"
Upload a single file
hf upload luckyrobots/ContentVault <local-file> <path-in-repo> --commit-message "Add file"
Upload large folder (resumable, multi-threaded, auto-retry)
hf upload-large-folder luckyrobots/ContentVault <local-folder>
Delete files remotely
hf upload luckyrobots/ContentVault . . --include="" --delete="<folder-name>/*" --commit-message "Remove <folder-name>"
Tips
- Resumable uploads:
upload_large_folderandhf upload-large-folderare resumable. If interrupted, run the same command again. - Don't use raw
git pushfor large files — use the CLI/API instead. They handle LFS/Xet automatically. - Write token required: Tokens default to read-only. Enable write access at https://huggingface.co/settings/tokens.
- 50 GB max per file on HuggingFace. Split larger files before uploading.
- Ignore patterns: Use
--includeand--excludeto filter what gets uploaded.