art_blocks · PenneBonesOfTheEarth
Penne Bones of the Earth (Aaron Penne — Apparitions)
Aaron Penne's signature algorithm from *Apparitions* (Art Blocks Curated, March 2021) — 'drawing multiple straight lines across the screen, and perturbing them according to an underlying noise field. Each line is actually hundreds of connected points, offset according to various rules.' Penne was the Director of Engineering at Art Blocks and one of the top-50 NFT artists globally in 2021; *Apparitions* drives on 18 parameters that control 14 features (Positioning, Stretch, Haunting, Facing, Spook, Bands, Brush Style, Reach, Altitude, Backdrop, Colors), producing 1500 unique outputs. The canonical 'bones of the earth' visual language — layered horizontal bands of noise-perturbed nodes — runs through Penne's earlier *Bones of the Earth* series (2019) and his later *Return*, *Catalina*, and *East/West Street*. This implementation layers N horizontal bands, each with M noise-perturbed nodes and a per-band colour drawn from a curated palette (Penne's 'Zephyr' colour picker), with three Brush Styles (solid, feathered, watercolor).
Original: https://www.artxcode.io/journal/aaron-penne-apparitions-on-art-blocks
▶ 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
For each band b in [0, num_bands): x_b[i] = lerp(0.04*dim, 0.96*dim, i/nodes); y_b[i] = baseline_b + reach * (0.7*value_noise_1d(i, grid_size) + 0.3*value_noise_1d(i, 2*grid_size)). baseline_b = (b+1) * dim/(num_bands+1) + altitude_drift * normal(0, 1). Each band is rasterised as a polyline of segment-to-segment lines with a per-band alpha.
Parameters
| Name | Type | Default | Range | Description |
|---|---|---|---|---|
dim | int | 600 | 200–1500 | Square canvas side length (px). |
num_bands | int | 24 | 4–100 | Number of stacked horizontal bands (Apparitions DNA: 8–50). |
nodes_per_band | int | 120 | 20–600 | Stretch — nodes per band (Penne: 100–300). |
reach | float | 60 | 0–200 | Vertical amplitude of per-node noise offset, px (Penne: 0.1–0.3 amplitude). |
altitude | float | 0.4 | 0–1 | Per-band baseline drift (Penne's Altitude feature). |
noise_scale | float | 0.04 | 0.005–0.5 | Spatial frequency of the value-noise field. |
noise_grid | int | 12 | 4–64 | Internal value-noise grid resolution. |
brush_style | str | feathered | null–null | solid|feathered|watercolor — band stroke style. |
palette | list | null | null–null | Band colour palette (Zephyr-style: each band picks one). |
background | tuple | 240,235,225 | null–null | Background RGB (Light = 80% chance in Penne's DNA, Darkness = 20%). |
seed | int | 7 | 0–2147483647 | RNG seed. |
Reference
First 60 lines of reference.py. Full source:
library_external/art_blocks/PenneBonesOfTheEarth/reference.py
"""PenneBonesOfTheEarth — Aaron Penne noise-perturbed layered lines.
Inspired by Aaron Penne's *Apparitions* (Art Blocks Curated, March
2021) and his broader body of generative work (*Return*, *Catalina*,
*East/West Street*, *Saying The Same Thing*). Penne is the
Director of Engineering at Art Blocks, was one of the top-50 NFT
artists globally in 2021, and won the inaugural Lumen Prize for Art
and Technology in 2022 (with Boreta, for *Rituals — Venice*).
Penne describes his core algorithm in his 2021 ARTXCODE essay on
Apparitions:
"The initial inspiration for this algorithm was a visualization
published in 1893 by Levi Walter Yaggy. ... I approached this by
drawing multiple straight lines across the screen, and
perturbing them according to an underlying noise field. Each
line is actually hundreds of connected points, offset according
to various rules."
The key DNA of Penne's work, named here PenneBonesOfTheEarth (after
the conceptual *bones-of-the-earth* geological visual language that
runs through his 2019 *Bones of the Earth* series):
1. Draw N horizontal "bands" (long lines stretching across the
canvas, the canonical "stretched sheet" feature of Apparitions
and Bones of the Earth).
2. Each band is parameterised by 100–300 nodes (the Stretch
feature: "The more nodes, the higher the detail, and the more
compressed the form"). The band has a baseline y-position
and a per-node vertical offset.
3. The per-node vertical offset is sampled from a noise field —
"the size of the step taken in the noise domain ... used to
determine the variability within the form" (Penne's "Spook"
feature).
4. Bands stack up like geological strata, each with its own
colour drawn from a hand-curated palette (the "Zephyr" colour
picker picks "a new random color with every band").
5. Lines are drawn solid or blended (the "Brush Style" feature
controls whether lines are crisp or feathered).
The implementation here draws N bands, each with a noise-perturbed
baseline y-coordinate and an optional per-band colour from the
palette, with two Brush Styles (solid and feathered alpha-blend).
Reference:
- https://www.artxcode.io/journal/aaron-penne-apparitions-on-art-blocks
- https://www.aaronpenne.io/about
"""
from __future__ import annotations
from typing import ClassVar
import numpy as np
def _smoothstep(t: np.ndarray) -> np.ndarray:
return t * t * (3.0 - 2.0 * t)
def _value_noise_1d( Try running it locally
The reference implementation is self-contained Python with numpy. Install the package and run:
python library_external/art_blocks/PenneBonesOfTheEarth/reference.py Need help? See Learn for the standard environment setup, or Playground for an in-browser sketchbook.
More from art blocks
Cherniak Ringers (Dmitri Cherniak — Ringers)
art_blocks · CherniakRingers
An implementation of Dmitri Cherniak's *Ringers* algorithm (Art Blocks Curated, January 2021, 1,000 NFTs) — one of the most-cited generative-art projects of the NFT era, and the source of *Ringers #879* ('The Goose') and *Ringers #962* (acquired by LACMA).
Chromie Squiggle (Snowfro / Cherniak — Squiggles)
art_blocks · CherniakSquiggles
An implementation of the squiggle-generation kernel used in Snowfro's *Chromie Squiggle* (Art Blocks #0, November 2020) — the on-chain generative-art project that launched the Art Blocks platform itself and was the work Dmitri Cherniak cited (alongside *Genesis*) as his inspiration for Ringers.
Genesis (DCA — Day-Zero Art Blocks)
art_blocks · DcaGenesis
An interpretation of DCA's *Genesis* (Art Blocks #1, November 2020) — one of three Day-Zero collections (alongside Snowfro's Chromie Squiggle and Jeff Davis's Construction Token) that minted in the first 24 hours of the Art Blocks platform.
Hobbs Flow Field (Tyler Hobbs — Incomplete Control / Fidenza)
art_blocks · HobbsFlowField
The canonical perlin-noise flow-field algorithm described by Tyler Hobbs in his 2020 essay 'Flow Fields', and the algorithmic backbone of his Art Blocks Curated works *Incomplete Control* (Bright Moments, 2021) and *Fidenza* (Art Blocks, 2021).
Hobbs Watercolor Blob
art_blocks · HobbsWatercolorBlob
Layered translucent Gaussian blobs with watercolor-style alpha falloff.
Hobbs Watercolor Edge (Tyler Hobbs — Soft Textures / Watercolor)
art_blocks · HobbsWatercolorEdge
An implementation of Tyler Hobbs' 2017 'watercolor' technique: a recursive polygon-deformation algorithm whose midpoints are jittered by Gaussian noise across many passes, then stacked with low alpha (4% per layer, 30–100 layers total) to produce the soft, ink-bleed look of wet pigment on paper.