Skip to content

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)

View the source on GitHub

The Image Studio workflow canvas: a living room photo and a dragon sticker feed a Generate step that hangs the sticker as a poster, and a second Generate step turns the room to evening.
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.