Artifex: Generative Modeling Research Library¤
A research-focused modular generative modeling library built on JAX/Flax NNX, providing implementations of state-of-the-art generative models with multi-modal support and scientific computing focus.
Why Artifex?¤
-
State-of-the-Art Models
VAEs, GANs, Diffusion, Flows, EBMs, Autoregressive, and Geometric models with 2025 research compliance
-
Research-Focused
Hardware-aware optimization, distributed training, mixed precision validated through 2150+ tests
-
Multi-Modal Support
Native support for images, text, audio, proteins, and multi-modal data
-
Scalable Architecture
From single GPU to multi-node distributed training with FSDP and tensor parallelism
Quick Start¤
Installation¤
See the Installation Guide for detailed setup instructions including Docker and source installation.
Train a Diffusion Model on Fashion-MNIST¤
import jax
import jax.numpy as jnp
import optax
from datarax import from_source
from datarax.core.config import ElementOperatorConfig
from datarax.dag.nodes import OperatorNode
from datarax.operators import ElementOperator
from datarax.sources import TfdsDataSourceConfig, TFDSSource
from flax import nnx
from artifex.generative_models.core.configuration import (
DDPMConfig, NoiseScheduleConfig, UNetBackboneConfig,
)
from artifex.generative_models.models.diffusion import DDPMModel
from artifex.generative_models.training.trainers import (
DiffusionTrainer, DiffusionTrainingConfig,
)
# 1. Load Fashion-MNIST with datarax
def normalize(element, _key):
image = element.data["image"].astype(jnp.float32) / 127.5 - 1.0
return element.replace(data={**element.data, "image": image})
source = TFDSSource(
TfdsDataSourceConfig(name="fashion_mnist", split="train", shuffle=True),
rngs=nnx.Rngs(0),
)
normalize_op = ElementOperator(ElementOperatorConfig(stochastic=False), fn=normalize, rngs=nnx.Rngs(1))
pipeline = from_source(source, batch_size=64) >> OperatorNode(normalize_op)
# 2. Create DDPM model
config = DDPMConfig(
name="fashion_ddpm",
input_shape=(28, 28, 1),
backbone=UNetBackboneConfig(
name="unet", in_channels=1, out_channels=1,
hidden_dims=(32, 64, 128), channel_mult=(1, 2, 4), activation="silu",
),
noise_schedule=NoiseScheduleConfig(
name="cosine", schedule_type="cosine", num_timesteps=1000,
),
)
model = DDPMModel(config, rngs=nnx.Rngs(42))
optimizer = nnx.Optimizer(model, optax.adamw(1e-4), wrt=nnx.Param)
# 3. Configure trainer with SOTA techniques
trainer = DiffusionTrainer(
noise_schedule=model.noise_schedule,
config=DiffusionTrainingConfig(
loss_weighting="min_snr", snr_gamma=5.0, ema_decay=0.9999,
),
)
jit_train_step = nnx.jit(trainer.train_step)
# 4. Training loop
rng = jax.random.PRNGKey(0)
for batch in pipeline:
rng, step_rng = jax.random.split(rng)
_, metrics = jit_train_step(model, optimizer, {"image": batch["image"]}, step_rng)
trainer.update_ema(model)
# 5. Generate samples
samples = model.sample(n_samples_or_shape=16, steps=100)
See the Quickstart Guide for complete examples including VAE training, visualization, and more.
Next Steps¤
-
Core Concepts
Understand generative modeling concepts and Artifex architecture
-
First Model Tutorial
Build your first generative model from scratch
-
Model Guides
Deep dive into VAEs, GANs, Diffusion, Flows, and more
-
Examples
Working examples for all model types and use cases
Model Types¤
| Model Type | Best For | Guide |
|---|---|---|
| VAE | Latent space exploration, representation learning | VAE Guide |
| GAN | High-quality image synthesis, style transfer | GAN Guide |
| Diffusion | State-of-the-art generation, inpainting | Diffusion Guide |
| Flow | Exact likelihood, density estimation | Flow Guide |
| EBM | Compositional generation, constraints | EBM Guide |
| Autoregressive | Text, sequential data | AR Guide |
| Geometric | Proteins, molecules, 3D structures | Examples |
Architecture¤
See Architecture Overview for detailed system design, component structure, and extension points.
Citation¤
@software{artifex_2025,
title = {Artifex: Generative Modeling Research Library},
author = {Shafiei, Mahdi and contributors},
year = {2025},
url = {https://github.com/avitai/artifex},
version = {0.1.0}
}
Contributing¤
We welcome contributions! See the Contributing Guide for guidelines.
GitHub | Issues | Discussions