Skip to main content
The eaia website embeds public binary assets (Rerun .rrd recordings, manim mp4s, demo previews) from https://artifacts.aegeanai.com, a public Cloudflare R2 bucket (eaia-artifacts) with a custom domain binding.

Canonical setup + automation

The full bucket setup (custom domain, CORS, Cloudflare Access bypass, API tokens) and the production upload helper live in the auraison repo. Don’t re-derive them here.
  • Serve Rerun recordings publicly with Cloudflare R2 — 8-step bucket setup
  • auraison/data-plane/lakehouse/artifacts.pyupload_artifact() for lakehouse-registered, lineage-tracked uploads (archival MinIO + R2 + DuckLake catalog in one call)
  • auraison/infra/terraform/stacks/cloudflare/main.tf declares the bucket, its artifacts.aegeanai.com custom domain, and the public-access bypass. Change them in terraform, not the dashboard
  • R2 credentials live in 1Password, Work vault, item R2-eaia-artifacts-token, and are mirrored into auraison/data-plane/.env as R2_ENDPOINT, R2_ACCESS_KEY, R2_SECRET_KEY, R2_BUCKET, R2_PUBLIC_DOMAIN. Treat 1Password as the source of truth; the .env copy has gone stale before
  • For the S3 API, ACCESS_KEY_ID is the Cloudflare token id (from /accounts/<id>/tokens/verify) and SECRET_ACCESS_KEY is sha256 of the token value. Without that derivation a valid token looks dead, returning AccessDenied on every call
For Cloudflare-aware Claude Code sessions, install the official skill package:
That gives Claude the cloudflare and wrangler skills — covering R2 buckets, Workers, KV, D1, and the wrangler r2 object put upload path.

One-off uploads of website media (manim mp4s, preview images)

For media that’s purely a docs-site asset (no lakehouse lineage needed), use wrangler directly:
The --remote flag is required to write to the real bucket (without it, wrangler writes to a local simulator).

Key-naming convention

Public URL is https://artifacts.aegeanai.com/<key>. Keep the <type>/<topic>/<filename> shape: Lowercase, kebab-case for path segments. Filenames may follow the generator’s convention (PascalCase manim Scene class names, etc.).

Embedding in MDX

Manim mp4

muted + playsInline are required for any mobile-browser auto-play. Drop both for narrated full-frame demos.

Rerun recording

Pin the viewer version (/version/0.29.2/) to the Rerun SDK that wrote the recording — newer .rrd files won’t load in older viewers (lz4 decode error). See the auraison doc Step 7 for the exact symptom and fix.

Cache invalidation

Wrangler defaults set R2 objects with a long max-age. Treat artifacts as content-addressed: re-rendering a manim scene should land under a new key (version suffix or new topic) rather than overwriting. The Cloudflare edge will keep stale copies of overwritten keys for hours-to-a-day. If you must overwrite, follow up with a cache purge from the Cloudflare dashboard or wrangler cache purge.