{{ crt }}
// LOG IN WITH A WALLET
Signing in creates your profile at bitxbit.art/<username>. No gas. One signature.
// CHOOSE AVATAR · OWNED FRAMES ONLY
// PROFILE
{{ pfName }}
AVATAR · FRAME #{{ pfAvatarIdp }}
USERNAME
ENS NAME
PROFILE URL{{ pfAvail }}
{{ pfUrl }}
{{ c.n }} PIECES
Empty. Press + ADD PIECE to choose from the Frames you own.
{{ o.str }}
#{{ o.idp }}
SELECT A PIECE YOU OWN
No collections yet. Name one above to create it.
VISITS · 7D
{{ pfVis7 }}
ALL TIME
{{ pfVisAll }}
RECENT VISITORS
{{ v.who }}{{ v.when }}
FRAME://{{ heroLabel }}TERMINAL VIEW
bitxbit@mainnet: ~ render {{ heroLabel }} 60×25
{{ heroStr }}
$cast call $BITXBIT "renderText(uint256)" | fold -w 60
{{ heroMeta }}
{{ heroBitL }}
{{ heroBitR }}

{{ fiTitle }}

10,000 Frames of 60×25 ASCII, written into Ethereum blockspace. No IPFS. No servers. Any node prints any piece — offline, from the terminal.

CELLS
1,500
FRAMES
10,000
SERVERS
0
PRICE
.005Ξ
// PROTOCOL04 ENTRIES
01
CANVAS
60 × 25

1,500 cells in a 60 × 25 monospace grid. Each cell holds one printable ASCII character — or nothing.

02
FRAMES
10,000

ERC-721. 10,000 Frames at genesis, each with its own byte count. Many are burned at launch to seed BYTE liquidity. #0 is the Black Canvas.

03
BYTE
1 BYTE = 1 BYTE

Hybrid token. ERC-20 and BYTE NFT, exchangeable 1:1 through the protocol pool. No price. Just gas.

04
LOOP
Burn · Inscribe

Burn a Frame → receive BYTE equal to its byte count. Spend BYTE → write or overwrite characters in any Frame you own. Spent BYTE is destroyed.

05 / FOREVER INSCRIBED

The chain is the gallery.

Cell positions and characters are stored in contract bytecode via SSTORE2. tokenURI builds JSON and SVG on-chain from that data. Every edit is a transaction; every transaction is history the chain replays.

> WHAT IS WRITTEN CANNOT BE UNWRITTEN.
READ IT FROM YOUR NODE
~/bitxbit — zsh[ x ]
{{ nodeCmd }}

Claim a frame.

> artists + community: 500 · 1 free + 4
> whitelist: 1,000 · 5 @ 0.005 ETH
> team vault → public: 5 @ 0.005 ETH
> {{ mintedFmt }} / 10,000 inscribed
06 / FAQ

Queries.

{{ q.a }}

Gallery

{{ gCountFmt }} FRAMES · RENDERED FROM CHAIN
⌕
SORT
frame://#{{ fIdp }}[ x ]
{{ fStr }}
{{ fKind }}

#{{ fIdp }}

BYTES · EDITS
{{ fChars }} · {{ fSteps }} edits
BURN VALUE
≈{{ fBurnEth }} ETH
OWNER
{{ fOwner }}
REWARDS
{{ fRewEth }} ETH · {{ fRewByte }} B
EDIT HISTORY
{{ h.n }}{{ h.what }} · blk {{ h.blk }}{{ h.tx }}
VIEW IN TERMINAL
$ ./render-frame.sh {{ fId }} http://127.0.0.1:8545
RAW · SSTORE2 POINTER 0x{{ fPtr }}
{{ fRaw }}
Etherscan ↗ OpenSea ↗
/mint · {{ phaseName }}ERC-721
{{ mMintedFmt }}/10,000
{{ mPctLabel }} MINTED{{ mLeftFmt }} REMAINING
PHASE{{ cdLabel }} {{ countdown }}
PRICE
{{ mPriceLbl }}
LIMIT
{{ mLimitLbl }}
{{ wlHead }}
{{ wlRes }}
PREVIEW60×25 · 7-BIT ASCII
{{ mPrevStr }}
{{ mQtyLbl }}
{{ mQty }}
TOTAL{{ mTotal }} ETH
tx.log[ x ]
{{ mLogNow }}█
{{ cgFx }}
tx.confirmed
// MINT COMPLETE
{{ cgTitle }}
{{ cgSub }}
Your art stays sealed until reveal. It now lives on Ethereum, forever.
// $BYTE/MART

$BYTE/MART

$BYTE · ERC-20
{{ byteTokFmt }}
$BYTE · NFT
{{ byteNftFmt }}
> 1 $BYTE ⇄ 1 $BYTE NFT, exactly 1:1. 10% fee paid in ETH on top (8% to soft stakers · 1% to liquidity · 1% to team).
FROM · {{ swFrom }}
TO · {{ swTo }}
{{ swAmt }}
FEE · 10% IN ETH{{ swFeeEth }} ETH
tx.log
{{ l.t }}
█
POOL FRAMES
{{ poolFrames }}
POOL $BYTE
{{ poolByte }}
CURVE
LINEAR
FEE
10%
QUOTE
#{{ qIdp }}
BYTES{{ qChars }}
{{ qFeeLbl }}{{ qBase }} {{ qOp }} {{ qFee }}
{{ qTotalLabel }}{{ qTotal }} $BYTE
> select a frame to quote.
{{ l.t }}
SELECT A FRAME YOU OWN
{{ burnStr }}
BURN → $BYTE
+{{ burnYield }} $BYTE

