Kenosha Kid #3
2026-07-26 · collectible · Original work by the named contributor(s). · era 0 · Incunabula
Checking these bytes…
Read
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
| Inscription | e2f829d5e84c2b7d2a7c5c6aee70bdd9792fa2fd38505ee627d6f6cb9bc4b863i0 |
|---|---|
| Reveal transaction | e2f829d5e84c2b7d2a7c5c6aee70bdd9792fa2fd38505ee627d6f6cb9bc4b863 |
| Commit transaction | 17d132e165f2d29fb7f1460d1f10c07898e765bd63b6dd98d10601d62d0d13a9 |
| Block height | 959740 |
| Content digest (SHA-256) | 11e860d47d0f53ff34788d8e8d6bdddc92ac1622e7ec076410f9d5162f38ad07 |
| Envelope digest (SHA-256) | 8f8d669a376ffd4456ea4a054735e3b9cb8786f7fa9fa9953bc46e7744696184 |
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
| Title | Kenosha Kid #3 |
|---|---|
| Date | 2026-07-26 |
| Edition | 1/1 |
| Contributions |
|
| Facets | form: 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. |
| Rights | Original work by the named contributor(s). |
| Rights basis | original |
| Provenance | Generative Art Poem |
| Publication class | collectible |
| Market policy | listable |
| Transfer policy | transferable |
| Lineage | independent |
| Content type | text/html;charset=utf-8 |
| Content length | 3904 bytes |
| Metadata digest (SHA-256) | 2579bae26098619d9875bed3e4c66e05832bdc08767b0229768d40a02be5adcd |