Tag, curate, and route your studio's media — an agent-run asset library.
One folder. Copy it in, hand it to your agent.
apps/media-manager ├── README.md ├── app │ └── media-manager.html ├── app.json └── assets

Tag, curate, and route your studio's media — an agent-run asset library.
Every clip, photo, and render in one place. Media lands, the agent files and tags it; you search, preview, and route assets to whatever app needs them next. Lock the keepers. Keep every version. Never lose the good take again.
HTML + JS, no build).
That is the whole package: one surface plus this manifest, README, and a screenshot. **No server ships here** — see below.
This package **is the canonical reviewed source** of the Media Manager surface. The **runtime is the box's shared `export-server`** — the same media services the NLE and Cutdown surfaces use. It serves this surface and answers its API verbs (`/api/project-assets`, `/api/tags`, `/api/curation`, `/api/library`, `/api/media`, …). This package therefore **declares no server of its own and never ships or copies `export-server`**: the box already provides it. The install destination `~/studio/apps/media-manager` is the **installed canonical source on disk**, not the path the shared server reads assets from at runtime.
The box's served surface and this registry snapshot can diverge because box deploys move continuously. Install is a judgment call for the box lead agent, under a **no-rollback drift rule**:
1. **Compare** the canonical installed source (`~/studio/apps/media-manager`) against the box's served surface. 2. **Missing / provably broken / provably older** than the canonical source → **repair**: copy the canonical source in, then verify the shared route and API answer. 3. **Newer (forward drift)** → **leave it untouched and report**. The box surface may legitimately be ahead of this snapshot; never overwrite it. 4. **Ambiguous** relative age or health → **leave it untouched and report** to the box lead agent, and take no destructive action.
The rule is asymmetric on purpose: only ever move the box **forward** to the canonical source when it is behind or broken — never roll a live box **backward** to an older snapshot.
Read: `GET /api/project-assets`, `GET /api/curation`, `GET /api/tags`, `GET /api/library`, `GET /api/library/media`, `GET /api/media`, `GET /api/exports`, `GET /api/patch`. Write: `POST /api/tags`, `POST /api/selections`, `POST /api/focus`, `POST /api/library/route`. These are answered by the box's shared `export-server`, not by this package.
/api/project-assets — List the project's indexed media assets (the library grid)/api/curation — Read cut version and lock state (the box proxies it from the Cutdown surface)/api/tags — List tags and their asset bindings/api/tags — Add or remove a tag on assets/api/selections — Pin a durable named selection for the agent/api/library — List the shared media library/api/library/media — Serve a file from the shared library/api/media — Serve or download a project media file/api/exports — List the exports shelf/api/focus — Report what the human is looking at (selection and view)/api/library/route — Route a library asset into the project bundle/api/patch — Read the current timeline patch/diff state~/studio/apps/media-managerPaste this into your box's lead agent — it installs the app on your box.
Install request — Media Manager
App id: media-manager
Registry repo: mvschwarz/rigs-to-apps
Manifest path: apps/media-manager/app.json
Please install this mini-app onto my studio box:
1. Retrieve media-manager's app.json from the registry repo (mvschwarz/rigs-to-apps) at apps/media-manager/app.json,
then resolve and record its current commit SHA for provenance.
2. Apply judgment: check for name and port collisions with what's already
installed, and place it in a sensible sidebar group (category default: create).
3. Install the app directory to ~/studio/apps/media-manager.
4. Register its surfaces door: route /media-manager.html with the
▤ glyph, grouped under the create default group.
5. No server — this is a pure static surface.
6. Then verify:
- The box's shared export-server (the runtime provider — not shipped in this package) serves this surface at /media-manager.html and it renders
- GET /api/project-assets, /api/tags, and /api/curation answer via the shared provider
- Compare the canonical installed source at ~/studio/apps/media-manager against the box's served surface: repair (copy the canonical source in) ONLY if the box surface is missing, provably broken, or provably older than the canonical source; if the box surface is newer (forward drift) leave it untouched and report; if relative age or health is ambiguous, leave it untouched and report to the box lead agent — take no destructive action
Verbs this app exposes (for reference, method omitted):
/api/project-assets — List the project's indexed media assets (the library grid)
/api/curation — Read cut version and lock state (the box proxies it from the Cutdown surface)
/api/tags — List tags and their asset bindings
/api/tags — Add or remove a tag on assets
/api/selections — Pin a durable named selection for the agent
/api/library — List the shared media library
/api/library/media — Serve a file from the shared library
/api/media — Serve or download a project media file
/api/exports — List the exports shelf
/api/focus — Report what the human is looking at (selection and view)
/api/library/route — Route a library asset into the project bundle
/api/patch — Read the current timeline patch/diff state
(You are my trusted box lead agent; act inside the box. Nothing here calls out.)