H

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

FieldValue
TitleEntfaltung (symbol ✸)
Token contract0x983e8df3186aa40eef4e299c4f0133bca0e50276 (Ethereum mainnet, ERC-721)
Metadata contract0xF9e86cCB5A7D8d36aCd127CCa48696d34B514486
Deployer and owner0xa8031CcA3c436ae91703180893c90100B7c795F5, entfaltung.eth
Deployed2026-10-05; token 0 minted the same day
Minted25 (tokens 0–24), all held by entfaltung.eth, listed as open for inquiry
Places36 for good (artist, 2026-10-13: "in total there will only be 36 tokens ever")
Viewerhttps://entfaltung.harm.work/[id]

The ids say what kind of token each is (architecture/the-drop.md):

IdsGroupCount
0Genesis1
1–24Created by the artist24
25–32"Channelled personal tokens — made later, in conversation with collectors"8
33–35Artist's proofs3

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.

IDGlyphUnicode nameMadeMintedSymmetryPointsBoundingSeedFacesFace colourLine colourMaterialAppearanceBackground
0𝛼mathematical italic small alpha20 Jun5 Octoctant48 = 6 × 8ball301volume meshby sizeby depthsolidpureblack
1ɐlatin small letter turned a27 Jul22 Octoctant144 = 18 × 8ball341volume meshby size, evenby lengthsolidpureblack
2⚭marriage symbol12 Sep22 Octcube48 = 1 × 48ball250wireframenoneby point + fansreflectivepureblack
3∴therefore12 Sep22 Octoctant32 = 4 × 8surface353geodeby sizefadingreflectivesharp glowblack
4⁘four dot punctuation13 Oct22 Octmirrored72 = 36 × 2ball346neighbour cellsby depthby lengthsolidsharp glowdark tone
5⁙five dot punctuation30 Sep22 Octpolygonal (5)40 = 4 × 10ball328volume meshby sizeby depthreflectivesubtle glowblack
6⟁white triangle containing small white triangle12 Sep23 Octpolygonal (3)108 = 18 × 6ball432orbit shellsby depthby lengthsolidstrong glowdark tone
7𝟟mathematical double-struck digit seven12 Sep23 Octpolygonal (5)120 = 12 × 10ball309geodeby sizeby directionsolidstrong glowdark tone
8∞infinity12 Sep23 Octicosahedral120 = 1 × 120surface291mirror layersby sizeby point + fanssolidsubtle glowdark tone
9⧗black hourglass1 Oct23 Octoctant56 = 7 × 8ball300sliversby depthnonesolidsubtle glowblack
10※reference mark7 Oct23 Octcube48 = 1 × 48surface145mirror bandsby depthby pointreflectivestrong glowblack
11𐄍aegean number seven12 Sep23 Octpolygonal (7)28 = 2 × 14ball379tetrahedraby size, evengradientsolidtrailsdark tone
12Жcyrillic capital letter zhe13 Oct23 Octoctant48 = 6 × 8ball590volume meshby size, evenfans onlyambientpureblack
13ᛃrunic letter jeran j12 Sep23 Octpinwheel48 = 2 × 24ball379spiral weaveby depthby directionreflectivepureblack
14ǂlatin letter alveolar click12 Sep23 Octoctant24 = 3 × 8surface409mirror bandsalternatingmulticolour + fanssolidsubtle glowdark tone
15⦶circled vertical bar30 Sep23 Octoctant32 = 4 × 8surface293sliversmulticolourgradientambientstrong glowblack
16✺sixteen pointed asterisk7 Oct23 Octoctant40 = 5 × 8ball380volume meshby sizesingular + fansreflectivestrong glow + trailsdark tone
17⏣benzene ring with circle12 Sep24 Octpolygonal (6)36 = 3 × 12surface622geodeby size, evenfading + fansreflectivesharp glow + long exposuregray
18ꕥvai syllable zha24 Oct25 Octoctant56 = 7 × 8ball300sliversby symmetryfans onlysolidpurebright
19ᗢcanadian syllabics carrier ttu24 Oct25 Octmirrored102 = 51 × 2surface356wireframenonesingular + fanssolidpurebright
20۞arabic start of rub el hizb12 Sep25 Octpolygonal (8)48 = 3 × 16surface372sliversnonefans onlysolidsubtle glowbright
21ϫcoptic small letter gangia13 Oct25 Octmirrored204 = 102 × 2ball718neighbour cellsby sizesingular + fanssolidstrong glowgray
22⌁electric arrow12 Sep25 Octpinwheel24 = 1 × 24surface494orbit shellsby sizemulticolourambientstrong glowdark tone
23ᛥrunic letter stan24 Oct25 Octcube144 = 3 × 48ball665wireframenonefans onlysolidstrong glowbright
24⟡white concave-sided diamond25 Oct25 Octoctant24 = 3 × 8surface634sliversalternatingnonesolidsharp glowgray

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.

