finds.dev← search

// the find

junyanz/pytorch-CycleGAN-and-pix2pix

★ 25,185 · Python · NOASSERTION · updated Aug 2025

Image-to-Image Translation in PyTorch

The canonical PyTorch reference implementation of CycleGAN and pix2pix, two influential 2017 papers on image-to-image translation. CycleGAN learns mappings between unpaired image domains (horse→zebra, photo→painting); pix2pix does the same with paired training data. This is research code that became the de facto starting point for anyone studying conditional GANs.

The codebase structure is genuinely clean for research code — models, datasets, and options are all pluggable via a registry pattern, so dropping in a new architecture means implementing one class and registering it. The 2025 update to Python 3.11 / PyTorch 2.4 with DDP support via torchrun is a meaningful maintenance signal for a repo this age. Pretrained models and dataset download scripts are all included and working, which saves hours of setup. The README explicitly points you toward newer successors (CUT, img2img-turbo) rather than pretending this is still state of the art — that's honest.

GAN training in 2026 is a solved-differently problem: diffusion models and flow matching produce better results with more stable training, and the README itself says img2img-turbo (based on Stable Diffusion Turbo) is faster and better. The argparse-based option system has grown into a wall of flags with no validation — you will silently train with incompatible settings and only discover it at evaluation time. There's no modern packaging (no pyproject.toml, no versioned releases), so pinning a dependency and reproducing an environment months later is a gamble. The evaluation setup for Cityscapes uses a Caffe model via a download script, which is the kind of dependency that quietly stops working.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →