← all repositories
ajbrock/Neural-Photo-Editor

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.

Neural-Photo-Editor
Velocity · 7d
+0.6
★ / day
Trend
steady
star history

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_simple model that runs on ~1GB laptop GPUs (tested on a GT730M)
  • Supports VAE or ALI-based GAN models via a framework-agnostic plat interface
  • 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_PARAM errors
  • 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.

heatdrop uses Google Analytics to see which pages get read — nothing else. Your call. How we handle data.