gruff

archive emotions before they fade

techniques · four lanes, every collection where it first appeared

each square is a collection where it first appeared; it grows with the works. a dotted line joins a collection made with two techniques.

  • vector illustration: antique by gruff (2023), blast (2023), gruff's collabs (2023), gift editions by gruff (2023), pepe club (2023), vibes & times (2023), icon's by gruff (2023), 1/1's by gruff (2023), silver surfer (2023), essence (2023), last selfie or? (2023), gruffters (2023), resonance (2024), the school of art (2025), pulverulents (2025)
  • glitch art: oversimulated (2025), worthless (2025), subsimulated (2025), pulverulents (2025)
  • generative art: gruffters (2023), phigures (2026), facets (2026), ovvn (2026)
  • code art: phigures (2026), facets (2026), ovvn (2026)

methods

vector illustration

where it started. the early pieces are drawn point by point in vector, and all 673 gruffters traits were drawn by hand before any code mixed them.

photoshop

almost every drawing passed through photoshop at the end. sometimes for a whole effect, sometimes only to lay grain over it.

gruffters traits being drawn in illustrator
gruffters traits being drawn in illustrator
more gruffters traits drawn in illustrator
more gruffters traits drawn in illustrator
a detail of an early work at one pixel to one pixel, with the grain showing
a detail of an early work at one pixel to one pixel, with the grain showing

glitch art

touchdesigner

pulverulents was built in real time: camera feeds and vector forms pushed through touchdesigner networks, then shot and finished by hand.

a touchdesigner network over a camera feed
a touchdesigner network over a camera feed
the night shoot for pulverulents
the night shoot for pulverulents
a message from xcopy about pulverulents
a message from xcopy

generative art

mathematics

phigures are solved, not drawn: every wallet seeds a figure whose proportions follow the golden ratio and a jointed anatomy. facets does its trigonometry in solidity, in fixed point, inside the contract.

a phigures figure at large size
a phigures figure at large size

code art

pixel grid

facets lives on one 35 × 35 grid. same-colour cells merge row by row, which gives the tetris look and keeps the art small enough to live on-chain.

three.js

for moving 3d: a ps1 shader for ovvn's x, a 3d tool for facets holders, and the dive bar.

on-chain

phigures, facets and ovvn are drawn by their own contracts. no server, no ipfs: the code that makes the image lives on ethereum.

facets #1 on its 35 by 35 grid
facets #1 on its 35 by 35 grid
the dive bar room, seen wide
the dive bar room, seen wide
<svg viewBox="0 0 35 35" shape-rendering="crispEdges" xmlns="http://www.w3.org/2000/svg">
<rect width="35" height="35" fill="#f4f4f2"/>
<path fill="#44444c" d="M0 0h8v1H0zM15 0h5v1H15zM27 0h8v1H27zM0 1h9v1H0z …"/>
<path fill="#262629" d="M1 3h8v1H1zM15 3h1v1H15zM19 3h1v1H19zM26 3h8v1H26z …"/>
<path fill="#d8faf9" d="M15 4h1v1H15zM17 4h2v1H17zM20 4h1v1H20zM12 5h2v1H12z …"/>
<path fill="#b1fbfa" d="M13 6h1v1H13zM15 6h2v1H15zM18 6h1v1H18zM20 6h2v1H20z …"/>
<path fill="#7dfcfb" d="M14 7h1v1H14zM16 7h1v1H16zM18 7h2v1H18zM21 7h1v1H21z …"/>
<path fill="#36fdfc" d="M15 8h1v1H15zM17 8h1v1H17zM19 8h1v1H19zM22 9h1v1H22z …"/>
facets #1, its own svg

aiand all the way through, ai: checking the maths, writing code, running the numbers. a tool in the studio, never the hand that makes the image.

80% on-chain · 73 1/1 · 2,833 edition pieces