Paint with latent vectors: a 2016 GAN photo editor
A Tkinter GUI that lets you brush edits onto faces by manipulating a generative model's latent space, not pixels.

What it does Neural Photo Editor is a Python/Tkinter interface for editing photos through a generative neural network. You load a face from the included CelebA subset, then paint directly on the image or on a latent-space canvas below it. The model—an Introspective Adversarial Network—re-renders the face to match your brush strokes. There’s also training and sampling code for the underlying IAN model.
The interesting bit The editor doesn’t manipulate pixels; it backpropagates your paint strokes into the latent vector and asks the generator to reconstruct. The “latent brush” slider controls how aggressively your edits perturb the compressed representation. It’s a tangible, if finicky, demonstration of how GAN latent spaces encode semantic face attributes.
Key highlights
- Ships with a lightweight
IAN_simplemodel that runs on ~1GB laptop GPUs (tested on a GT730M) - Supports VAE or ALI-based GAN models via a framework-agnostic
platinterface - Includes training code for CelebA 64×64 with resumable checkpoints
- Scroll-wheel lightening/darkening patches by biasing the latent vector toward white or black
- Single-directory dump of code, admirably honest about its messiness
Caveats
- Requires Python 2.7, Theano, and Lasagne—all effectively archived ecosystems in 2024
- Non-cuDNN path only works for
IAN_simple; other models need GPU acceleration - MADE layer has a rigid hidden-size constraint that throws
BAD_PARAMerrors - Author notes the directory structure is “unorganized” and cleanup was planned
Verdict Worth studying if you’re researching interactive generative interfaces or historical GAN architectures. Skip it if you want a working modern photo editor; the dependencies alone are a time capsule.