# Return by Aaron Penne

## The work and its context

Return is Art Blocks project 77 on the contract at `0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270`, on Ethereum mainnet, by Aaron Penne. The public index records 300 invocations against a maximum of 300, a declared dependency of `p5@1.0.0`, an aspect ratio of 1, the Playground category, and a licence string of `CC BY-NC 4.0` with no licence link [^S02]. The collection page describes it as an Art Blocks 500 release in the Playground category, a fixed edition of 300 unique artworks, and lists seven attributes: Palette, Form, Skeleton, Rotation, Direction, Speed and Background [^S01].

The mint description is two sentences long and states the idea plainly. Return is "a meditation on returning inward, cyclical change, and the beauty of iteration", and "the composition of each piece slowly loops, providing a new experience for the viewer over time" [^S02][^S01]. Each work is a single centred form, a circle, a sharp square or a square with softened corners, filled with concentric bands of colour that drift steadily outward or inward and wrap around when they reach the edge, so the pattern never stops and never changes its vocabulary. Around the form sits a pale or dark ground with a soft shadow.

Penne is a Seattle-based engineer and artist who founded the Generative Artists Club in 2018, and whose artist site lists Return among his Art Blocks releases, between Apparitions and later collaborations such as Rituals with Boreta [^S09]. Return arrived two months after Apparitions, and it borrows that project's colour vocabulary directly, including palettes named Riley, Light, Darkness, Zephyr and Oracle [^S08][^S02]. Where Apparitions is a still image of layered, folded bands, Return takes the band as its unit and sets it in motion.

The most important finding in this package is about how the work looks, not how it was made. The program ends its colour chain with an instruction the graphics standard leaves undefined, and on the Apple hardware used to observe it, that instruction paints the whole form in one flat colour. The platform's own rendered stills show the concentric bands the program was written to draw; the live renderer on that machine shows a flat disc or diamond with faint ghost rings. The construction and examples sections below document this in detail [^S06][^S07][^S12].

## Conception and development

No development account of Return itself was found. The indexed `artist_interview` field is null and the website of record is the artist's Twitter address, which was not consulted [^S02]. The artist's own site lists Return with a link to a marketplace page that repeats the mint description and adds nothing further [^S09]. Of the interviews listed on the site's About page, one now returns a server error. Another, the Art Blocks conversation with Jeff Davis published on 16 March 2021, is still readable, but it predates Return and concerns Apparitions [^S13].

That interview does supply one phrase that recurs in Return. Penne says a mentor taught him "to treat coding as a creative meditation", and he describes the draw of Apparitions as the power "to draw repetitive lines and create dynamic movement" [^S13]. Return's mint description calls the work "a meditation", and its two speed values are named Meditative and Conceptual [^S02][^S03]. The connection is my reading of the two texts, not a claim he made about this work.

The fullest primary evidence for how Penne thought about this period is his long essay on Apparitions, published on 31 March 2021, nine weeks before Return's first mint [^S08]. Three passages bear directly on Return. First, he names a palette Riley "for Bridget Riley", describing a week when "everything was Rileys, just black and white" and calling himself an op art fan [^S08]. Return carries a palette called Riley, made of a warm cream and a near-black, which in a work built from concentric bands pulsing in and out reads as an op art proposition [^S02]. The resemblance is my reading; the naming practice is his.

Second, he explains the Oracle as a "palette picker where one randomly selected color is used alongside black and white", and Zephyr as a method rather than a palette, one that picks a fresh colour for every band [^S08]. Return implements both ideas again in a smaller form. Its Oracle holds black, off-white and one colour drawn from a 24-colour list, and its Zephyr palette is that same 24-colour list used directly [^S02]. Across the edition, 20 tokens carry Oracle and 45 carry Zephyr, the most common palette [^S03].

Third, he describes Light and Darkness as deliberately rarer palettes and explains that rarity scores are a small subset of what makes an output worth looking at [^S08]. In Return, Light and Darkness are again the rarest palettes by weight, and choosing either one switches off the mask that overlays black and white bands, so those ten tokens are drawn as pure tonal rings [^S02][^S03].

