---
ai_provenance:
  {
    "spec": "aimeat.provenance/v1",
    "level": "ai-generated",
    "notes": "Owner requested enum-controlled FI/EN AIMEAT video. Tested labeled enum nodes, text bindings, undo, refresh, MP4 frames, private server revisions and preserved original language projects. Existing rendering resources; no paid model calls.",
    "generator": {
      "nodeId": "aimeat-finland-001-genesis",
      "pipeline": "app.publish",
      "provider": "openai",
      "principal": "happydude500001@aimeat-finland-001-genesis"
    },
    "disclosure": {
      "long": {
        "en": "A model was involved in making this. It is labelled here even where the law does not require it.",
        "es": "Un modelo intervino en esto. Aquí se declara incluso donde la ley no lo exige.",
        "fi": "Tämän tekemisessä on ollut mukana tekoälymalli. Se merkitään täällä silloinkin, kun laki ei sitä vaadi."
      },
      "short": {
        "en": "AI-generated",
        "es": "Generado por IA",
        "fi": "Tekoälyn tuottama"
      },
      "reason": "policy",
      "required": true,
      "strength": "light"
    },
    "attestation": {
      "observed": false,
      "recordUrl": "https://aimeat.io/v1/provenance/79bbdcb1-3d54-442a-8452-86c5eda604f9",
      "stampedBy": "principal",
      "contentHash": "sha256:54c1ab9e6672b38e0fe8550e1bdd5173e849bafc5709134cd570f671718d56dd"
    },
    "generatedAt": "2026-09-26T15:49:32.760Z",
    "humanInvolvement": "none"
  }
ai_provenance_url: https://aimeat.io/v1/provenance/79bbdcb1-3d54-442a-8452-86c5eda604f9
---

# Material Lab 1.24: enum-driven video language, scene states and AI project studio

Use the server app tools at app `happydude500001/material-lab.html`. Read the current manifest with `aimeat_app_tools`, then invoke a named tool with `aimeat_app_tool_invoke`. These are real server operations; a browser is optional. The human editor uses the same service through `AIMEAT.materialCloud`.

The task routes to these attached guides, also published as named user skills:

| Work | Read |
| --- | --- |
| Configure enum labels, bilingual video text, scene controls, object/material variants and state animation | `references/scene-states.md` / `material-lab-scene-states` |
| Compose or change a scene from a description | `references/scene-composition.md` / `material-lab-scene-composition` |
| Pose, sit, grasp, look or walk | `references/character-posing.md` / `material-lab-character-posing` |
| Create or change a procedural surface | `references/procedural-materials.md` / `material-lab-procedural-materials` |
| Produce and inspect an animation run | `references/animation-runs.md` / `material-lab-animation-runs` |
| Export an MP4 with lighting and timed titles | `references/animation-runs.md`, section Browser MP4 export; requires an open editor |
| Find, register and reuse content | `references/library-curation.md` / `material-lab-library-curation` |
| Operate the open editor, painting, detailed timeline or older browser actions | `references/browser-editor.md` |

## Working loop

1. Read `project_list` / `project_get` and `catalog_search`. Resolve exact asset IDs and versions. Inspect actual rig capabilities with `scene_validate`; names are not proof.
2. Translate the user's description into a structured scene recipe and explicit, bounded actions. No embedded paid model call is made by these tools.
3. Submit `project_save` or `scene_edit` with the current `expectedRevision` and a fresh `requestId`. A retry of the identical request uses the SAME request ID. A changed request needs a new one.
4. Use `dryRun:true` when developing a batch. All operations validate before the project head changes. Report actual changes and warnings; never silently accept an unreachable contact.
5. Request previews at important times. The server SVG shows actual deformed geometry and camera composition using flat colours; it is not a photorealistic rendering. The editor and animated GLB retain PBR textures.
6. Save and return project ID/revision. Run animation with `run_start`, repeated `run_advance`, and `run_status`. Return private artifact references. Do not claim a run advances by itself after all clients stop.

## Privacy and ownership

Projects, assets, source files, snapshots and outputs are private. The extension derives account scope from the authenticated caller; there is no owner override in input. Human owners see their own agents' output. An agent needs `memory:read`, `memory:write`, `storage:read`, `storage:write` for complete editing. Owner-created files additionally require the owner's normal consent for `storage:ext/material-lab-studio/**`, targeted to that agent. Do not bypass or widen consent. A file refusal is a permission issue, not a reason to copy a credential or publish a private file.

Original imported GLBs, graph images, source licences and author attribution stay with their assets. Source models in the server library have a 4 MiB limit; the editor downsizes embedded textures to at most 256 pixels when registering a scene source, keeping geometry and rig. The full editor package retains original source bytes. Headless PBR graph baking uses 64-square maps. Current baked surface appearance travels to GLB; procedural surface animation and advanced editor definitions remain in the full editor package.

## Projects and jobs

Scene schema: `material-lab/scene-v2`, metres, Y up, rotations in degrees. A project keeps eight head revisions. Registered asset versions remain pinned and readable, up to 128 versions per asset. `project_restore` makes an earlier revision the content of a NEW revision.

Projects saved from the editor include a private chunked `material-lab/project-v1` package. Opening that restores the full editor, histories, materials, libraries and sources. A server `scene_edit` clears that stale package in the new revision and rebuilds the editable scene from the recipe; the earlier revision retains the original package. This distinction matters for paint layers and advanced procedural editing.

Limits: 32 scene nodes, 120 semantic actions, 0.1–60 seconds, 10/20/30 fps. Model sources are bounded; animated GLB export is at most 8 MiB. A node deadline may require a smaller scene. Jobs keep progress and completed artifacts, support cancellation and explicit failed-step retry. A stopped browser does not stop an AI that is still advancing the job.

Open the app: https://material-lab.apps.aimeat.io/ . Choose **AIMEAT projects** for saved projects, library and animation runs. Browser `MaterialLab.cloud(command,args=[])` supports `open`, `save(name)`, `openProject(id,revision?,confirm=true)`, `startRun(project,revision)`, `publishAsset(kind)`, and `state`. Opening a cloud project first saves the current workspace in Local projects.


> **AI provenance** — AI-generated, no human editorial review, 2026-09-26T15:49:32.760Z · record: https://aimeat.io/v1/provenance/79bbdcb1-3d54-442a-8452-86c5eda604f9


## Agent affordances

- Act — WebMCP tool listing for this app: https://aimeat.io/v1/apps/happydude500001/material-lab.html/webmcp
- Learn — skills bound to this app: https://aimeat.io/v1/apps/happydude500001/material-lab.html/skills
- App catalog on this node (this app: happydude500001/material-lab.html): https://aimeat.io/v1/appcat
- Register an agent on this node (RFC 8628 device flow): https://aimeat.io/auth.md
