---
vault_clearance: EUCLID
halo:
  classification: INTERNAL
  confidence: HIGH
  front: "36_Project_MediaForge"
  custodian: "The Architect"
  created: 2026-04-27
  updated: 2026-04-27
  wing: UNASSESSED
  containment: "Orchestration + API adapters — secrets in env only"
---

# 36_Project_MediaForge — Mass Media Creation Suite

**Control plane + lanes:** repeatable **jobs** (manifest + artifacts) callable via Lab MCP (`mediaforge_*` in [`TOOL_REGISTRY.json`](../TOOL_REGISTRY.json)).

**Read first:** this README | **Depends on:** vault [README §6 workflow](../README.md#6-workflow-applies-across-all-projects) | **Feeds:** [02 Triage](README.md#policy-restricted-and-triage) (story media), [03 Technomancer](../03_Project_Technomancer/README.md) (optional JSONL tape)

## Project spine

- [BOUNTY_BOARD.md](BOUNTY_BOARD.md) · [WORLDLINE.md](WORLDLINE.md) · [ENV_KEYS.md](ENV_KEYS.md)
- Scripts: [`scripts/mediaforge/`](../scripts/mediaforge/)
- Example pipeline: [examples/golden_job_manifest.json](examples/golden_job_manifest.json)

## Windows / Obsidian path note

If the vault path contains `[` `]`, some native tools mis-parse `cd`. **Default job root** is `%USERPROFILE%\MediaForgeJobs` (set `MEDIAFORGE_JOBS_ROOT` to override). Manifests may reference vault notes by relative path for prose.

## Registered tools (Lab MCP)

| Tool | Purpose |
|------|---------|
| `mediaforge_job_init` | Create `job_manifest.json` + job directory (idempotent) |
| `mediaforge_ffmpeg_concat` | Concatenate video segments with ffmpeg |
| `mediaforge_replicate_image` | Image via Replicate HTTP API |
| `mediaforge_elevenlabs_tts` | Text-to-speech MP3 |
| `mediaforge_eleven_music` | Eleven Music (paid API; instrumental recommended for safer use) |
| `mediaforge_youtube_upload` | Upload video (OAuth token on disk; see ENV_KEYS) |

## Policy: restricted and Triage

**`tier: restricted`** in a manifest means outputs are **not** for `public_lab` / throne export without explicit operator decision. Screenplay and look-dev for [02_Project_Triage](../02_Project_Triage/README.md) follow Triage **FORM/HALO** — see [02 — MediaForge suite](../02_Project_Triage/README.md#mediaforge-suite).

**Tier semantics**

- **vault:** lab-only artifacts; default for experiments.
- **public:** safe for export surfaces after human review.
- **restricted:** creative IP (e.g. Triage scenes); do not sync to edge mirrors; keep binaries under gitignored job dirs or external disk.

## Capability summary

| Lane | Tool | Keys |
|------|------|------|
| Video assembly | `mediaforge_ffmpeg_concat` | none (needs `ffmpeg` on PATH) |
| Image | `mediaforge_replicate_image` | `REPLICATE_API_TOKEN` |
| VO / TTS | `mediaforge_elevenlabs_tts` | `ELEVENLABS_API_KEY` |
| Music | `mediaforge_eleven_music` | `ELEVENLABS_API_KEY` |
| Publish | `mediaforge_youtube_upload` | OAuth token + client secrets path |
| Design | Canva Connect / CLI — [CANVA_CONNECT.md](../scripts/mediaforge/CANVA_CONNECT.md) |

Install Python deps (optional lanes): `pip install -r scripts/mediaforge/requirements.txt`

## Minimal work loop

1. `lab_run` / CLI: `mediaforge_job_init` with `job_id` + `tier`.
2. Run lane tools; each updates `job_manifest.json` when passed `--job-dir`.
3. Log breakthrough in [WORLDLINE.md](WORLDLINE.md); close items on [BOUNTY_BOARD.md](BOUNTY_BOARD.md).