The source code adds one more piece of development history. Its first line is a comment giving a licence and pointing to the artist's GitHub account [^S02]. That account hosts data visualisation and signal-processing projects and a fork of a p5 interface library, but no repository for Return, so the pointer leads to the artist rather than to the project's source [^S10]. The shader's final line carries a thank-you to the artist Piter Pasma "for the anti-aliasing routine", an eight-sample pattern that smooths the edges of every band [^S02]. That acknowledgement is the only named collaboration in the record.

## How the work was constructed

The program was retrieved as the `script` field of the index record for project 77, filtered by the exact slug and confirmed by the returned composite identifier. It is 6,686 bytes in a single part, declared as `p5@1.0.0`, and its SHA-256 digest over the returned bytes is `a2458278576427c5a7d96fa6ae917a634850d4071828a11ac9410e51d1d3ecd0` [^S02]. The live renderer serves an inline script of the same length whose digest, computed in the page, is identical, so the program observed running is the program read [^S06]. It was read in full. No artist code is reproduced here.

Two sources of randomness are used. The token hash is split into its 32 bytes, and the last few bytes, as many as the number of bands, become the band boundaries directly: each byte is scaled to a value between 0 and 1 and the list is sorted [^S02]. Everything else comes from a small generator seeded with the first sixteen characters of the hash, including the `0x` prefix, and returning one of exactly 1,000 values per draw [^S02]. The same three-shift arithmetic, including the quirk of parsing the prefix, appears in Mental pathways by fabianospeziari x donnoh, which opened in October 2021, written there as a class method rather than a bare function [^S14]. Return was minted in May and June 2021, so it is an earlier instance. This package records the match and does not claim to know where the construction originated.

The draw order is fixed. One draw picks the Oracle's extra colour, whether or not the token turns out to be an Oracle; then come the ground, the speed, the palette and the number of bands. The band count is weighted across 4, 5, 6, 10, 15, 20 and 25, except that Light and Darkness draw from 15, 20 or 25 only. Then come how many bands are swapped for black or white, the form, the mask, the rotation and the direction [^S02]. A reimplementation of that sequence, run against every token hash in the edition, reproduces all seven published traits on all 300 tokens [^S03]. The band count itself is not published. Across the edition it takes each of its seven values, with 6 bands the most common at 59 tokens and 25 bands the least at 19 [^S03].

The selection helper has a quirk with visible consequences. It scales each draw by 0.99 before choosing, and because the generator never returns more than 0.999, the last one per cent or so of any weighted list can never be chosen [^S02]. The effect is small but measurable. The inward Direction is weighted 10 in 300, but only 7 of those 10 slots can be reached, which lowers its chance from about 3.3 to about 2.3 per cent. In the edition, 7 of 300 tokens flow inward, in line with the lower figure [^S03]. The Oracle palette loses 3 of its 20 weight units in the same way.

The published Rotation is not the value the program first draws. When a token is a circle with no mask, rotation would be invisible, so the program overrides it to Balanced after drawing it. The published values match the overridden figure on all 300 tokens, and 86 tokens had a different rotation drawn before the override [^S03]. The metadata here describes what the viewer sees rather than what the generator chose, which is the more useful of the two.

The image is drawn entirely in a fragment shader that the program writes as text at load time. For each pixel it measures a signed distance to the form (a circle, a sharp square or a rounded square) and adds a slowly increasing time value. It wraps the result into the range 0 to 1 and walks it through a chain of colour mixes, one per band boundary, alternating soft and hard transitions [^S02]. Outside the form, a soft shadow falls on the ground. Where a mask applies (a central Slice, a Cross, a Half or opposing Quarters), the same chain runs with black and white substituted for colour [^S02]. The time value rises by 0.0002 on every frame for the Meditative speed and on every twentieth frame for Conceptual, and Conceptual waits 300 frames before moving at all [^S02]. At the measured 60 frames per second, a Meditative loop completes in about 83 seconds and a Conceptual loop in about 28 minutes [^S06].

The keyboard changes the speed. Keys 1 to 7 set the frame interval to 1, 2, 7.25, 43, 260, 520 or 1,040, and 0 stops the motion entirely [^S02]. The `s` key calls a save routine that uses a timestamp helper the program never defines, so that key would fail. It was not pressed. There is no mouse, touch or audio code [^S02][^S06].

