GM PUNK #{tokenId} — renders as "GM PUNK #42" for the holder of token #42
_0___0_ — six blank spaces in a row (visual pattern for eyes)
Char counter shows typedChars + prefixLength so invisible prefixes are accounted for. Max length: 40 (main contract) or 128 (mob-stash contract).
Update #:
Delete #:
#
Message
🚧 Contraband Punk Mob-Stash — Not Yet Deployed
The Mob-Stash contract has not been deployed to mainnet yet. All mobstash-related admin controls (mob-stash messages, mob-stash JS code, trusted devs) are hidden until scripts/deploy-mobstash.js is run against mainnet and JS/contractConfig-ERC721.js is updated with the new mainnet mob-stash address.
CONTRABAND PUNK MOB-STASH-CONTRACT PORTAL
Contract Status: Loading...
When main contract messages are full/disabled, minter messages route to this mob-stash contract.
Delete Mob-Stash Message for Token ID:
Mob-Stash-Contract's Owner Messages
-These messages will be stored on the mob-stash contract (no gas ceiling), will be visible on this website, but NOT on OpenSea/MetaMask/Etherscan
NFT viewers — as those only read the main contract's tokenURI().
Mob-Stash Owner Messages: Loading...
Add:
0/128
SPECIAL FORMATTING CHARS
Default mode is Typewriter (character-by-character). The prefixes below opt into other modes/effects.
CHAR
WHERE
EFFECT
_
anywhere
Renders as a blank space (e.g. _0___0_ for eyes)
*
prefix
Italic text
>
prefix
Forces scrolling mode (horizontal scroll)
^U / ^D / ^V / ^H / ^X
prefix
Exit anim: Up / Down / split-Vertical / split-Horizontal / eXplode
P+number
mid-message
Pause previous word N seconds (e.g. P2, P0.5). Pause code itself is invisible.
{tokenId}
anywhere
Replaced at render time with the viewer's token ID
Prefix order when stacking:* (italic) → ^X (exit effect) → > (scrolling) → message text
Examples:
*^V>HELLO WORLD — italic + split-vertical exit + scrolling
GM PUNK #{tokenId} — renders as "GM PUNK #42" for the holder of token #42
_0___0_ — six blank spaces in a row (visual pattern for eyes)
Char counter shows typedChars + prefixLength so invisible prefixes are accounted for. Max length: 40 (main contract) or 128 (mob-stash contract).
Update #:
Delete #:
#
Message
Mob-Stash-Contract's Javascript Plug-In Code Parts
Additional plugin JavaScript stored on the Mob-Stash contract (no gas ceiling, no per-entry size cap). NOT visible on OpenSea/MetaMask/Etherscan — only rendered when the NFT is viewed on this website (frontend integration pending).
Mob-Stash JS Code Parts: Loading...
Add New Code Snippet
Enter your new JS code (no size limit):
Update Existing Code Snippet
Index #:
New JS code (will overwrite the entry at that index):
Remove Existing Code Snippet
Index #:
#
Size
Code preview (first 200 chars)
Submitted By
Trusted Devs
Whitelisted wallet addresses that can submit Mob-Stash JS code directly (no PR review). Can be revoked at any time. The owner retains full update/remove rights on all submitted code.
Trusted Devs: Loading...
Grant or Revoke Trust
Wallet address (0x...):
#
Wallet address
Status
SET METADATA's "DESCRIPTION" FIELD for ALL NFTs
Current: Loading...
Supports Markdown: **bold**, *italic*, [links](url), \n for line breaks. Double quotes must be escaped as \" or they will break the JSON metadata.
OWNER MINTING (Airdrops/Reserves)
To Address:
Amount:
MEMBERSHIP ("GATE") SETTINGS
(Lets me set the address of the PKProps Contract when it's ready!)
Membership Contract Address: Loading...
Contract:
Membership NFT Required in order to Mint:
(Currently set to: Loading...)
GET TOKEN HOLDERS (can be used to create potential future Allowlist...)
Token ID
Owner Address
MY ON-CHAIN JAVASCRIPT
This is the main text-animation JS code that powers every NFT. It's uploaded at deploy time via the
"upload-all-onchain.js" file.
-This code is split into TWO PARTS due to gas limits (it's a LOT of code), but it's one continuous codebase.
-To completely erase it - which I probably don't WANT to do (it'd be a "NUCLEAR OPTION"), I can simply submit EMPTY TEXT into the textarea below.
-To replace it, I can paste NEW code into the textarea below.
PART 1
PART 2
ADDITIONAL JS SNIPPETS (Post-Deployment)
These are extra JS snippets that can be added/appended onto the
core JS code above (Part 1 + Part 2).
-I can use these to add new interactive features, sounds, Easter eggs, etc. without replacing the core animation.
-Each snippet is stored separately in a "CODE-SNIPPETS-ARRAY" that already exists in the Contract. The Array is indexed starting from 0.
Snippets currently stored on-chain: Loading...
ADDING or UPDATING JS CODE SNIPPETS1. ADDING new JS Code Snippet:
2. UPDATING existing code-snippet at Index:
Paste new code in the textarea above, enter the snippet index, then click Update to replace it.
#
Code Preview
Size
View
Action
(clears all code snippets from the 'additionalJSCodePartsArray'!)
IMAGE URLs
Set the image URLs displayed alongside the punk animation. Landscape image appears on the left side, portrait image appears on top.
Store on Arweave or IPFS for permanence.
CURRENT Left (Landscape): Loading...
NEW Left Side URL:
Top (Portrait): Loading...
NEW Top Side URL:
THE PUNK SVG + COLOR PALETTES CODE - ON-CHAIN ASSETS
Replace non-JS assets stored on-chain. These are heavy operations — typically done via deployment scripts, but available here for emergency updates.
PUNK SVG
Replace the punk SVG artwork stored on-chain. This is the raw SVG data rendered inside the animation.
PALETTE CODE
Replace the JavaScript code that generates background color palettes. This code runs inside the animation to produce palette colors.
->CAN ALSO SUBMIT "" (empty text) to DELETE any previously added Palette code!!!
PALETTE NAMES
Set the display names for each background palette (comma-separated). These names are shown to users when customizing their NFT's background.
WITHDRAW FUNDS
Contract Balance: Loading...
JS Code Snippet #0
Size: 0 bytes
Connect Wallet
⚠ MetaMask on iOS is unreliable.
We recommend Trust Wallet, Rainbow, or Coinbase Wallet instead — or use MetaMask on desktop.
Processing...
Please confirm in your wallet
✅
Minting Successful!
Your NFT has been minted successfully.
🎉 Congratulations! 🎉
You are now the proud owner of Contraband Punk #0
📸 PICK YOUR FRAME, THEN CAPTURE
Tap PAUSE to freeze the animation, then use STEP to advance frame-by-frame until you find the perfect moment. Tap CAPTURE to download a PNG of the current frame.
Animation: PLAYING
Message customization is currently disabled.
Customize your Contraband Punk
CHOOSE WHICH NFT TO Customize:
[ Zoomed-In Preview ]
Enter your new custom text-message: (max 40 chars)
█0/40
Choose Animation Style:
Exit Effect (last word):
YOUR CURRENT SETUP
Loading…
PREVIEW
INSTALL NEW APPS INTO YOUR VR-GLASSES!
Choose from the list of Apps & Plugins below.
Tap TRY IT to preview a plugin in the VR-Glasses.
Use the dropdown menu to INSTALL it into your chosen Police-Cap button.
Loading plugins from GitHub…
❌
Minting Failed
An error occurred during minting.
⚠ MESSAGE BUDGET WARNING ⚠
GOAL: make sure tokenURI's metadata doesn't CRASH OpenSea!!!
SOLUTION: route user-messages to the "MESSAGES" contract!
Here's how much space I have left for text-messages in the MAIN contract: