hobbs_cherniak_penne_deep · CherniakConstellations
Cherniak Constellations (Dmitri Cherniak point-cloud + graph)
A pseudo-random point cloud with connecting lines filtered by distance, producing graph-like emergent forms. ~200 'stars' are placed with a Gaussian centre bias (so the cloud is denser in the middle, the way real constellations are), each with a power-law brightness distribution (mostly dim, a few bright — the canonical astronomical distribution). For each pair of stars, if their distance is below a configurable maximum, a connecting line is drawn. The line's alpha and thickness decrease with distance, and the line's colour is pale cyan/white. Each star is drawn as a small bright core with a soft halo. The result is a sparse graph of clusters and chains — emergent connectivity rather than a fully connected mesh, the canonical constellation aesthetic. Cherniak describes his practice as exploring the 'possibilities of automated art' (LACMA, 2021); a small set of simple rules producing graph-like emergent forms is the simplest example of that ethos.
Original: https://www.dmitricherniak.com
▶ 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.
Math essence
Place N stars at positions drawn from N((dim/2, dim/2), (sigma*dim)^2). For each pair (i, j) with d = ||p_i - p_j||, if d < d_max then draw a line with alpha = alpha_max * (1 - (d/d_max)^falloff) and thickness = round(thickness_max * (1 - (d/d_max)^falloff)). For each star, draw a soft halo of radius halo_r and a small bright core of radius star_r, both with alpha proportional to the star's brightness.
Parameters
| Name | Type | Default | Range | Description |
|---|---|---|---|---|
dim | int | 600 | 200–1500 | Square canvas side length (px). |
num_stars | int | 200 | 10–2000 | Number of stars N in the cloud. |
dist_max_frac | float | 0.18 | 0.01–1 | Max connection distance as fraction of dim. |
dist_falloff | float | 1.6 | 0.5–6 | Power on the distance falloff (higher = sharper cutoff). |
center_bias | float | 0.25 | 0–0.6 | Gaussian sigma (frac of dim) for centre bias. 0 = uniform. |
star_radius_frac | float | 0.0014 | 0.0005–0.01 | Star core radius as fraction of dim. |
star_halo_frac | float | 0.005 | 0–0.05 | Star halo radius as fraction of dim. |
line_thickness_max | int | 2 | 1–6 | Max line thickness (px) at the closest distance. |
line_alpha_max | float | 0.85 | 0.05–1 | Max line alpha (1 = fully opaque). |
background | tuple | 10,12,22 | null–null | Background RGB colour (night sky). |
seed | int | 42 | null–null | RNG seed. |
Reference
First 60 lines of reference.py. Full source:
library_external/hobbs_cherniak_penne_deep/CherniakConstellations/reference.py
"""CherniakConstellations — Dmitri Cherniak pseudo-random constellations.
A homage to Dmitri Cherniak's *Constellations* series: a
pseudo-random point cloud with connecting lines filtered by
distance, producing graph-like emergent forms.
The kernel we implement:
1. Place N "stars" at random positions on the canvas, with
a slight bias towards the centre (a Gaussian falloff
that gives a denser, more constellation-like cluster).
2. For each pair of stars (i, j), if `||p_i - p_j|| < d_max`,
draw a line from i to j. The line's alpha and thickness
decrease with distance (close pairs: bright + thick;
distant pairs: faint + thin).
3. Each star is drawn as a small filled disc with a
bright centre and a soft halo (the "star" aesthetic).
4. Lines that pass near a star get a slight brightness boost
(the "halo" effect that makes the constellation feel
connected).
Cherniak describes his *Constellations* work as exploring the
"possibilities of automated art" (LACMA, 2021) — a small set
of simple rules producing emergent graph-like forms. The
key visual signature is the *sparse* connectivity: most pairs
of stars are NOT connected (because their distance exceeds
d_max), so the result is a graph of clusters and chains rather
than a fully connected mesh.
Reference:
- https://www.dmitricherniak.com
- https://www.youtube.com/watch?v=HoMt5vXmtP0
"""
from __future__ import annotations
from typing import ClassVar
import numpy as np
# ---------------------------------------------------------------------------
class CherniakConstellations:
"""Cherniak-style point-cloud + distance-filtered graph.
Parameters
----------
dim : int
Square canvas side length (px).
num_stars : int
Number of stars N in the cloud.
dist_max_frac : float
Maximum connection distance as a fraction of dim.
dist_falloff : float
Power on the distance falloff. Higher = sharper cutoff.
center_bias : float
Gaussian sigma (as fraction of dim) for the centre bias.
0 = uniform, 0.4 = strong centre clustering.
star_radius_frac : float
Star radius as a fraction of dim.
star_halo_frac : float Try running it locally
The reference implementation is self-contained Python with numpy. Install the package and run:
python library_external/hobbs_cherniak_penne_deep/CherniakConstellations/reference.py Need help? See Learn for the standard environment setup, or Playground for an in-browser sketchbook.
More from hobbs_cherniak_penne_deep
Cherniak Nibbles (Dmitri Cherniak cell-eating cellular automata)
hobbs_cherniak_penne_deep · CherniakNibbles
A cellular-automata growth algorithm in the spirit of Dmitri Cherniak's body of work — small 2D shapes ('nibbles') that grow by selectively removing neighbours.
Hobbs Color-Field Overlay (Tyler Hobbs compositional method)
hobbs_cherniak_penne_deep · HobbsColorFieldOverlay
Hobbs's compositional method of choice: combine TWO independent fields — a Perlin flow field that drives the *trajectory* of a set of line segments, and a Gaussian-blurred colour field that drives the *colour* and *opacity* of those segments.
Hobbs QLIQUE (Tyler Hobbs — QQL dense-streamline tangle)
hobbs_cherniak_penne_deep · HobbsQLIQUE
A dense tangle of curves where every curve is a streamline through a Perlin flow field, in the visual spirit of Tyler Hobbs's 2022 QQL release (with Dandelion Mane).
Hobbs Spirograph (Tyler Hobbs — Petal Loops / Elektroanima)
hobbs_cherniak_penne_deep · HobbsSpirograph
A rotating-circular-arc trail in the spirit of Tyler Hobbs's *Petal Loops* (2020) and *Elektroanima* (2020) — works described by Hobbs as 'looping taken to an excessive level.' M rotating points (default 8) are connected by a closed polyline that morphs each frame as the whole ring rotates by a small angle around a central anchor.
Penne Imprecise Balance (Aaron Penne stacked-blocks column)
hobbs_cherniak_penne_deep · PenneImpreciseBalance
A column of stacked rectangular blocks where each block is rotated by a seed-derived angle.
Penne Ringers (Aaron Penne concentric ring extrusion)
hobbs_cherniak_penne_deep · PenneRingers
Penne's take on the *Ringers* idiom (best known from Cherniak's Art Blocks release, 2021): concentric rings extruded along the Z axis, rotated about a common axis, projected to 2D.