The last link in the colour chain is where the rendering problem sits. Because the list of band boundaries always ends with the value 1, the final mix always asks for a smooth transition between an edge of 1 and an edge of 1. The OpenGL ES reference states that results are undefined when the first edge is not less than the second [^S12][^S02]. On the observation machine, an Apple M5 Pro whose Chromium-based browser pane reports ANGLE's Metal backend, the compiled shader gave that final mix full weight at every pixel, so each form was painted in the palette's last colour. Replacing only that one expression with zero, in a separate diagnostic canvas using the token's live uniform values, restored the concentric bands [^S06]. A standalone probe of the same function with a variable input returned zero on the same machine. So the collapse depends on how the compiler handles that expression inside this shader, and it would be wrong to generalise from one machine to every Apple device [^S06].

## The mint

Four events need to be kept apart, and the index makes that harder than it should. The first token, invocation 0, was minted at 22:18:12 UTC on 31 May 2021 [^S03]. The index records activation at 04:07:09 UTC on 1 June, nearly six hours after that first mint, so activation does not mark the first accepted mint here [^S02][^S03]. The index's `start_datetime` is 14:03:27 UTC on 1 June, and invocation 1 was minted at exactly that second [^S02][^S03]. An opening time that coincides to the second with a mint may have been backfilled from the mint rather than set in advance, so this package treats it as the first public mint, not as an independently documented opening. Completion is recorded at 16:09:12 UTC on 1 June, the same second as the final mint [^S02][^S03].

The collection page shows a release date of 2 June 2021 [^S01]. That is the 14:03:27 UTC mint rendered in a timezone ten hours ahead of UTC, which is the timezone of the browser that read the page. The header of this essay uses 1 June 2021, the UTC calendar date of the first public mint, and the evidence record keeps every timestamp with its offset.

Measured from the first public mint, the edition sold quickly but not instantly. Seventy-eight tokens were minted within ten minutes, 172 within the first hour, and all 299 public tokens within two hours and six minutes, with the last at 16:09:12 [^S03]. The calculation uses the first public mint and the last mint as endpoints and gives 125.75 minutes. The invocation order and the timestamp order agree throughout, and there are 50 instants at which more than one token was minted, which points to multi-token purchases or several purchases confirmed in the same block. The index data cannot tell those apart [^S03].

The index reports a current price of 0.15 ETH per token [^S02]. No dated source for the original sale terms was found, so whether 0.15 ETH was a fixed price throughout, or the resting point of a declining auction, is left unresolved. The collection page's current secondary listing floor is a later market observation and is not mint history [^S01]. At retrieval, the 300 tokens were held by 137 distinct addresses [^S03].

Invocation 0 was minted about sixteen hours before the first public mint and before activation. The index does not label reserved or artist mints, and this package does not infer that status from the timing.

## Copyright and licensing

The artwork licence recorded in the index is the string `CC BY-NC 4.0`, with a null licence link [^S02]. The collection page's details panel, expanded for this research, lists edition size, website, library, aspect ratio, chain, token standard, contract type and attributes, but no licence field [^S01]. The canonical deed for that identifier permits sharing and adaptation, requires attribution and a link to the licence, and prohibits use of the material "for commercial purposes", with no additional restrictions [^S11]. On that reading, anyone may copy and adapt a Return image for non-commercial purposes with credit, and nobody, token holders included, gains commercial rights from the licence. The label is fully specified, but because the record supplies no link, the association with the deed rests on the identifier.

The code is a separate question, and here Return is unusual. The first line of the program itself is a comment reading `CC BY-NC 4.0` followed by the artist's GitHub address [^S02]. That is an artist-authored licence statement inside the code, not only a platform field about the artwork. The two statements agree. It remains an assertion in a comment rather than a licence file, and no repository for the work was found at the linked account [^S10]. This package records the code licence as reported by the artist in the source and does not reproduce any of the program.

Two third-party elements need separate records. The p5.js library, version 1.0.0, is supplied by the renderer from a public CDN at view time [^S06]; its licence was not examined in this session. The anti-aliasing routine is credited in a code comment to Piter Pasma [^S02]; no terms for its reuse are stated, so its rights position is unknown.

Nothing about token ownership, AB5D's CC0 dedication of this essay's prose, or the public visibility of the code changes these positions.

## Close reading of examples

Four tokens were chosen to cover the controls that matter most. They are the AB5D holding, a Meditative token that flows inward, a sharp square at the diagonal, and a softened square carrying the Oracle palette and the Half mask. Each was opened in the official live renderer with the browser pane displayed, and each was compared with the platform's still image of the same token [^S04][^S06][^S07]. This is a purposive selection, not a statistical sample.

