Erick Calderon (Snowfro) · Art Blocks · 2020

Chromie Squiggles at MoMA

An archive prepared for The Museum of Modern Art covering the eight Chromie Squiggles in the collection. Each work is presented in three forms: the original on-chain Art Blocks HTML, a modern JavaScript port built for exhibition, and an experimental C++ port for long-term preservation research.

Chromie Squiggle #292 preview Chromie Squiggle #1047 preview Chromie Squiggle #2022 preview Chromie Squiggle #4436 preview

The collection

The eight works

For each work, Original HTML opens the self-contained on-chain version, JS Port opens the modern exhibition renderer, and Art Blocks Generator opens the live token on Art Blocks' own infrastructure for side-by-side reference. Click or tap any rendered Squiggle to animate it; press space to cycle the background.

The authoritative version

The original Art Blocks HTML

Each file in standalone_html/ is a single, self-contained HTML document that reproduces what the Art Blocks generator assembles when a Chromie Squiggle is viewed. Everything is in one place, in one file:

  • The injected token data. The document head contains the token's unique hash, injected as Art Blocks-style tokenData — the same mechanism the on-chain generator uses to seed each work.
  • p5.js v1.0.0. The exact library version the project depends on, embedded inline so the file renders with no network access, forever.
  • The original generator script. The Chromie Squiggle p5.js script as written in 2020 — the script that is frozen and locked on the Ethereum blockchain.

These files are the verification and preservation copies. They can be opened directly from disk in any modern browser, with no server and no internet connection, and they preserve the work's original 1:1.5 presentation ratio.

For fully independent verification, the same artwork can be reconstructed entirely from the blockchain: the Art Blocks On-Chain Generator contract (0x953D288708bB771F969FCfD9BA0819eF506Ac718) assembles identical HTML from on-chain data for any token of the Chromie Squiggle core contract (0x059EDD72Cd353dF5106D2B9cC5ab83a52287aC3a). The per-work Art Blocks Generator links above render each token live on Art Blocks' own infrastructure for side-by-side comparison.

For exhibition

The pure JavaScript port

This is a port, not the original. The renderer in pure_js_renderer/ is a re-implementation of the Chromie Squiggle algorithm in dependency-free JavaScript, written by the artist's studio. It reads the same token hash and draws the same Squiggle, but it is not the script stored on chain.

Why it exists: the original 2020 script runs on p5.js and was written for the browsers of its time. For long-running gallery display, the port offers practical advantages:

  • It runs without the p5.js library, removing roughly 1.6 MB of dependency code and the maintenance risk that comes with it.
  • It renders more efficiently, which matters for installations that run continuously for weeks or months.
  • It lets the background fill the entire screen, while the original constrains the work to its 1:1.5 canvas. On a gallery wall or non-standard display, the port fills the surface edge to edge.

Each JS Port link above passes the work's token ID and hash directly in the URL, so the port files also work offline, opened straight from disk. When questions of authenticity arise, always defer to the original HTML files.

For preservation research

The experimental C++ port

The cpp_renderer/ folder contains a native C++/SDL2 implementation of the same algorithm. It exists as preservation research: a demonstration that the work can outlive the web browser entirely, since it depends only on a C++ compiler and the SDL2 graphics library. It is experimental and has not been exhaustively compared against the original browser output — treat it as a development artifact, not a display copy.

To build and run it on macOS or Linux:

brew install sdl2 cmake   # macOS; on Linux use your package manager

cd cpp_renderer
cmake -S . -B build
cmake --build build

./build/apps/sdl/squiggle_sdl \
  --hash 0xbfbfcd75b5335b4ec1c0c58b37cbffb3e7e1fed13319bf1e5269d8fe3514fad7 \
  --width 1280 --height 800

Replace --hash with any hash from the works above (all eight are also listed in tokens.json) to render that Squiggle. Further options are documented in cpp_renderer/README.md.

Take it offline

Downloads