IDGlyphGroundLinesLine opacityMain colours 1–6
0𝛼#000000#ffffff0.4#b246ec #fbf650 #7a3364 #f55905 #e67e22 #a16887
1ɐ#000000#cda2a20.85#dbd7ae #fbf650 #ae3287 #f96c1f #1e1d3e #4a5b6d
2⚭#0a0010#ffd0e00.2#ff006e #fb5607 #ffbe0b #8338ec #3a86ff #ff477e
3∴#000208#ffffff1#a38c19 #893e6e #265773 #898b18 #411976 #ff0040
4⁘#050008#ffffff0.35#ff2d95 #fbf650 #b246ec #4d9dac #f55905 #a16887
5⁙#06040f#ffe3b30.4#2d1b69 #5b3fa6 #a05bb5 #e27d9f #f6b38a #ffe3b3
6⟁#000208#00ffd00.72#00ffd0 #ff00a0 #00a3ff #faff00 #7000ff #00ffa0
7𝟟#00120c#d9ffe80.42#04e762 #00a878 #1100fa #1b998b #0b5d3a #7ae582
8∞#0b0410#ffffff1#ff9ff3 #feca57 #48dbfb #ff6b6b #1dd1a1 #f368e0
9⧗#000000#ffffff0#b246ec #f9dc1f #4b3f47 #f50505 #ff7700 #b7528a
10※#000000#eafff50.36#d1b8ff #cbf3f0 #ffb54d #fbff05 #118a7e #f8f359
11𐄍#000208#00ffd00.29#00ffd0 #ff00a0 #00a3ff #faff00 #7000ff #00ffa0
12Ж#000000#cda2a20#b246ec #fbf650 #ae4b32 #f96c1f #b0b0b0 #4a5b6d
13ᛃ#050008#ffffff0.36#ff2d95 #fbf650 #b246ec #4d9dac #f55905 #a16887
14ǂ#0c0410#ffe0ff0.78#ffffff #3c2525 #ff2600 #560bad #ff5fb5 #3a0ca3
15⦶#0b0618#ffb26b0.33#1d1a4f #5b2a86 #c94b7c #ff7b54 #ffb26b #ffe6a7
16✺#00120c#d9ffe80.69#04e762 #ff5b14 #89fc00 #1b998b #0b5d3a #7ae582
17⏣#252c27#c137da0.22#aca9d5 #e34d21 #4539f3 #ace3b0 #69cf98 #5e5633
18ꕥ#d6bb8c#c654460#dfe3dc #62b8d8 #bac6c2 #d99a5c #e8be36 #c65446
19ᗢ#dfe4d5#3a3d360.15#1f7a6e #d0606e #3a3d36 #1f7a6e #d0606e #3a3d36
20۞#eecea5#6b52360#9d9b9c #f05656 #f5e2c1 #ee8af5 #8ea2a6 #915608
21ϫ#616161#ff2a1a0.1#b030f0 #d0710a #ea0f0d #37046c #64180a #02010b
22⌁#110119#ffffff0.8#ff2d95 #fbf650 #b246ec #4d9dac #f55905 #a16887
23ᛥ#ecd4be#e0b4280#a86878 #4a4a44 #2a6a58 #7a7430 #e0b428 #d05a40
24⟡#242424#ffffff0#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