**Return #263** (token `77000263`, held by an address in the AB5D linked-wallet set [^S05]) was observed for just over four minutes. Its published traits are Circle, Conceptual, Thaddeus, Tilted, Slice and Out, and its live globals confirm 10 bands, two swapped to black and one to white [^S04][^S06]. The platform still shows what the program intends: a wide orange outer band fading into deep teal, a pale ring, thin orange rings closer in, a softly glowing centre, and a black bar crossing the disc at 45 degrees, where the Slice mask replaces colour with black and white [^S07]. In the live renderer on the observation machine, the same token is a flat slate-blue disc on an off-white ground, with a soft shadow at its edge and only the faintest concentric ghosts. That slate blue is the palette's final colour, read from the running shader [^S06]. The motion is real even so. Over the first 30 seconds the frame counter advanced at 60 frames per second, the time value rose at 0.0006 per second, and nine of ten canvas signatures sampled at three-second intervals differed [^S06]. That rate completes a loop in about 28 minutes, which is what "slowly loops" means in practice for a Conceptual token. Pressing 1 raised the rate twentyfold to 0.012 per second. Pressing 0 froze it: four samples across six seconds had identical signatures while the frame counter kept running. Pressing 2 set it to 0.006 per second [^S06]. The controls work exactly as the program describes, and they drive an animation that, on this hardware, shows only as a faint shimmer.

**Return #228** (token `77000228`) is one of 27 Meditative tokens and one of seven that flow inward, the only token in the edition to be both [^S03][^S04]. It was observed for about 50 seconds, roughly two-thirds of its 83-second loop. The platform still shows a pale ring structure in the South Beach palette: an outer rim of blue and pink, a broad white band, a wide pink field, a black-edged peach core and a small pale blue centre [^S07]. Live, it is a flat peach disc, which is again the palette's final colour [^S06]. Seventeen canvas signatures sampled across 48 seconds were all distinct, and the time value rose at 0.012 per second [^S06]. Here the faint ghost ring could be tracked. Reading a column of pixels upward from the centre once a second, a single faint ring stood 43 pixels from the centre and then 37, 30, 24, 18, 11 and 5 pixels, before disappearing into the middle [^S06]. That is about 6.4 device pixels per second inward. The program's distance scale and the measured time rate predict the same speed, so the ghost is the intended inward motion made visible by the rounding at a band edge. A diagnostic render of the same shader with the undefined final mix set to zero showed full bands and the same inward shift of about three pixels per 0.02 of time [^S06]. The work's central idea, "returning inward", is literally present in this token, and on this hardware only its ghost could be measured.

**Return #99** (token `77000099`) is a sharp square turned 45 degrees, in the Zephyr palette with 15 bands. Because it is rotated and not a circle, the program enlarges its scale and moves its shadow threshold, so the diamond nearly reaches the frame [^S02][^S04]. Live, it showed as a flat dusty-pink diamond with crisp corners and faint nested diamond ghosts, and it changed between samples five seconds apart, consistent with the Meditative rate [^S06].

**Return #296** (token `77000296`) combines the Soft form, the Oracle palette, the Half mask, Tilted Mirror and inward flow [^S04]. Its Oracle colour, read live, is a brick red, alongside black and off-white [^S06]. The platform still shows a rounded diamond whose upper-left half carries a red gradient band and whose lower-right half is plain off-white, with a black nested diamond and a graded centre. The Half mask divides the image in two, with colour on one side and black and white on the other [^S07]. Live, the entire diamond is a flat near-black, the final colour in the chain, and the red never appears [^S06]. Its movement began after the Conceptual pause: the time value was 0.002 at frame 512, exactly what 300 frames of waiting followed by one step every 20 frames predicts [^S06].

Taken together, the four readings show a system whose metadata and program agree perfectly, and whose visible output depends on the machine it runs on.

## Significance and limitations

Return is a compact work with one large idea. The composition is fixed at mint, but because the pattern is a function of distance plus time, wrapped into a cycle, the work never repeats its state within a viewing and always returns to it. The weighting makes most tokens slow: 273 of 300 are Conceptual, taking about 28 minutes per loop at 60 frames per second, and only 27 are Meditative [^S03][^S06]. The keyboard lets a viewer change the pace, including stopping it entirely [^S02].

