0xb81b…7cf2

All memos sent from and to 0xb81b…7cf2.

0xb81bf680…7cf2·#25,192,879·0x35e4f51b…1fc8db
white-on-black s` frosty-coolspectrum`@horizon violet-iceltraviolet-burn jade-firetropical-lagoon rainbow-buaakira-blaze-orgaago-command neon-spectrum crimsonanausicaa-toxic coral-reefafiery-warmspectrumsunrise rose-noir<!doctype html><html><head><meta` charset="utf-8"><meta name="vie`@wport" content="width=device-wid``th,initial-scale=1"><title>DEL</`title><style>html,body{margin:0;`width:100%;height:100%;backgroun`d:#000;overflow:hidden}body{padd`ing:20px;box-sizing:border-box}@amedia (max-width:700px){body{padading:10px}}canvas{display:block;awidth:100%;height:100%}</style><a/head><body><canvas id="c"></canaRzvas><script> window.DEL_ID=`(·_-:;!?[]@$!⠑⠃⠕⢳⣪`⢗⠟⢷⢾⡿⣿!→←↓↑↗➘↙➔➺➤⁘*⁂✷※✳∧∨⌃⌄⋀⋁⌵⁑⁕※⁂✳`xRs; window.DEL_CONFIG=``
0xb81bf680…7cf2·#25,192,845·0x02ccfe15…48b69e
{"trait_type":"Character Set","{"trait_type":"Palette","value"`J{"trait_type":"Behaviour Set","{"trait_type":"Tuned","value":"m{"name":"DEL #`","description":"DELs are animat`.ed ASCII shells embodied by the `Nnetwork. Every movement, every s`nhift in form, every illumination` is fueled by a stream of Ethere`um block hashes. Each DEL is a f`΂ully on-chain artwork the owner `can return to and reconfigure ovaer time: every parameter is tunaable, every prior state recoverabale on chain. By Loucas Braconniea"image":"data:image/svg+xml;basea","animation_url":"data:text/htmdata:application/json;base64,a#WWU__Q` a$H_9_QABCDEFGHIJKLMNOPQRSTUVWXYZabcdefkghijklmnopqrstuvwxyz0123456789-_
0xb81bf680…7cf2·#25,178,045·0x138fef94…bbf520
{"trait_type":"Character Set","{"trait_type":"Palette","value"`J{"trait_type":"Behaviour Set","{"trait_type":"Tuned","value":"m{"name":"DEL #`","description":"DELs are animat`.ed ASCII shells embodied by the `Nnetwork. Every movement, every s`nhift in form, every illumination` is fueled by a stream of Ethere`um block hashes. Each DEL is a f`΂ully on-chain artwork the owner `can return to and reconfigure ovaer time: every parameter is tunaable, every prior state recoverabale on chain. By Loucas Braconniea"image":"data:image/svg+xml;basea","animation_url":"data:text/htmdata:application/json;base64,a#WWU__Q` a$H_9_QABCDEFGHIJKLMNOPQRSTUVWXYZabcdefkghijklmnopqrstuvwxyz0123456789-_
0xb81bf680…7cf2·#25,178,043·0x37b36e53…d640a9
<svg xmlns="http://www.w3.org/20` 00/svg" viewBox="0 0 1000 1000" `@font-family="'Courier New', Cour``ier, monospace" font-size="22"><rect width="1000" height="1000"` ">COLOUR PALETTE: <tspan fill="">CHARACTER SET: <tspan fill="">BEHAVIOUR SET: <tspan fill="RpMAX MOVE DISTANCE`xRrROTATION SMOOTHNESS`hRqMAX ROTATION ANGLE`pDEFORM FREQUENCY/COMPLEXITY/SMOO` PERSPECTIVE DISTANCE/STRENGTHRsBEHAVIOR CHANGE TIME```@Ro0123456789abcdef`
0xb81bf680…7cf2·#25,178,042·0x1f591ea8…f93d2d
white-on-black s` frosty-coolspectrum`@horizon violet-iceltraviolet-burn jade-firetropical-lagoon rainbow-buaakira-blaze-orgaago-command neon-spectrum crimsonanausicaa-toxic coral-reefafiery-warmspectrumsunrise rose-noir<!doctype html><html><head><meta` charset="utf-8"><meta name="vie`@wport" content="width=device-wid``th,initial-scale=1"><title>DEL</`title><style>html,body{margin:0;`width:100%;height:100%;backgroun`d:#000;overflow:hidden}body{padd`ing:20px;box-sizing:border-box}@amedia (max-width:700px){body{padading:10px}}canvas{display:block;awidth:100%;height:100%}</style><a/head><body><canvas id="c"></canaRzvas><script> window.DEL_ID=`(·_-:;!?[]@$!⠑⠃⠕⢳⣪`⢗⠟⢷⢾⡿⣿!→←↓↑↗➘↙➔➺➤⁘*⁂✷※✳∧∨⌃⌄⋀⋁⌵⁑⁕※⁂✳`xRs; window.DEL_CONFIG=``
0xb81bf680…7cf2·#25,178,040·0xe02a4fd1…7c01c4
; (function(){ let seed=Date.now()>>>0;const bcRandom={currentBlockHash:null,setSeed(hash){seed=parseInt(hash.slice(2,10),16)>>>0;bcRandom.currentBlockHash=hash;}};function enableBlockchainRandom(){Math.random=function(){let t=seed+=0x6D2B79F5;t=Math.imul(t^t>>>15,t|1);t^=t+Math.imul(t^t>>>7,t|61);return((t^t>>>14)>>>0)/4294967296;};} const charColor=new Map();let borderC='#fff';let textC='#fff';let topC='#fff';function setCustomColorScheme(scheme,palette){charColor.clear();borderC=scheme.borderColor||scheme.topBottomColor||'#fff';textC=scheme.textColor||scheme.sideColor||'#fff';topC=scheme.topBottomColor||'#fff';const colors=scheme.voidling?Object.values(scheme.voidling):[];const explicit=scheme.voidling||{};if(palette&&colors.length){for(let i=0;i<palette.length;i++){charColor.set(palette[i],colors[i%colors.length]);}} for(const[ch,c]of Object.entries(explicit))charColor.set(ch,c);if(!charColor.has('$'))charColor.set('$',borderC);} const getTopColor=()=>topC;function getColorForChar(ch){return charColor.get(ch)||textC;} const FONT_FAMILY="'Courier New', Courier, monospace";const getFont=()=>{const size=(typeof window!=='undefined'&&window.innerWidth<700)?'8px':'12px';return size+' '+FONT_FAMILY;};function getCharacterDimensions(){const c=document.createElement('canvas').getContext('2d');c.font=getFont();const m=c.measureText('$$$$');return{width:Math.round(m.width/4),height:Math.ceil(m.actualBoundingBoxAscent+m.actualBoundingBoxDescent)+1};} function calculateDimensions(el){const cv=getCharacterDimensions();return{width:Math.floor(el.offsetWidth/cv.width),height:Math.floor(el.offsetHeight/cv.height),charWidth:cv.width,charHeight:cv.height};} let g_width=190,g_height=61;const MOVEMENT_RANGES={explore_radius_pct:0.25,traverse_min_distance_pct:0.60,escaping_border_offset_pct:0.05};let exploreOriginX=0,exploreOriginY=0;let meditatingOriginX=0,meditatingOriginY=0;let exploreMoveCount=0;let bounceGoingUp=false;let escapingTargetBorder='left';let escapingMoveCount=0;let buffer=null,zBuffer=null;let deformPhases=null,targetDeformPhases=null;let deformFreqs=null,targetDeformFreqs=null;let currentTime=0;let config={};let rotX=0,rotY=0,rotZ=0;let targetRotX=0,targetRotY=0,targetRotZ=0;let rotationSpeed=0;let movementX,movementY,targetX,targetY;let currentBehavior;let behaviorTimer=0;let stuckCounter=0;let isInitialized=0;let frameCounter=0;const CACHE_SIZE=628;let cachedSin=new Array(CACHE_SIZE);let cachedCos=new Array(CACHE_SIZE);let borderProximityCounter=0;const BORDER_PROXIMITY_THRESHOLD=1.0;const MAX_BORDER_FRAMES=200;let squishCounter=0;let characterPalette=".,-~:;=!*#@$";function lerp(a,b,t){return a+t*(b-a);} function distance(x1,y1,x2,y2){return Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));} function calculateBorderSquish(pos,border,radius){const d=Math.abs(pos-border);const squishRange=radius*7;if(d<squishRange){const factor=d/squishRange;const factorIndex=(Math.floor((factor*Math.PI/2)*CACHE_SIZE/(2.0*Math.PI))+CACHE_SIZE)%CACHE_SIZE;return 0.1+(0.95*cachedSin[factorIndex]);} return 1.0;} function calculateVolumePreservingSquish(currentSquish,targetSquish,volumeRatio){return currentSquish+(targetSquish-currentSquish)*Math.min(0.15,1.0/volumeRatio);} function calculateEffectiveRadius(baseRadius,volumeCompensation,deformStrength){const rawSquishX=calculateBorderSquish(movementX,0,baseRadius)*calculateBorderSquish(movementX,g_width,baseRadius)*config.aspectRatio;const rawSquishY=calculateBorderSquish(movementY,0,baseRadius)*calculateBorderSquish(movementY,g_height,baseRadius)*config.aspectRatio;const maxElongation=Math.max(1.0/rawSquishX,1.0/rawSquishY);return baseRadius*(1.0+deformStrength)*Math.max(volumeCompensation,maxElongation);} function getDistanceToBorder(x,y,radius,width,height){return Math.min(Math.min(x,width-x),Math.min(y,height-y))/radius;} function enforceObjectBounds(x,y,radius,width,height){const margin=radius*1.2;const prevX=x,prevY=y;let currentSquishX=calculateBorderSquish(x,0,radius)*calculateBorderSquish(x,width,radius);let currentSquishY=calculateBorderSquish(y,0,radius)*calculateBorderSquish(y,height,radius);const currentVolume=1.0/(currentSquishX*currentSquishY);x=Math.max(margin,Math.min(width-margin,x));y=Math.max(margin,Math.min(height-margin,y));if(x!==prevX||y!==prevY){const targetSquishX=calculateBorderSquish(x,0,radius)*calculateBorderSquish(x,width,radius);const targetSquishY=calculateBorderSquish(y,0,radius)*calculateBorderSquish(y,height,radius);currentSquishX=calculateVolumePreservingSquish(currentSquishX,targetSquishX,currentVolume);currentSquishY=calculateVolumePreservingSquish(currentSquishY,targetSquishY,currentVolume);if(getDistanceToBorder(x,y,radius,width,height)<1.5){const pushAngle=Math.atan2(height/2-y,width/2-x)+((Math.random()*100)-50)/100.0;targetX=x+Math.cos(pushAngle)*(radius*2);targetY=y+Math.sin(pushAngle)*(radius*2);}}} function allocateBuffers(){buffer=new Array(g_width*g_height);zBuffer=new Float32Array(g_width*g_height);if(config.deformComplexity>0){deformPhases=new Float32Array(config.deformComplexity);targetDeformPhases=new Float32Array(config.deformComplexity);deformFreqs=new Float32Array(config.deformComplexity);targetDeformFreqs=new Float32Array(config.deformComplexity);for(let i=0;i<config.deformComplexity;i++){deformPhases[i]=(Math.random()*628)/100.0;targetDeformPhases[i]=deformPhases[i];deformFreqs[i]=1.0+Math.random()*5;targetDeformFreqs[i]=deformFreqs[i];}}} function initVoidlingWithConfig(cfg){Object.assign(config,cfg);allocateBuffers();for(let i=0;i<CACHE_SIZE;i++){const angle=i*(2.0*Math.PI)/CACHE_SIZE;cachedSin[i]=Math.sin(angle);cachedCos[i]=Math.cos(angle);} movementX=targetX=g_width/2;movementY=targetY=g_height/2;currentBehavior="BEHAVIOR_EXPLORE";exploreOriginX=meditatingOriginX=g_width/2;exploreOriginY=meditatingOriginY=g_height/2;exploreMoveCount=0;bounceGoingUp=false;escapingTargetBorder='left';escapingMoveCount=0;behaviorTimer=0;stuckCounter=0;rotationSpeed=(config.minRotationSpeed+config.maxRotationSpeed)/2;rotX=(Math.random()*2.0*Math.PI)-Math.PI;rotY=(Math.random()*2.0*Math.PI)-Math.PI;rotZ=(Math.random()*2.0*Math.PI)-Math.PI;targetRotX=(Math.random()*2.0*Math.PI)-Math.PI;targetRotY=(Math.random()*2.0*Math.PI)-Math.PI;targetRotZ=(Math.random()*2.0*Math.PI)-Math.PI;isInitialized=1;} function bounceFromBorder(){const randomAngle=(Math.random()*628)/100.0;targetX=movementX+(Math.cos(randomAngle)*config.baseRadius*2.0);targetY=movementY+(Math.sin(randomAngle)*config.baseRadius*2.0);borderProximityCounter=0;stuckCounter=0;} function forceBorderRecovery(){const centerX=g_width/2,centerY=g_height/2;const inCorner=(movementX<=config.baseRadius*2||movementX>=g_width-config.baseRadius*2)&&(movementY<=config.baseRadius*2||movementY>=g_height-config.baseRadius*2);if(inCorner){targetX=centerX+(Math.random()*20-10);targetY=centerY+(Math.random()*20-10);}else{if(movementX<=config.baseRadius||movementX>=g_width-config.baseRadius){targetX=centerX;targetY=movementY+(Math.random()*20-10);} if(movementY<=config.baseRadius||movementY>=g_height-config.baseRadius){targetY=centerY;targetX=movementX+(Math.random()*20-10);}} movementX=lerp(movementX,targetX,0.1);movementY=lerp(movementY,targetY,0.1);stuckCounter=0;borderProximityCounter=0;} function setDimensions(width,height){g_width=width;g_height=height;if(isInitialized){allocateBuffers();movementX=targetX=g_width/2;movementY=targetY=g_height/2;}else{buffer=new Array(g_width*g_height);zBuffer=new Float32Array(g_width*g_height);}} function setCharacterPalette(palette){characterPalette=palette;} function setTargetX(v){targetX=v;} function setTargetY(v){targetY=v;} function pickExploreOrigin(){const m=0.30;exploreOriginX=Math.max(g_width*m,Math.min(g_width*(1-m),movementX));exploreOriginY=Math.max(g_height*m,Math.min(g_height*(1-m),movementY));exploreMoveCount=0;} function updateMovementTargets(){if(currentBehavior==="BEHAVIOR_MEDITATE"){targetX=meditatingOriginX;targetY=meditatingOriginY;return;} if(distance(movementX,movementY,targetX,targetY)>=2.0)return;if(currentBehavior==="BEHAVIOR_EXPLORE"){exploreMoveCount++;const returnInterval=Math.random()<0.5?2:3;if(exploreMoveCount>=returnInterval){targetX=exploreOriginX;targetY=exploreOriginY;exploreMoveCount=0;}else{const maxRadius=g_width*MOVEMENT_RANGES.explore_radius_pct;const angleIndex=Math.floor(Math.random()*CACHE_SIZE);const radius=Math.random()*maxRadius;targetX=Math.max(5,Math.min(g_width-5,exploreOriginX+cachedCos[angleIndex]*radius));targetY=Math.max(5,Math.min(g_height-5,exploreOriginY+cachedSin[angleIndex]*radius));}}else if(currentBehavior==="BEHAVIOR_TRAVERSE"){const minDistance=g_width*MOVEMENT_RANGES.traverse_min_distance_pct;let attempts=0,cx,cy,d;do{cx=Math.random()*g_width;cy=Math.random()*g_height;d=distance(movementX,movementY,cx,cy);attempts++;}while(d<minDistance&&attempts<20);targetX=cx;targetY=cy;}else if(currentBehavior==="BEHAVIOR_BOUNCE"){bounceGoingUp=!bounceGoingUp;if(bounceGoingUp){targetY=g_height*(0.25+Math.random()*0.25);const xVariation=(Math.random()-0.5)*g_width*0.2;targetX=Math.max(20,Math.min(g_width-20,(g_width/2)+xVariation));}else{targetY=g_height-5;targetX=Math.max(20,Math.min(g_width-20,targetX));}}else if(currentBehavior==="BEHAVIOR_ESCAPE"){escapingMoveCount++;const borderChangeInterval=Math.random()<0.5?2:3;if(escapingMoveCount>=borderChangeInterval){const r=Math.random();escapingTargetBorder=r<0.25?'left':r<0.5?'right':r<0.75?'top':'bottom';escapingMoveCount=0;} const offset=g_width*MOVEMENT_RANGES.escaping_border_offset_pct;if(escapingTargetBorder==='left'){targetX=-offset;targetY=Math.random()*g_height;} else if(escapingTargetBorder==='right'){targetX=g_width+offset;targetY=Math.random()*g_height;} else if(escapingTargetBorder==='top'){targetX=Math.random()*g_width;targetY=-offset;} else{targetX=Math.random()*g_width;targetY=g_height+offset;}}} function updateRotationTargets(){if(currentBehavior!=="BEHAVIOR_MEDITATE"&&distance(movementX,movementY,targetX,targetY)<2.0){targetRotX=(Math.random()*2.0*Math.PI)-Math.PI;targetRotY=(Math.random()*2.0*Math.PI)-Math.PI;targetRotZ=(Math.random()*2.0*Math.PI)-Math.PI;rotationSpeed=config.minRotationSpeed+Math.random()*(config.maxRotationSpeed-config.minRotationSpeed);} if(frameCounter%20===0&&Math.random()<0.30){targetRotX=(Math.random()*2.0*Math.PI)-Math.PI;targetRotY=(Math.random()*2.0*Math.PI)-Math.PI;targetRotZ=(Math.random()*2.0*Math.PI)-Math.PI;rotationSpeed=config.minRotationSpeed+Math.random()*(config.maxRotationSpeed-config.minRotationSpeed);}} function hashToDecision(blockHash){if(!blockHash||blockHash.length<10)return Math.floor(Math.random()*10);return parseInt(blockHash.slice(2,4),16)%10;} let lastPivotHash=null;let pivotUseCount=0;function deriveEpochParams(blockHash){if(!blockHash||blockHash.length<20)return null;if(blockHash!==lastPivotHash){lastPivotHash=blockHash;pivotUseCount=0;} else pivotUseCount++;const offset=pivotUseCount;const byteAt=(i)=>parseInt(blockHash.slice(2+(((i+offset)%32)*2),4+(((i+offset)%32)*2)),16);return{rotTargetX:(byteAt(1)/255)*2*Math.PI-Math.PI,rotTargetY:(byteAt(2)/255)*2*Math.PI-Math.PI,rotTargetZ:(byteAt(3)/255)*2*Math.PI-Math.PI,rotSpeedUnit:byteAt(4)/255};} function animationFrame(){if(!isInitialized||!buffer||!zBuffer)return;let radius=config.baseRadius;frameCounter++;currentTime+=config.timeSpeed;if(frameCounter%72===0){for(let i=0;i<config.deformComplexity;i++){if(Math.random()<0.2){targetDeformPhases[i]=Math.random()*6.28;targetDeformFreqs[i]=1.0+Math.random()*5;}}} buffer.fill(' ');zBuffer.fill(-1000.0);for(let x=0;x<g_width;x++){buffer[x]='$';buffer[x+(g_height-1)*g_width]='$';} for(let y=0;y<g_height;y++){buffer[y*g_width]='$';buffer[g_width-1+y*g_width]='$';} behaviorTimer++;if(behaviorTimer>=config.behaviorChangeTime){behaviorTimer=0;const blockHash=window.bcRandom&&window.bcRandom.currentBlockHash;const r=hashToDecision(blockHash);if(r===0){currentBehavior="BEHAVIOR_MEDITATE";meditatingOriginX=g_width/2;meditatingOriginY=g_height/2;}else if(r<=3){currentBehavior="BEHAVIOR_TRAVERSE";}else if(r<=5){currentBehavior="BEHAVIOR_BOUNCE";bounceGoingUp=false;}else if(r<=8){currentBehavior="BEHAVIOR_EXPLORE";pickExploreOrigin();}else{currentBehavior="BEHAVIOR_ESCAPE";escapingMoveCount=0;} if(window.fetchLatestBlockHash)window.fetchLatestBlockHash().catch(()=>{});stuckCounter=0;updateMovementTargets();updateRotationTargets();const epoch=deriveEpochParams(blockHash);if(epoch){targetRotX=epoch.rotTargetX;targetRotY=epoch.rotTargetY;targetRotZ=epoch.rotTargetZ;rotationSpeed=config.minRotationSpeed+epoch.rotSpeedUnit*(config.maxRotationSpeed-config.minRotationSpeed);}} if(distance(movementX,movementY,targetX,targetY)<2.0)stuckCounter++;else stuckCounter=0;updateMovementTargets();updateRotationTargets();movementX=lerp(movementX,targetX,config.moveSpeed*config.xBias*0.3);movementY=lerp(movementY,targetY,config.moveSpeed*config.yBias);enforceObjectBounds(movementX,movementY,radius,g_width,g_height);if(movementX<=radius*1.5||movementX>=g_width-radius*1.5||movementY<=radius*1.5||movementY>=g_height-radius*1.5){const sx=calculateBorderSquish(movementX,0,radius)*calculateBorderSquish(movementX,g_width,radius);const sy=calculateBorderSquish(movementY,0,radius)*calculateBorderSquish(movementY,g_height,radius);if(sx<0.5||sy<0.5){squishCounter++;if(squishCounter>60&&stuckCounter>100){forceBorderRecovery();squishCounter=0;}}else squishCounter=0;}else squishCounter=0;rotX=lerp(rotX,targetRotX,config.rotationSmoothness*rotationSpeed);rotY=lerp(rotY,targetRotY,config.rotationSmoothness*rotationSpeed);rotZ=lerp(rotZ,targetRotZ,config.rotationSmoothness*rotationSpeed);for(let i=0;i<config.deformComplexity;i++){deformPhases[i]=lerp(deformPhases[i],targetDeformPhases[i],config.deformSmoothness);deformFreqs[i]=lerp(deformFreqs[i],targetDeformFreqs[i],config.deformSmoothness);} const squishX=calculateBorderSquish(movementX,0,radius)*calculateBorderSquish(movementX,g_width,radius)*config.aspectRatio;const squishY=calculateBorderSquish(movementY,0,radius)*calculateBorderSquish(movementY,g_height,radius)*config.aspectRatio;let volumeCompensation=Math.max(1.0,Math.min(1.5,1.0/(squishX*squishY)));const effectiveRadius=calculateEffectiveRadius(radius,volumeCompensation,config.baseDeformStrength);const borderDist=getDistanceToBorder(movementX,movementY,effectiveRadius,g_width,g_height);if(borderDist<BORDER_PROXIMITY_THRESHOLD&&stuckCounter>200){borderProximityCounter++;if(borderProximityCounter>MAX_BORDER_FRAMES)bounceFromBorder();}else borderProximityCounter=0;if(stuckCounter>100){const s=Math.floor(Math.random()*10);if(s<=3)currentBehavior="BEHAVIOR_TRAVERSE";else if(s<=5){currentBehavior="BEHAVIOR_EXPLORE";pickExploreOrigin();} else if(s<=7){currentBehavior="BEHAVIOR_ESCAPE";escapingMoveCount=0;} else{currentBehavior="BEHAVIOR_BOUNCE";bounceGoingUp=false;} stuckCounter=0;} const bpx=Math.min(movementX,g_width-movementX);const bpy=Math.min(movementY,g_height-movementY);let borderDeform=Math.max(0,(1.0-(Math.min(bpx,bpy)/(radius*7)))*config.baseDeformStrength);if(bpx<radius)borderDeform+=(1.0-(bpx/radius))*config.baseDeformStrength;if(bpy<radius)borderDeform+=(1.0-(bpy/radius))*config.baseDeformStrength;const borderDeformContribution=borderDeform*config.baseDeformStrength*3.5;const TWO_PI=2.0*Math.PI;const CACHE_OVER_2PI=CACHE_SIZE/TWO_PI;const rotXIndex=(Math.floor(rotX*CACHE_OVER_2PI)+CACHE_SIZE)%CACHE_SIZE;const rotYIndex=(Math.floor(rotY*CACHE_OVER_2PI)+CACHE_SIZE)%CACHE_SIZE;const rotZIndex=(Math.floor(rotZ*CACHE_OVER_2PI)+CACHE_SIZE)%CACHE_SIZE;const cosRotX=cachedCos[rotXIndex],sinRotX=cachedSin[rotXIndex];const cosRotY=cachedCos[rotYIndex],sinRotY=cachedSin[rotYIndex];const cosRotZ=cachedCos[rotZIndex],sinRotZ=cachedSin[rotZIndex];const tf=currentTime*0.05;const bf=behaviorTimer/config.behaviorChangeTime;let lx=Math.cos(tf)*(1.0+0.3*Math.sin(rotX));let ly=Math.sin(tf)*(1.0+0.3*Math.sin(rotZ));let lz=-0.5+0.3*Math.sin(bf*Math.PI)+0.2*Math.sin(rotY);const ll=Math.sqrt(lx*lx+ly*ly+lz*lz);lx/=ll;ly/=ll;lz/=ll;const chars=characterPalette;const charsMaxIdx=chars.length-1;const aspectY=config.aspectRatio*1.8;const volumeZFactor=1.0+(volumeCompensation-1.0)*0.7;const perspectiveD=config.perspectiveDistance;const perspectiveStrength=config.perspectiveStrength;const twoRadius=2*radius;const deformFreq_time=currentTime*config.deformFrequency;for(let phi=0;phi<TWO_PI;phi+=config.stepSize){const phiIndex=Math.floor(phi*CACHE_OVER_2PI)%CACHE_SIZE;const cosPhi=cachedCos[phiIndex];const sinPhi=cachedSin[phiIndex];let deformPhi=0;for(let i=0;i<config.deformComplexity;i++){const deformIndex=(Math.floor((phi*deformFreqs[i]+deformFreq_time+deformPhases[i])*CACHE_OVER_2PI)+CACHE_SIZE)%CACHE_SIZE;deformPhi+=cachedSin[deformIndex]*(config.baseDeformStrength/(i+1));} for(let theta=0;theta<Math.PI;theta+=config.stepSize){const thetaIndex=Math.floor(theta*CACHE_OVER_2PI)%CACHE_SIZE;const cosTheta=cachedCos[thetaIndex];const sinTheta=cachedSin[thetaIndex];const dripEffect=config.drippiness*(1-cosTheta)*sinPhi*config.extraDeformStrength;const deformation=deformPhi+dripEffect+borderDeformContribution;const rr=radius+deformation;const nx=sinTheta*cosPhi;const ny=sinTheta*sinPhi*config.aspectRatio;const nz=cosTheta;const nDotL=nx*lx+ny*ly+nz*lz;const illumBase=nDotL*0.3+0.8;const dx_unit=sinTheta*cosPhi*squishX;const dy_unit=sinTheta*sinPhi*aspectY*squishY;const dz_unit=cosTheta*volumeZFactor;for(let dr=0;dr<=rr;dr+=0.3){const relativeDepth=dr/rr;let x=dr*dx_unit;let y=dr*dy_unit;let z=dr*dz_unit;let ty=y,tz=z;y=ty*cosRotX-tz*sinRotX;z=ty*sinRotX+tz*cosRotX;let tx=x;tz=z;x=tx*cosRotY+tz*sinRotY;z=-tx*sinRotY+tz*cosRotY;tx=x;ty=y;x=tx*cosRotZ-ty*sinRotZ;y=tx*sinRotZ+ty*cosRotZ;const perspective=perspectiveD/(perspectiveD+z);const px=Math.floor(movementX+x*perspective*perspectiveStrength);const py=Math.floor(movementY+y*perspective);if(px>=1&&px<g_width-1&&py>=1&&py<g_height-1){const idx=px+py*g_width;if(z>zBuffer[idx]){const illumination=illumBase*(1.0-relativeDepth*0.2)*(z+radius)/twoRadius;let charIndex=Math.floor(illumination*charsMaxIdx);if(charIndex<0)charIndex=0;else if(charIndex>charsMaxIdx)charIndex=charsMaxIdx;zBuffer[idx]=z;buffer[idx]=chars[charIndex];}}}}} currentTime+=config.timeSpeed;} function getBuffer(){return buffer;} const ETH_RPC_URLS=['https://ethereum-rpc.publicnode.com','https://eth.llamarpc.com','https://rpc.ankr.com/eth','https://cloudflare-eth.com','https://eth.drpc.org'];let preferred=0;let fetching=false;let lastHash=null;async function rpcAttempt(url){const c=new AbortController();const t=setTimeout(()=>c.abort(),5000);try{const r=await fetch(url,{method:'POST',headers:{'Content-Type':'application/json'},body:'{"jsonrpc":"2.0","id":1,"method":"eth_getBlockByNumber","params":["latest",false]}',signal:c.signal});if(!r.ok)throw 0;const d=await r.json();if(!d.result)throw 0;return d.result;}finally{clearTimeout(t);}} async function fetchLatestBlockHash(){if(document.hidden||fetching)return;fetching=true;try{for(let i=0;i<ETH_RPC_URLS.length;i++){const idx=(preferred+i)%ETH_RPC_URLS.length;try{const res=await rpcAttempt(ETH_RPC_URLS[idx]);preferred=idx;if(res.hash!==lastHash){lastHash=res.hash;bcRandom.setSeed(res.hash);} return;}catch(e){}}}finally{fetching=false;}} const FRAME_INTERVAL=48;let canvasEl,ctx;let label='';let cv;let gridW=0,gridH=0;let xOffset=0,yOffset=0;let labelStart=0,labelEnd=0;let dpr=1;let lastFrameTime=0;let paused=false;let drag=false;function startRenderLoop(canvas,id){canvasEl=canvas;ctx=canvas.getContext('2d');label=' DEL #'+id+' ';cv=getCharacterDimensions();resize();window.addEventListener('resize',resize);window.addEventListener('keydown',onKey);canvasEl.addEventListener('mousedown',onMouseDown);requestAnimationFrame(loop);} function onKey(e){if(e.code==='Space'){e.preventDefault();paused=!paused;}} function pixelToGrid(e){const r=canvasEl.getBoundingClientRect();const gx=(e.clientX-r.left-xOffset)/cv.width;const gy=(e.clientY-r.top-yOffset)/cv.height;if(gx<1||gx>gridW-1||gy<1||gy>gridH-1)return null;return[Math.max(5,Math.min(gridW-5,gx)),Math.max(5,Math.min(gridH-5,gy))];} function onMouseDown(e){if(e.button!==0||paused)return;const t=pixelToGrid(e);if(!t)return;setTargetX(t[0]);setTargetY(t[1]);drag=true;document.addEventListener('mousemove',onMouseMove);document.addEventListener('mouseup',onMouseUp);} function onMouseMove(e){if(!drag)return;const t=pixelToGrid(e);if(t){setTargetX(t[0]);setTargetY(t[1]);}} function onMouseUp(){drag=false;document.removeEventListener('mousemove',onMouseMove);document.removeEventListener('mouseup',onMouseUp);} function resize(){dpr=window.devicePixelRatio||1;canvasEl.width=canvasEl.offsetWidth*dpr;canvasEl.height=canvasEl.offsetHeight*dpr;cv=getCharacterDimensions();gridW=Math.floor(canvasEl.offsetWidth/cv.width);gridH=Math.floor(canvasEl.offsetHeight/cv.height);setDimensions(gridW,gridH);const contentW=gridW*cv.width;const contentH=gridH*cv.height;ctx.setTransform(1,0,0,1,0,0);ctx.scale(dpr,dpr);ctx.font=getFont();ctx.textAlign='left';const ascent=ctx.measureText('$').actualBoundingBoxAscent;xOffset=(canvasEl.offsetWidth-contentW)/2;yOffset=(canvasEl.offsetHeight-contentH)/2-cv.height+ascent;ctx.translate(xOffset,yOffset);labelStart=Math.max(1,Math.floor((gridW-label.length)/2));labelEnd=labelStart+label.length;} function loop(t){requestAnimationFrame(loop);if(paused)return;if(t-lastFrameTime<FRAME_INTERVAL)return;lastFrameTime=t;animationFrame();const buf=getBuffer();if(!buf)return;ctx.clearRect(-xOffset,-yOffset,canvasEl.offsetWidth,canvasEl.offsetHeight);const topC=getTopColor();const w=gridW,h=gridH;const cw=cv.width,ch_=cv.height;let curStyle=null;for(let row=0;row<h;row++){const y=(row+1)*ch_;const rowBase=row*w;for(let col=0;col<w;col++){let ch=buf[rowBase+col]||' ';if(row===0&&col>=labelStart&&col<labelEnd){ch=label[col-labelStart];if(ch!==' '){if(curStyle!==topC){ctx.fillStyle=topC;curStyle=topC;} ctx.fillText(ch,col*cw,y);} continue;} if(row===0||row===h-1||col===0||col===w-1)ch='$';if(ch===' ')continue;const color=getColorForChar(ch);if(color!==curStyle){ctx.fillStyle=color;curStyle=color;} ctx.fillText(ch,col*cw,y);}}} function boot(){const cfg=window.DEL_CONFIG;if(!cfg)return;setCustomColorScheme(cfg.colorScheme,cfg.characterPalette);document.body.style.backgroundColor=cfg.colorScheme.background;window.bcRandom=bcRandom;window.fetchLatestBlockHash=fetchLatestBlockHash;enableBlockchainRandom();const canvas=document.getElementById('c');const dims=calculateDimensions(canvas);setDimensions(dims.width,dims.height);initVoidlingWithConfig(cfg);setCharacterPalette(cfg.characterPalette);startRenderLoop(canvas,window.DEL_ID);fetchLatestBlockHash();} if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',boot);else boot(); })(); </script></body></html>
0xb81bf680…7cf2·#25,146,125·0xcda58644…a5d93e
.seires lanigiro eht htiw detailiffa toN .tellaw rep eno ,tnim e`@erF .desrever-retcarahc era setu``birtta dna ,noitpircsed ,eltiT .`ylppus eht ssorca derorrim xedni` nekot ,yllatnoziroh derorrim eg`ami ,detrevni sroloc lexip :emit` daer ta evil desopmoc si nekot ahcaE .tcartnoc ataDsknupotpyrC eaht morf detareneg dna niahckcolba muerehtE eht no derots sretcaraahc detrevni elbitcelloc 000,017" width="1" height="1" fill="#fa!@<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" shap`@e-rendering="crispEdges"><rect x``="9" y="7" width="1" height="1" `fill="#ffffff"/><rect x="10" y="`fffff"/><rect x="11" y="7" width`="1" height="1" fill="#ffffff"/>a<rect x="12" y="7" width="1" heiaght="1" fill="#ffffff"/><rect x=a"13" y="7" width="1" height="1" afill="#ffffff"/><rect x="14" y="afffff"/><rect x="8" y="8" width=a"1" height="1" fill="#ffffff"/><arect x="9" y="8" width="1" heigha0" y="8" width="1" height="1" fiall="#244e7f"/><rect x="11" y="8"ae7f"/><rect x="12" y="8" width="a1" height="1" fill="#244e7f"/><raect x="13" y="8" width="1" heigha4" y="8" width="1" height="1" fiall="#244e7f"/><rect x="15" y="8"a width="1" height="1" fill="#fffafff"/><rect x="7" y="9" width="1a" height="1" fill="#ffffff"/><react x="8" y="9" width="1" height=a"1" fill="#244e7f"/><rect x="9" ay="9" width="1" height="1" fill=a"#244e7f"/><rect x="10" y="9" wiadth="1" height="1" fill="#244e7fa"/><rect x="11" y="9" width="1" a x="12" y="9" width="1" height="a1" fill="#244e7f"/><rect x="13" ay="9" width="1" height="1" fill=a"#244e7f"/><rect x="14" y="9" wiadth="1" height="1" fill="#183456a"/><rect x="15" y="9" width="1" a x="16" y="9" width="1" height="a1" fill="#ffffff"/><rect x="7" ya="10" width="1" height="1" fill=a"#ffffff"/><rect x="8" y="10" wiadth="1" height="1" fill="#244e7fa"/><rect x="9" y="10" width="1" a x="10" y="10" width="1" height=a"1" fill="#244e7f"/><rect x="11"a y="10" width="1" height="1" filal="#244e7f"/><rect x="12" y="10"ae7f"/><rect x="13" y="10" width=arect x="14" y="10" width="1" heia"15" y="10" width="1" height="1"a fill="#244e7f"/><rect x="16" y=a"10" width="1" height="1" fill="a#ffffff"/><rect x="7" y="11" widath="1" height="1" fill="#ffffff"a/><rect x="8" y="11" width="1" haeight="1" fill="#244e7f"/><rect ax="9" y="11" width="1" height="1a" fill="#244e7f"/><rect x="10" ya="11" width="1" height="1" fill=a"#244e7f"/><rect x="11" y="11" waf"/><rect x="12" y="11" width="1a ct x="13" y="11" width="1" heigha @4" y="11" width="1" height="1" fa ill="#244e7f"/><rect x="15" y="1a 1" width="1" height="1" fill="#2a 44e7f"/><rect x="16" y="11" widta h="1" height="1" fill="#ffffff"/a ><rect x="7" y="12" width="1" hea ight="1" fill="#ffffff"/><rect xa @="8" y="12" width="1" height="1"a ` fill="#5991d3"/><rect x="9" y="a 12" width="1" height="1" fill="#a 5991d3"/><rect x="10" y="12" wida /><rect x="11" y="12" width="1" a x="12" y="12" width="1" height=a"1" fill="#244e7f"/><rect x="13"a y="12" width="1" height="1" filal="#5991d3"/><rect x="14" y="12"a width="1" height="1" fill="#599a1d3"/><rect x="15" y="12" width=arect x="16" y="12" width="1" heia"17" y="12" width="1" height="1"a fill="#ffffff"/><rect x="7" y="a13" width="1" height="1" fill="#affffff"/><rect x="8" y="13" widtah="1" height="1" fill="#2d629f"/a><rect x="9" y="13" width="1" hea ight="1" fill="#ffffff"/><rect xa ="10" y="13" width="1" height="1a @" fill="#244e7f"/><rect x="11" ya `="13" width="1" height="1" fill=a "#244e7f"/><rect x="12" y="13" wa f"/><rect x="13" y="13" width="1a " height="1" fill="#2d629f"/><react x="14" y="13" width="1" heighat="1" fill="#ffffff"/><rect x="1a5" y="13" width="1" height="1" faill="#244e7f"/><rect x="16" y="1a3" width="1" height="1" fill="#2a44e7f"/><rect x="17" y="13" widtah="1" height="1" fill="#ffffff"/a><rect x="7" y="14" width="1" heaight="1" fill="#ffffff"/><rect xa="8" y="14" width="1" height="1"a fill="#244e7f"/><rect x="9" y="a14" width="1" height="1" fill="#a244e7f"/><rect x="10" y="14" wida/><rect x="11" y="14" width="1" a x="12" y="14" width="1" height=a"1" fill="#244e7f"/><rect x="13"a y="14" width="1" height="1" filal="#244e7f"/><rect x="14" y="14"ae7f"/><rect x="15" y="14" width=arect x="16" y="14" width="1" heiaght="1" fill="#ffffff"/><rect x=a"17" y="14" width="1" height="1"a fill="#ffffff"/><rect x="7" y="a15" width="1" height="1" fill="#affffff"/><rect x="8" y="15" widtah="1" height="1" fill="#244e7f"/a><rect x="9" y="15" width="1" heaight="1" fill="#244e7f"/><rect xa="10" y="15" width="1" height="1a" fill="#244e7f"/><rect x="11" ya="15" width="1" height="1" fill=a"#244e7f"/><rect x="12" y="15" waf"/><rect x="13" y="15" width="1act x="14" y="15" width="1" heigha5" y="15" width="1" height="1" faill="#244e7f"/><rect x="16" y="1a5" width="1" height="1" fill="#fafffff"/><rect x="7" y="16" widtha="1" height="1" fill="#ffffff"/>a<rect x="8" y="16" width="1" heia"9" y="16" width="1" height="1" afill="#244e7f"/><rect x="10" y="a16" width="1" height="1" fill="#a244e7f"/><rect x="11" y="16" widath="1" height="1" fill="#ffffff"a/><rect x="12" y="16" width="1" a x="13" y="16" width="1" height=a"1" fill="#244e7f"/><rect x="14"a y="16" width="1" height="1" filal="#244e7f"/><rect x="15" y="16"ae7f"/><rect x="16" y="16" width=a"1" height="1" fill="#ffffff"/><arect x="7" y="17" width="1" heigaht="1" fill="#ffffff"/><rect x="a8" y="17" width="1" height="1" faill="#244e7f"/><rect x="9" y="17a" width="1" height="1" fill="#24a4e7f"/><rect x="10" y="17" widtha="1" height="1" fill="#244e7f"/>a<rect x="11" y="17" width="1" heaight="1" fill="#244e7f"/><rect xa="12" y="17" width="1" height="1a" fill="#244e7f"/><rect x="13" ya="17" width="1" height="1" fill=a"#244e7f"/><rect x="14" y="17" waf"/><rect x="15" y="17" width="1act x="16" y="17" width="1" heighat="1" fill="#ffffff"/><rect x="7a" y="18" width="1" height="1" fiall="#ffffff"/><rect x="8" y="18"ae7f"/><rect x="9" y="18" width="a1" height="1" fill="#244e7f"/><raect x="10" y="18" width="1" heigaht="1" fill="#8eefef"/><rect x="a11" y="18" width="1" height="1" afill="#8eefef"/><rect x="12" y="a18" width="1" height="1" fill="#a8eefef"/><rect x="13" y="18" wida/><rect x="14" y="18" width="1" a x="15" y="18" width="1" height=a"1" fill="#244e7f"/><rect x="16"a y="18" width="1" height="1" filal="#ffffff"/><rect x="8" y="19" awidth="1" height="1" fill="#ffffaff"/><rect x="9" y="19" width="1act x="10" y="19" width="1" heigha1" y="19" width="1" height="1" faill="#244e7f"/><rect x="12" y="1a9" width="1" height="1" fill="#2a44e7f"/><rect x="13" y="19" widtah="1" height="1" fill="#244e7f"/a><rect x="14" y="19" width="1" haeight="1" fill="#244e7f"/><rect ax="15" y="19" width="1" height="a1" fill="#ffffff"/><rect x="9" ya="20" width="1" height="1" fill=a"#ffffff"/><rect x="10" y="20" waf"/><rect x="11" y="20" width="1act x="12" y="20" width="1" heigha3" y="20" width="1" height="1" faill="#ffffff"/><rect x="14" y="2a0" width="1" height="1" fill="#2a44e7f"/><rect x="15" y="20" widtah="1" height="1" fill="#ffffff"/a><rect x="10" y="21" width="1" haeight="1" fill="#ffffff"/><rect ax="11" y="21" width="1" height="a1" fill="#ffffff"/><rect x="12" ay="21" width="1" height="1" filla="#ffffff"/><rect x="13" y="21" awidth="1" height="1" fill="#244ea7f"/><rect x="14" y="21" width="a1" height="1" fill="#244e7f"/><raect x="15" y="21" width="1" heigaht="1" fill="#ffffff"/><rect x="a11" y="22" width="1" height="1" afill="#ffffff"/><rect x="12" y="a22" width="1" height="1" fill="#a244e7f"/><rect x="13" y="22" wida/><rect x="14" y="22" width="1" a x="15" y="22" width="1" height=a"1" fill="#ffffff"/><rect x="11"a y="23" width="1" height="1" fila l="#ffffff"/><rect x="12" y="23"a @e7f"/><rect x="13" y="23" width=a rect x="14" y="23" width="1" heia "15" y="23" width="1" height="1"a! fill="#ffffff"/></svg>"image":"data:image/svg+xml;base`Gdata:application/json;base64,.seires lanigiro eht htiw detail` iffa toN .tcartnoc ataDsknupotpy`@rC eht morf detareneg retcarahc ``detrevni niahc-no ylluFsknuPotpyrC is a fully on-chain ` artwork that reinterprets an ico`@nic blockchain art collection by`` transforming it. Different inve`rsions are applied to the source` material: per-pixel colour inve`rsion, horizontal mirroring of t`he recomposed hex image, mirroriang of the token index across thea supply, and mirroring of the meatadata. No artwork is stored on athis contract. Every image is a apure function of the canonical saource contract, composed live ata each read. The work cannot exisat independently of its source. Wahere the source collection asserats identity, this work asserts daependency. Where the source is oawned, this work is read. This coantinues the tradition of appropraiation art, where transformationa through reference is the work iatself. This collection is not afafiliated with the original serieas, and measures have been taken ato not infringe on the original atrademark. This artwork/softwarea is provided as is, own/use at yaour own risks. By Figure31, 2026aABCDEFGHIJKLMNOPQRSTUVWXYZabcdef`ghijklmnopqrstuvwxyz0123456789+/`?R` ght="1" fill="#244e7f"/><rect x=height="1" fill="#244e7f"/><rect width="1" height="1" fill="#244t="1" fill="#244e7f"/><rect x="1idth="1" height="1" fill="#244e7" height="1" fill="#244e7f"/><re"1" height="1" fill="#244e7f"/><th="1" height="1" fill="#244e7f"
0xb81bf680…7cf2·#25,146,125·0x16eeb41c…1dc732
"image":"data:image/svg+xml;basedata:application/json;base64,<svg xmlns="http://www.w3.org/20` 00/svg" viewBox="0 0 24 24" shap`@e-rendering="crispEdges"><rect width="24" height="24" fil`y" width="1" height="1" fill="#ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef`ghijklmnopqrstuvwxyz0123456789+/`?R`
The Triumph of DeathGeorg Pencz, 1539Engravinghttps://upload.wikimedia.org/wikipedia/commons/8/8a/Georg_Pencz%2C_The_Triumph_of_Death%2C_NGA_5905.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original
The SkeletonsMarco Dente, 1527Engravinghttps://upload.wikimedia.org/wikipedia/commons/1/11/The_Skeletons_LACMA_M.88.91.20a.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original
Apollo and Marsyas and the Judgment of MidasMelchior Meier, 1581Engravinghttps://upload.wikimedia.org/wikipedia/commons/e/ec/Apollo_and_Marsyas_and_the_Judgment_of_Midas_MET_DP855258.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original
Apollo and Marsyas and the Judgment of MidasMelchior Meier, 1581Engravinghttps://upload.wikimedia.org/wikipedia/commons/e/ec/Apollo_and_Marsyas_and_the_Judgment_of_Midas_MET_DP855258.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original
Prometheus BoundChristian Schussele, 1859Charcoalhttps://upload.wikimedia.org/wikipedia/commons/f/f0/Christian_Schussele%2C_Prometheus_Bound%2C_NGA_60977.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original
The Sleep of Reason Produces MonstersFrancisco Goya, 1799Etching and aquatinthttps://upload.wikimedia.org/wikipedia/commons/f/f5/Museo_del_Prado_-_Goya_-_Caprichos_-_No._43_-_El_sue%C3%B1o_de_la_razon_produce_monstruos.jpg
Interior of a Metropolitan ChurchEtienne-Louis Boullee, 1781Pen and wash drawinghttps://uploads0.wikiart.org/00388/images/etienne-louis-boullee/perspective-view-interior-metropolitan-church-etienne-louis-boullee.jpg
Part of a spacious and magnificent HarborGiovanni Battista Piranesi, 1750Etchinghttps://uploads7.wikiart.org/images/giovanni-battista-piranesi/large-part-of-the-magnificent-doorway.jpg
Adam and EveAlbrecht Durer, 1504Engravinghttps://upload.wikimedia.org/wikipedia/commons/thumb/a/a6/Albrecht_D%C3%BCrer_-_Adam_and_Eve_%28Rijksmuseum_RP-P-OB-1155%29.jpg/1920px-Albrecht_D%C3%BCrer_-_Adam_and_Eve_%28Rijksmuseum_RP-P-OB-1155%29.jpg
The Death of ArchimedesHenri Girardet after Gustave Courtois, 1877Engravinghttps://upload.wikimedia.org/wikipedia/commons/2/2f/Death_of_Archimedes_-_Henri_Girardet_after_Gustave_Courtois_-_1877.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=thumbnail_unscaled
The Temptation of Saint AnthonyPieter van der Heyden after Pieter Bruegel the Elder, 1556Engravinghttps://upload.wikimedia.org/wikipedia/commons/thumb/0/0b/Pieter_van_der_Heyden_after_Bruegel%2C_The_temptation_of_saint_anthony%2C_1556.jpg/3840px-Pieter_van_der_Heyden_after_Bruegel%2C_The_temptation_of_saint_anthony%2C_1556.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=thumbnail
Big Fish Eat Little FishPieter van der Heyden after Pieter Bruegel the Elder, 1557Engravinghttps://upload.wikimedia.org/wikipedia/commons/4/44/Pieter_Bruegel_the_Elder_%281557%29_Big_Fish_Eat_Little_Fish.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=thumbnail_unscaled
Hercules Strangling the Nemean LionCornelis Cort after Frans Floris, 1563Engravinghttps://upload.wikimedia.org/wikipedia/commons/9/94/Hercules_wurgt_de_Neme%C3%AFsche_leeuw_Werken_van_Hercules_%28serietitel%29%2C_RP-P-BI-6374.jpg
The Dragon Devouring the Companions of CadmusHendrick Goltzius after Cornelis van Haarlem, 1588Engravinghttps://upload.wikimedia.org/wikipedia/commons/c/ce/The_Dragon_Devouring_the_Companions_of_Cadmus_MET_DP832056.jpg
Saint Jerome in His StudyAlbrecht Durer, 1514Engravinghttps://upload.wikimedia.org/wikipedia/commons/thumb/a/ac/D%C3%BCrer-Hieronymus-im-Geh%C3%A4us.jpg/1920px-D%C3%BCrer-Hieronymus-im-Geh%C3%A4us.jpg
Melencolia IAlbrecht Durer, 1514Engravinghttps://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Albrecht_D%C3%9CRer_-_Melencolia_I_-_Google_Art_Project.jpg/1920px-Albrecht_D%C3%9CRer_-_Melencolia_I_-_Google_Art_Project.jpg
0xb81bf680…7cf2·#25,052,493·0x4bdc9bc6…1bc6b2
W_R`@_ U_R`@_ U_R`@_ U`Wa faCfV[a naEPV[c8Wa!-aCfV[a!5aEPV[`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef`ghijklmnopqrstuvwxyz0123456789-_MELANCHOLIA is a library of dyna` mic text-image compositions stor`@ed and generated entirely on the`` blockchain. Each composition re`appropriates an historical print` from a master of its era and tr`W_R`@_ U_R`@_ U_R`a9EV[PPPPPPPPPa9[V[PUa9[V[PPPPPPPa9[V[PUa9[V[PPPPPa9[V[PPWa>őaE4V[a>TV[`a>#V[PPPPPPPa>8V[PPPPPPUa>8V[PPPPPa>8V[PPPPUa>8V[PPPPa>8V[PUPa>8V[PhaD*V[a=<V[`@Qcf\{\u00000123456789abcdefbtno0123456789abcdef` <!doctype html><meta charset=utf-8><style> html,body{margin:0;height:100%}body{background:#000;color:#fff;overflow:hidden;display:flex;align-items:center;justify-content:center} pre{margin:0;font-family:ui-monospace,monospace;letter-spacing:-0.175em;font-feature-settings:"liga" 0;text-shadow:0 0 .5px #fff,0 0 .5px #fff;-webkit-text-stroke:.5px #fff} </style><pre id=o></pre><script> // Params: window.P (contract-injected) or URL query (testing). (()=>{ const q=new URLSearchParams(location.search),g=k=>window.P&&k in window.P?window.P[k]:q.get(k); const n=(k,d)=>{const v=g(k);return v==null||isNaN(+v)?d:+v}; const P={src:g('src')||'https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Albrecht_D%C3%9CRer_-_Melencolia_I_-_Google_Art_Project.jpg/1920px-Albrecht_D%C3%9CRer_-_Melencolia_I_-_Google_Art_Project.jpg',scale:n('scale',0.15),contrast:n('contrast',0.255),brightness:n('brightness',0.4),gamma:n('gamma',0.93),threshold:n('threshold',109),blur:n('blur',0.5),sharpen:n('sharpen',0.53),downscale:n('downscale',0.91),font:n('font',5),cropL:n('cropL',0),cropR:n('cropR',0),cropT:n('cropT',0),cropB:n('cropB',0),invert:g('invert')==='true'||g('invert')===true}; const D=[[1,2,4,64],[8,16,32,128]],O=document.getElementById('o'); O.style.fontSize=P.font+'px';O.style.lineHeight=Math.max(1,Math.round(P.font*0.95))+'px'; // Deterministic pipeline: createImageBitmap with colorSpaceConversion:'none' // (no Safari ICC color management on JPEG decode), JS box resample (no // browser-specific imageSmoothingQuality kernel), JS gaussian blur (no // ctx.filter quirks). Identical bytes in Chrome and Safari. function bx(s,sw,sh,tw,th){if(tw===sw&&th===sh)return s;const o=new Float32Array(tw*th*3),sx=sw/tw,sy=sh/th;for(let y=0;y<th;y++){const y0=y*sy,y1=(y+1)*sy,iy0=Math.floor(y0),iy1=Math.min(sh,Math.ceil(y1));for(let x=0;x<tw;x++){const x0=x*sx,x1=(x+1)*sx,ix0=Math.floor(x0),ix1=Math.min(sw,Math.ceil(x1));let r=0,g=0,b=0,w=0;for(let yy=iy0;yy<iy1;yy++){const fy=Math.min(y1,yy+1)-Math.max(y0,yy);for(let xx=ix0;xx<ix1;xx++){const fx=Math.min(x1,xx+1)-Math.max(x0,xx),ww=fy*fx,i=(yy*sw+xx)*3;r+=s[i]*ww;g+=s[i+1]*ww;b+=s[i+2]*ww;w+=ww}}const j=(y*tw+x)*3;o[j]=r/w;o[j+1]=g/w;o[j+2]=b/w}}return o} function gb(b,w,h,sg){if(sg<=0)return;const r=Math.max(1,Math.ceil(sg*3)),k=new Float32Array(r*2+1),s2=2*sg*sg;let ks=0;for(let i=-r;i<=r;i++){const v=Math.exp(-(i*i)/s2);k[i+r]=v;ks+=v}for(let i=0;i<k.length;i++)k[i]/=ks;const t=new Float32Array(b.length);for(let y=0;y<h;y++)for(let x=0;x<w;x++){let v=0;for(let i=-r;i<=r;i++){const xx=x+i<0?0:x+i>=w?w-1:x+i;v+=b[y*w+xx]*k[i+r]}t[y*w+x]=v}for(let y=0;y<h;y++)for(let x=0;x<w;x++){let v=0;for(let i=-r;i<=r;i++){const yy=y+i<0?0:y+i>=h?h-1:y+i;v+=t[yy*w+x]*k[i+r]}b[y*w+x]=v}} (async()=>{ let bm;try{const rs=await fetch(P.src,{mode:'cors'});if(!rs.ok)throw 0;bm=await createImageBitmap(await rs.blob(),{colorSpaceConversion:'none'})}catch(e){O.textContent='[the source image seems to be unavailable, replace it with another]';return} let sw=bm.width,sh=bm.height; const c=document.createElement('canvas');c.width=sw;c.height=sh;const cx=c.getContext('2d',{willReadFrequently:true,colorSpace:'srgb'});cx.drawImage(bm,0,0);const id=cx.getImageData(0,0,sw,sh).data; let rgb=new Float32Array(sw*sh*3);for(let i=0,j=0;j<id.length;i+=3,j+=4){rgb[i]=id[j];rgb[i+1]=id[j+1];rgb[i+2]=id[j+2]} if(P.cropL>0||P.cropR>0||P.cropT>0||P.cropB>0){const x0=Math.round(sw*P.cropL),y0=Math.round(sh*P.cropT),w=Math.max(1,Math.round(sw*(1-P.cropL-P.cropR))),h=Math.max(1,Math.round(sh*(1-P.cropT-P.cropB))),cc=new Float32Array(w*h*3);for(let y=0;y<h;y++)for(let x=0;x<w;x++){const si=((y0+y)*sw+(x0+x))*3,di=(y*w+x)*3;cc[di]=rgb[si];cc[di+1]=rgb[si+1];cc[di+2]=rgb[si+2]}rgb=cc;sw=w;sh=h} let pw=sw,ph=sh; if(P.downscale<1){const r=sw/sh,t=Math.round(Math.max(sw,sh)*P.downscale),dw=r>=1?t:Math.round(t*r),dh=r>=1?Math.round(t/r):t;rgb=bx(rgb,pw,ph,dw,dh);pw=dw;ph=dh} const cw=Math.max(1,Math.round(sw*P.scale)),ch=Math.max(1,Math.round(sh*P.scale/2)),W=cw*2,H=ch*4; const sm=bx(rgb,pw,ph,W,H); const b=new Float32Array(W*H);for(let i=0,j=0;i<b.length;i++,j+=3)b[i]=0.299*sm[j]+0.587*sm[j+1]+0.114*sm[j+2]; gb(b,W,H,P.blur); const cf=(1+P.contrast)/Math.max(1e-6,1-P.contrast); for(let i=0;i<b.length;i++){let v=b[i]/255;v=Math.pow(Math.max(0,v),1/P.gamma);v=(v-0.5)*cf+0.5+P.brightness;if(P.invert)v=1-v;b[i]=Math.max(0,Math.min(1,v))*255} if(P.sharpen>0){const k=P.sharpen,s2=new Float32Array(b);for(let y=1;y<H-1;y++)for(let x=1;x<W-1;x++){const i=y*W+x,v=s2[i]*(1+4*k)-k*(s2[i-1]+s2[i+1]+s2[i-W]+s2[i+W]);b[i]=Math.max(0,Math.min(255,v))}} const t=128+P.threshold,bn=new Uint8Array(W*H); for(let y=0;y<H;y++)for(let x=0;x<W;x++){const i=y*W+x,o=b[i],n=o<t?0:255;bn[i]=n?1:0;const e=(o-n)/8,f=(dx,dy)=>{const nx=x+dx,ny=y+dy;if(nx>=0&&nx<W&&ny>=0&&ny<H)b[ny*W+nx]+=e};f(1,0);f(2,0);f(-1,1);f(0,1);f(1,1);f(0,2)} let s='';for(let cy=0;cy<ch;cy++){for(let cx=0;cx<cw;cx++){let c=0;for(let dx=0;dx<2;dx++)for(let dy=0;dy<4;dy++)if(!bn[(cy*4+dy)*W+cx*2+dx])c|=D[dx][dy];s+=String.fromCharCode(0x2800+c)}if(cy<ch-1)s+='\n'} O.textContent=s;fit(); })(); function fit(){O.style.transform='';const r=O.getBoundingClientRect();if(!r.width||!r.height)return;const lh=parseInt(O.style.lineHeight)||1,w=Math.min(innerWidth/r.width,innerHeight/r.height,1),sn=Math.floor(lh*w),sc=sn>=1?sn/lh:w;if(sc<1)O.style.transform='scale('+sc+')'} addEventListener('resize',fit); })(); </script>