Logged-out studio.hanzo.ai now renders the canonical HanzoHeader (Sign in -> same-origin /login) above the sign-in card, plus HanzoPreFooterCTA + HanzoFooter (currentProductId=studio) below it. server.py serves the bundle via a guarded /marketing static route (mirrors /docs); assets are public (.js/.css) so they load pre-auth. The sign-in card stays as the progressive-enhancement fallback -- auth path unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Studio web — the Hanzo Studio product frontend
Our unique studio frontend: a specialized chat app on the shared Hanzo stack.
You say what to create; the cloud /v1/chat orchestrator drives studio's render
tools and the outputs land in the library. This is the default surface at
studio.hanzo.ai/studio.
- Stack: Vite + React + TS.
@hanzo/*packages are npm-published, so a cleannpm install— no workspace linking. - Chat:
POST api.hanzo.ai/v1/chat {capability, messages}→{reply, actions, ops}— the cloudclients/chatorchestrator, called directly (no studio proxy). Thehanzo_tokencookie is.hanzo.ai-scoped, socredentials:'include'carries it cross-origin and the handler bills the caller org. (Gateway CORS must allow thestudio.hanzo.aiorigin with credentials.) - Engine: the studio pod serves
/v1/session,/v1/library,/v1/render-queue,/v1/gpu-statussame-origin (same cookie) — no token handling in the browser.
npm install
npm run build # -> dist/ (served at /studio; base = /studio/)
npm run dev # local, set VITE_STUDIO_API=https://studio.hanzo.ai
The ComfyUI-derived node editor ("Advanced mode") is a separate repo —
hanzoai/studio-ui (formerly studio-frontend) — not this app.
Status / next
- Increment 1 (done): chat wired to
/v1/chatcreate + live library/queue/gpu strip. - Increment 2: swap the transcript/composer for
@hanzo/chat<Chat>on@hanzo/gui(GuiProvider + SessionProvider, copying console2'sProvider.tsxspine). - Wiring: Dockerfile multi-stage to build
dist/and serve it at/studioin place ofmiddleware/studio_home.html. (No proxy — chat hits api.hanzo.ai direct.)