AB5D

PrimiDance

wuwa · Project 84 · Factory

Edition size: 256 · First mint: 5 June 2021

PrimiDance #200 by wuwa. Copyright: CC BY-NC 4.0. From the AB5D collection.

Live artwork. Move the pointer or touch to explore interactive works. Open artwork

The work and its context

PrimiDance arranges familiar computer-generated solids around a large central sphere. Rings, boxes, cylinders and angular forms turn through a composition that can suggest a planet with satellites, while remaining openly constructed from simple geometry. The solid and wireframe examples offer sharply different ways of seeing that arrangement: one depends on light and concealment, the other on a dense crossing of edges. 12

The project is credited to wuwa in the indexed record and to Ben Benhorin on the current Art Blocks page. It is project 84 on its Ethereum contract, a Factory release containing 256 works. Its animation and viewer controls make a still image only one state of the work. The controls affect camera position, orbital movement and trails; the observed effects are discussed below. 34

Benhorin presents PrimiDance as the opening work of his Primitive Trilogy, followed by PrimiLife and PrimiEnd. That context places its elementary shapes within a continuing investigation rather than treating them as a vocabulary exhausted by this one edition. 56

Conception and development

Ben Benhorin’s account places PrimiDance at the beginning of his Primitive Trilogy. He connects its basic geometric vocabulary to an early interest in computer graphics and to the creative pressure of technical constraints. The account is retrospective; no publication date was visible in the inspected text. 5

He describes wanting recognisable continuity across the edition while allowing differences to unfold through animation. Palette, size and orbital speed made that variation more conspicuous. Palette types and background choices then introduced further combinations, and wireframe was added as a deliberately uncommon view of the underlying geometry. His reported outcome of eight wireframe works can be compared separately with token data. 5

The account also explains his hesitation about interaction. Letting viewers alter a composition shares decisions normally reserved for the artist, but he considered that exchange appropriate to a work experienced over time. Trails and camera movement became ways for collectors to explore the system after minting. This establishes the artist’s stated reasoning; the deployed code and observed controls establish what the work actually permits. 54

How the work was constructed

The artist script was retrieved from the indexed project record by an HTTP POST to the public GraphQL endpoint, filtered on the exact slug and corroborated against the contract address and project ID returned in the same response 4. It is 3,813 bytes and hashes to SHA-256 5cfa4f55dfea88f747c6a89a6a74103f306832970f0f3fd4ab8bd4a223dfc277. The record reports a script count of 1, and the single scripts row reproduces the script field exactly. This was an index retrieval, not a direct read of contract storage, and no block reference was pinned. The whole program was read; what follows describes it without reproducing it.

The canvas is WEBGL, sized to the smaller viewport dimension less fifty pixels, with a requested frame rate of thirty, not a measured guarantee. Randomness comes from a compact xorshift generator seeded by parsing the first sixteen characters of tokenData.hash, including 0x and therefore fourteen hexadecimal digits, with decimals produced by taking the state modulo one thousand and dividing by one thousand. The first bitwise operations coerce the parsed value to thirty-two bits. Similarity to another implementation does not establish a source or a relationship between artists. 4

A table of twenty-nine three-colour palettes is defined literally in the script. The generator makes its draws in a fixed order: palette, then background index between 0 and 2, then the wireframe flag, then the primitive count, then the orbit speed. The wireframe flag is set when a draw from 0 to 100 exceeds 98, which selects integer outcomes 99 and 100. Under equally weighted thousandth-step generator outputs, those outcomes occupy nineteen of a thousand buckets; this is a conditional calculation rather than an audited probability for the minted edition. 4

The primitive count is drawn between 20 and 60. For each primitive the script pushes one of seven drawing functions, a size, three coordinates, a rotation and a small integer variance value. The size draw is written with its bounds in descending order, the larger value first, and the helper adds one to its second argument before interpolating and flooring. Reversing these arguments therefore cannot simply be treated as an ordinary ascending inclusive range. 4

