cyberdelic.spacea decentralized imagination press

Kenosha Kid #3

2026-07-26 · collectible · Original work by the named contributor(s). · era 0 · Incunabula

Checking these bytes…

Read

Loading…

Source

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width,initial-scale=1">
  <title>Typist (No Errors)</title>
  <style>
    html, body {
      width: 100%;
      height: 100%;
      margin: 0;
      overflow: hidden;
      background: #000;
    }
    canvas {
      display: block;
      width: 100%;
      height: 100%;
    }
  </style>
</head>
<body>
  <canvas id="art" aria-label="Kenosha Kid generative text artwork"></canvas>
  <script>
    (() => {
      "use strict";

      const words = ["You", "never", "did", "the", "Kenosha", "Kid"];
      const punctuation = [".", ",", "!", "?", ":", ";", "..."];
      const minTypeDelay = 50;
      const maxTypeDelay = 200;
      const minDeleteDelay = 50;
      const maxDeleteDelay = 150;
      const sitDuration = 2000;
      const TYPE = 0;
      const SIT = 1;
      const DELETE = 2;

      const canvas = document.getElementById("art");
      const context = canvas.getContext("2d");
      let width = 0;
      let height = 0;
      let finalString = "";
      let typedSoFar = "";
      let state = TYPE;
      let nextEventTime = 0;
      let sitStartTime = 0;
      let lastPaint = 0;

      const randomNumber = (minimum, maximum) =>
        minimum + Math.random() * (maximum - minimum);
      const randomItem = (items) =>
        items[Math.floor(Math.random() * items.length)];

      function buildNewArrangement() {
        const parts = [];
        words.forEach((word, index) => {
          if (Math.random() < 0.5) parts.push(randomItem(punctuation));
          parts.push(word);
          if (Math.random() < 0.5) parts.push(randomItem(punctuation));
          if (index < words.length - 1) parts.push(" ");
        });
        finalString = parts.join("");
      }

      function scheduleType(now) {
        nextEventTime = now + randomNumber(minTypeDelay, maxTypeDelay);
      }

      function scheduleDelete(now) {
        nextEventTime = now + randomNumber(minDeleteDelay, maxDeleteDelay);
      }

      function update(now) {
        if (state === TYPE && now >= nextEventTime) {
          if (typedSoFar.length >= finalString.length) {
            state = SIT;
            sitStartTime = now;
          } else {
            typedSoFar += finalString.charAt(typedSoFar.length);
            scheduleType(now);
          }
        } else if (state === SIT && now - sitStartTime >= sitDuration) {
          state = DELETE;
          scheduleDelete(now);
        } else if (state === DELETE && now >= nextEventTime) {
          if (typedSoFar.length === 0) {
            buildNewArrangement();
            state = TYPE;
            scheduleType(now);
          } else {
            typedSoFar = typedSoFar.slice(0, -1);
            scheduleDelete(now);
          }
        }
      }

      function paint() {
        context.fillStyle = "#000";
        context.fillRect(0, 0, width, height);
        context.font = "16px monospace";
        context.textAlign = "center";
        context.textBaseline = "middle";
        context.fillStyle = "#00ff00";
        context.fillText(typedSoFar, width / 2, height / 2);
      }

      function draw(now) {
        update(now);
        if (now - lastPaint >= 1000 / 30) {
          paint();
          lastPaint = now;
        }
        requestAnimationFrame(draw);
      }

      function resize() {
        const ratio = Math.min(window.devicePixelRatio || 1, 2);
        width = window.innerWidth;
        height = window.innerHeight;
        canvas.width = Math.round(width * ratio);
        canvas.height = Math.round(height * ratio);
        context.setTransform(ratio, 0, 0, ratio, 0, 0);
        paint();
      }

      window.addEventListener("resize", resize);
      buildNewArrangement();
      resize();
      scheduleType(performance.now());
      requestAnimationFrame(draw);
    })();
  </script>
</body>
</html>

Blockchain

Inscriptione2f829d5e84c2b7d2a7c5c6aee70bdd9792fa2fd38505ee627d6f6cb9bc4b863i0
Reveal transactione2f829d5e84c2b7d2a7c5c6aee70bdd9792fa2fd38505ee627d6f6cb9bc4b863
Commit transaction17d132e165f2d29fb7f1460d1f10c07898e765bd63b6dd98d10601d62d0d13a9
Block height959740
Content digest (SHA-256)11e860d47d0f53ff34788d8e8d6bdddc92ac1622e7ec076410f9d5162f38ad07
Envelope digest (SHA-256)8f8d669a376ffd4456ea4a054735e3b9cb8786f7fa9fa9953bc46e7744696184

mempool.space ↗ordinals.com ↗

Check it yourself

Three ways, none of which have to trust this website.

Hash the bytes an independent Ordinals index serves you

curl -sL https://ordinals.com/content/e2f829d5e84c2b7d2a7c5c6aee70bdd9792fa2fd38505ee627d6f6cb9bc4b863i0 | shasum -a 256

It must print 11e860d47d0f53ff34788d8e8d6bdddc92ac1622e7ec076410f9d5162f38ad07, the digest published above. (On Linux, sha256sum.)

Ask your own Bitcoin node, trusting no index at all

bitcoin-cli getrawtransaction e2f829d5e84c2b7d2a7c5c6aee70bdd9792fa2fd38505ee627d6f6cb9bc4b863

Then read the inscription out of the witness yourself: the steps are here.

Runs right here, on this page. Your browser fetches this transaction from independent public sources, reads the inscription out of it itself, and compares those bytes with the ones you are reading. Nothing is sent to this website, and no answer from it is trusted.

Hex

The hex view needs JavaScript. The exact bytes are always downloadable.

Metadata

TitleKenosha Kid #3
Date2026-07-26
Edition1/1
Contributions
  • Brad Necyk authorship
Facetsform: generative-art · theme: language · theme: emergence · theme: dream · register: play · era 0: incunabulaAssigned by the library, not claimed on stone. The inscription predates the vocabulary.
RightsOriginal work by the named contributor(s).
Rights basisoriginal
ProvenanceGenerative Art Poem
Publication classcollectible
Market policylistable
Transfer policytransferable
Lineageindependent
Content typetext/html;charset=utf-8
Content length3904 bytes
Metadata digest (SHA-256)2579bae26098619d9875bed3e4c66e05832bdc08767b0229768d40a02be5adcd