art_blocks · CherniakSquiggles
Chromie Squiggle (Snowfro / Cherniak — Squiggles)
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. The Squiggle is a single undulating line whose segments cycle through a curated palette of colours. NiftyFifty/SquiggleDAO's 2025 documentation classifies the 10,000-piece collection into six 'Types' — Normal, Slinky, Fuzzy, Ribbed, Bold, Pipe — plus six Hyper variants where the colour spread is multiplied 10x. This implementation builds the canonical undulating-curve kernel: a cosine wave with per-segment phase drift, with hue lerped across the spectrum (or via full-spectrum sweep in Hyper mode), and type-specific drawing logic (Fuzzy = pointillism dots; Ribbed = segments with 1-px gaps; Pipe = solid beam). The 'Color Spread' trait — Squiggle's defining DNA parameter — maps to hue_spread >= 1.0.
Original: https://www.artblocks.io/collection/chromie-squiggle-by-snowfro
▶ 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 segment k in [0, num_segments): x_k = lerp(x_start, x_end, k/K); y_k = canvas_centre + amplitude * cos(2*pi*k*freq/K + phase + phase_drift[k]) + wobble[k]; colour_k = HSV->RGB(hue_start + hue_end_diff * k/K + hue_noise * noise[k]). The Type determines how the segment is rasterised: Normal/Slinky/Bold/Pipe draw thick polylines; Fuzzy stamps Gaussian-jittered dots; Ribbed draws the segment then paints a 1-px gap every N segments.
Parameters
| Name | Type | Default | Range | Description |
|---|---|---|---|---|
dim | int | 600 | 200–1500 | Square canvas side length (px). |
num_segments | int | 24 | 4–200 | Number of segments K (Squiggle DNA: 8–60; Slinky up to 100). |
amplitude | float | 60 | 0–300 | Vertical amplitude of the cosine wave. |
curve_freq | float | 1.2 | 0.1–16 | Cosine waves across the canvas (Slinky: 4+, Pipe: 5+). |
hue_start | float | 0 | 0–1 | Start hue (0–1) of the colour cycle. |
hue_end | float | 0.7 | 0–1 | End hue (0–1) of the colour cycle. |
hue_spread | float | 0.04 | 0–1 | If >= 1.0, sweep full HSL spectrum across curve (Hyper mode). |
hue_noise | float | 0.03 | 0–0.3 | Per-segment random hue jitter. |
wobble_amp | float | 8 | 0–50 | Per-segment vertical wobble in px. |
thickness | int | 2 | 1–16 | Line thickness in px (Bold=6, Pipe=8). |
type_ | str | normal | null–null | normal|slinky|bold|pipe|fuzzy|ribbed — Squiggle Type. |
background_color | tuple | 255,255,255 | null–null | Background RGB colour (Squiggle default: white). |
seed | int | 7 | 0–2147483647 | RNG seed. |
Reference
First 60 lines of reference.py. Full source:
library_external/art_blocks/CherniakSquiggles/reference.py
"""CherniakSquiggles — "Squiggles" inspired by Snowfro's Chromie Squiggle.
This is the spectral, harmonic undulating-line family of generative
artworks descended from Erick Calderon's (Snowfro's) *Chromie Squiggle*
(Art Blocks #0, November 2020) — the on-chain generative-art collection
that launched the Art Blocks platform itself. The Squiggle is a single
undulating line whose segments cycle through a curated palette of
colours; each piece is determined by a hash string that controls the
segment count, the colour spread, the start/end hues, and other
parameters.
The Squiggle's formal language (per NiftyFifty / SquiggleDAO 2025
documentation) has six 'Types':
- **Normal** — the default undulating line.
- **Slinky** — tightly coiled spring.
- **Fuzzy** — line is replaced with small dots (pointillism).
- **Ribbed** — segmented with breaks that produce a ridged texture.
- **Bold** — fattened line (chunky ribbon).
- **Pipe** — solid beam (Slinky grounded).
And six 'Hyper' variants (chromatic boost with color_spread >=10x).
The complete taxonomy:
- 6,195 Normals, 1,145 Slinkies, 1,074 Fuzzies, 768 Ribbed,
443 Bolds, 181 Pipes; 128 Hyper variants (Hyper Normal = 104,
Hyper Slinky = 13, Hyper Bold = 7, Hyper Pipe = 4).
This implementation builds a generic Squiggle-family line that uses
the canonical undulating-curve kernel:
For each segment k in [0, num_segments):
x_k = canvas.x_start + (k / num_segments) * canvas.width
y_k = canvas.centre_y + amp * cos(2*pi*k*freq + phase)
colour = lerp(hue_start, hue_end, k/num_segments)
The amplitude / frequency / phase are perturbed per segment by
hash-derived noise so the curve has the gentle wobble of canonical
Squiggles. Hyper mode is achieved by using the full HSL spectrum
spread (colour_spread >= 0.9) and a small wobble (high curve_freq).
This file is named CherniakSquiggles per the project brief but the
Squiggle kernel is canonical Snowfro. Cherniak's connection is that
Squiggles are referenced as the second project he saw when he first
discovered Art Blocks (alongside Genesis), inspiring his own algorithmic
practice — but the actual algorithm here is the Squiggle kernel,
which Snowfro authored.
Reference:
- https://www.artblocks.io/articles/chromie-squiggle-algorithm-guide
- https://www.artblocks.io/collection/chromie-squiggle-by-snowfro
"""
from __future__ import annotations
from typing import ClassVar
import numpy as np
# ---------------------------------------------------------------------------
def _hsv_to_rgb_vec(h: np.ndarray, s: float = 0.85, v: float = 0.95) -> np.ndarray:
"""Vectorised HSV->RGB. h in [0, 1].""" Try running it locally
The reference implementation is self-contained Python with numpy. Install the package and run:
python library_external/art_blocks/CherniakSquiggles/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).
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.
Penne 80s Vector (Aaron Penne — outrun perspective wireframe)
art_blocks · Penne80sVector
The 80s-synthwave outrun grid, the visual aesthetic Aaron Penne references in his generative-art practice (notably in *Apparitions* and his broader body of work).