Neural face generation, circa 2016, still works
A straightforward Keras implementation that turns deconvolution layers into controllable face synthesis—identities, emotions, and the occasional "drunk" wander through latent space.

What it does
Trains a deconvolution network on the Radboud Faces Database to generate photorealistic faces. You get a command-line tool for training (python3 faces.py train) and generation, with four modes from sober single images to a “drunk” random walk through latent space.
The interesting bit
The control is the hook. A YAML parameter file lets you interpolate between identities, emotions, and orientations—though the README candidly notes orientation interpolation is something “the model is unable to learn.” The “drunk” mode produces contiguous sequences rather than independent samples, which is a nice touch for animation.
Key highlights
- 6 deconvolution layers can push output to 512×640 on a 12 GB Titan X
- Four generation modes:
single,random,drunk,interpolate - Adapted from a 2014 paper on chair generation—faces are the new furniture
- Requires only Keras, NumPy, SciPy, tqdm, and Python 3
- Example parameter files in
params/directory to get started
Caveats
- GPU memory is the hard constraint; bumping batch size or kernel count to fit may “result in worse results or longer training”
- Orientation interpolation explicitly fails; the README shows this limitation rather than hiding it
- Training time is “a little over a day” for the full 512×640 model
Verdict
Worth a look if you want a minimal, hackable face generation setup without the PyTorch/TensorFlow 2.x complexity. Skip it if you need state-of-the-art fidelity or modern diffusion-model controls; this is research-code archaeology, not a production pipeline.