# 100 PRINT by Ben Kovach

*Art Blocks Presents (Playground), project 310 · 100 outputs · pre-minted 6–8 May 2022, exhibited 18–19 May 2022 · CC BY-NC 4.0*

![100 PRINT #47: a dense maxima composition of red and cyan planes in the 3d glasses palette, divided into four regions](https://media-proxy.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/310000047.png)
*100 PRINT #47, maxima, 3d glasses, 4/4, held by AB5D. Render: Art Blocks media proxy.*

## The work and its context

100 PRINT is Art Blocks project 310 on the contract `0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270`, in the Playground vertical. The index records 100 invocations against a maximum of 100, the runtime `p5@1.0.0`, an aspect ratio of 0.647 (22:34) and the licence `CC BY-NC 4.0` [^S01]. The project text calls it "a nonfigurative, abstract generative drawing system based on the principles of visual perspective". It names its sources as "cubist and abstract expressionist artworks, printer test sheets, and Escher sketches" [^S01].

Each output is a tall sheet crowded with planes, hatchings and splinters that seem to recede towards several horizons at once. The eye keeps finding boxes, stairs and corridors that the next glance takes apart [^S01]. Kovach's own display note is unusually direct: the work "is best viewed in print, at least 24 inches in width at 300+ dpi" [^S01].

100 PRINT was not a normal Art Blocks drop. Bright Moments sold 100 "draft picks", the whole edition was minted before the sale's collectors chose, and every output was printed, framed and hung in Bright Moments' SoHo gallery in New York on 18 and 19 May 2022. There each collector picked a work in the order of their draft number [^S02][^S03][^S04]. Kovach's earlier Art Blocks Curated release, Edifice, had 976 outputs. His exhibitions page lists 100 PRINT as his second solo show, after Edifice [^S05][^S06].

## Conception and development

Kovach, born in 1991 and based in Burlington, Vermont, turned to code-based work in 2017 [^S07][^S08]. In his essay on the project, "A draft for art", he dates the start to November 2021: "I was digging deep into M.C. Escher's sketches and generally thinking a lot about perspective trickery" [^S02]. The same essay links it to Edifice's "weird" dimensions trait, which he had "begun exploring" there [^S02]. He says the work uses the rules for building 3D scenes, like three-point perspective, and that "each one mixes at least two different perspectives, leading to emergent mixed-perspective spaces" [^S02].

He gave VERSE a sharper version in 2023. Escher, he said, combined multiple perspectives deliberately, and "deconstructing this idea to choose multiple perspectives *at random* was the basis for 100 PRINT" [^S09]. He recalled that the early stage, "just putting the perspective pieces together", was the part he enjoyed most [^S09].

The edition size was a response to Edifice. Kovach writes that his largest series before Edifice "was 8 works", and that Edifice "felt a little weird, almost like the work didn't originate from me" [^S02]. At 100, every output could be seen, printed and chosen by a person. He told VERSE that he picked a print show to "engage viewers with the depth of display that print can provide" [^S09].

## How the work was constructed

The program is a single script of 16,435 bytes, SHA-256 `632ab6e29f7eb0ebcaf592e040654172cc6adc6c8d454d319fea2ba820153af5`. It was retrieved from the Art Blocks index and read in full. No code is reproduced here [^S01].

It seeds two small 128-bit generators from the two halves of the token hash, warms each up with half a million calls, and alternates between them [^S01]. The draws that set the traits all happen in `setup` before any drawing. A replay of those draws in Node.js for all 100 hashes reproduced every published trait of every token (own computation) [^S01].

The drawing has three stages (code reading) [^S01].

1. **A graph of lines.** The canvas edge becomes four segments. The program then runs 1,500, 2,100, 3,500 or 5,000 times. Each time it picks an existing segment, weighted by length, and a point 20 to 80 per cent along it. It picks a vanishing point and extends a new line from that point towards (or away from) it until it meets another segment. In the first 50 or 150 passes the new line cuts through everything in its path, which gives the long structural spans.
2. **Regions and perspectives.** The "time signature" splits the sheet into two, three or four rectangles, and each region gets its own set of vanishing points. The types are below, above, four-point, six-point and, only in mixed outputs, one-point. The four-point construction pushes its points eight times the region's size off the sheet, so its lines are nearly parallel.
3. **Ray casting.** Every finished segment becomes a wall. From points along each segment, rays are cast towards one or two vanishing points and stopped at the first wall they hit. Consecutive rays are then filled, crossed, hatched, diamonded or dotted in one palette colour. The mix depends on the style. Occasional arrows are drawn on segments, and "felt" outputs overlay a wandering scribble.

The published traits come straight from these draws. The table gives each trait's program weight against its count (own computation from the program and the index) [^S01].

| Trait | Rule in the program | Expected of 100 | Published |
| --- | --- | --- | --- |
| Style | weights 20:6:1:2 for maxima (all fills), wire (no solid fill), dot mosaic (dots only), mega bold (solid fill only) | 69, 21, 3, 7 | 69, 20, 7, 4 (including minima and cubist) |
| Minima | 4%; replaces the style label, drops fills and arrows | 4 | 3 |
| Cubist | 5%; every ray may aim at any region's vanishing point | 5 | 2 |
| Material | tungsten 10% (doubles ray density); felt 1 in 31 (scribble on every segment) | 10, 3 | 8, 5 |
| Arrow party | arrow chance 0.5 instead of 0.075, weight 1 in 11 | 9 | 11 |
| Perspective | "same" type in every region 25%, else "mixed" | 25, 75 | 25, 75 |
| Construction | aggressive 1 in 36: the graph is swapped for 1,500 random short strokes | 3 | 3 |
| Time signature | 2, 3 or 4 regions, equally likely | 33 each | 36, 28, 36 |

The twelve published palettes carry very different weights. Heavy body acrylic, a sandy ground with twenty inks, mostly sand and earth tones with teals, greens and black, has the largest weight at 19 per cent. A deep appreciation for mathematics (cream and black) has the smallest, at 2 per cent. 3d glasses is the only palette drawn in multiply mode: cyan and hot pink on a pale ground, so overlaps darken like an anaglyph [^S01].

The sheet is always portrait at 22:34, fitted to the window. Pixel density is the screen's ratio, at least 2, and a `scale` URL parameter can set it higher, which suits print files (code reading) [^S01]. The work animates. It draws one segment's rays per frame at up to 120 frames a second and stops when the graph is exhausted. This is the "reveal" that Kovach's note says needs "a powerful CPU" [^S01].

## Quirks in the algorithm

A full read of the program was checked against all 100 token records and a replay of every token's setup draws. Points that rest on the code alone are marked as code readings.

1. **A palette that never appeared.** When a token is minima, it has a further 20 per cent chance of a thirteenth palette: pure white with cyan, magenta and yellow and, twenty times as often, black. It reads like the printer test sheet in the project text. Its chance is 0.8 per cent per token, and none of the three minima drew it. The collection therefore shows 12 palettes, not 13 [^S01].
2. **Too much heavy body acrylic.** The palette should appear in about 19 of 100 outputs; it appears in 32. With a fair draw, 32 or more would happen about 0.15 per cent of the time (own computation). Every hash does reproduce its published palette, so the labels are right. The excess lies in the hashes themselves [^S01].
3. **A switch that falls through.** In the style code, "stripe" fills every n-th ray pair. The other pairs fall through to a "random" case, which fills a quarter of them, and then to the crossed "x" case. "random" is in no style's list, so it is reached only through this fall-through (code reading) [^S01].
4. **Perspectives written but never chosen.** The vanishing-point builder has "left" and "right" cases that no draw can select. "One point" is reachable only in mixed outputs, so the perspective label never names it (code reading) [^S01].
5. **A density draw that is thrown away.** The per-segment density draws one of four values and then overwrites it with a fixed 0.1. Tungsten doubles that value and felt raises it to 2. The discarded draw still uses up random numbers (code reading) [^S01].
6. **A construction that does not exist.** Arrows are suppressed when the construction is "scan", but the only constructions are methodical and aggressive (code reading) [^S01].
7. **Hidden parameters.** Several draws shape the image but are not published as traits. The replay counts them as line count (22, 22, 29 and 27 outputs at 1,500, 2,100, 3,500 and 5,000), an erase mode that repaints a tenth of strokes in the ground colour (52 outputs), inset region frames (54), vanishing-point span (global 37, mixed 40, local 23) and 50 or 150 full spans (52 and 48) [^S01].
8. **Label rules.** Felt's scribble is switched off for dot mosaic and minima, so a label could promise a scribble that is not drawn. None of the 100 has that combination (code reading) [^S01]. No minima is cubist, and felt never meets tungsten. The three aggressive outputs are two maxima (#74, #88) and one mega bold (#31) [^S01].
9. **The first line is skipped.** The draw loop reads its segment by frame number, which starts at 1, so the first segment in the list is never rayed. The previous AB5D essay described the work as static, but it draws progressively and stops only when the list runs out (code reading) [^S01].

## The most coveted variants

No source inspected ranks 100 PRINT's grails, and little sales history for individual tokens was found. The draft itself was a ranking exercise, though. Bright Moments' launch post quotes Kovach promising "MORE POWER IN THE LOWERED NUMBERED TOKENS", so that higher payers could choose "an aesthetic favorite, a rare one, or an emergent grail" [^S04]. He later wrote that "the level of analysis of the 100 PRINT set, especially from people with early picks, was just off the charts". Collectors weighed "rarity rankings, aesthetic choice, inter- and intra-set pairings", and one spent hours on a top 20 [^S02]. The rarities below are the index's singletons and near-singletons [^S01].

**The cubists (2).** #69 (cubist maxima, meep morp) and #92 (cubist dot mosaic, meep morp) let any ray aim at any region's vanishing points, so the regional logic dissolves into a single crystalline field [^S01].

![100 PRINT #92: a pink sheet of fine red hatchings converging on many points, the only cubist dot mosaic](https://media-proxy.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/310000092.png)
*100 PRINT #92, cubist dot mosaic, meep morp: the only one of its style. Render: Art Blocks media proxy.*

**Single palettes.** #70 is the only "a deep appreciation for mathematics", cream planes cut with black. It is also tungsten. #33 is the only cowboy hat, a dot mosaic, and #22 and #42 are the two ceramics [^S01].

![100 PRINT #70: cream and white planes with black wedges and fine black hatching](https://media-proxy.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/310000070.png)
*100 PRINT #70, the only "a deep appreciation for mathematics", tungsten. Render: Art Blocks media proxy.*

**Aggressive (3).** #31, #74 and #88 discard the perspective graph for scattered strokes. #31, a mega bold in onus, becomes a spray of solid coloured shards on a pale ground [^S01].

![100 PRINT #31: scattered solid shards of navy, green, pink and ochre on an off-white ground](https://media-proxy.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/310000031.png)
*100 PRINT #31, aggressive mega bold in onus. Render: Art Blocks media proxy.*

**Minima (3), mega bold (4) and felt (5).** The minima are #16, #27 and #97; the mega bolds #31, #37, #73 and #84; the felts #10, #32, #37, #61 and #71. #37 is the only mega bold felt [^S01].

**3d glasses (10).** The anaglyph palette is the most distinctive of the common ones. It includes invocation 0, a mixed maxima, and AB5D's #47, pictured at the top of this essay [^S01].

![100 PRINT #0: overlapping red and cyan perspective planes on white](https://media-proxy.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/310000000.png)
*100 PRINT #0, maxima, 3d glasses, minted on 6 May 2022 ahead of the rest. Render: Art Blocks media proxy.*

At retrieval the 100 tokens were held by 80 addresses: 64 held one, 12 held two and 4 held three (own computation) [^S01]. No source ties these wallets to named collectors. AB5D holds #47 in the wallet `0xdd19…c045`, which Etherscan labels ab500dao.eth; Etherscan gives the token's last sale as 0.42 WETH, undated [^S01][^S10].

## The draft and the prints

**The draft.** Bright Moments' Mirror post of 20 April 2022 sets out the terms. There were 100 draft picks: 75 were sold by Dutch auction on 20 April, starting at 50 ETH and falling to 1 ETH over about 70 minutes, and 23 went to a community sale on 27 April at half the auction's final price [^S04]. Bright Moments' event page instead gives 25 for the community allocation [^S03]. The auction ran through a MirrorDutchAuctionProxy contract created by storefront.brightmoments.eth. Etherscan shows 82 transactions, all on 19 and 20 April 2022, and the latest bids it lists are for 1 ETH each [^S11]. That suggests, without confirming, that the auction reached its 1 ETH floor. Kovach and Bright Moments discussed the format in a 50-minute Twitter Space on launch day [^S12].

**The pre-mint.** Bright Moments' film of the show says each work "was pre-minted, printed, and framed" [^S13]. The index agrees. Invocation 0 was minted on 6 May 2022 at 13:48 UTC, before the project was activated at 22:14 that day. #1 followed at 00:39 on 7 May, and #2 to #99 were minted between 23:38 on 7 May and 01:14 on 8 May [^S01]. The index's start time, 22:00 UTC on 18 May, falls on the first day of the gallery event. Its price field of 1,000 ETH looks like a lock against public minting rather than a price [^S01][^S03]. The 75 plus 23 picks account for 98 outputs. Where #0 and #1 went is not recorded in the sources inspected [^S04].

**The show.** On 18 and 19 May 2022, at 150 Wooster Street, collectors chose in draft order from the full set on the wall [^S03][^S04]. Kovach describes the framed prints "stacked 3 high" along one long wall [^S02]. Bright Moments specifies each as 24 by 36 inches, a "giclee print on German Etching high quality paper" in museum-grade acrylic, with a white frame by Tribeca Printworks. Each came with a certificate signed by the artist and the collector [^S03]. A 24 by 36 sheet is 2:3, a little wider than the program's 22:34, so the framed size presumably includes margin (own computation) [^S01].

**Editions after resale.** Kovach's essay adds a rule that makes the prints track the tokens. The originals "are labeled as first editions", and "when an NFT from the 100 PRINT collection trades hands, the next edition of its print will be available for purchase by the owner" [^S02]. Further editions are arranged with the artist directly [^S02].

**No public ledger was found.** Unlike Fidenza's print page, no list of printed later editions was found. Kovach's project and store pages returned rate-limit errors on every attempt, so they may hold one [^S14]. On the sources read, all 100 first-edition prints exist, one per token, as the exhibition required [^S03][^S13].

## The mint

The mint was a private batch, not a public sale. The index records one mint on 6 May, one on 7 May and 98 in about 97 minutes on the night of 7 to 8 May 2022, finishing at 01:14:53 UTC [^S01]. The draft's pricing, 50 ETH falling to 1 ETH, with the community allocation at half the final price, is the only published price schedule [^S04]. OpenSea's collection page, read in September 2026, reported total volume of about $255,500, 80 unique owners and 8 listings. The index gave a lowest listing of 0.499 ETH [^S15][^S01].

## Copyright and licensing

The index records `CC BY-NC 4.0` with a link to the Creative Commons licence [^S01][^S16]. On that label, the images may be shared and adapted non-commercially with attribution to Ben Kovach, and commercial use needs permission. The program carries no separate code licence, and p5.js is loaded by the platform at view time [^S01]. The physical prints are a separate matter, governed by the artist's edition rule rather than the licence [^S02].

## Significance and limitations

100 PRINT inverted the usual long-form sale. The randomness came first, fixed and visible. The market then set only the order in which people chose, and the result had to hold up as 100 framed prints on a gallery wall [^S02][^S03][^S04]. The code matches that ambition. It builds real perspective scaffolds from random vanishing points and ray casting, and it hides a thirteenth, printer-test palette that no output drew [^S01]. The limits are in the record: the auction outcome, the fate of #0 and #1, and any later print editions are not published in the sources read.

Unresolved research questions:

1. What was the Dutch auction's final price, and was the community allocation 23 or 25? The Etherscan bids at 1 ETH, read through automated extraction, need checking against the contract's event log.
2. Who received #0 and #1, minted separately from the 98 draft outputs, and are they artist or gallery proofs?
3. Does Kovach publish a list of later print editions? His 100 PRINT and store pages returned 429 errors. The Bright Moments launch post on X (status 1511059222590464000) is an unread lead.
4. Why is heavy body acrylic so overrepresented? Were the 100 hashes filtered or re-rolled before the pre-mint?
5. Several quotations above (from the Kovach essay, VERSE and Bright Moments) came through automated extraction and should be confirmed against the pages.

## Bibliography

### Primary

[^S01]: Art Blocks public GraphQL index, `projects_metadata` for project 310 (full program, SHA-256 above) and `tokens_metadata` for all 100 tokens. Retrieved 21 September 2026 via https://artblocks-mainnet.hasura.app/v1/graphql. Replay of setup draws and all counts: own computation. Collection page: https://www.artblocks.io/collection/100-print-by-ben-kovach
[^S02]: Ben Kovach, "A draft for art: The 100 PRINT experiment", undated. https://bendotk.com/writing/100-print
[^S05]: Ben Kovach, "Exhibitions". https://bendotk.com/exhibitions
[^S14]: Ben Kovach, "100 PRINT" project page and store (rate-limited, not read). https://bendotk.com/100print and https://bendotk.com/store
[^S06]: Gazelli Art House, "Ben Kovach". https://gazelliarthouse.com/artists/292-ben-kovach/overview/
[^S08]: Le Random, "Ben Kovach". https://www.lerandom.art/artists/ben-kovach
[^S07]: Art Blocks, "100 PRINT by Ben Kovach", project page with artist notes. https://www.artblocks.io/collections/presents/projects/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/310
[^S16]: Creative Commons, Attribution-NonCommercial 4.0 International. https://creativecommons.org/licenses/by-nc/4.0/

### Bright Moments and the draft

[^S03]: Bright Moments, "100 PRINT" (event page). https://www.brightmoments.io/100print
[^S04]: Bright Moments, "100 Print Draft Pick Day", Mirror, 20 April 2022 (now on Paragraph). https://brightmoments.mirror.xyz/CL46H8Nmftf_d1oOpL3MuOZe4JeZdslcgtZlFB_kbeo and https://paragraph.com/@bright-moments/WKrOhLs8z7uH1ARe3LvJ
[^S11]: Etherscan, MirrorDutchAuctionProxy `0xeADDbe18595ef7a45c540ecD01a12997856D6983` (the "100 Print | Draft Pick" drop). Read 21 September 2026. https://etherscan.io/address/0xeADDbe18595ef7a45c540ecD01a12997856D6983

### Video and audio

[^S13]: "100 Print by Ben Kovach at Bright Moments NYC", Bright Moments, Vimeo, 29 May 2022. https://vimeo.com/715002498. Also on YouTube: https://www.youtube.com/watch?v=TbKEuH2nzp8 (title and channel confirmed by oEmbed).
[^S12]: "Ben Kovach 100 Print Twitter Space hosted by Bright Moments", Bright Moments podcast, 20 April 2022, 50 min. https://www.ivoox.com/en/ben-kovach-100-print-twitter-space-hosted-by-audios-mp3_rf_87183799_1.html. See also "Ben Kovach 100 Print", Bright Moments, YouTube (oEmbed-confirmed): https://www.youtube.com/watch?v=ma6peGR6V9c

### Criticism, collecting and market

[^S09]: Leyla Fakhr, "Finding Flow State with Ben Kovach", VERSE, 10 February 2023. https://verse.works/journal/finding-flow-state-with-ben-kovach
[^S10]: Etherscan, "100 PRINT #47". Read 21 September 2026. https://etherscan.io/nft/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/310000047
[^S15]: OpenSea, "100 PRINT by Ben Kovach" collection page. Read 21 September 2026. https://opensea.io/collection/100-print-by-ben-kovach

### Further reading

- Bright Moments, "Ben Kovach's 100 PRINT Show at Bright Moments NYC: All the Details!", podcast (not accessed). https://podcasters.spotify.com/pod/show/brightmoments/episodes/Ben-Kovachs-100-PRINT-Show-at-Bright-Moments-NYC---All-the-Details-e1il8sd
- Ben Kovach, "Edifice" (writing). https://bendotk.com/writing/edifice
- Art Blocks, "Edifice by Ben Kovach". https://www.artblocks.io/collection/edifice-by-ben-kovach
