Work
Image Studio — local AI image generation on a Mac
A free, open-source studio for Qwen-Image 2.1 on Apple silicon Macs: create images from a prompt, edit and combine your own images, and chain steps on a node canvas. Everything runs on the Mac — no account, no cloud, no upload.
TypeScript · Python · FastAPI · SQLite · ComfyUI · Docker · Apple GPU (MPS)

- Context
- Qwen-Image 2.1 is an open image model that can both generate and edit images. Running it usually means a cloud service or a graph of low-level nodes. Image Studio is a personal open-source project that puts it behind a prompt box and a canvas, on one Mac.
- Problem
- Create from a prompt, and edit and combine your own images without sending them anywhere: drop in up to 10 images and refer to them by number ("hang image 2 on the wall in image 1"), ask for a transparent PNG, remove a background, and chain those steps on a node canvas.
- Constraints
- Everything runs locally: no account, no cloud, no upload. That takes an Apple silicon Mac with 64 GB of memory and about 95 GB of free disk. Docker on a Mac cannot reach the GPU, so the image engine has to run natively beside the containerised app.
- Role
- Sole author — designed, built and published it, and maintains it.
- Architecture
- A TypeScript web UI and a Python FastAPI server with SQLite run in Docker. The engine, ComfyUI with GGUF model files, runs natively on the Apple GPU as a login service. Every generation is a small graph of steps that the server runs in the background, and images are saved as normal PNG files in the folders you choose, with the prompt and settings stored inside each file.
- Key decisions
- Two workarounds for the Apple GPU backend. The VAE runs on the CPU: on the Mac GPU an encode and decode round trip had a mean error of 54/255, against 1.8 on the CPU, and edits came out grey. The official text encoders are int8, and the Mac GPU has no int8 matrix multiply, so setup converts them once to bf16; that took the 9B prompt enhancer from about 0.4 to about 11 tokens per second.
- Outcome
- Published as free, open-source software under AGPL-3.0. A 1K image took 85 to 100 seconds on an M5 Max. It installs with one prompt in Claude Code, Codex, Gemini CLI or Cursor, or by hand.
- Evidence
- Public repository on GitHub: the code, the commit history, the architecture notes behind both workarounds, and the install guide.
- Confidentiality
- None. The project is public and open source. The model weights are not part of it; they stay under the Qwen Research License, which allows non-commercial research use only.