# Cargo by Kim Asendorf

*Art Blocks Curated, project 426 · 1,000 outputs · minted 29 March 2023 · CC BY-NC-ND 4.0*

![Cargo #876: a black field divided into tall outlined panels, each filled with fine grey horizontal lines](https://media-proxy.artblocks.io/1/0x99a9b7c1116f9ceeb1652de04d5969cce509b069/426000876.png)
*Cargo #876, held by AB5D: a Subdivision built from a single group of "framed" patterns. Render: Art Blocks media proxy.*

## The work and its context

Cargo is project 426 on the Art Blocks contract `0x99a9b7c1116f9ceeb1652de04d5969cce509b069`. The index records 1,000 invocations against a maximum of 1,000, a square aspect ratio, the runtime label `js@n/a` and the licence `CC BY-NC-ND 4.0` [^S01]. The project text calls it "a series of abstract paintings created with animated pixels that are constantly moving without ever repeating" [^S01]. The artist's display note says it is "optimized for public display on OLED screens or LED walls" and needs a modern GPU to run at 60 frames per second [^S01]. The project record also states: "20% of all proceeds will be donated to Doctors Without Borders" [^S01].

Each output is a live WebGL animation. A composition of rectangular containers, filled with stripes, dot grids, noise, boxes, gradients and blocks of colour, is drawn once. Then its pixels are pushed around and repaired, container by container, for as long as the page is open [^S01]. The static PNGs on the Art Blocks media proxy are single frames of that process.

Kim Asendorf is a German artist. Art Blocks gives his birth as 1981 in Bremen and an MFA from Kunsthochschule Kassel [^S02]; Ragnar Digital gives 1981 in Kassel and says he lives in Berlin [^S03]. He is best known for pixel sorting. His Processing script ASDFPixelSort is credited "Kim Asendorf 2010" and describes itself as a tool "to sort portions of pixels in an image with threshold control" [^S04]. Sarah Zucker's essay on his site describes the effect as pixels "sorted according to luminosity yielding a signature streaked appearance", and notes that the code became open source in 2012 [^S05]. Art Blocks lists exhibitions at Kunsthalle Zürich, ZKM Karlsruhe, HeK Basel and The Photographers' Gallery, among others [^S02].

## Conception and development

The project text places Cargo as "the latest work" in a series of pixel pattern animations that began with monogrid (2021) and Sabotage (2022). It describes both as "highly conceptual series" in which Asendorf found details that "became fundamental in his artistic expression" [^S01]. In the Art Blocks interview with Jordan Kantor, published on 27 March 2023, two days before the release, he draws the distinction plainly. Monogrid and Sabotage were "built around a pretty clear concept", whereas "*Cargo* is much more about compositions" [^S06].

The work was developed with physical displays in mind. Asendorf told Kantor he bought "a little setup of 2x1m with a total of 512x256 LEDs" to see how a pixel translates to an LED. He wanted Cargo "to work equally intensely on a 4K display" and on a small LED wall, and so the patterns "had to be pixel perfect, but also responsive" [^S06]. He describes the core technique as a visual feedback loop, comparable to "an electric guitar feedback that occurs when you put the guitar in front of the amp" [^S06]. The name came from the movement: the patterns "reminded me a bit of logistics", of goods "in transport or being stored and retrieved" [^S06].

He also told collectors how to watch. They "should bring some patience and let their Cargo iteration unfold itself. It will perform; it is a play, with choreography" [^S06]. His own preference is stated too: he would "look out for the most minimal outputs" and for those where two kinds of pattern "create an odd patchwork" [^S06].

## How the work was constructed

The program is two script parts that concatenate to 35,882 bytes of minified JavaScript with embedded GLSL, SHA-256 `7bdb958f78092a003d50952620c2458df5863924ad4e8f78521f58c724a903c1`. It was retrieved from the Art Blocks index and read in full; no code is reproduced here [^S01]. It bundles Jonas Wagner's simplex noise and Stefan Gustavson's cellular noise, both credited in the project text [^S01].

Randomness comes from two small sfc32 generators, one seeded from each half of the token hash. They are called alternately, and each is first stepped 500,000 times (code reading) [^S01]. The program then works in three stages.

1. **The image.** A 2D canvas the size of the screen is filled black (white in about 2.5 per cent of cases). A colour mode, a structure and a set of "compositions" are drawn. Each composition pairs one of eight pattern families (dashed lines, noise, grids, boxes, areas, framed panels, rectangles, gradients) with up to eight of that family's eight variants. The structure divides the canvas into containers, and a pattern mode decides which pattern fills each container [^S01].
2. **The motion map.** A second canvas assigns each active container a colour. Its red channel selects one of eight motion algorithms, its green channel one of eight reset algorithms, and its blue channel a noise offset. Each container stays active for 300 to 1,500 frames (code reading) [^S01].
3. **The feedback shader.** On every frame, a fragment shader reads the previous frame. It displaces pixels by cellular noise where a motion algorithm is set, or copies back the original image where a reset pattern fires. This is the "flip-flop render buffer" of the project text, which "is always a combination of two algorithms, one from each set" [^S01].

To test how the traits arise, I ran the image-planning stage of the program in Node.js for all 1,000 hashes on a 1,000 by 1,000 pixel canvas, with the drawing calls stubbed out [^S07]. The simulation reproduced the published Structure, Rows, Columns, Background Color, Pattern Mode and the eight "… Patterns" flags for every token, and the colour mode for every token not labelled "Black and White" [^S07][^S01].

| Trait | Program weight | Published count of 1,000 |
| --- | --- | --- |
| Structure: Subdivision / Subdivided Rows / Subdivided Columns / Packing / Grid / Noisy Rows / Noisy Columns / Columns / Rows | 18 / 16 / 15 / 14 / 11 / 8 / 7 / 6 / 5 per cent | 197 / 151 / 151 / 124 / 104 / 96 / 60 / 62 / 55 |
| Colour mode: three random colours / two / one / pale | 75 / 12 / 5 / 8 per cent | Three Colors 496, Two Colors 106, One Color 42, Pale 45, plus 311 "Black and White" (see Quirks) |
| Background: white | 2.5 per cent | 22 |
| Pattern Mode: eight modes | 12.5 per cent each | 119 to 129 each |

The random colours sit near red or near blue on the hue wheel at full saturation, which is why magenta, red, violet and cyan dominate the edition (code reading) [^S01]. The "Pale" mode instead takes any hue at reduced saturation and adds two softer companions (code reading) [^S01].

Other traits are counts. Number of Pattern Groups is the number of distinct pattern families used, and Number of Patterns the number of distinct family and variant pairs, up to 64 [^S07]. Complexity tracks the number of containers. In my simulation, the single "None" token has one container, "Minimal" tokens have 3 to 17, "High" 645 to 1,024 and "Ultra" more than 1,000 [^S07]. Motion Location is the motion scheduler's mode, and Motion Activity is the share of containers animated at once, rounded up to a whole percentage. That rule matched 994 tokens; the other six are Columns or Rows structures, whose container count depends on screen width [^S07].

## Quirks in the algorithm

1. **"Black and White" does not describe the program.** The program has four colour modes and no greyscale mode, and no later step removes colour (code reading). Yet 311 tokens are published as "Black and White" [^S01]. In the simulation these tokens split across all four modes: 230 three-colour, 34 two-colour, 27 pale and 20 one-colour [^S07]. Some of them are plainly coloured. #140, labelled "Black and White", uses all 64 patterns, and its render is full of magenta blocks. #43 has red-to-blue gradient columns and white noise blots [^S01]. About 23 per cent of #140's rendered pixels are strongly saturated (my measurement from the media-proxy PNG). Some "Black and White" tokens do look monochrome, because they use only patterns that draw in white. But 74 contain a colour-drawing pattern, and there is no rule in the program that explains the label [^S07]. How the trait was derived is an open question.
2. **One container, 200 per cent activity.** The motion scheduler always keeps at least two animation slots running. #680 has a single container, the whole canvas, so two slots overlap on it and its Motion Activity reads 200 [^S07][^S01]. It is also the only token with Complexity "None" and one of 48 with a single pattern [^S01].
3. **A deliberate fall-through.** In the motion scheduler, one branch has no break and runs into the next, so it steps two containers at a time instead of one (code reading). The published labels line up with this: the step-by-two mode is "Gaps", the step-by-one mode "Series", the random-restart mode "Jumps" and the fourth "Random" [^S07][^S01].
4. **Containers heal before they hand over.** In the last 150 frames of a container's life, its motion channel is set to zero while the reset pattern keeps running. Each container therefore stops moving and is partly restored toward the original image before another takes its place (code reading) [^S01]. This is the mechanism behind the project text's reset algorithms that "constantly try to recreate the initial image" [^S01].
5. **A gradient that changes other patterns' colours.** One gradient variant swaps the first two colours in the shared palette every time it is drawn, and another does so one time in ten. The swap persists, so every pattern drawn afterwards inherits the reversed colours (code reading) [^S01].
6. **Frame rate and wrap-around.** Lifetimes are counted in frames, not seconds, so on a 120 Hz display containers turn over twice as fast as on a 60 Hz one. Displaced pixels that leave one edge re-enter at the opposite edge (code reading) [^S01].
7. **Resizing.** The device-pixel scale is capped at 3 when the page loads but at 2 after any resize. The loop meant to free the old frame buffers iterates over array indices rather than the buffers, so nothing is released, and memory use grows with each resize (code reading) [^S01]. On a display that is never resized, as the artist intends, neither matters.
8. **Rules found in the data.** All 27 "Ultra" tokens are Noisy Rows or Noisy Columns. Every Subdivision, Subdivided Rows and Subdivided Columns token is "Normal", because those structures always make at least 36 containers. Every "Random" pattern-mode token reports eight pattern groups, and every "Series" and "Single Composition" token one. All 22 white-background tokens are "Normal" complexity [^S01][^S07].
9. **Pattern counts.** The simulated number of distinct patterns matches the published figure for 953 tokens. The published number is never higher, and it is lower for 47, 36 of them Subdivisions. That is consistent with the trait script skipping very small containers, though this is an inference [^S07]. #876, pictured above, shows three published patterns against four in the simulation.

## The most coveted variants

No published source inspected for this draft ranks Cargo traits or names grails, and no auction sale of a Cargo was found. What follows combines the artist's stated preferences with the index data.

**Minimal and single-container outputs.** Asendorf's own interest is in "the most minimal outputs" [^S06]. The index has 120 "Minimal" tokens and one "None", #680 [^S01]. #680 is a single box pattern across the whole canvas, which the motion turns into a slowly boiling grey texture.

![Cargo #680: an even grey texture of tiny boxes churned into ripples](https://media-proxy.artblocks.io/1/0x99a9b7c1116f9ceeb1652de04d5969cce509b069/426000680.png)
*Cargo #680, the only output with one container. Render: Art Blocks media proxy.*

**Full-palette outputs.** Fourteen tokens use all 64 patterns, among them #140, #211 and #553 [^S01]. #140 is a Packing structure in which magenta rectangles, noise and stripes interlock.

![Cargo #140: dense horizontal packing of magenta blocks, grey noise and stripes on black](https://media-proxy.artblocks.io/1/0x99a9b7c1116f9ceeb1652de04d5969cce509b069/426000140.png)
*Cargo #140, labelled "Black and White" but visibly coloured. Render: Art Blocks media proxy.*

**White backgrounds (22).** Only 2.2 per cent of outputs invert the ground to white [^S01]. #46 is a three-colour Subdivided Rows output whose gradients read as pale peach and lilac bands among grey noise on white.

![Cargo #46: horizontal bands of pale peach and lilac gradients and grey noise on a white ground](https://media-proxy.artblocks.io/1/0x99a9b7c1116f9ceeb1652de04d5969cce509b069/426000046.png)
*Cargo #46, a white-background output. Render: Art Blocks media proxy.*

**Invocation 0.** #0 was minted on 22 February 2023, five weeks before the sale, and at retrieval was still held by the artist's address [^S01]. It is a three-colour Subdivision of cyan, blue and violet gradient blocks between striped and noisy panels.

![Cargo #0: cyan, blue and violet gradient blocks among striped and noisy panels on black](https://media-proxy.artblocks.io/1/0x99a9b7c1116f9ceeb1652de04d5969cce509b069/426000000.png)
*Cargo #0. Render: Art Blocks media proxy.*

The single largest sale recorded on VERSE's series page is $8,755, without a token number. VERSE gives total volume of $2,844,083 across marketplaces [^S08]. At retrieval, the lowest listing in the index was 0.47499 ETH [^S01].

## Notable collectors

- **Le Random** holds Cargo #82, recorded as acquired on 29 March 2023, the day of the sale, as its acquisition number 127. It calls the series "an exemplary showcasing of Kim Asendorf's archetypal pixel-based procedural work" [^S09].
- **XX (@brightopps)** lent Cargo #793 to Glitch Gallery in Marfa (see below) [^S10].
- **AB5D** holds #876 [^S01].
- At retrieval, the 1,000 tokens were held by 420 addresses. The four largest held 54, 49, 45 and 39. No source inspected ties those wallets to a named collector [^S01].

## Cargo on screen: the Marfa window

The only physical showing found for this draft is at Glitch Gallery's window space in Marfa, Texas. From 1 October to 1 November 2023, Cargo #793 ran in the gallery window at 108 E. El Paso Street and on a continuous Twitch livestream [^S10]. The gallery text notes that each output "could be freely adjusted to any resolution or screen size", its animation "a dynamic balance between order and noise" [^S10].

![A frame of Cargo #793: violet and white blocks above black panels of stripes, with pixels torn sideways by the motion](https://www.glitchmarfa.com/uploads/kimasendorf_Cargo793.jpg)
*Cargo #793, image from the Glitch Marfa exhibition page. The displaced pixels show the feedback motion caught mid-frame. Image: Glitch Marfa / Kim Asendorf.*

Asendorf's LED-wall tests are documented only in his own words [^S06]. No print programme or edition of physical Cargo works was found.

## The mint

Invocation 0 was minted on 22 February 2023 at 13:55:23 UTC. The project was activated on 22 March, and the public sale opened on 29 March 2023 at 17:00 UTC [^S01]. The minter was an exponential Dutch auction with settlement. It started at 3 ETH, halved every 734 seconds and had a floor of 0.1 ETH [^S01]. The index records a settled price of 0.24498 ETH for all 999 auction tokens, bought through 458 purchaser receipts. That price is what the curve reaches about 44 minutes after the start (my computation) [^S01]. Nineteen tokens had been minted after ten minutes. The 1,000th was minted at 17:45:11 UTC, 45 minutes in [^S01]. The price field of 0 in the project record reflects this minter, not a free mint.

The minter's revenue record lists an "additional payee" receiving 20 per cent, matching the Doctors Without Borders pledge, and a render-provider share of 10 per cent [^S01]. At the settled price, 999 tokens yielded about 244.7 ETH, which puts the 20 per cent share at about 48.9 ETH (my computation). The index does not name the additional payee's address.

## Copyright and licensing

The index records `CC BY-NC-ND 4.0` with a link to the Creative Commons deed [^S01][^S11]. On that licence the images may be shared non-commercially with attribution, but not adapted; commercial use needs permission. The program carries no separate code licence. The bundled noise libraries keep their own terms, and the embedded cellular-noise shader carries an MIT notice (code reading) [^S01]. The Glitch Marfa image is hotlinked, not re-hosted.

## Significance and limitations

Cargo translates Asendorf's long engagement with the individual pixel, from the luminosity streaks of pixel sorting to the responsive grids of monogrid, into a live, screen-filling composition that repairs itself as it moves [^S05][^S01]. It was designed for displays rather than for still images, and the media-proxy frames used here can show only one moment of it [^S06]. Its trait data can be reproduced almost entirely from the program, with one conspicuous exception, the "Black and White" colour mode [^S07]. Its collecting history is thinly documented. No auction sale, museum acquisition or published grail list was found.

Unresolved research questions:

1. How was the "Black and White" trait computed, and was the mismatch with the rendered colours known to the artist or to Art Blocks?
2. Where was Asendorf born, Bremen (Art Blocks) or Kassel (Ragnar Digital)?
3. Has any Cargo sold at auction or been acquired by a museum, and which token holds the secondary-sale record? VERSE's $8,755 figure has no token number. X posts by the artist and collectors are the likeliest leads but could not be fetched.
4. Has Cargo been shown on an LED wall or in an institutional exhibition beyond the Glitch Marfa window, and did Asendorf's 512 by 256 LED test rig produce any public work?
5. The Right Click Save interview (January 2024) could not be read in full, and the Kantor interview quotes were confirmed only through automated extraction of a HackMD copy. Both should be checked against the original pages.

## Bibliography

### Primary: the work and the artist

[^S01]: Art Blocks public GraphQL index, retrieved 20 September 2026: `projects_metadata` for project 426 (including the full program and minter configuration), `tokens_metadata` for all 1,000 tokens and `receipt_metadata` for the auction. https://artblocks-mainnet.hasura.app/v1/graphql. Collection page: https://www.artblocks.io/collection/cargo-by-kim-asendorf. Renders measured from https://media-proxy.artblocks.io.
[^S06]: Jordan Kantor, "In Conversation with Kim Asendorf on Cargo", Art Blocks, 27 March 2023. https://www.artblocks.io/info/spectrum/in-conversation-with-kim-asendorf-on-cargo (quotations checked against a copy at https://hackmd.io/@BenceIvanyi/SkAovMou2)
[^S04]: Kim Asendorf, ASDFPixelSort, GitHub. https://github.com/kimasendorf/ASDFPixelSort
[^S02]: Art Blocks, "Kim Asendorf", Curated artist page. https://www.artblocks.io/curated/artists/kim-asendorf
[^S07]: Author's reproduction of Cargo's image-planning and motion-setup code in Node.js for all 1,000 token hashes at 1,000 × 1,000 pixels, compared with the published features. Working files in the AB5D project folder `work/cargo-by-kim-asendorf/`.
[^S11]: Creative Commons, Attribution-NonCommercial-NoDerivatives 4.0 International. https://creativecommons.org/licenses/by-nc-nd/4.0/

### Video and audio

- "Cargo - Kim Asendorf", The Culture Project, YouTube. https://www.youtube.com/watch?v=8VJxWvWPJxE
- "Art, Code, and Pixels ft. Kim Asendorf", Kaloh's Podcast, YouTube. https://www.youtube.com/watch?v=Ee8mfbSge2c
- Titles and channels confirmed via YouTube's oEmbed service on 20 September 2026. The videos were not watched for this draft.

### Criticism, collecting and market

[^S05]: Sarah Zucker, "Pixel Sorting: Meeting Chaos Half-Way", July 2022. https://kimasendorf.com/mountain-tour/pixel-sorting-meeting-chaos-half-way/
[^S03]: Ragnar Digital, "Kim Asendorf". https://www.ragnardigital.art/artists/kim-asendorf
[^S10]: Glitch Gallery Marfa, "Cargo #793", window exhibition, 1 October – 1 November 2023. https://www.glitchmarfa.com/e30dgallery/cargo/
[^S09]: Le Random, "Cargo #82 by Kim Asendorf". https://www.lerandom.art/collection/cargo-82
[^S08]: VERSE, "Cargo by Kim Asendorf" series page, read 20 September 2026. https://verse.works/series/cargo-by-kim-asendorf-2

### Further reading

- River Davis, "The Interview | Kim Asendorf", Right Click Save, 22 January 2024 (not read in full). https://www.rightclicksave.com/article/the-interview-kim-asendorf-generative-art-digital-art
- Fakewhale, "Kim Asendorf: From Pixel to Paradigm", 19 February 2024. https://log.fakewhale.xyz/kim-asendorf-from-pixel-to-paradigm/
- Kim Asendorf, Cargo website. https://cargo.cx
- Kim Asendorf, monogrid. https://monogrid.xyz and Sabotage. https://sabotage.kim
