What is Glina

Glina turns a text prompt into a verified, game-ready GLB. An LLM (routed through Brama, the org model router) writes Blender Python, executes it round by round through a live Blender MCP session, and every produced asset must pass a structural quality gate before it counts as done. The same package also ships the procedural THREE.js runtime art that the browser RTS Potyczka renders in-game — Glina was extracted from that game's web/art/ with full history.

The three-part mental model

  1. Two halves, one package.

    • Runtime art (src/) is procedural generation a game imports directly: makeBody, sculptHumanoid, cardArtSvg. No credentials, no network, no Blender — geometry and SVG built in memory.
    • Authoring pipeline (pipeline/) is the AI text→3D toolchain: the glina CLI, which the macOS desktop app runs once per operation, and the glina-mcp stdio server for agent hosts.
  2. Every capability is delegated through a hard integration boundary. The pipeline holds no secrets, no browser, no Blender socket, and no provider API of its own:

    • credentials resolve by role://<role>/<field> through Stado and Skarbiec, or an explicitly selected owner-only credential file; inline secrets in original configuration are refused,
    • browser automation goes only through the Weles MCP stdio server,
    • Blender work goes only through a Blender MCP server (uvx blender-mcp by default),
    • model access uses the declared Brama route or an explicitly configured OpenAI-compatible backend. Credentials remain role references.
  3. The verification gate is the definition of done. Every produced .glb passes pipeline/gate/verify.js: valid glTF container, mesh/primitive sanity, the triangle budget the config states (none of its own), materials, animation clips whose channels actually move, and an optional Blender render smoke. A failed gate fails the job — it never warns.

What Glina is not

  • Not a model router — Brama owns which model answers (model backend).
  • Not a vault — Skarbiec owns secrets; Glina only carries references.
  • Not a browser — Weles owns page automation.
  • Not a Blender wrapper library — the only Blender surface used is get_scene_info and execute_blender_code; everything else is Blender Python sent through that one tool.

Where to go next