Burning destroys Frame #{{ burnIdp }} permanently. You receive $BYTE equal to its byte count, as tokens. The Black Canvas cannot be burned.

{{ burnTaxLine }}
{{ l.t }}
confirm.burn[ x ]
Irreversible.
> Frame #{{ burnIdp }} will cease to exist.
> {{ burnYield }} $BYTE will be minted to 0x7a3f…c91e.
> This cannot be undone.
// CLEAR FRAME
> ARE YOU SURE?
Every cell on the canvas goes blank. ⌘Z can bring it back.
// PHOTO → ASCII · CROP A SQUARE
Uploaded photo
DRAG the square to frame · DRAG the corner to resize
PREVIEW · 60 × 25
{{ phPrev }}
CONTRAST
BRIGHTNESS
// STUDIO
BYTE COUNT {{ artBytes }}/ 1,500
{{ posLabel }}
FLOATING · {{ stName }} · {{ stDims }}
DRAG or ARROWS move · +/− size
ZOOM {{ zoomPct }}%
{{ guideImg }}
{{ baseStr }}
{{ draftStr }}
{{ stStr }}
OPACITY
TOOLS
WORD
CUSTOM CHAR {{ brushCode }}
WIDTH {{ bw }}
EXPORT
CLICK a cellTYPE to write← ↑ → ↓ move⌫ restore cellSPACE clearsDRAG / ⇧+ARROWS select⌘C ⌘X ⌘V copy · cut · paste⌘Z undo · 10 steps{{ clipLabel }}
COST · BYTE
{{ sCost }}
balance{{ sBal }} BYTE
gas{{ sGasEth }} ETH
{{ l.t }}
// PREVIEW · FRAME #{{ sIdp }}
BEFORE
{{ sBeforeStr }}
AFTER · {{ sCost }} CELLS CHANGED
{{ sAfterKeepStr }}
BYTE BURNED
{{ sCost }}
INSCRIBE FEE + GAS
~$10 · {{ sFeeEth }} ETH
> WHAT IS WRITTEN CANNOT BE UNWRITTEN.
// FRAME #{{ sDoneIdp }}
{{ sDoneStr }}
{{ sDoneMsg }}
{{ sDoneStatus }}

Inspiration

Before pixels there were keys. For 130 years people have made pictures from the characters of a machine: first on paper, then in code, and now on-chain.

{{ e.year }}
{{ e.kicker }}
{{ e.title }}

{{ e.body }}

> FIND OUT MORE ▾
{{ e.art }} 
{{ hNewsTitle }}{{ hZoomLbl }}
{{ hNewsFx }}{{ hNewsImg }}
{{ hNewsCap }}
{{ hLbYear }} · {{ hLbKicker }}
{{ hLbFx }}
{{ hLbVid }}
{{ hLbWork }}by {{ hLbArtist }}
SOURCE · BITxBIT Whitepaper, §2–5, and the sources listed there. ASCII illustrations are original interpretations.
WHITEPAPER · OCT 6, 2026 · @DCLAW

{{ fiTitle }}

{{ s.n }}

{{ s.title }}

{{ g.t }}{{ g.t }}{{ g.t }}{{ g.t }}

{{ b.t }}

>{{ g.t }}{{ g.t }}{{ g.t }}{{ g.t }}
{{ h.t }}
{{ g.t }}{{ g.t }}{{ g.t }}{{ g.t }}

This whitepaper describes intended protocol behaviour and may change before deployment.

/staking

Soft stake: sign once, Frames stay in your wallet and earn 8% of every fee, weighted by byte count. Listing, selling or transferring a Frame unstakes it and forfeits unclaimed rewards — claim first.

STAKED BYTES
{{ stBytes }}
REWARDS · ETH
{{ stEth }}
REWARDS · BYTE
{{ stByte }}
{{ stLogNow }}
YOUR NFTs{{ stCountLbl }}
{{ r.str }}
#{{ r.idp }}{{ r.status }}
{{ r.bytes }} BYTES · {{ r.eth }} ETH · {{ r.byte }} BYTE
> No Frames in this wallet. Mint one first.
// ME

{{ pfName }}

{{ pfUrl }}
FRAMES
{{ meFrames }}
BYTE ERC-20
{{ byteTokFmt }}
BYTE NFT
{{ byteNftFmt }}
COLLECTIONS
// {{ c.name }}{{ c.n }} PIECES
Empty collection.
OWNED
INSCRIPTION HISTORY
> #{{ h.idp }} · +{{ h.n }} cells
> nothing written yet. open /studio.
BURN HISTORY
> #{{ h.idp }} burned · +{{ h.n }} BYTE
> no burns.