
ArtCraft: stage the scene before you generate it
Typing a prompt and hoping for the right framing works for a sketch, not for a series of shots that must match. ArtCraft is an open-source creative studio that turns prompting into staging: compose layers in 2D, place a set, props and posed characters in 3D, set the camera, and only then generate the image or the video.
What you get. Control over composition, character pose and camera before the generation: the same room across several shots, a character placed exactly, an image turned into a 3D object you can rotate. Open source (MIT and Apache 2.0), built from source here in one evening.
1. What it does
- 2D compositing: layers, background removal, drawing tools, masks and inpainting.
- 3D staging: backdrops, props and kits placed in depth, characters posed with a mannequin, a camera you frame.
- Image to 3D: turn a picture into a mesh you can move and light.
- Image to video: animate a staged frame with the video model of your choice.
Many of the models it lists are hosted services. For a fully local studio, keep the staging in ArtCraft and do the generation with your own models (see ComfyUI).
2. Build it from source on Linux
git clone https://github.com/storytold/artcraft.git && cd artcraft
# follow _docs/dev_setup.md: a Rust toolchain for the native app, Node for the interface
cd frontend && npm install && cd ..
cargo build --release # produces target/release/artcraft
The native binary weighs about 90 MB. The first build takes a while; the next ones are incremental.
3. The one fix it needed
The interface depends on a package fetched from a Git branch (github:owner/repo#branch). Our npm refused to resolve it. Pinning the same code as a tarball of one exact commit solved it:
"ccapture.js": "https://github.com/aceslowman/ccapture.js/archive/<commit>.tar.gz"
A dependency on a Git branch is a moving target anyway. Pinning a commit makes the build reproducible; note the change, so you can drop it when upstream fixes theirs.
Traps
Keep your local changes small and listed: a fork that diverges everywhere never catches up with upstream.
Sources
Found this useful? Tell us what to measure next.