Why Is NFT Art So Ugly?

I came across this entertaining essay about NFTs (digital certificates of authenticity traded in a speculative asset bubble, aka "non-fungible tokens"), not from a financial, technological or environmental perspective, but instead from an art-criticism perspective.

As soon as you actually try to talk about this art as art the whole thing sort of falls apart, it just absolutely cannot stand up to the scrutiny. Doing so is about as cringy for the writer and the reader as it is for the viewer of the art itself, which I have to think is why the entire art world seems committed to talking only about the technology, the transmission mechanism, the great great value, all the swirling bullshit AROUND NFTs rather than, god forbid, the amateurish nonsense itself.

Plenty of social and environmental issues with NFTs too, of course, but those have been discussed to death by people more knowledgeable than me.

Edit: the follow-up essay "Why is NFT art so lazy?" is also good, focussing more on procgen in and out of NFTs.

How to link to a specific scene in a Hype document

If you've made a multi-scene Hype document which is hosted online as a web page, you can link directly to a named scene in that document using this handy script:

function check_for_deeplinks(hypeDocument, element, event) {
	/*
	Allows "deep" linking from an external page into a specific scene in a Tumult Hype document.
	To use, put this on the first frame of the first scene in the Hype document.
	Then, set the link url to `my-hype-document.html#my-scene-name`, to go to the scene named 
	"my-scene-name".
	*/

	// Look for a hash in the url
	var hash = window.location.hash.substring(1);
	
	// Once the hash is found, remove it from the url so you can return to the first scene again
	// in future without redirecting again.
	history.pushState("", document.title, window.location.pathname);
	
	// Go through each scene to find the one whose name matches the hash
	for(var i = 0; i < hypeDocument.sceneNames().length; i++) {
		if(hypeDocument.sceneNames()[i] == hash) {
			// Go to the scene once you've found it
			hypeDocument.showSceneNamed(hash);
			break;
		}
	}
}

[gist]