Skip to content

Tier 0 Observer

NeuralIO444 edited this page Sep 29, 2026 · 1 revision

Tier 0 Observer

Tier 0 is the "look at everything, change nothing" layer. It's designed so the worst possible outcome of running it on a production machine is some JSON files appearing in a folder you chose.

The workflow

After Effects project
        │  (1) scrape — you run the scraper in AE, once per project
        ▼
MJ_PROJECT_SCRAPE_1.json  (a receipt: comps, layers, expressions, effects, fonts, footage)
        │  (2) project.ingest — validate + summarize the receipt
        │  (3) expression.lint — spell-check every expression
        ▼
findings + summaries (JSON you can read, diff, or feed to other tools)

Any .aep file ── (4) project.snapshot ──▶ timestamped versioned copies, never overwritten
Any Plug-ins folder ── (5) plugin.audit ──▶ what’s installed, hashed

Steps 2–5 are CLI commands. Step 1 happens inside After Effects (see AE Scraper).

1. Scrape the project

In After Effects: File → Scripts → Run Script File, pick integrations/after-effects/MographJailed_ProjectScraper.jsx, choose where the receipt goes. Full walkthrough: AE Scraper.

2. Ingest the receipt

mj project.ingest path=/Users/you/AE_Receipts/MyProject.20260929T150000Z.scrape.json

Validates the receipt against the MJ_PROJECT_SCRAPE_1 schema and returns a summary: comp/layer/expression/effect counts, fonts, footage — plus missing footage (path on disk is gone) and unlinked footage (no path at all). Malformed or hostile JSON fails closed here.

3. Lint the expressions

mj expression.lint path=/Users/you/AE_Receipts/MyProject.20260929T150000Z.scrape.json

Static analysis over every scraped expression — a spell-checker for AE expressions:

Code Severity Meaning
E001 error References a layer that doesn't exist in the comp
E002 error References an effect that isn't applied to the layer
W001 warning sampleImage() inside a loop (render-time performance trap)
W002 warning Hard-coded absolute path (breaks on other machines)
W003 warning Expression over 2,000 characters
I001 info Uses ExtendScript dynamic evaluation (opaque to analysis)

It reports; it never fixes. Findings are capped at 200.

4. Snapshot an .aep

mj project.snapshot path=/Users/you/Movies/MyProject.aep output=/Users/you/AE_Versions

Hashes the project and saves a timestamped, hash-suffixed copy into your versions folder — using an APFS copy-on-write clone when available, so it's instant and nearly free on disk.

  • Unchanged? Skipped, not re-copied (hash comparison).
  • Already exists? Refused — it will never overwrite a snapshot.
  • Source file? Never touched. Byte-identical before and after.
  • Not an .aep? Rejected up front.

Every snapshot writes a .snapshot.json receipt next to it, and a <name>.latest.json pointer to the newest version.

5. Audit your plugins

mj plugin.audit path="/Applications/Adobe After Effects 2025/Plug-ins"

Enumerates one directory level, classifies files/bundles/symlinks, and SHA-256 hashes what it can read. Answers "what's on this machine" without installing or touching anything. Entries capped at 500.

See it all live

Dashboard gives you the btop-style terminal view over snapshots, vitals, lint findings, and watcher state. Watcher snapshots your .aep files automatically.

Reference

  • Schema: docs/MJ_PROJECT_SCRAPE_1.md in the repo
  • Full spec: docs/TIER0_OBSERVER.md in the repo
  • Safety model: Safety

Clone this wiki locally