{
  "schema": "ab5d-series-essay/1",
  "identity": {
    "chainId": 1,
    "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
    "projectId": 170,
    "slug": "chroma-theory-by-pawel-dudko",
    "title": "Chroma Theory",
    "artistCredit": "Paweł Dudko",
    "artistDossierUrls": [
      "https://ab5d.xyz/artists/pawe-dudko/"
    ]
  },
  "revision": 2,
  "researchCutoff": "2026-09-18",
  "status": "published-with-research-limitations",
  "facts": [
    {
      "id": "edition-size",
      "topic": "work-context",
      "value": 106,
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S01"
      ],
      "status": "verified",
      "note": "Indexed invocations 106 against max_invocations 106; the project page states 106 unique artworks."
    },
    {
      "id": "project-id",
      "topic": "work-context",
      "value": 170,
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "status": "verified",
      "note": "On-chain project ID. The AB5D atlas position 178 is a catalogue index and is not this."
    },
    {
      "id": "library",
      "topic": "construction",
      "value": "p5@1.0.0",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S01",
        "S05"
      ],
      "status": "verified",
      "note": "Declared by the index, printed on the project page, and the only script the renderer loads. The visual work is done by GLSL shaders compiled at runtime from strings inside the program."
    },
    {
      "id": "script-stored-bytes",
      "topic": "construction",
      "value": 2495,
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "status": "verified",
      "note": "The stored form is packed. The digest is over these stored bytes."
    },
    {
      "id": "script-sha256",
      "topic": "construction",
      "value": "af5637d607606dc4d6deedebc53e453e9815e41dc8832e6b9fa2b056cb9aa6af",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "status": "verified",
      "note": "SHA-256 over the UTF-8 bytes of the returned script field, which is the packed form as published on chain."
    },
    {
      "id": "script-unpacked-characters",
      "topic": "construction",
      "value": 2651,
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "status": "verified",
      "note": "Obtained by reimplementing the base-62 substitution as pure string work without executing the packed code. Read in full."
    },
    {
      "id": "no-interaction",
      "topic": "construction",
      "value": "none",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S01"
      ],
      "status": "verified",
      "note": "The unpacked program defines no key or mouse handler, and the project page carries no interactive badge."
    },
    {
      "id": "animation-model",
      "topic": "construction",
      "value": "continuous and non-repeating",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S05",
        "S08"
      ],
      "status": "verified",
      "note": "The pseudo-random generator is advanced inside the drawing routine on every frame, so the state never returns to its start. The artist's later revision added looping as a change, which corroborates the original's absence of it."
    },
    {
      "id": "seed-slice-defect",
      "topic": "construction",
      "value": "fourteen hexadecimal digits parsed instead of sixteen",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "status": "verified",
      "note": "The seed slice takes sixteen characters of a hash string beginning with the 0x prefix. The same off-by-two appears in two other unrelated projects in this batch."
    },
    {
      "id": "spots-reproduction",
      "topic": "construction",
      "value": "106 of 106",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S03"
      ],
      "status": "verified",
      "note": "Published Spots is the spot-loop count of four to six plus the separately drawn centre circle, giving 5, 6 or 7."
    },
    {
      "id": "centerradius-reproduction",
      "topic": "construction",
      "value": "106 of 106",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S03"
      ],
      "status": "verified",
      "note": "Centre circle diameter as a truncated percentage of the working dimension."
    },
    {
      "id": "colour-traits-unreproduced",
      "topic": "construction",
      "value": "BackgroundColor, CenterColor and ColorDeviation",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S03",
        "S05"
      ],
      "status": "conflicting",
      "note": "None reproduces. The reimplementation was validated against the running sketch, which returned its predicted values exactly, so the reading of the artwork is correct. The published values match neither the sketch's internals nor the rendered pixels, and no feature-generating code exists in the program."
    },
    {
      "id": "first-mint",
      "topic": "mint",
      "value": "2021-10-09T11:41:28+00:00",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S03"
      ],
      "status": "verified",
      "note": "Invocation 0, the only mint preceding the public opening, and still held by the indexed artist address."
    },
    {
      "id": "activation",
      "topic": "mint",
      "value": "2021-10-23T18:04:15+00:00",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "status": "verified",
      "note": "Distinct from both the first mint and the public opening."
    },
    {
      "id": "public-opening",
      "topic": "mint",
      "value": "2021-10-28T16:00:00+00:00",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S01"
      ],
      "status": "verified",
      "note": "Index start_datetime. The project page renders this instant locally and displays 29 October 2021."
    },
    {
      "id": "completion",
      "topic": "mint",
      "value": "2022-03-21T07:15:20+00:00",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S03"
      ],
      "status": "verified",
      "note": "Same instant as the final mint, invocation 105."
    },
    {
      "id": "auction-ladder",
      "topic": "mint",
      "value": "Dutch auction 2 to 0.1 ETH in nine rungs at five-minute steps",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S01"
      ],
      "status": "reported",
      "note": "Published in the project page sales note. Rung start times in evidence.json are derived from the published opening and step, not separately sourced from on-chain price changes."
    },
    {
      "id": "mints-during-descent",
      "topic": "mint",
      "value": 2,
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S01",
        "S03"
      ],
      "status": "verified",
      "note": "Invocation 1 inside the 0.75 rung and invocation 2 inside the 0.25 rung, thirty-two seconds before the floor. The remaining 103 minted at or after the resting price."
    },
    {
      "id": "sale-duration-days",
      "topic": "mint",
      "value": 143.6,
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S03"
      ],
      "status": "verified",
      "note": "Endpoints are the public opening and the final mint; the difference in milliseconds divided by 86400000."
    },
    {
      "id": "current-index-price",
      "topic": "mint",
      "value": "0.1 ETH",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S01"
      ],
      "status": "verified",
      "note": "Current observation of the index field, equal to the published auction resting price. Not evidence of a later repricing."
    },
    {
      "id": "licence-label",
      "topic": "rights",
      "value": "NFT License",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "status": "reported",
      "note": "Exact index string preserved. link_to_license is null and the project page publishes no licence field, so the label is unlinked and unverified."
    },
    {
      "id": "licence-terms-url",
      "topic": "rights",
      "value": null,
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S09"
      ],
      "status": "unknown",
      "note": "Null because the record supplies no link. A document of that name exists and was inspected, but nothing in the project record associates it with this work, so no URL is asserted."
    },
    {
      "id": "code-licence",
      "topic": "rights",
      "value": null,
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "status": "unknown",
      "note": "No licence statement or copyright notice appears anywhere in the program, packed or unpacked."
    },
    {
      "id": "artist-website-of-record",
      "topic": "conception",
      "value": "https://www.pdudko.com/p/chroma-theory.html",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S07",
        "S06"
      ],
      "status": "verified",
      "note": "Returns a 404 page. The artist's working page for the project exists at https://pdudko.com/chroma-theory/ on the same domain."
    },
    {
      "id": "artist-interview",
      "topic": "conception",
      "value": null,
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "status": "unknown",
      "note": "Null in the indexed record. The artist's own project page supplies a short statement, used here instead."
    },
    {
      "id": "later-revision",
      "topic": "conception",
      "value": "Dark Chroma Theory, 16 pieces, January 2022",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S08"
      ],
      "status": "reported",
      "note": "The artist describes it as a revision that added looping, abandoned the centre spot and raised the spot count, which establishes those as properties of the original."
    },
    {
      "id": "ab5d-holding",
      "topic": "examples",
      "value": "170000004",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S04",
        "S03"
      ],
      "status": "verified",
      "note": "Owner address matched against the complete refreshed set of three AB5D linked wallets; exactly one match across all 106 tokens."
    },
    {
      "id": "audio",
      "topic": "examples",
      "value": "silent by construction",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S05",
        "S02"
      ],
      "status": "verified",
      "note": "No audio or video elements, no sound library loaded, no audio call in the unpacked program. Nothing was heard."
    }
  ],
  "rights": {
    "artwork": {
      "reportedLabel": "NFT License",
      "category": "custom",
      "termsUrl": null,
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S01",
        "S09"
      ],
      "note": "The index reports the string NFT License with a null link, and the project page publishes no licence field, so the whole artwork rights record is one unlinked string. A document of that name published by Dapper Labs was read in full and its terms are summarised in the essay, but nothing in the project record points to it, so the association is an inference from the name and the terms URL is recorded as null rather than supplied. Ownership of a token is not a permission over the artwork.",
      "conflicts": [
        "The label names a licence that the record does not link, so which instrument governs the artwork is not established."
      ]
    },
    "code": {
      "reportedLabel": null,
      "category": "unknown",
      "termsUrl": null,
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "note": "No licence statement or copyright notice anywhere in the program, packed or unpacked. On-chain storage establishes retrievability, not redistribution rights. The published form is packed, so the readable form exists only after a transformation the artist did not publish; no part of either form is reproduced in this package.",
      "conflicts": []
    },
    "thirdParty": [
      {
        "component": "p5.js 1.0.0",
        "reportedLabel": null,
        "category": "unknown",
        "termsUrl": null,
        "observedAt": "2026-09-18",
        "sourceIds": [
          "S02",
          "S05"
        ],
        "note": "Declared dependency and the only script the renderer loads. Upstream licensing not inspected.",
        "conflicts": []
      }
    ]
  },
  "sections": [
    {
      "id": "work-context",
      "heading": "The work and its context",
      "bodyMarkdown": "Chroma Theory is Art Blocks project 170 on the contract at `0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270`, on Ethereum mainnet, credited to Pawel Dudko. The indexed record returns 106 invocations against a maximum of 106, a declared dependency of `p5@1.0.0`, and a `display_static` value of false [^S02]. The project page describes it as an Art Blocks 500 release in the Factory category and carries an animated badge and no interactive badge [^S01]. Both are correct, and in this batch that combination is unusual enough to be worth saying twice.\n\nWhat you see has no edges. A square field holds four to six large circles of colour, drawn on a nearly white ground, and then the whole image is pushed through two passes of a blur shader whose radius is itself changing. The circles dissolve. What remains is a field of soft colour masses that drift, swell and bleed into one another: amber against mint, magenta against olive, lilac against pale yellow. Nothing in the finished picture is recognisable as a circle.\n\nThe artist's own description is accurate and worth taking seriously as a description of intent: \"the infinite animation filled with color, where you can experience slight movement, irregular pulse, and tonal diffusion\", an \"abstract study of color coexistence and mutual interference, from pastel hues to vivid compositions\", ending \"Sit back, relax and give it time\" [^S02][^S06].\n\nThree things should be established before the essay proceeds.\n\nThe animation is genuinely infinite rather than looping. Its pseudo-random generator is advanced on every frame, inside the drawing routine, so the state never returns to where it started [^S02]. This is not a reading of intent: the artist later made a separate revision of this work specifically to add looping, and said so [^S08].\n\nThe program is packed. What the index stores is 2,495 bytes of an obfuscator's output, which unpacks to 2,651 characters of ordinary JavaScript [^S02]. It is the smallest program in this batch and it does more per byte than any of the others, because most of the visual work is done by a GLSL fragment shader compiled at runtime.\n\nAnd two of the five published traits reproduce exactly from the hash while three do not, in a way that cannot be explained by an error in this researcher's reading, because the reading was checked against the running artwork and matches it [^S03][^S05]."
    },
    {
      "id": "conception",
      "heading": "Conception and development",
      "bodyMarkdown": "The website recorded against the project is `https://www.pdudko.com/p/chroma-theory.html`. It returns a page titled \"Page not found\" with the text \"404 NOT FOUND\" [^S07]. The domain is live and the artist maintains a substantial site there. A first pass through the site's own navigation and its NFT and generative art category found no entry for this project, and it would have been easy to conclude at that point that the artist had removed it. A site search for the project name found it immediately, at `https://pdudko.com/chroma-theory/` [^S06]. The lesson is recorded in the notes; the page exists and the link of record is simply wrong.\n\nOn that page the artist gives a short statement and one piece of biography that reframes the project. Chroma Theory is described as \"an infinite scripted digital animation that is based on color theory\", in which \"all of the spots visible in a single rendering are subject to the rules of perception, mixing, matching, or contrasting colors\" [^S06].\n\nThe biography is the useful part. The artist writes that the project \"is a homecoming to the beginning of my art creation, photography and CGI\", and then draws a distinction between this work and earlier generative projects: in The Faces of the Circle from 2018, and in (Un)necessary and Populations from 2016, \"final artworks were selected by me and limited to those, I decided to create and exhibit. There are no such limitations in the digital world, which makes art more personal with a hint of surprise\" [^S06]. That is a statement about curation. The artist's earlier generative work was a process from which the artist chose outputs; this one is a process whose outputs are chosen by minting. The artist frames the difference as the appeal of the form.\n\nThe same page carries a list of twelve hashes used to render stills for exhibition, and a thirteenth for a single still [^S06]. Those are not token hashes from this edition; they are configurations the artist rendered for display, which is worth knowing if a catalogue ever encounters one of those images and tries to match it to a token.\n\nThere is also a sequel, and it is directly useful for reading the original. In January 2022 the artist published Dark Chroma Theory, a set of sixteen pieces on a different chain, described as \"a revision of Chroma Theory published on Art Blocks\" in which \"the code has been updated with certain features, e.g.: dark background only, looped animation, organic movement, wider color range, spots number, and appearance reviewed\" [^S08]. The artist explains the changes: they came out of working on Genuary 2022 prompts, \"the idea of the center spot was abandoned and replaced with a higher spots number\", and \"the elements' movement and dissolution were improved to be more organic and looped\" [^S08].\n\nTwo things follow. The centre spot, which in the Art Blocks work is drawn separately from the others and has its own two published traits, was a design element the artist later chose to remove. And looping was a feature the revision added, which means the original does not loop. Both of those read directly onto the program, and both are confirmed there.\n\nThe indexed interview field is null and no dated development account beyond these pages was located [^S02]."
    },
    {
      "id": "construction",
      "heading": "How the work was constructed",
      "bodyMarkdown": "The program was retrieved from the indexed project record by an HTTP POST to the Art Blocks public GraphQL endpoint, using a named operation filtered on the exact slug, with the returned composite identity key corroborating contract and project [^S02]. The record reports a script count of 1. The stored program is 2,495 bytes and hashes to SHA-256 `af5637d607606dc4d6deedebc53e453e9815e41dc8832e6b9fa2b056cb9aa6af`. That digest is over the bytes as stored, which is the packed form.\n\nThose bytes are not readable JavaScript. They are the output of a well-known packing routine that replaces every identifier with a base-62 token and ships a decoder that calls `eval`. To read the program without executing it, the packing was undone by reimplementing the substitution as pure string work: extract the template, the base, the token count and the keyword table, then replace each encoded token with its keyword. That yields 2,651 characters of ordinary JavaScript, which was read in full [^S02]. No artist code is reproduced in this package, packed or unpacked.\n\nThe unpacked program is short and the division of labour is unusual. Almost all of the visual effect comes from a GLSL fragment shader defined as a string inside the JavaScript and compiled at runtime. The shader samples its input texture in sixteen directions at eight radii, sums the samples and divides, which is a radial blur whose radius is supplied as a uniform. The program builds three off-screen buffers at one fifth resolution, draws the circles into the first, runs the blur into the second, runs it again into the third, and draws that to the canvas [^S02]. The softness of every image in this edition is that two-pass shader, and the low buffer resolution is why the result is smooth rather than banded.\n\nThe hash is read two ways. Thirty-two byte pairs are taken from the hash, and each is reduced modulo 10, giving values from 0 to 9 that select the colour and size parameters. Separately, the first sixteen characters of the hash string are parsed as an integer to seed an xorshift generator that supplies the positions and per-spot colours [^S02].\n\nThat seeding has the same defect found in two other projects in this batch. The slice takes the first sixteen characters of the hash *string*, which begins with the two-character `0x` prefix, so only fourteen hexadecimal digits are parsed. The resulting value is a 56-bit number held in a double, beyond the range of exactly representable integers, so its low bits are lost before the generator starts. Three different artists, three unrelated programs, the same off-by-two.\n\nThe generator itself yields one of exactly a thousand values, because its output is reduced modulo 1000 and divided by 1000. For a work whose subject is colour relationships, that is a coarse quantiser on every position and hue it supplies.\n\nThe trait mapping was reimplemented from the unpacked program and run against all 106 token hashes, then compared with the published features [^S03]. Two traits reproduce exactly.\n\nSpots reproduces at 106 of 106. The rule is worth stating because the published number is not the number the program uses. The program computes a spot count as a fractional value between 3 and 5, then runs a loop while the index is less than or equal to it, which draws four, five or six circles. It then draws one further circle at the centre, from separate parameters. The published Spots value is the total of both: five, six or seven. The trait counts what you could see, if you could see them, rather than what the loop counts.\n\nCenterRadius reproduces at 106 of 106, as the centre circle's diameter expressed as a percentage of the canvas, truncated rather than rounded.\n\nBackgroundColor, CenterColor and ColorDeviation do not reproduce, and the reason is not a mistake in the reading. The program computes the background hue as the main hue plus two of the per-spot hues minus 120, modulo 360, and the centre hue as the absolute sum of three per-spot hues modulo 360 [^S02]. Reimplementing that chain gives, for the first token in the edition, a background hue of 83.04 and a centre hue of 340.92. Reading those same variables out of the token's running sketch in the renderer gives 83.04 and 340.92 [^S05]. The reimplementation is correct to two decimal places against the live artwork. The published traits for that token are BackgroundColor 183 and CenterColor 328.\n\nThe rendered pixels do not resolve it either. Sampling the finished canvas for that token gives a hue of 42 at the corner and 58 at the centre [^S05], which matches neither the internal values nor the published ones, because the blurred spots cover the frame and the near-white background is never visible on its own.\n\nSeveral other explanations were tested and rejected: the three traits are not simple functions of any single hash byte, and seeding the generator from the full hash, from the hash without its prefix, or from its first eight digits does not reproduce them either [^S03]. No feature-generating code exists anywhere in the retrieved program. Whatever produced those three values is a separate piece of software that was not located, and this package reports the divergence rather than inventing a rule to cover it.\n\nFinally, the motion. Two things advance every frame. A counter increments by 0.04 and is fed through Perlin noise to set the blur radius, which is why the image breathes rather than pulses regularly. And each spot's noise coordinate advances by a fresh draw from the pseudo-random generator, which means the generator's state is consumed continuously for as long as the work runs [^S02]. There is no loop point and no end state. Measured on the first token across 12.6 seconds, the frame counter advanced 754 frames, the counter advanced exactly 0.04 per frame, and the blur radius moved 140, 125, 115, 145, 105, 129 without pattern [^S05]."
    },
    {
      "id": "mint",
      "heading": "The mint",
      "bodyMarkdown": "Four events need separating.\n\nThe first token, invocation 0, was minted on 9 October 2021 at 11:41:28 UTC [^S03]. The project was activated a fortnight later, on 23 October 2021 at 18:04:15 UTC [^S02]. The public opening, recorded as the project start datetime, was on 28 October 2021 at 16:00:00 UTC [^S02]. The project page displays \"Released on 29 October 2021\", which is that opening rendered in a timezone ahead of UTC [^S01]. Completion, the final mint, was on 21 March 2022 at 07:15:20 UTC [^S02][^S03].\n\nInvocation 0 is still held by the address the index records as the artist's [^S02][^S03], so the artist proof has not moved.\n\nThe sale mechanism is published on the project page: a Dutch auction with a starting price of 2 ETH decreasing every five minutes to a resting price of 0.1 ETH, through the ladder 2, 1.75, 1.5, 1.25, 1, 0.75, 0.5, 0.25, 0.1 [^S01]. Nine rungs at five-minute intervals puts the resting price at 16:40:00 UTC, forty minutes after opening.\n\nSetting that schedule against the mint timestamps gives a precise picture. Two tokens were minted during the descent: invocation 1 at 16:28:44 UTC, inside the 0.75 rung, and invocation 2 at 16:39:28 UTC, inside the 0.25 rung and thirty-two seconds before the floor [^S01][^S03]. The remaining 103 tokens were minted at or after the resting price. The auction, in other words, went almost all the way down before it found its second buyer.\n\nThe pace afterwards was steady rather than fast: 13 tokens in the first hour, 16 more during the rest of the first day, 17 across days two to seven, 19 across days eight to thirty, and the final 40 across the remaining months [^S03]. The longest gap between consecutive invocations was 27.6 days, between invocations 99 and 100 [^S03]. The sale duration from public opening to final mint is 143.6 days, calculated as the final mint at 2022-03-21T07:15:20Z minus the opening at 2021-10-28T16:00:00Z divided into days [^S02][^S03].\n\nThe index reports a current price of 0.1 ETH [^S02], which is the auction's published resting price rather than a later change.\n\nIt is worth noting that the same batch contains another Factory release from the same fortnight whose auction also fell to its floor with two tokens sold during the descent. Two cases is not a trend, and no claim about the wider platform is made here."
    },
    {
      "id": "rights",
      "heading": "Copyright and licensing",
      "bodyMarkdown": "The artwork licence the platform reports is the string `NFT License`, and the index carries no link for it: the `link_to_license` field is null [^S02]. The project details panel on the live page publishes edition size, website, library, aspect ratio, blockchain, token standard, contract type and the attribute list, and no licence field at all [^S01]. So the entire rights record for this artwork is one unlinked string.\n\nA document called the NFT License is published at `nftlicense.org` and was read in full during this session [^S09]. It grants the token owner personal non-commercial use of the associated art, display on a marketplace that cryptographically verifies ownership, display on a third-party site or app that verifies ownership and does not retain the art afterwards, and commercialisation on the owner's own merchandise up to 100,000 dollars of annual revenue. It prohibits modifying the art, using it to market third-party products, use in connection with hatred or violence, and attempting to trademark it. Its foot attributes it to Dapper Labs [^S09].\n\nThat document is not cited here as the licence governing this work, because nothing in the project's record points to it. The index string names a licence; it does not link one, and no signed or artist-published instrument for this project was located. The association between the label and that document is a reasonable inference from the name and nothing stronger, and this package records the terms URL as null rather than supplying a link the record does not make. A reader should treat the terms above as what a document of that name says, not as what this artwork is licensed under.\n\nCode rights are separate and are recorded as unknown. No licence statement or copyright notice appears anywhere in the program, packed or unpacked [^S02]. On-chain storage makes the program retrievable; it does not make it redistributable. The program's packed form is worth a note here: packing is an obfuscation as well as a compression, and while it does not create any legal protection, it does mean that the readable form of this work exists only after a transformation that the artist did not publish. That is a reason to describe the program rather than reproduce it, which is what this package does.\n\nThe artist's own website footer reads \"Copyright all rights reserved\", but it is the default footer of the site's theme and appears on every page including the index, so it is recorded here as a site-wide notice rather than as a statement about this artwork [^S06].\n\nThe declared dependency, `p5@1.0.0`, carries its own upstream licensing, which was not inspected and is recorded separately as unknown [^S02]. The program also compiles GLSL shader source of its own authorship at runtime; that source is part of the artist's program and carries no separate notice."
    },
    {
      "id": "examples",
      "heading": "Close reading of examples",
      "bodyMarkdown": "Four tokens were opened in the original renderer and observed across changing states. Two are treated at length. Every canonical token page below returned HTTP 200 when fetched during this session, and every observation is this researcher's own inspection of the live renderer [^S05].\n\nChroma Theory #4, token 170000004, is the AB5D holding and the proposed header work. Ownership was verified rather than assumed: the complete linked wallet set was refreshed from the AB5D profile during this session and returned three addresses, and this token's indexed owner is the third of them [^S04][^S03]. Its published traits give Spots 5, CenterRadius 47, BackgroundColor 153, CenterColor 181 and ColorDeviation 117 [^S03].\n\nOn screen it is a field of soft magenta and rose across the upper half, an olive-green passage at the right, and a warm cream void low and left, all of it dissolving into a nearly white ground at the left edge. There is no hard edge anywhere in the image and no shape that could be named. Reading the sketch's own variables confirmed the reproduction: the spot count drawn is five, matching the published Spots, and the centre circle's radius is 47.22 per cent of the canvas, matching the published CenterRadius of 47 after truncation [^S05]. The same read gave the background hue the program actually uses, 333.96, against a published BackgroundColor of 153.\n\nObserved over 15.1 seconds, six canvas signatures were all distinct, the frame counter advanced from 776 to 1529, the noise counter advanced by exactly 0.04 per frame, and the blur radius moved 100.9, 101.1, 116.2, 102.4, 124.6, 143.7 [^S05]. That sequence is the \"irregular pulse\" of the artist's description, and it is irregular because it is Perlin noise sampled along a line rather than a periodic function.\n\nChroma Theory #0, token 170000000, is the artist's proof and the token used to verify the reproduction against the running program. It is still held by the address the index names as the artist's [^S03]. Its published traits give Spots 5, CenterRadius 36, BackgroundColor 183, CenterColor 328, ColorDeviation 127 [^S03].\n\nOn screen it is amber and mint: a large warm-yellow mass upper left, a green and yellow passage across the lower right, cool grey-white between them. Reading the sketch's variables gave a per-spot hue array of 59.04, 41.76, 161.28 and 137.88, a main hue of 360, a spot count of 3.44 and a centre radius of 239.06 pixels on a 662-pixel working dimension [^S05]. Every one of those matched the independent reimplementation exactly, which is what licenses the statement in the construction section that the three unreproduced colour traits are not a failure of this reading. Observed over 15.1 seconds, six signatures were distinct and the frame counter advanced 754 frames [^S05].\n\nChroma Theory #13, token 170000013, carries the highest published Spots value in the edition, 7, and a CenterRadius of 44 [^S03]. Fifteen of the 106 tokens share that Spots value. On screen it is the coolest of the four: pale lilac and periwinkle across the centre and lower left, a mint and aqua passage upper right, a soft lemon mass at the bottom left corner, against near-white. Reading its variables gave seven circles drawn and a centre radius of 44.44 per cent, both matching the published traits [^S05]. Sampled five seconds apart the image had changed [^S05].\n\nChroma Theory #10, token 170000010, sits at the other end of the centre-circle range with the minimum published CenterRadius of 25 [^S03]. On screen a broad rose-pink mass fills the upper two thirds with a paler flushed centre, and a pale green passage crosses the lower third, all against near-white. The sketch reported a centre radius of exactly 25.00 per cent and five circles drawn, matching the published traits [^S05]. Sampled five seconds apart the image had changed [^S05].\n\nThe four together show the range the artist describes, \"from pastel hues to vivid compositions\", and they also show what the traits cannot tell you. Two tokens with identical published Spots values of 5 look nothing alike, because what governs the image is where four to six very large circles happen to fall and how much they overlap, and those positions come from the generator rather than from any published trait.\n\nOn sound: every session was silent, and this is silence by construction rather than blocked playback. The document contained no audio or video elements, the only script loaded was the p5 library at version 1.0.0 with no sound add-on, and the unpacked program contains no audio call [^S05][^S02]. No playback action was attempted because there is no audio path to attempt one on.\n\nNo interaction was tested because none is documented and none exists: the unpacked program defines no key or mouse handler of any kind [^S02], and the project page carries no interactive badge [^S01]."
    },
    {
      "id": "significance",
      "heading": "Significance and limitations",
      "bodyMarkdown": "Chroma Theory is the quietest work in this batch and the one whose published record is least able to describe it.\n\nWhat the work does is simple to state and hard to catalogue. It draws a handful of enormous coloured circles, blurs them twice through a shader whose radius is drifting, and keeps drifting forever. The image never settles and never repeats. A still of it is not a reduced version of the work; it is one arbitrary moment from something with no privileged moment, and the artist's instruction to \"give it time\" is the accurate one.\n\nTwo of its five published traits describe the work correctly and reproduce from the hash exactly. Three do not match anything this research could find: not the values the running program uses, not the pixels it produces, and not any simple function of the hash. The reproduction was verified against the live artwork variable by variable, so the gap is in the published metadata rather than in the reading. For a project whose subject is colour, having its three colour traits unexplained is a real hole in the record, and it is the single thing a coordinator would most want resolved.\n\nThe rest of the platform record is thin in ways worth stating plainly. The licence is one unlinked string. The website of record is a 404, although the artist's page does exist elsewhere on the same domain and a site search finds it in one step. The indexed interview field is null. Against that, the project page gets two things right that comparable pages in this batch get wrong: it carries an animated badge and no interactive badge, which is exactly what the program warrants, and it publishes the full Dutch auction ladder, which makes the mint reconstructable to the minute.\n\nThe most useful thing an outside source contributed was the sequel. Because the artist published Dark Chroma Theory as an explicit revision and listed what changed, the original's properties can be read off the differences: looping was added later, so the original does not loop; the centre spot was abandoned later, so the centre spot is a deliberate element of the original rather than an artefact; and the spot count was raised later, so the original's four-to-six is a chosen constraint. That is a rare case of an artist documenting a work by documenting its successor.\n\nThe limitations of this package should be stated plainly. Four of 106 tokens were observed. The colour traits are unresolved, and the hypotheses tested to exhaustion are listed in the evidence rather than summarised as a conclusion. The program was read by undoing its packing, which is a transformation this researcher performed, so the reading is of a derived form rather than of bytes the artist published; the digest recorded is over the stored bytes, and the unpacking is described so that it can be repeated. No on-chain price history was read, so the auction reconstruction rests on the published ladder and the mint timestamps rather than on observed price changes. The artist's site was searched only for this project's name; other pages that might discuss it were not read. The Dark Chroma Theory collection itself was not inspected on its marketplace, only the artist's account of it.\n\nUnresolved research questions, stated explicitly:\n\nWhat generates BackgroundColor, CenterColor and ColorDeviation? No feature-generating code exists in the retrieved program, the values match neither the running sketch nor its output, and no single-byte or alternative-seed rule reproduces them. The software that produced them was not located.\n\nWhat does ColorDeviation measure? Unlike the other four traits its name does not correspond to any variable in the program, and its 67 distinct values across 106 tokens rule out the simple byte-derived quantities.\n\nWhy does the seeding take sixteen characters of a hash string that begins with a two-character prefix? The same off-by-two appears in two other unrelated projects in this batch, which suggests a shared source rather than three coincidences, but no common origin was identified.\n\nWas the packing a size optimisation, an obfuscation, or both? On-chain storage cost is a plausible motive for a 2,495-byte program, and the artist does not discuss it in any located source.\n\nIs the artist's website link of record broken at Art Blocks or was the artist's page moved? The project page and the index both carry the dead URL, and the working page sits at a different path on the same domain."
    }
  ],
  "examples": [
    {
      "id": "E01",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "170000004",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/170000004",
      "sourceIds": [
        "S03",
        "S04",
        "S05",
        "S06"
      ],
      "selectionNote": "The AB5D holding, verified against the complete refreshed wallet set rather than taken from the assignment's historical cache. Selected for sustained analysis and proposed as the header work.",
      "observationNote": "Soft magenta and rose across the upper half, an olive-green passage at the right, a warm cream void low and left, dissolving to near-white at the left edge, with no hard edge anywhere. Six distinct canvas signatures over 15.1 seconds, frame counter 776 to 1529, the noise counter advancing exactly 0.04 per frame and the blur radius moving 100.9, 101.1, 116.2, 102.4, 124.6, 143.7. The sketch's own values confirm five circles drawn and a centre radius of 47.22 per cent, matching the published Spots 5 and CenterRadius 47, while the background hue the program uses is 333.96 against a published BackgroundColor of 153."
    },
    {
      "id": "E02",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "170000000",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/170000000",
      "sourceIds": [
        "S03",
        "S05",
        "S02"
      ],
      "selectionNote": "The artist proof, invocation 0, still held by the indexed artist address. Selected for sustained analysis and used to validate the independent reimplementation against the running program, which is what licenses the finding that three published colour traits diverge from the artwork rather than from this reading.",
      "observationNote": "A large warm amber mass upper left, a green and yellow passage across the lower right, cool grey-white between them, all edges dissolved. Six distinct signatures over 15.1 seconds with the frame counter advancing 754 frames. Reading the sketch gave a per-spot hue array of 59.04, 41.76, 161.28, 137.88, a main hue of 360, and computed background and centre hues of 83.04 and 340.92, all matching the reimplementation exactly; the published values for the same token are 183 and 328, and the rendered pixels give 42 and 58."
    },
    {
      "id": "E03",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "170000013",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/170000013",
      "sourceIds": [
        "S03",
        "S05"
      ],
      "selectionNote": "Carries the highest published Spots value in the edition, 7, shared by fifteen tokens, so it shows the dense end of the range.",
      "observationNote": "Pale lilac and periwinkle across the centre and lower left, a mint and aqua passage upper right, a soft lemon mass at the lower left corner, against near-white. Seven circles drawn and a centre radius of 44.44 per cent, matching the published traits. The image had changed between samples five seconds apart, with the frame counter advancing 301 frames."
    },
    {
      "id": "E04",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "170000010",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/170000010",
      "sourceIds": [
        "S03",
        "S05"
      ],
      "selectionNote": "Sits at the minimum of the centre-circle range with a published CenterRadius of 25, the opposite extreme from the largest tokens, and shows how little the published traits predict about the finished image.",
      "observationNote": "A broad rose-pink mass filling the upper two thirds with a paler flushed centre, and a pale green passage across the lower third, against near-white. The sketch reported a centre radius of exactly 25.00 per cent and five circles drawn, matching the published traits. The image had changed between samples five seconds apart."
    }
  ],
  "mediaIds": [],
  "provenance": {
    "operator": "Phil (AB5D coordinator), via the Claude desktop application",
    "originalAuthor": {
      "provider": "Anthropic",
      "model": "claude-opus-5",
      "modelVersion": "claude-opus-5 as reported by the session environment; the batch routing label 'claude' is a routing label and not a model identifier and has not been recorded as one",
      "agent": "Claude in Cowork mode on the Claude Agent SDK"
    },
    "revisions": [],
    "revisionNote": "No other model or human has revised this package. A later reviser must preserve the original author credit above and record the reviser, changed scope and revision-specific usage separately here.",
    "tools": [
      "Art Blocks public GraphQL index over HTTP POST, with full query text, variables and timings retained in evidence.json",
      "browser pane on the coordinator's computer for page rendering, text extraction, canonical token page status checks, live renderer execution, canvas sampling and screenshots",
      "a reimplementation of the base-62 packer substitution as pure string work, to read the program without executing its packed form",
      "an independent reimplementation of the trait mapping run against all 106 token hashes, validated against the running sketch",
      "SHA-256 over the retrieved script bytes computed with the Web Crypto API",
      "local shell and file tools for package assembly, and the supplied validator"
    ],
    "humanEditorialInvolvement": "Commissioned by Phil; website publication authorized by Phil on 2026-09-17. No claim of line-by-line human fact checking.",
    "originalProseLicense": "CC0-1.0",
    "model": "claude-opus-5",
    "generation": {
      "schema": "ab5d-essay-generation/1",
      "model": "claude-opus-5",
      "displayName": "claude-opus-5 (contributor-reported)",
      "scope": "claude-round-003 submitted essay; publication import only",
      "essayCount": 1,
      "usage": null,
      "perEssayUsage": null,
      "usageDetail": "No token telemetry is exposed to the agent in this environment. All counts are null rather than estimated, and no batch figure has been divided into per-essay numbers. Cached input and reasoning counts are null rather than folded into a total, so nothing is double-counted.",
      "submittedUsage": {
        "provider": "Anthropic",
        "model": "claude-opus-5",
        "modelVersion": "claude-opus-5 as reported by the session environment. The batch routing label 'claude' is a routing label, not a model identifier, and has not been recorded as one.",
        "measurementScope": "batch",
        "measurement": "unavailable",
        "scope": "claude-round-003, ten assigned series in a single session",
        "startedAt": "2026-09-18T05:25:27+00:00",
        "startedAtNote": "Timezone-aware. Taken from the first instrumented call of this research session.",
        "cutoff": null,
        "cutoffNote": "Null because the session was still running when this package was written; no end instant is known, so none is manufactured. Any recorded cutoff must be at or after startedAt.",
        "inputTokens": null,
        "cachedInputTokens": null,
        "outputTokens": null,
        "reasoningTokens": null,
        "totalTokens": null,
        "perEssayAvailable": false,
        "telemetrySource": null,
        "note": "No token telemetry is exposed to the agent in this environment. All counts are null rather than estimated, and no batch figure has been divided into per-essay numbers. Cached input and reasoning counts are null rather than folded into a total, so nothing is double-counted.",
        "elapsedNote": "Wall-clock research time for this package is bounded by the timestamps in evidence.json, from the first retrieval at 2026-09-18T06:28:13Z to the validator run recorded in research-notes.md."
      },
      "importReview": "Package and site compatibility checks only. No independent re-research or prose rewrite, as requested by user on 2026-09-20."
    }
  },
  "codeInspection": {
    "url": "https://artblocks-mainnet.hasura.app/v1/graphql",
    "locator": "HTTP POST, named operation ProjectBySlug, variables {\"slug\":\"chroma-theory-by-pawel-dudko\"}, selecting script and scripts{index script}; identity corroborated by the returned composite id 0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270-170",
    "sha256": "af5637d607606dc4d6deedebc53e453e9815e41dc8832e6b9fa2b056cb9aa6af",
    "bytes": 2495,
    "retrievedAt": "2026-09-18T06:28:13.690Z",
    "runtime": "p5@1.0.0",
    "method": "Index retrieval over HTTPS, not a direct read of contract storage; no block reference pinned. SHA-256 over the UTF-8 bytes of the returned script field, which is the packed form as stored. The packing was undone by reimplementing the base-62 substitution as pure string work, without executing the packed code, yielding 2,651 characters that were read in full. Coverage of seed handling, parameter selection, rendering sequence, time behaviour and external dependencies is itemised in evidence.json.",
    "executed": true,
    "executionDisclosure": "The unpacked text was read; the packed form was never executed by the researcher. Separately the program was executed by the official Art Blocks renderer during the token observations, where its internal variables were read to validate the reimplementation.",
    "chainBlock": null
  },
  "editorialExceptions": [
    {
      "id": "colour-traits-unexplained",
      "status": "pending",
      "reviewer": "publication coordinator",
      "reason": "Three of the five published traits, BackgroundColor, CenterColor and ColorDeviation, match neither the running artwork nor its rendered output, and no rule reproducing them was found. The reimplementation was validated against the live sketch, so this is a gap in the published metadata rather than in the research. A reviewer may wish to seek the feature-generating software from the platform or the artist."
    },
    {
      "id": "licence-unlinked",
      "status": "pending",
      "reviewer": "publication coordinator",
      "reason": "The artwork licence is a single unlinked string, 'NFT License', with a null terms URL and no licence field on the project page. A document of that name was inspected but the record does not associate it with this work. A decision is needed on what the dossier publishes."
    },
    {
      "id": "code-rights-unknown",
      "status": "pending",
      "reviewer": "publication coordinator",
      "reason": "No copyright or licence notice appears anywhere in the program. Code rights recorded as unknown and kept separate from the artwork label."
    },
    {
      "id": "website-of-record-404",
      "status": "pending",
      "reviewer": "publication coordinator",
      "reason": "The website recorded against the project returns a 404 while the artist's working page for it exists at a different path on the same domain. The dossier should link the working page."
    },
    {
      "id": "still-image-presentation",
      "status": "pending",
      "reviewer": "publication coordinator",
      "reason": "The animation is continuous and non-repeating, so any still is one arbitrary moment with no privileged status. If the dossier publishes a still it should say so, and the artist's own instruction to give the work time should travel with any presentation."
    },
    {
      "id": "packed-program",
      "status": "pending",
      "reviewer": "publication coordinator",
      "reason": "The on-chain program is packed. The recorded digest is over the stored packed bytes. If the dossier ever quotes a byte count or digest for this project, it must be clear which form is meant."
    }
  ],
  "presentation": {
    "editionSize": 106,
    "maximumEdition": 106,
    "mintDate": "2021-10-09T11:41:28+00:00",
    "mintDateMeaning": "first mint",
    "mintDateLabel": "First mint",
    "artwork": {
      "project_id": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270-170",
      "token_id": "170000004",
      "invocation": 4,
      "owner_address": "0xdd19308a9731cdecb67e0d80ca6823394208c045",
      "preview_asset_url": "https://media-proxy.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/170000004.png",
      "live_view_url": "/series/chroma-theory-by-pawel-dudko/artwork.html",
      "canonicalLiveUrl": "https://generator.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/170000004",
      "canonicalUrl": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/170000004",
      "mode": "live",
      "aspectRatio": 1,
      "interactionNote": "",
      "copyrightStatus": "NFT License",
      "copyrightUrl": null,
      "displayBasis": "No display note is published and the artist gives no display instruction beyond the work's own description. Preserve the original renderer. The artist's instruction, 'Sit back, relax and give it time', is the closest thing to a stated viewing basis and should travel with the work."
    }
  },
  "observationImages": [
    {
      "id": "E01",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "170000004",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/170000004",
      "sourceIds": [
        "S03",
        "S04",
        "S05",
        "S06"
      ],
      "selectionNote": "The AB5D holding, verified against the complete refreshed wallet set rather than taken from the assignment's historical cache. Selected for sustained analysis and proposed as the header work.",
      "observationNote": "Soft magenta and rose across the upper half, an olive-green passage at the right, a warm cream void low and left, dissolving to near-white at the left edge, with no hard edge anywhere. Six distinct canvas signatures over 15.1 seconds, frame counter 776 to 1529, the noise counter advancing exactly 0.04 per frame and the blur radius moving 100.9, 101.1, 116.2, 102.4, 124.6, 143.7. The sketch's own values confirm five circles drawn and a centre radius of 47.22 per cent, matching the published Spots 5 and CenterRadius 47, while the background hue the program uses is 333.96 against a published BackgroundColor of 153.",
      "previewUrl": "https://media-proxy.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/170000004.png",
      "liveUrl": "https://generator.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/170000004"
    },
    {
      "id": "E02",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "170000000",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/170000000",
      "sourceIds": [
        "S03",
        "S05",
        "S02"
      ],
      "selectionNote": "The artist proof, invocation 0, still held by the indexed artist address. Selected for sustained analysis and used to validate the independent reimplementation against the running program, which is what licenses the finding that three published colour traits diverge from the artwork rather than from this reading.",
      "observationNote": "A large warm amber mass upper left, a green and yellow passage across the lower right, cool grey-white between them, all edges dissolved. Six distinct signatures over 15.1 seconds with the frame counter advancing 754 frames. Reading the sketch gave a per-spot hue array of 59.04, 41.76, 161.28, 137.88, a main hue of 360, and computed background and centre hues of 83.04 and 340.92, all matching the reimplementation exactly; the published values for the same token are 183 and 328, and the rendered pixels give 42 and 58.",
      "previewUrl": "https://media-proxy.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/170000000.png",
      "liveUrl": "https://generator.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/170000000"
    },
    {
      "id": "E03",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "170000013",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/170000013",
      "sourceIds": [
        "S03",
        "S05"
      ],
      "selectionNote": "Carries the highest published Spots value in the edition, 7, shared by fifteen tokens, so it shows the dense end of the range.",
      "observationNote": "Pale lilac and periwinkle across the centre and lower left, a mint and aqua passage upper right, a soft lemon mass at the lower left corner, against near-white. Seven circles drawn and a centre radius of 44.44 per cent, matching the published traits. The image had changed between samples five seconds apart, with the frame counter advancing 301 frames.",
      "previewUrl": "https://media-proxy.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/170000013.png",
      "liveUrl": "https://generator.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/170000013"
    },
    {
      "id": "E04",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "170000010",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/170000010",
      "sourceIds": [
        "S03",
        "S05"
      ],
      "selectionNote": "Sits at the minimum of the centre-circle range with a published CenterRadius of 25, the opposite extreme from the largest tokens, and shows how little the published traits predict about the finished image.",
      "observationNote": "A broad rose-pink mass filling the upper two thirds with a paler flushed centre, and a pale green passage across the lower third, against near-white. The sketch reported a centre radius of exactly 25.00 per cent and five circles drawn, matching the published traits. The image had changed between samples five seconds apart.",
      "previewUrl": "https://media-proxy.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/170000010.png",
      "liveUrl": "https://generator.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/170000010"
    }
  ],
  "publication": {
    "date": "2026-09-20",
    "url": "https://ab5d.xyz/series/chroma-theory-by-pawel-dudko/",
    "authorization": "Phil requested website publication on 2026-09-17.",
    "reviewSnapshot": "/docs/series-essays/production/chroma-theory-by-pawel-dudko/record.json",
    "unresolvedResearchQuestionsRetained": true
  }
}