It also sits clearly within Penne's practice. The palette names, the Oracle and Zephyr methods and the preference for op art black and white all appear in his own account of Apparitions two months earlier, and here they are reused in a work that is about repetition [^S08][^S02].

Its technical record carries three findings that matter beyond this project. The three-shift generator shared with later projects by other artists appears here in May 2021, which strengthens the case that it circulated among Art Blocks contributors as a template [^S02][^S14]. The published traits reproduce exactly and describe the image after the program's own corrections, not the raw draws [^S03]. And the colour chain ends in an instruction the graphics standard leaves undefined, which on at least one current Apple configuration reduces every token to a single flat colour, while the platform's stills show the intended bands [^S12][^S06][^S07]. A collector or curator presenting Return live should test the actual display hardware and not assume the renderer and the still agree.

Unresolved research questions:

1. Was the flat-colour rendering present on any hardware at mint in 2021, and on which current browsers and GPUs does the live renderer show the bands? Only one machine was tested.
2. Were 0.15 ETH and the minting sequence fixed from the start, and was there a public announcement with a scheduled opening time? No dated announcement was found.
3. Was invocation 0 an artist or administrative mint? The index does not say.
4. Where did the shared three-shift generator originate, and does any Art Blocks project earlier than Return carry it?
5. Does the in-code `CC BY-NC 4.0` statement also cover the anti-aliasing routine credited to Piter Pasma, and under what terms was that routine shared?
6. Did the ArtyNFT interview listed on the artist's site, now returning a server error, or the two podcast episodes it lists, discuss Return? None of these could be inspected.

[^S01]: Art Blocks. [Return by Aaron Penne, collection page](https://www.artblocks.io/collection/return-by-aaron-penne). Accessed 2026-09-20.
[^S02]: Art Blocks. [Art Blocks public GraphQL index, projects_metadata for project 77, including the complete program](https://artblocks-mainnet.hasura.app/v1/graphql). Accessed 2026-09-20.
[^S03]: Art Blocks. [Art Blocks public GraphQL index, tokens_metadata for all 300 tokens of project 77](https://artblocks-mainnet.hasura.app/v1/graphql). Accessed 2026-09-20.
[^S04]: Art Blocks. [Art Blocks public GraphQL index, tokens_metadata for the four example tokens of project 77](https://artblocks-mainnet.hasura.app/v1/graphql). Accessed 2026-09-20.
[^S05]: Art Blocks. [Art Blocks public GraphQL index, user_profiles for the AB5D collection](https://artblocks-mainnet.hasura.app/v1/graphql). Accessed 2026-09-20.
[^S06]: Art Blocks. [Art Blocks live renderer for project 77 tokens](https://generator.artblocks.io/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/77000263). Accessed 2026-09-20.
[^S07]: Art Blocks. [Art Blocks rendered still images for project 77 tokens](https://media-proxy.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/77000263.png). Accessed 2026-09-20.
[^S08]: Aaron Penne. [Aaron Penne: Apparitions on Art Blocks](https://www.artxcode.io/journal/aaron-penne-apparitions-on-art-blocks). Published 2021-03-31. Accessed 2026-09-20.
[^S09]: Aaron Penne. [Aaron Penne, artist website (home and About pages)](https://www.aaronpenne.io/). Accessed 2026-09-20.
[^S10]: Aaron Penne. [aaronpenne on GitHub, profile and repository list](https://github.com/aaronpenne?tab=repositories). Accessed 2026-09-20.
[^S11]: Creative Commons. [Deed: Attribution-NonCommercial 4.0 International](https://creativecommons.org/licenses/by-nc/4.0/). Accessed 2026-09-20.
[^S12]: Khronos Group. [smoothstep, OpenGL ES 3 Reference Pages](https://registry.khronos.org/OpenGL-Refpages/es3.0/html/smoothstep.xhtml). Accessed 2026-09-20.
[^S13]: Jeff Davis. [In Conversation with Aaron Penne](https://beta.cent.co/artblocks/+dlg37p). Published 2021-03-16. Accessed 2026-09-20.
[^S14]: Art Blocks. [Art Blocks public GraphQL index, projects_metadata script for project 190 (Mental pathways), generator cross-check](https://artblocks-mainnet.hasura.app/v1/graphql). Accessed 2026-09-20.
