# openalice-cdn

> nginx-served static asset bucket — bundled BGM, SFX, scene backgrounds, and default VRM consumed by live / persona / app / radio.

## At a glance
| field | value |
|---|---|
| kind | `service` |
| priority | `P2` |
| default branch | `mvp` |
| last activity | 2026-07-07T04:16:14+00:00 |
| features catalogued | **3** |
| runtime deps declared | **0** |

## Manifest
`.atlas-deps.yml` — parsed cleanly: **yes**

### Consumed env
- `CDN_PUBLIC_HOST`

### Exposes
- `docker_image` — openalice-cdn
- `http_endpoint` — https://cdn.blal.pro/audio/bgm/*
- `http_endpoint` — https://cdn.blal.pro/audio/sfx/*
- `http_endpoint` — https://cdn.blal.pro/scenes/*
- `http_endpoint` — https://cdn.blal.pro/vrm/*
- `http_endpoint` — https://cdn.blal.pro/avatars/*

## Env drift

**Code reads, manifest omits (1):**
- `DOMAIN`

**Manifest declares, code unused (1):**
- `CDN_PUBLIC_HOST`

## Live reachability
- last probe: **up** · `https://cdn.blal.pro` · HTTP 200 · 28ms
- uptime 24h: **100.0%**

## Features (3)

### cdn/deploy
- **`cdn.compose.deploy`** · _stable_ · since 0.1.0 — docker-compose.yml — local dev nginx:alpine bound to host:8090 with the assets dir read-only. Production uses the umbrella compose with Traefik labels.  
  *docker-compose.yml:3*

### cdn/nginx
- **`cdn.nginx.serve`** · _stable_ · since 0.1.0 — nginx static-asset server — cache-control immutable, CORS *, plain-text 404. Routes /audio /vrm /scenes /avatars under cdn.${DOMAIN}.  
  *nginx.conf:4*

### cdn/tools
- **`cdn.tools.placeholders`** · _stable_ · since 0.1.0 — generate-placeholders.py — produces silent BGM MP3s + labelled scene-bg placeholders so the live page never 404s before real assets land.  
  *scripts/generate-placeholders.py:2*

---

*Generated by [openalice-atlas](https://atlas.blal.pro) — single source of truth for the openalicelabs ecosystem.*