The seven drawing functions are a torus, a box, a sphere, a cylinder, a four-sided cone, a flattened box and a second smaller torus with variable subdivisions. The artist's own account names six primitives, "plane(), box(), cylinder(), cone(), torus(), sphere()" 5. The code uses seven functions rather than six, because the torus appears twice at different proportions and subdivision counts, and because what reads as a plane is a box flattened to an eighth of its width rather than a plane call. The platform's trait names map onto those functions legibly: Bagels to the toruses, Boxes to the box, Balls to the sphere, Cylinders to the cylinder, Pyramids to the four-sided cone, Sticks to the flattened box, and Others to the second torus. 4

The draw routine sets an ambient light and four point lights, clears the background unless trails are enabled, then for each primitive applies three rotations driven by a global orbit counter, translates to the primitive's position, applies its fixed rotation and draws it. A separate counter drives extra local rotations for the two torus routines, the box, cone and elongated box. The sphere and cylinder routines have no such additional rotation. It is therefore inaccurate to say that every primitive has a separate self-spin. A large sphere is drawn at the origin on every frame, after the smaller shapes. Its radius depends on the eighth stored size, and it retains the fill or stroke left by the last primitive. The visual suggestion of a planet comes from this central mass and surrounding movement. 4

Wireframe mode changes three things at once. The background becomes the palette's first colour regardless of the background index, fills are replaced by a stroke in a darkened version of that colour, and several mesh subdivision counts are reduced, so the central sphere drops from a smooth fifty by fifty to sixteen by six and the toruses to a coarse low-poly shell. Some shapes retain their existing subdivision choices. The mode changes selected geometry settings as well as fill and stroke; it is not only a final image filter. 4

Two counters drive everything that moves: one for the orbit, one for the per-shape spin. The four documented controls map onto them directly. The key p toggles the orbit counter only. The key t toggles whether the background is cleared each frame. The key r calls the p5 camera reset. A mouse press sets a flag that enables p5's orbit control from that point on, enabling camera manipulation after a press. Actual drag behaviour needs a separate runtime test. Pausing the orbit does not stop the second counter, so it does not freeze all local movement. No audio mechanism was found in the inspected program; that is not an audio audition. 4

The mint

The fresh Art Blocks index records the first mint on 5 June 2021, activation on 8 June, the second mint on 13 June and completion on 16 July. These fields describe different events. The full offset-bearing timestamps are retained in the source record; a displayed release date should not be substituted for all of them. 4

Benhorin recalls minting #0 himself before the project went live and receiving a wireframe output. The indexed chronology and Wireframe label are consistent with that account. They do not, by themselves, reconstruct every allocation or establish the public opening time. 57

Subtracting the second mint timestamp, 13 June at 15:00:21, from completion, 16 July at 21:19:25, gives 33 days, 6 hours, 19 minutes and 4 seconds. That is an interval between indexed events, not a verified public-sale duration. The earlier activation field also cannot establish when public purchasing became possible without additional evidence. 4

The currently configured price is 0.1 ETH. No contemporaneous price announcement was recovered in this review, so this setting is not presented as a verified opening price or the amount paid for every token. The submitted token record dates the AB5D holding, #200, to roughly two hours before recorded completion. 47

The current project record labels the artwork CC BY-NC 4.0, although its terms-link field is empty. The named Creative Commons deed can nevertheless be identified. It describes sharing and adaptation subject to attribution, indication of changes and a noncommercial restriction. The link supplied here explains the standard named by the index; it does not reconstruct the history of the artist’s licence choices. 48

The contract-wide variation in licence labels recorded by the submitted research does not make this recognisable standard impossible to identify. It remains useful to preserve the project’s exact reported label and distinguish it from evidence of earlier terms. A complete history of grants or revisions was not recovered. 94

The rendering dependency is p5.js 1.0.0. Its upstream licence file identifies the GNU Lesser General Public License, version 2.1. That is a separate software record, not a grant for every artwork or artist program rendered with the library. No separate reuse grant for Benhorin’s artist script was found in the inspected program. 104

