Skip to content
Sample of Memories of Passersby (Mario Klingemann — Memories of Passersby I)

ml_artists · KlingemannMemorex

Memories of Passersby (Mario Klingemann — Memories of Passersby I)

Inspired by Mario Klingemann's Memories of Passersby I (2018, Sotheby's) — a custom GAN trained on 17th–19th-century portraits that runs forever, never repeats an output, and 'observes itself' in a feedback loop. The kernel we replicate: N cluster centroids drift through a 64-D synthetic latent space with Brownian motion + momentum and occasional large velocity jumps (Klingemann's 'memory slips'). Each centroid is projected to 2D via a fixed random matrix and stamped onto the canvas as a faded coloured dot — the result is a slowly-evolving swarm of soft pointillism whose overall hue and density gently evolve as clusters drift.

Original: https://www.sothebys.com/en/articles/artificial-intelligence-and-the-art-of-mario-klingemann

▶ Try the live demo (JS port) ▶ Run reference.py via Pyodide 10 formulas have instant JS ports. The Pyodide path runs the actual Python in your browser — first load is ~6 MB, then instant.

Family
ml_artists
Source
ml artists
Evolution
particle
Render
translucent_pointillism
Complexity
medium
Agents
24
Year
2018
Author
Mario Klingemann (concept)

Math essence

centroids c_i ∈ R^D with velocities v_i; update v_i ← momentum·v_i + drift·N(0,I) + jump_mask·U; integrate c_i ← c_i + v_i; soft centring pull c_i ← c_i − ε·c_i; project via fixed 2×D matrix; render each centroid as a 5×5 Gaussian splat of its assigned palette colour.

Parameters

Name Type Default Range Description
dim int 600 200–1500 Square canvas side length (px).
n_clusters int 24 2–256 Number N of drifting cluster centroids in latent space.
latent_dim int 64 8–512 Latent dimensionality D (Klingemann: small-GAN-style 64-512).
drift float 0.06 0–0.5 Per-step Brownian noise scale on each centroid velocity.
momentum float 0.92 0–0.999 Velocity retention (0..1).
jump_prob float 0.012 0–0.5 Per-step jump probability per centroid (Klingemann's 'memory slip').
jump_scale float 0.7 0–5 Velocity magnitude applied when a jump fires.
palette str klingemann null–null pastel|klingemann|rainbow — centroid colour cycle.

Reference

First 60 lines of reference.py. Full source: library_external/ml_artists/KlingemannMemorex/reference.py

"""KlingemannMemorex — Mario Klingemann "Memories of Passersby I" (2018) kernel.

Inspired by Mario Klingemann's *Memories of Passersby I* (Sotheby's,
2018, sold as the first AI artwork at a major auction house): a
machine that never stops generating portraits, never repeats itself,
and "observes itself" in a feedback loop.  Klingemann trained a GAN on
17th-19th-century portraits and let its latent space drift, with each
new face a degraded memory of the previous one.

We translate the *kernel* of that work to numpy: instead of real GAN
latents, we maintain a set of N cluster centroids in a 64-D
"latent-like" space.  Each centroid has momentum, drifts with Brownian
noise, and occasionally jumps (the "memory slips" / sudden context
switch).  Each step we pick a random centroid, project it through a
fixed 64→2 random projector, and stamp a faded Gaussian dot onto the
canvas at that location.  Centroids are coloured by cluster id along
a fixed palette — the result is a slowly-evolving swarm of coloured
"memory points" that gradually fills the canvas with a faint,
multi-coloured pointillism.

References:
- https://www.sothebys.com/en/articles/artificial-intelligence-and-the-art-of-mario-klingemann
- https://aiartists.org/mario-klingemann
- http://quasimondo.com/
"""
from __future__ import annotations

from typing import ClassVar

import numpy as np


class KlingemannMemorex:
    """Simulated memories — cluster centroids drifting in a 64-D latent space.

    Parameters
    ----------
    dim : int
        Square canvas side length (px).
    n_clusters : int
        Number of cluster centroids N in the synthetic latent space.
    latent_dim : int
        Dimensionality D of the synthetic latent space (default 64, in
        the spirit of small GANs).
    drift : float
        Per-step Brownian noise scale on each centroid.
    momentum : float
        How much of the previous velocity is retained (0..1).
    jump_prob : float
        Per-step probability that any centroid "jumps" — replaces its
        velocity with a large random vector (Klingemann's "memory
        slips" / sudden context changes).
    jump_scale : float
        Magnitude of the jump vector when a jump fires.
    palette : str
        ``"pastel"`` (cool/light), ``"klingemann"`` (his auction-piece
        warm-earthy palette), or ``"rainbow"``.
    """

    family: ClassVar[str] = "ml_artists"

Try running it locally

The reference implementation is self-contained Python with numpy. Install the package and run:

python library_external/ml_artists/KlingemannMemorex/reference.py

Need help? See Learn for the standard environment setup, or Playground for an in-browser sketchbook.

More from ml artists

Sample of DeepDream Field (Mike Tyka — AI: DeepDream / Inceptionism)

DeepDream Field (Mike Tyka — AI: DeepDream / Inceptionism)

ml_artists · TykaDeepDreamField

Inspired by Mike Tyka's AI: DeepDream series (2015-) and his co-authorship of 'Inceptionism: Going Deeper into Neural Networks' with Mordvintsev and Olah.

View →
Sample of GAN Watercolor (Helena Sarin — Neural Bricolage / #latentDoodles)

GAN Watercolor (Helena Sarin — Neural Bricolage / #latentDoodles)

ml_artists · SarinWatercolor

Inspired by Helena Sarin's Neural Bricolage practice (#latentDoodles, GAN Weaver, The Book of veGAN): she trains GANs on her own watercolor paintings and sketches, then curates the output back into analog paintings.

View →
Sample of Glitch (Mario Klingemann — glitch-print aesthetic)

Glitch (Mario Klingemann — glitch-print aesthetic)

ml_artists · KlingemannGlitch

Klingemann's practice amplifies the visible failure modes of digital pipelines — distorted faces mid-decode, colour-shifted artefacts, rectangular datamosh tears — into the subject matter itself.

View →
Sample of Neural Biodiversity (Sofia Crespo — Neural Zoo / Artificial Natural History)

Neural Biodiversity (Sofia Crespo — Neural Zoo / Artificial Natural History)

ml_artists · CrespoNeuralBiodiversity

Inspired by Sofia Crespo's Neural Zoo (2018-), Artificial Natural History (2019-), and Beneath the Neural Waves (2021): she uses 3D GANs, CNN-based texture synthesis and 3D style transfer to fabricate a 'natural history book that never was' — chimerical creatures whose anatomies recombine fragments of real species.

View →
Sample of Style Transfer Field (Gene Kogan — ml4a)

Style Transfer Field (Gene Kogan — ml4a)

ml_artists · KoganStyleTransferField

Inspired by Gene Kogan's Experiments with Style Transfer and the ml4a curriculum: neural style transfer iteratively updates an image so its Gram-matrix feature statistics match a style reference — the gradient of the style loss with respect to pixels defines a vector field.

View →

See all ml_artists artworks →