Skip to content
Sample of Hypertransformations (Molnár)

generative_pioneers_2 · molnar_hypertransformations

Hypertransformations (Molnár)

Vera Molnár's 'Hypertransformations' (1974-1976), executed on the IBM 360 with a CRT 2250 display and output on a Benson plotter. The work takes a regular grid of cells and, for each cell, applies a per-cell rotation, scale, displacement, and palette index derived from a continuous scalar field φ(u,v,t) = sin(kx·π·u + 0.6t) · cos(ky·π·v + 0.4t). The result is what Molnár called 'a vibrating force' acting on a regular orthogonal structure — the deformed grid is the visible trace of a parametric function the artist can tune step by step, then freeze as a single image. The signature Molnár tape ('75.058 15.06.04' / '15.07.51') records the exact moment each plotter drawing was completed, between 3:06.04 and 3:07.51pm on 27 February 1975.

Original: https://dam.org/museum/artists_ui/artists/molnar-vera/

▶ 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
generative_pioneers_2
Source
generative_pioneers_2
Evolution
deformed_grid
Render
filled_quads_with_ink_outline
Complexity
medium
Agents
100
Year
1975
Author
Vera Molnár

Math essence

Each cell (ci, ri) is mapped to local coordinates (u, v) ∈ [0,1]²; a global field φ(u,v,t) = sin(kx·π·u + α·t)·cos(ky·π·v + β·t) drives rotation θ = amp_rot·φ, scale s = 1 + amp_scale·φ, displacement (dx, dy) = amp_disp·(φ, 1−φ), and a palette index ∝ φ. The deformation is continuous in (u, v, t) and renders as a quilt of tilted, scaled, recoloured squares.

Parameters

Name Type Default Range Description
dim int 512 200–1200 Square canvas side length
cols int 10 4–30 Grid columns
rows int 10 4–30 Grid rows
margin float 0.08 0–0.3 Outer margin (fraction of dim)
rotation_amp float 0.55 0–2 Per-cell rotation amplitude (×π rad)
displacement_amp float 0.18 0–0.6 Per-cell translation amplitude (fraction of cell size)
scale_amp float 0.35 0–0.8 Per-cell scale modulation amplitude
color_shift float 0.6 0–1.5 Per-cell palette noise amplitude
kx float 0.7 0–3 x-frequency of the parametric field
ky float 1.1 0–3 y-frequency of the parametric field
seed int null 0–999999 RNG seed

Reference

First 60 lines of reference.py. Full source: library_external/generative_pioneers_2/molnar_hypertransformations/reference.py

from __future__ import annotations

from typing import ClassVar

import imageio.v2 as imageio
import numpy as np


class MolnarHypertransformations:
    family: ClassVar[str] = "generative_pioneers_2"
    sketch: ClassVar[str] = "molnar_hypertransformations"

    def __init__(
        self,
        dim: int = 512,
        cols: int = 10,
        rows: int = 10,
        margin: float = 0.08,
        rotation_amp: float = 0.55,
        displacement_amp: float = 0.18,
        scale_amp: float = 0.35,
        color_shift: float = 0.6,
        kx: float = 0.7,
        ky: float = 1.1,
        seed: int | None = None,
    ) -> None:
        self.dim = dim
        self.cols = cols
        self.rows = rows
        self.margin = margin
        self.rotation_amp = rotation_amp
        self.displacement_amp = displacement_amp
        self.scale_amp = scale_amp
        self.color_shift = color_shift
        self.kx = kx
        self.ky = ky
        self._seed = seed
        self.rng = np.random.default_rng(seed)
        self.canvas = np.full((dim, dim, 3), 245, dtype=np.uint8)
        self.time = 0
        self._dirty = True

    def reset(self, seed: int | None = None) -> None:
        if seed is not None:
            self._seed = seed
        self.rng = np.random.default_rng(self._seed)
        self.canvas = np.full((self.dim, self.dim, 3), 245, dtype=np.uint8)
        self.time = 0
        self._dirty = True

    def _phi(self, u: float, v: float, t: float) -> float:
        return float(
            np.sin(self.kx * np.pi * u + 0.6 * t)
            * np.cos(self.ky * np.pi * v + 0.4 * t)
        )

    def _transformed_cell(
        self,
        cx: float,
        cy: float,

Try running it locally

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

python library_external/generative_pioneers_2/molnar_hypertransformations/reference.py

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

More from generative_pioneers_2

Sample of Computer-Aided Painting (Schwartz)

Computer-Aided Painting (Schwartz)

generative_pioneers_2 · lillian_schwartz

Lillian Schwartz, who worked at Bell Labs from 1968 to 2001 with Kenneth C.

View →
Sample of P-159 D (Mohr)

P-159 D (Mohr)

generative_pioneers_2 · mohr_p159d

Manfred Mohr's 'P-159 D' (1969, Vincennes) sits in the P-159 family that the artist developed from his earlier P-021 / P-036 line-arrangement programs.

View →
Sample of Raster Sequence (Nake)

Raster Sequence (Nake)

generative_pioneers_2 · nake_raster_sequence

Frieder Nake's 'Walk-through-Raster' / 'Raster Sequence' (1966) is the first non-stationary Markov chain in computer art history.

View →
Sample of Structure Computer (Cohen / AARON)

Structure Computer (Cohen / AARON)

generative_pioneers_2 · cohen_structure_computer

Harold Cohen's AARON, begun at UCSD in 1967-1973 and continuously developed until Cohen's death in 2016, is the longest-running art-making AI in history.

View →
Sample of Text Rain (Utterback & Achituv)

Text Rain (Utterback & Achituv)

generative_pioneers_2 · utterback_text_rain

Camille Utterback and Romy Achituv's 'Text Rain' (1999) is one of the canonical interactive installations of the late-1990s computer-vision era, and the piece that won them a US patent (US 6,928,313) in 2005.

View →
Sample of Wall Drawings (LeWitt)

Wall Drawings (LeWitt)

generative_pioneers_2 · sol_lewitt_wall_drawings

Sol LeWitt's wall drawings (1968-2007) are the canonical example of conceptual-art-as-algorithm: the work is the set of written instructions, and any number of draftspeople can execute them with different results that all satisfy the same rule.

View →

See all generative_pioneers_2 artworks →