Interaction allows viewers to select different states and viewpoints, but that fact alone does not settle rights in any particular reproduction or establish a new licence. This essay makes no such inference. Its original prose is dedicated to CC0; the artwork, artist code and library retain their distinct rights records. 4

Close reading of examples

The comparison uses #0, #1, #10 and #200, whose full token identifiers are 84000000, 84000001, 84000010 and 84000200 on the project’s Ethereum contract. Fresh indexed records confirm their identities. All four original renderers were inspected, with sustained motion and control observations concentrated on #200. Submitted preview and canonical-page checks remain separately attributed in the research record. 71211

PrimiDance #0 by wuwa
PrimiDance #0 by wuwa. Open artwork

In #0, dark lines on a saturated violet ground describe a sphere crowded by smaller geometric meshes. A large detached ring toward the upper right pulls attention away from the centre, while a faceted sphere below it provides a smaller counterweight. At the centre, rectangular outlines and triangular subdivisions overlap so densely that assigning every line to an object becomes difficult. The viewer can recognise the sphere as a whole while losing track of its individual edges. Transparency here does not make the construction completely legible; it substitutes one kind of ambiguity for the occlusion of solid objects. 74

The ring’s coarse polygonal contour is especially revealing beside the central sphere. Both are familiar three-dimensional primitives, but their different subdivisions make one seem almost emblematic and the other like an exposed framework. The flat ground holds those lines together as a graphic composition. At the observed moment, the largest satellite’s separation from the central cluster gives the image a directional imbalance that a static diagram of evenly distributed objects would lack. This is a reading of one rendered state, not a claim that the arrangement stays fixed as the animation continues. 7

PrimiDance #10 by wuwa
PrimiDance #10 by wuwa. Open artwork

In #10, a green ground supports another dark wireframe arrangement. Long narrow bars cross above the central sphere, and a large faceted ring toward the lower left shifts the weight away from #0’s upper-right emphasis. The sphere’s upper and right regions carry dense crossings; elsewhere, larger open polygons let the ground dominate. Comparing these two works shows that wireframe is a means of varying visual density as well as a way of exposing geometry. Their shared mode does not reduce them to differently coloured copies. 74

PrimiDance #1 by wuwa
PrimiDance #1 by wuwa. Open artwork

In #1, the central sphere is solid and close in colour to its muted purple-grey ground. Orange circular forms emerge above and below its right side, while dark rings and small angular objects remain more subdued. The sphere hides parts of its surroundings, replacing the crossings of the wireframe examples with interruptions. Its low contrast makes that large mass initially quieter than its size suggests. Smaller saturated objects can command attention even though the central form occupies much more space. 7

PrimiDance #200 by wuwa
PrimiDance #200 by wuwa. Open artwork

The AB5D holding, #200, has a golden central sphere against a dark purple-brown field. Orange objects and yellow polygons give the surrounding cluster a brighter, more insistent rhythm than #1. Dark toruses and boxes nearly merge with the ground, becoming evident when an edge catches light or a neighbouring form moves. The first inspected view placed an angular yellow ring above the sphere and a darker box below and to the right. Later views changed what was concealed behind the central mass. The fresh ownership check confirms this token in one of the complete linked-wallet set retrieved for AB5D. 1127

In #200, the sphere acts both as an anchor and an obstruction. It gives the composition a stable centre while making the orbit perceptible through arrivals and disappearances at its edges. The smaller shapes do not need to travel across the whole square to change the composition substantially. A ring tipping toward the viewer can open a visible hole; a box turning away can lose the broad face that previously made it prominent. The code distinguishes these local rotations from the movement of the surrounding constellation. 14

The pause test made that distinction visible. After pressing p, two screenshots retained the broad arrangement while the top ring and lower-right box changed orientation. Pressing p again resumed the orbit. Enabling t produced broader swept forms as earlier positions accumulated around the sphere; disabling it restored clean surfaces. These observations establish the visible response without claiming an exact measured frame rate. The additional drag and reset actions produced a changed, then centred view, but the review did not isolate camera coordinates from the continuing orbit. Audio was not auditioned; no sound mechanism was found in the script. 14

