Vysion Design Engine
  • Go 57.4%
  • TypeScript 16.6%
  • Swift 14.1%
  • Python 10%
  • Go Template 1.2%
  • Other 0.6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Evan Hazlett 66e5c3adc7 Web: the sidebar's settings item is just Settings
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LHU8w5Sr9j6ijhQnWM7ymZ
2026-10-23 09:33:30 -04:00
brand ios: first app build — sign in, projects, project, settings, push 2026-10-10 03:05:54 -04:00
cmd Workers ping, so they show up before they take work 2026-10-15 10:26:55 -04:00
deploy Runbook: vysion machine is 4 vCPU, 8 GB 2026-10-14 15:58:33 -04:00
docs Mac workers: the service on the internal disk, data on the drive 2026-10-12 14:33:11 -04:00
internal Kitchens: sink at the window, hood on the wall, no gaps in the runs 2026-10-20 21:33:37 -04:00
ios iOS: build 68 2026-10-20 19:09:27 -04:00
scripts Shell fixtures: Farmhouse 24359, both floors 2026-10-16 14:16:34 -04:00
testdata/shells Walls: a bank of windows is as many windows as it has panes 2026-10-18 10:53:07 -04:00
web Web: the sidebar's settings item is just Settings 2026-10-23 09:33:30 -04:00
worker/render Kitchens: sink at the window, hood on the wall, no gaps in the runs 2026-10-20 21:33:37 -04:00
.gitattributes The renderer's assets are in the repo, binaries in Git LFS: every clone renders with the same models 2026-10-14 10:12:05 -04:00
.gitignore workers: the server embeds the worker kit and manages its workers 2026-10-12 11:01:32 -04:00
.golangci.yml Scaffold Vysion: Go control plane, Umbra agent seam, MCP gateway, ledger, web shell 2026-10-09 12:28:11 -04:00
CLAUDE.md Project page: conversation panel, image viewer, project image 2026-10-09 16:41:51 -04:00
CONCEPT.md Scaffold Vysion: Go control plane, Umbra agent seam, MCP gateway, ledger, web shell 2026-10-09 12:28:11 -04:00
go.mod Make thumbnails one at a time and keep them when the request goes 2026-10-14 15:52:51 -04:00
go.sum Make thumbnails one at a time and keep them when the request goes 2026-10-14 15:52:51 -04:00
Makefile Windows show the garden; room views in the viewer; the rail's width is yours 2026-10-18 09:37:01 -04:00
README.md README: lock LFS models before remaking them 2026-10-14 10:14:11 -04:00
sqlc.yaml Scaffold Vysion: Go control plane, Umbra agent seam, MCP gateway, ledger, web shell 2026-10-09 12:28:11 -04:00

Vysion

Rapid prototype and environment visualization. Photograph a space, describe the change you want, and Vysion renders concept images (OpenAI image models) and explorable 3D worlds (World Labs Marble, viewed in the browser with Spark).

One static Go binary serves the API, the embedded web UI, the job workers, the metering ledger, and the MCP tool gateway that agents and users drive the pipeline through. Agent runs execute as Umbra cells.

Quick start

Requires Go 1.26+, Node 22+, Git LFS, and a sibling checkout of Umbra at ../umbra.

The renderer's assets in worker/render/assets (3D models, their reference photos, art, rugs, textures, skies) are in Git LFS: run git lfs install once before cloning, or git lfs pull after. They are made with the scripts in worker/render/tools from models.json and props.json; a new or remade one is committed like any other file, so every machine renders with the same models. Lock a model before remaking it (git lfs lock <file>, then git lfs unlock once pushed), and have pushes check others' locks: git config lfs.https://git.nytra.io/core/vysion.git/info/lfs.locksverify true.

make web-install web build                      # web/dist, then bin/vysion with it embedded
./bin/vysion admin create-user --email you@example.com --password '…' --admin
OPENAI_API_KEY=… WLT_API_KEY=… ./bin/vysion serve --dev

Open http://127.0.0.1:8080. API docs are at /api/v1/docs, metrics at /metrics. Add provider keys under Admin › Agents (sealed with secret.key in the data directory); the environment variables above are an optional fallback. Until a key exists the pipeline reports that the provider is not configured.

During UI work run make dev in one terminal and cd web && npm run dev in another; Vite proxies the API to the Go server.

The runtime

--runtime local (the default) runs each agent as an unisolated local subprocess through Umbra's fake backend. It is for development and CI only.

--runtime nodes runs agents only on enrolled Umbra nodes, which dial in over WebSocket-over-TLS:

./bin/vysion admin enroll-node --name box1 --runtime docker   # prints UMBRA_NODE_TOKEN
# on the node:
UMBRA_NODE_TOKEN=… umbra-node connect --daemon-url https://vysion.example --runtime docker

The cell image is deploy/agent/Dockerfile: CA certificates plus umbra-guest and vysion-agent. Cells hold a run token only; every provider call goes through the server's MCP gateway, which enforces quotas and writes the ledger.

MCP

The gateway is at /mcp (streamable HTTP). Create an API key in the UI or via POST /api/v1/auth/api-keys, then point any MCP client at it with Authorization: Bearer vys_sk_…. Tools: get_project, list_assets, get_asset, list_renders, get_render, generate_concept, request_world, report_progress.

Layout

cmd/vysion          the binary (serve, migrate, admin, openapi)
cmd/vysion-agent    the guest payload that runs inside a cell
internal/server     huma API, SSE, content, embedded UI
internal/gateway    MCP tool server
internal/agent      Umbra seam: runs, receiver, placers, payload, prompts
internal/pipeline   provider calls: concepts (OpenAI), worlds (World Labs)
internal/usage      ledger, rollups, quotas, reservations
internal/jobs       job table + worker pool
internal/store      sqlc + SQLite, embedded migrations
internal/blob       content store (local; S3 later)
web/                Vite + React + Tailwind, embedded via web/embed.go
deploy/agent        the cell image