PageScene's engine lifecycle was previously tab-aware: EngineProvider
read tabStore.activeTabId to decide whether to construct or dispose
the Editor, and reached into tabStore.getTabData / updateTabData for
in-memory scene save+restore across tab switches. That hack predates
the post-Stage-A architecture; with the engine event bus + decoupled
Zustand store in place, we can drive the lifecycle from React's own
mount/unmount + a clean prop interface.
Changes:
- EngineProvider takes cacheJsonString + onSceneSerialized props
instead of importing useTabStore. The construct branch fires once
the three canvas DOM nodes are populated (sceneContainerEl,
editorCanvasEl, camViewCanvasEl); the cleanup branch (returned from
useEffect) snapshots the scene via save_manager.getSceneJson and
hands the serialized JSON back through onSceneSerialized before
unmountEngine. No knowledge of tabs.
- SceneContainer + EditorCanvas + CameraViewCanvas callback refs no
longer drop the unmount-side null. Previously `if (node) { ... }`
swallowed the null on canvas unmount, leaving stale DOM refs in the
store and leaking the Editor. Now they pass null through, which
drives the EngineProvider cleanup effect when the canvases unmount
(e.g. on tab switch away from 3D).
- PageScene.tsx wraps the new prop interface: reads cacheJsonString
from useTabStore.getTabData("3D") on render, supplies an
onSceneSerialized that calls tabStore.updateTabData("3D", json).
The tab integration moves up one layer; the engine itself is
storage-agnostic and ready to drop into the @storyteller/ui-pagescene
lib without modification.
- Deletes pose/CachedPoseLandmarker.ts and pose/CachedFilesetResolver.ts.
These wrapped @mediapipe/tasks-vision but were fully orphaned (only
referenced each other; no callers anywhere). FK + KinHelpers stay --
bone manipulation is still in use, only the MediaPipe-driven pose
detection is gone.
The IDE for artists.
ArtCraft
ArtCraft is the IDE for interactive AI image and video creation. We turn prompting into crafting, so your ideas become a form of tangible expression and computing. This is Adobe Photoshop for everyone, and we're giving away the source code!
Show, Don't Tell: Advanced Crafting Features
Text-to-image is great, but artists need control. It's important to know what your image will look like before you generate it, and it's vitally important to achieve consistency and repeatability.
Note: all of the above videos were generated for free with Grok Video; the cost to build this README was negligible.
Quick and Easy Prompting
We haven't abandoned text-to-asset generation for quick prototyping and ideation. We support every popular workflow in a first class fashion.
Models and Providers Supported within Artcraft
| Provider | Features |
|---|---|
| Artcraft | Nano Banana, Nano Banana Pro, GPT-Image-1 / 1.5, Seedance 1.0 Lite / 1.5 Pro / 2.0, Seedream 4 / 4.5, Flux 1.1 / Kontext, Veo 2 / 3 / 3.1, Kling 1.6 / 2.1 / 2.5 / 2.6, Sora 2 / Pro, Hunyuan 3d 2 / 3 |
| Grok | Grok Imagine, Grok Video |
| Midjourney | Image Gen (all versions) |
| Sora | Sora 1, Sora 2, GPT-Image-1 |
| WorldLabs | Marble (Gaussian Splat World Generation) |
We're going to be adding the following providers soon: Kling (via Kling website accounts), Google (via API keys), Runway (via website account), Luma (via website account).
We're potentially interested in adding other aggregators for those who already have subscriptions and credits at those providers, for example: OpenArt, FreePik, etc.
Downloads
- Visit our website for the stable Windows and MacOS releases
- Or you can grab a more recent Windows and MacOS build directly
- Linux requires building from source for now
