Entfaltung (2026): token metadata, configurations and on-chain code
Read 2026-11-01 from harm.work/nft/entfaltung, from the contract's tokenURI for tokens 0–24, from the token images on Arweave, and from the artist's project files for the work (data/tokens.json, GLOSSARY.md, architecture/the-drop.md, architecture/on-chain.md, LOG.md). Wiki pages: Entfaltung on Chain, Entfaltung.
Collection
| Field | Value |
|---|---|
| Title | Entfaltung (symbol ✸) |
| Token contract | 0x983e8df3186aa40eef4e299c4f0133bca0e50276 (Ethereum mainnet, ERC-721) |
| Metadata contract | 0xF9e86cCB5A7D8d36aCd127CCa48696d34B514486 |
| Deployer and owner | 0xa8031CcA3c436ae91703180893c90100B7c795F5, entfaltung.eth |
| Deployed | 2026-10-05; token 0 minted the same day |
| Minted | 25 (tokens 0–24), all held by entfaltung.eth, listed as open for inquiry |
| Places | 36 for good (artist, 2026-10-13: "in total there will only be 36 tokens ever") |
| Viewer | https://entfaltung.harm.work/[id] |
The ids say what kind of token each is (architecture/the-drop.md):
| Ids | Group | Count |
|---|---|---|
| 0 | Genesis | 1 |
| 1–24 | Created by the artist | 24 |
| 25–32 | "Channelled personal tokens — made later, in conversation with collectors" | 8 |
| 33–35 | Artist's proofs | 3 |
Places 25–35 are listed on harm.work as Entfaltung (25) … Entfaltung (32) and Entfaltung (AP1) … (AP3), without traits, and the contract reverts for their tokenURI. On 24 October eight personal tokens were drafted after four Emma Kunz drawings and after the artist's Markov's Window (2004); by 25 October all eight places were placeholders again, and three of the drafts had moved into the artist's run as tokens 18, 19 and 23, a fourth as token 24 (below).
Mint dates (from the work log): token 0 on 5 October; 1–5 on 22 October; 6–16 on 23 October; 17 on 24 October; 18 and 19–24 on 25 October. Tokens were minted under numbered names (Entfaltung (6)) and given their glyph names on-chain on 26 October.
Updatable by design. Nothing in the contracts can be locked: not the renderer, not a configuration, not a token's metadata. The project notes record the decision and the artist's reason: "i want the artwork to always be updatable in any way." The one irreversible switch ends minting (closeMinting). During the release week the renderer was overwritten four times (22, 23, 24 and 26 October) and several configurations and images were rewritten after mint.
Collection text (verbatim)
Entfaltung is German for unfolding. I begin with the pendulum drawings of Swiss healer-artist Emma Kunz (1892–1963) and unfold them out of the flat page into space and time. What Kunz fixed on graph paper, I set in motion: a living drawing, computed in real time, that never repeats.
The work is fully on-chain and fully deterministic. Roughly every twelve seconds a new Ethereum block re-folds the same structure into a new shape. The points of a token and the connections between them never change; only their positions move.
Kunz let her pendulum decide. In its place I consult the blockchain: each block hash is a swing of the pendulum, the same for every observer and authored by no one.
Teaser: "A living drawing that unfolds the pendulum drawings of Emma Kunz from the flat page into space and time. Fully on-chain, and folded into a new shape by every Ethereum block."
Every token's on-chain description is "By Harm van den Dorpel, 2026." Token 0 carries the trait Generation: Genesis, the others Generation: Regular.
What a token stores
tokenURI returns base64 JSON with the name, the description, ten traits, an image on Arweave (ar://…, a 2400 × 2400 px PNG; harm.work serves 1200 px copies) and an animation_url: a self-contained HTML page of about 67 KB. The page carries two gzip-compressed, base64-encoded strings, decompressed in the browser with DecompressionStream: __CONFIG__, the token's settings as JSON (about 100 fields), and __ART__, the renderer, 143,086 bytes of JavaScript with its WebGL2 shaders (49,090 bytes gzipped, stored in two SSTORE2 chunks). The renderer is byte-identical in all 25 tokens.
The tokens
Points are given as base points × copies made by the symmetry group. Bounding: points seeded on the surface of the bounding sphere or anywhere in its ball. Seed: the token's own seed (see Mechanics for what it does). Made: the date the configuration was first saved in the editor.
| ID | Glyph | Unicode name | Made | Minted | Symmetry | Points | Bounding | Seed | Faces | Face colour | Line colour | Material | Appearance | Background |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 𝛼 | mathematical italic small alpha | 20 Jun | 5 Oct | octant | 48 = 6 × 8 | ball | 301 | volume mesh | by size | by depth | solid | pure | black |
| 1 | ɐ | latin small letter turned a | 27 Jul | 22 Oct | octant | 144 = 18 × 8 | ball | 341 | volume mesh | by size, even | by length | solid | pure | black |
| 2 | ⚭ | marriage symbol | 12 Sep | 22 Oct | cube | 48 = 1 × 48 | ball | 250 | wireframe | none | by point + fans | reflective | pure | black |
| 3 | ∴ | therefore | 12 Sep | 22 Oct | octant | 32 = 4 × 8 | surface | 353 | geode | by size | fading | reflective | sharp glow | black |
| 4 | ⁘ | four dot punctuation | 13 Oct | 22 Oct | mirrored | 72 = 36 × 2 | ball | 346 | neighbour cells | by depth | by length | solid | sharp glow | dark tone |
| 5 | ⁙ | five dot punctuation | 30 Sep | 22 Oct | polygonal (5) | 40 = 4 × 10 | ball | 328 | volume mesh | by size | by depth | reflective | subtle glow | black |
| 6 | ⟁ | white triangle containing small white triangle | 12 Sep | 23 Oct | polygonal (3) | 108 = 18 × 6 | ball | 432 | orbit shells | by depth | by length | solid | strong glow | dark tone |
| 7 | 𝟟 | mathematical double-struck digit seven | 12 Sep | 23 Oct | polygonal (5) | 120 = 12 × 10 | ball | 309 | geode | by size | by direction | solid | strong glow | dark tone |
| 8 | ∞ | infinity | 12 Sep | 23 Oct | icosahedral | 120 = 1 × 120 | surface | 291 | mirror layers | by size | by point + fans | solid | subtle glow | dark tone |
| 9 | ⧗ | black hourglass | 1 Oct | 23 Oct | octant | 56 = 7 × 8 | ball | 300 | slivers | by depth | none | solid | subtle glow | black |
| 10 | ※ | reference mark | 7 Oct | 23 Oct | cube | 48 = 1 × 48 | surface | 145 | mirror bands | by depth | by point | reflective | strong glow | black |
| 11 | 𐄍 | aegean number seven | 12 Sep | 23 Oct | polygonal (7) | 28 = 2 × 14 | ball | 379 | tetrahedra | by size, even | gradient | solid | trails | dark tone |
| 12 | Ж | cyrillic capital letter zhe | 13 Oct | 23 Oct | octant | 48 = 6 × 8 | ball | 590 | volume mesh | by size, even | fans only | ambient | pure | black |
| 13 | ᛃ | runic letter jeran j | 12 Sep | 23 Oct | pinwheel | 48 = 2 × 24 | ball | 379 | spiral weave | by depth | by direction | reflective | pure | black |
| 14 | ǂ | latin letter alveolar click | 12 Sep | 23 Oct | octant | 24 = 3 × 8 | surface | 409 | mirror bands | alternating | multicolour + fans | solid | subtle glow | dark tone |
| 15 | ⦶ | circled vertical bar | 30 Sep | 23 Oct | octant | 32 = 4 × 8 | surface | 293 | slivers | multicolour | gradient | ambient | strong glow | black |
| 16 | ✺ | sixteen pointed asterisk | 7 Oct | 23 Oct | octant | 40 = 5 × 8 | ball | 380 | volume mesh | by size | singular + fans | reflective | strong glow + trails | dark tone |
| 17 | ⏣ | benzene ring with circle | 12 Sep | 24 Oct | polygonal (6) | 36 = 3 × 12 | surface | 622 | geode | by size, even | fading + fans | reflective | sharp glow + long exposure | gray |
| 18 | ꕥ | vai syllable zha | 24 Oct | 25 Oct | octant | 56 = 7 × 8 | ball | 300 | slivers | by symmetry | fans only | solid | pure | bright |
| 19 | ᗢ | canadian syllabics carrier ttu | 24 Oct | 25 Oct | mirrored | 102 = 51 × 2 | surface | 356 | wireframe | none | singular + fans | solid | pure | bright |
| 20 | ۞ | arabic start of rub el hizb | 12 Sep | 25 Oct | polygonal (8) | 48 = 3 × 16 | surface | 372 | slivers | none | fans only | solid | subtle glow | bright |
| 21 | ϫ | coptic small letter gangia | 13 Oct | 25 Oct | mirrored | 204 = 102 × 2 | ball | 718 | neighbour cells | by size | singular + fans | solid | strong glow | gray |
| 22 | ⌁ | electric arrow | 12 Sep | 25 Oct | pinwheel | 24 = 1 × 24 | surface | 494 | orbit shells | by size | multicolour | ambient | strong glow | dark tone |
| 23 | ᛥ | runic letter stan | 24 Oct | 25 Oct | cube | 144 = 3 × 48 | ball | 665 | wireframe | none | fans only | solid | strong glow | bright |
| 24 | ⟡ | white concave-sided diamond | 25 Oct | 25 Oct | octant | 24 = 3 × 8 | surface | 634 | slivers | alternating | none | solid | sharp glow | gray |
Distribution: octant 10, polygonal 6 (fold 5 twice; 3, 6, 7 and 8 once each), cube 3, mirrored 3, pinwheel 2, icosahedral 1. Points range from 24 to 204, 1,694 in all. Material: solid 15, reflective 7, ambient 3. Background: black 10, dark tone 8, bright 4, gray 3.
Glyphs and folds. Five of the six polygonal tokens have a glyph that shows their fold: ⟁ (a triangle in a triangle) is three-fold, ⁙ (five dots) five-fold, ⏣ (a benzene ring) six-fold, 𐄍 (Aegean number seven) seven-fold and ۞ (the eight-pointed rub el hizb) eight-fold. The sixth, 𝟟 (token 7), is five-fold and takes its number from its id, as ∴ (3) and ⁘ (4) do.
Palettes
Each configuration has six main colours (cornerColor, edgeColor, color3–color6), a line colour (strokeColor) with its opacity, and a ground (background). Which of them a viewer sees depends on the colouring traits: a token with Face colour: none shows its main colours only in fans or slivers, and a line opacity of 0 hides the chords.
| ID | Glyph | Ground | Lines | Line opacity | Main colours 1–6 |
|---|---|---|---|---|---|
| 0 | 𝛼 | #000000 | #ffffff | 0.4 | #b246ec #fbf650 #7a3364 #f55905 #e67e22 #a16887 |
| 1 | ɐ | #000000 | #cda2a2 | 0.85 | #dbd7ae #fbf650 #ae3287 #f96c1f #1e1d3e #4a5b6d |
| 2 | ⚭ | #0a0010 | #ffd0e0 | 0.2 | #ff006e #fb5607 #ffbe0b #8338ec #3a86ff #ff477e |
| 3 | ∴ | #000208 | #ffffff | 1 | #a38c19 #893e6e #265773 #898b18 #411976 #ff0040 |
| 4 | ⁘ | #050008 | #ffffff | 0.35 | #ff2d95 #fbf650 #b246ec #4d9dac #f55905 #a16887 |
| 5 | ⁙ | #06040f | #ffe3b3 | 0.4 | #2d1b69 #5b3fa6 #a05bb5 #e27d9f #f6b38a #ffe3b3 |
| 6 | ⟁ | #000208 | #00ffd0 | 0.72 | #00ffd0 #ff00a0 #00a3ff #faff00 #7000ff #00ffa0 |
| 7 | 𝟟 | #00120c | #d9ffe8 | 0.42 | #04e762 #00a878 #1100fa #1b998b #0b5d3a #7ae582 |
| 8 | ∞ | #0b0410 | #ffffff | 1 | #ff9ff3 #feca57 #48dbfb #ff6b6b #1dd1a1 #f368e0 |
| 9 | ⧗ | #000000 | #ffffff | 0 | #b246ec #f9dc1f #4b3f47 #f50505 #ff7700 #b7528a |
| 10 | ※ | #000000 | #eafff5 | 0.36 | #d1b8ff #cbf3f0 #ffb54d #fbff05 #118a7e #f8f359 |
| 11 | 𐄍 | #000208 | #00ffd0 | 0.29 | #00ffd0 #ff00a0 #00a3ff #faff00 #7000ff #00ffa0 |
| 12 | Ж | #000000 | #cda2a2 | 0 | #b246ec #fbf650 #ae4b32 #f96c1f #b0b0b0 #4a5b6d |
| 13 | ᛃ | #050008 | #ffffff | 0.36 | #ff2d95 #fbf650 #b246ec #4d9dac #f55905 #a16887 |
| 14 | ǂ | #0c0410 | #ffe0ff | 0.78 | #ffffff #3c2525 #ff2600 #560bad #ff5fb5 #3a0ca3 |
| 15 | ⦶ | #0b0618 | #ffb26b | 0.33 | #1d1a4f #5b2a86 #c94b7c #ff7b54 #ffb26b #ffe6a7 |
| 16 | ✺ | #00120c | #d9ffe8 | 0.69 | #04e762 #ff5b14 #89fc00 #1b998b #0b5d3a #7ae582 |
| 17 | ⏣ | #252c27 | #c137da | 0.22 | #aca9d5 #e34d21 #4539f3 #ace3b0 #69cf98 #5e5633 |
| 18 | ꕥ | #d6bb8c | #c65446 | 0 | #dfe3dc #62b8d8 #bac6c2 #d99a5c #e8be36 #c65446 |
| 19 | ᗢ | #dfe4d5 | #3a3d36 | 0.15 | #1f7a6e #d0606e #3a3d36 #1f7a6e #d0606e #3a3d36 |
| 20 | ۞ | #eecea5 | #6b5236 | 0 | #9d9b9c #f05656 #f5e2c1 #ee8af5 #8ea2a6 #915608 |
| 21 | ϫ | #616161 | #ff2a1a | 0.1 | #b030f0 #d0710a #ea0f0d #37046c #64180a #02010b |
| 22 | ⌁ | #110119 | #ffffff | 0.8 | #ff2d95 #fbf650 #b246ec #4d9dac #f55905 #a16887 |
| 23 | ᛥ | #ecd4be | #e0b428 | 0 | #a86878 #4a4a44 #2a6a58 #7a7430 #e0b428 #d05a40 |
| 24 | ⟡ | #242424 | #ffffff | 0 | #ffffff #ffffff #ff00ff #0000ff #00ff00 #000000 |
Shared palettes: ⁘ (4), ᛃ (13) and ⌁ (22) use the same six colours; ⟁ (6) and 𐄍 (11) use the same six and the same line colour; 𝛼 (0), ⧗ (9) and Ж (12) share their first colour, #b246ec; 𝟟 (7) and ✺ (16) share four colours, their line colour and their ground. ⁙ (5) and ⦶ (15) are ordered ramps, dark violet or navy to pale peach or yellow.
Origins named in the project notes: the colours of ꕥ (18) were "sampled from the picture", a Kunz drawing reproduced on kvadratinterwoven.com (a flat-topped octagon painted pale on tan paper, a 3 × 3 lattice of red–orange–yellow spindles and blue-grey chevrons, red string fans, navy lines). ᗢ (19) was made after another Kunz drawing (a diamond in a square, string-art fans in teal, pink and near-black on pale green-grey paper), its colours sampled the same way, then edited by the artist. ᛥ (23) was made after the same drawing as ꕥ and edited by the artist. ⟡ (24) began as a preset after Markov's Window (2004), with the artist's instruction "the colour palette should be #ff00ff #0000ff #00ff00 #ffffff #000000 and a black to white gradient — only use these", and was then edited by him.
Mechanics (from the renderer and the glossary)
The full graph. The drawing type is Scatter3D: "N points placed at seeded-random positions on (or in) a bounding sphere S1, every one joined to every other by a straight 3D chord (the full graph)" (glossary). The Connections trait is therefore n(n − 1)/2 for every token. Six tokens set the line opacity to 0 and draw none of these chords: ⧗ (9), Ж (12), ꕥ (18), ۞ (20), ᛥ (23), ⟡ (24).
Symmetry groups. The token's rays setting is divided by the size of the group's orbit and rounded, giving the number of base points; each base point is seeded and copied by every element of the group. Groups and orbit sizes: mirrored (mirrorX, one mirror plane, 2), octant (three coordinate mirror planes, 8), pinwheel (triad, the octant plus a three-fold turn about the cube's diagonal, 24), cube (cubic, full octahedral symmetry, 48), icosahedral (icosa, 120), polygonal (k) (k mirror planes through the vertical axis in place of the octant's two, base points seated on a mirror, 2k copies). Three tokens have a single base point: ⚭ (cube, 48), ∞ (icosahedral, 120) and ⌁ (pinwheel, 24). For mirrored and octant figures an even stretch then scales two axes by up to 3 so the outline is as wide as it is high in each resting view. Redraw open middles (set in 7 tokens) draws a figure again, up to eight times, while a resting view's middle gap exceeds 0.4 of the radius or the faces fall into separate pieces.
Faces (faceMode, glossary definitions): wireframe, no faces; volume mesh (lattice), all triangles of the graph joining each point to its k nearest (k ≈ N/4, 6–14); orbit shells, the points' orbit classes packed into about ∛N nested shells, each a convex hull; mirror layers, for each mirror plane the points of one side packed by height into plates and mirrored; mirror bands, each point's chords to its two nearest on its side, filled with their mirror image as one trapezoid across the plane; tetrahedra, each point with its three nearest; neighbour cells, each point with its four nearest, all ten triangles; spiral weave, triangle i joins points i, i + s, i + 2s with stride s ≈ N/φ²; geode, every convex-hull face plus its three walls to the point nearest the centre. Slivers (the trait) are projection slivers: "a region of the projection plane enclosed by projected lines. It is NOT a face in space … They belong to one view, so they are found again for every frame." Five tokens use them: ⧗, ⦶, ꕥ, ۞, ⟡. Fans (the "+ fans" line colours and "fans only") are the line waver fill: a face drawn as a bundle of lines from its sharpest corner to evenly spaced landing points on the far edge, the glossary's fan.
Clock. Time is counted in Ethereum's 12-second slots from the beacon chain's genesis (2020-12-01 12:00:23 UTC). Every page runs on one shared clock, so all viewers see the same picture at the same moment, whenever they opened the page.
Block feed. The page makes one kind of request: recent blocks from the relay https://seeder.mutant.garden/api/block/last, "its only way to learn a block hash, since nothing in a sealed page can" (on-chain.md). Each block gives one number, the first 32 bits of its hash. A slot without a block takes the last block within eight slots; a slot the page does not know takes a "clock value", a fixed function of the slot number. If the relay has not answered within three seconds the work starts on clock values and switches when the blocks arrive. "Without the relay the artwork plays on the clock alone."
Cycle. Four slots make a cycle of 48 seconds: three turns, then a morph. In each turning slot the figure rests, then turns from one symmetric pose (a view in which its symmetry lines up with the screen) to the next; a quarter turn takes 8.8 s, a half turn 10 s (6 + 4√(angle/π) seconds), eased, ending at the slot's close. The turns of one cycle are about three different screen axes (a tilt, a pan and a spin), each at most a quarter turn where one is open; for a figure with a single mirror plane, half turns. The block of each turning slot picks the way. Eight cycles make a lap of 32 slots, one Ethereum epoch: the lap's first block picks a goal pose and a door, and the turns are steered so the lap ends in the goal and the next one starts from it, visiting poses not yet seen on the way.
Morph. The block of the fourth slot is the seed of the next structure. The renderer redraws the token's figure with that number in place of the token's own seed: same count, same group, same bounding, new positions. Each new point is then matched, orbit by orbit, to the nearest point of the token's reference configuration (the figure of its own seed), so every point keeps its index, and over the last ten seconds of the cycle every point travels in a straight line, eased, to its new position. Chords keep their ends and travel with them. Faces are recomputed for the new positions: faces present in both structures change shape, faces only in the old fade out, faces only in the new fade in. The morph refuses two structures with different point counts ("only the seed may change").
Consequences. The shape at any moment depends on the block hashes and on the settings that place points (rays, symmetry, fold, bounding, redraw), not on the token's own seed, which sets only the reference used for matching. Tokens that share those settings share their positions and their turns at every moment. ⧗ (9) and ꕥ (18) share all of them (octant, 55 rays, ball, seed 300): the project notes say ꕥ was built as "token 9's figure". A render of both on 1 November 2026 showed the same outline at every frame. 𝛼 (0) and Ж (12), ∴ (3) and ⦶ (15), ǂ (14) and ⟡ (24) share symmetry, point count and bounding; the second token of each pair redraws open middles, so the two coincide whenever the first draw passes that test. A render of ǂ and ⟡ on 1 November showed different figures for a whole cycle, so that cycle's first draw had been rejected; a moment when either of these pairs coincides was not observed.
Where the published texts differ from the code
- "Roughly every twelve seconds a new Ethereum block re-folds the same structure into a new shape" (collection text; entfaltung.harm.work/about): every block turns the figure or moves its points; the points move every fourth block, about every 48 seconds.
- "The points of a token and the connections between them never change; only their positions move": true of the chords, since every point is joined to every other. The faces are rebuilt for each structure, and some vanish and appear during the morph.
- "Every block deforms the figure without ever tearing it" (entfaltung.harm.work/about): applies to the chords; faces are cut and joined anew.
- "No server, no stored image" (entfaltung.harm.work/about): the program, the configurations and the computed image need no server; the block hashes reach the page through the relay at seeder.mutant.garden, and each token stores a still image on Arweave.
- "Fixed elsewhere, by the seed and the block hash" (the editor, entfaltung.harm.work/about): the block hash sets the positions; the token's seed sets the reference for matching.
- entfaltung.harm.work/about still describes the earlier plan of eight exhibition works and an astrological long-form drop; the contract and the project files follow the plan of 36 tokens.