A fresh retrieval of all 256 token records confirms eight indexed wireframe labels, at #0, #2, #10, #85, #110, #121, #129 and #152. This agrees with the artist’s retrospective count. Token #198 currently has an empty features object. That is a gap in the retrieved metadata, not proof that the artwork lacks features. The submitted research also includes a generator reimplementation and comparisons with selected traits; those remain attributed to its original researcher rather than claimed as independently repeated here. 135

Significance and limitations

PrimiDance makes a familiar vocabulary of computer graphics available for sustained looking. A solid central sphere hides and reveals surrounding forms as they move; wireframe exposes overlapping meshes instead. The difference is not simply between two surface treatments. It changes how the viewer reads depth, whether through occlusion and light or through the uncertain crossing of lines. The deployed program makes both readings possible using a compact set of shapes. 412

The controls extend that comparison into time. In the independently observed #200, pausing the orbit leaves local rotations visible, while enabling trails allows earlier positions to accumulate. The viewer can therefore change how movement is presented without changing the token’s underlying palette and shape selections. Those observations support a specific account of interaction rather than a general claim that it was unprecedented on the platform. 14

Benhorin’s development account provides useful evidence of decisions and intentions, but it should be read alongside the program rather than treated as a line-by-line technical specification. The artwork script contains colour triples, for example, while names such as Weak Coffee belong to a separate descriptive layer. Similarly, the declared frame rate is a request to the renderer, not a measured constant across devices. Careful distinctions preserve the usefulness of both the artist’s account and the executable work. 54

Unresolved research questions:

References


  1. Art Blocks. Art Blocks live renderer for PrimiDance #200, animation and interaction testing. Accessed 2026-09-18. 

  2. wuwa (Ben Benhorin). Rendered preview images for PrimiDance invocations 0, 1, 10 and 200 (platform media proxy). Accessed 2026-09-18. 

  3. Art Blocks. PrimiDance by wuwa, project page. Accessed 2026-09-18. 

  4. Art Blocks public GraphQL index. Art Blocks indexed project record for primidance-by-wuwa (GraphQL projects_metadata, including script). Accessed 2026-09-18. 

  5. wuwa (Ben Benhorin). The Primitive Trilogy. Accessed 2026-09-18. 

  6. wuwa (Ben Benhorin). Selected generative art projects. Accessed 2026-09-18. 

  7. Art Blocks public GraphQL index. Art Blocks indexed token records for PrimiDance invocations 0, 1, 10, 20 and 200 (GraphQL tokens_metadata). Accessed 2026-09-18. 

  8. Creative Commons. CC BY-NC 4.0 deed. Accessed 2026-09-18. 

  9. Art Blocks public GraphQL index. Census of the licence field across all projects on the Art Blocks contract (GraphQL projects_metadata). Accessed 2026-09-18. 

  10. p5.js contributors / Free Software Foundation. p5.js 1.0.0 licence. Accessed 2026-09-18. 

  11. Art Blocks. Canonical token page checks for PrimiDance sampled tokens. Accessed 2026-09-18. 

  12. Art Blocks. AB5D collector profile and linked wallet set. Accessed 2026-09-18. 

  13. Art Blocks public GraphQL index. Art Blocks indexed token sweep of the complete PrimiDance edition with independent generator reimplementation (GraphQL tokens_metadata, 256 rows). Accessed 2026-09-18. 

Written by Claude (submitted model: claude-opus-5), reviewed and revised by OpenAI Codex for AB5D. Original prose: CC0. Artwork and code rights are addressed separately above.

Token usage unavailable for the complete essay.

Token usage

Claude supplied no token telemetry. Review usage is not separately measured. Submitted model identifier is retained without independent runtime verification.

Generation record

Artist dossier · Source record · Essay data

Research record

The indexed project script was inspected. Runtime observations and limits are documented in the research record. Historical price, allocation and licensing questions remain as identified in the essay. Publication does not resolve those evidence gaps.

Retrieval evidence · Research notes · Manuscript