Murakami’s project has suffered in the wider crypto-economy shake-up.
Amy Castor, June 15, 2022
Takashi Murakami is one of the few fine artists who managed to make a successful crossover to the NFT space. 
He was first inspired to launch a collection in spring 2021, after seeing Christie’s auction off a Beeple NFT for $69 million in crypto. The event kicked off a global NFT mania, and the next few months were prime time to launch an NFT collection, for those who jumped at the right time.
Unfortunately, Murakami’s timing was terrible, and he completely missed the NFT boom. After spending a year fine-tuning the technical details of the project, he launched it right before the 2022 crypto crash. 
On June 8, a seemingly disheartened Murakami issued an apology on Twitter: “Dear holders of http://Murakami.Flowers, I appreciate your continuing patronage, although the project’s floor price and transaction prices remain stagnant. I am very sorry,” he said.
The cheapest Murakami.Flower NFT is now 2 ETH ($2,200, at current value) on OpenSea. During a false start over a year ago, he was getting bids of upwards of $260,000. That’s when he decided to withdraw the project and mull things over a bit more. 
Rather than berating him for the long delay in launching the project or the price tumble, his fans stood by him. One Twitter user wrote: “don’t apologize for how the market acts, not in your control.” 
“It’s not your art or anything you’ve done. It’s the market. Nothing to be sorry for! Just keep doing you!” another said
One fan cheekily wrote: “Please give it another 30 years. I’ll be gone from this world and the true value of my NFT project will become absolutely clear.”
Murakami did not respond to a request for comment from Artnet News. 
A gallery-goer looks on at the opening of Takashi Murakami’s “An Arrow Through History.” Courtesy of the artist and Gagosian. Photo: Yvonne Tnt.
The Japanese artist launched his pixilated flower NFTs to a patiently waiting base of fans last month. The series debuted with an average price of 9.89 ETH. But the NFT market was cooling, and the crypto skies were already darkening. 
In early May, the Wall Street Journal reported the NFT market had flatlined, and by early June, Bitcoin had lost over 60 percent of its value from its November record, pulling down the rest of the crypto and NFT markets along with it.  
Murakami’s slackened pace was a big part of the problem. A few weeks after first announcing his NFT project, he dropped 108 NFTs—out of a collection of 11,664 pixelated flowers, represented by tokens on the Ethereum blockchain—on OpenSea.
“I’m groping in the dark, so I’m sure I will make many mistakes, but please bear with me,” he wrote prophetically on Instagram at the time
Things were looking good. The first “Murakami.Flowers” NFT, titled #0000 Murakami.Flower immediately attracted a bid of 144 ether, or about $260,395.
But rather than stay the course, Murakami got cold feet. Less than two weeks later, the artist withdrew the listing and announced he would postpone the much-anticipated NFT project.
He wanted to better understand the technology. Rather than rely on OpenSea to list his work, he wanted to make his own smart contract to maintain the independence of the project in the future.  
He also wanted to wrap his mind around Web 3.0. “It took a long time for me to get this part installed in my mind,” he told Artnet News last month. 
The delay cost him at a time when he couldn’t spare it: the NFT project presented a financial opportunity for Murakami, who was coming off a bad year. Covid had stranded him in Japan through 2020. In July of that year, he declared his company, Kaikai Kiki, was on brink of bankruptcy. A long-planned gallery show was postponed, along with museum shows. His film, Jellyfish Eyes Part 2: Mahashankh, was canceled.  
Then things started to look up for a while. In November, Murakami teamed up with RTFKT to release a series of 20,000 3D profile pictures called Clone X at a price of 2 ETH each (about $4,000) that quickly sold out. By mid-May, the total volume traded stood at 98,000 ETH, or $41 million, with the floor price at 13.49 ETH ($28,134 at the time). Today, the floor price stands at 8.98 ETH ($11,038).
Following that successful collaboration, Murakami finally announced the release of Murakami.Flowers in May 2022. The project even inspired part of his rescheduled show at Gagosian, where he presented physical paintings and sculptures based on his Murakami.Flowers and Clone X NFT series.
And despite the crash, Murakami seems committed to staying in the game. On June 14, he released a new line of NFTs called Lucky Cat Coin Bank, pixelated versions of the popular Japanese Maneki-neko figurine, which is designed to bring luck to its owner. Its floor price is currently 0.74 ETH ($1,111).
If Murakami has learned any valuable lessons from all this, one might be that the entire crypto space is a Jenga stack of interconnected time bombs. Enter at your own risk.

By Sarah Cascone, 18 hours ago
By Lisa Schiff, 20 hours ago
©2022 Artnet Worldwide Corporation. All Rights Reserved.var w = Math.max(document.documentElement.clientWidth, window.innerWidth || 0),
h = Math.max(document.documentElement.clientHeight, window.innerHeight || 0),
pagetype = document.querySelector(‘meta[property=”og:type”]’).getAttribute(“content”),
pagetypeurl = document.URL,
pagetypeforce = pagetypeurl.substr(pagetypeurl.length – 3);
isnewsletter = pagetypeurl.includes(“?page_1”);
w = pagetype + 20 * Math.round(w / 20), h = pagetype + 20 * Math.round(h / 20), googletag.cmd.push(function() {
googletag.pubads().setTargeting(“width”, w), googletag.pubads().setTargeting(“height”, h), 1 == isnewsletter && googletag.pubads().setTargeting(“isfirstpage”, [‘Y’, pagetypeforce] )
(function defernl() {
if (window.jQuery) {
if (jQuery(window).width() > 619) {
setTimeout(function() {

var cookieSettings = {
recentlyShown: {
expiration_minutes: 5
signedUp: {
expiration_days: 14
closedSignupBar: {
expiration_days: 5

var generalSettings = {
loadFontAwesome: false

if (!window.jQuery) loadJQuery();
var $ = window.jQuery;

function addCss(fileName) {
var head = document.head
, link = document.createElement(‘link’);

link.type = ‘text/css’;
link.rel = ‘stylesheet’;
link.href = fileName;


function appendNewsletterSignup() {
var signup =

+ ‘



var paywallPagesRegex = /^/subscribe|subscribe-confirm|my-account(/|$)/;

function initNewsletterSignup() {
// don’t show it on paywall-related pages where the user might be in the process
// of subscribing, or managing their account
if (paywallPagesRegex.test(window.location.pathname)) {

// Append ouibounce to page
var ouibounceScript = ”;

// Add animation css

if (generalSettings.loadFontAwesome) {

// Check if ouibounce exist before calling ouibounce
var initOuibounce = setInterval(function() {
if (typeof ouibounce !== ‘undefined’) {

var $modal = $(‘#ouibounce-modal’);
SignupForm.init($modal.find(‘form’), function onSuccess() {
//hide form fields and show thank-you message

setNewsletterCookie(‘signedUp’, 1);

//after successful signup, hide the signup bar after 5 seconds
setTimeout(function() {
}, 5000);

// Handler for close signup button
$(‘body’).on( ‘click’, ‘.close-signup’, function(){
setNewsletterCookie(‘closedSignupBar’, 1);

ouibounceAPIaccess = ouibounce(
$modal[0], {
aggressive: true,
sensitivity: 50,
callback: function() {

}, 100);

function slideInModal(upOrDown) {
.removeClass(‘slideOutDown slideOutUp’)
.addClass( ‘slideIn’ + upOrDown );

setNewsletterCookie(‘recentlyShown’, 1);

function setNewsletterCookie(cookieName, value) {
var settings = cookieSettings[cookieName];
var expirationMinutes = settings.expiration_minutes;
if (!expirationMinutes) {
expirationMinutes = daysToMinutes(settings.expiration_days);
setCookie(cookieName, value, expirationMinutes);

function daysToMinutes(numDays) {
return numDays * 24 * 60;

* Generic setCookie() method, used by setNewsletterCookie().
* There is probably no need to call this directly – use setNewsletterCookie().
function setCookie(cname, cvalue, expMinutes, prefix) {
//default prefix is ‘artnet_newsletter_’
if (prefix == undefined) {
prefix = ‘artnet_newsletter_’;
var d = new Date();
d.setTime(d.getTime() + (expMinutes*60*1000));
var expires = “expires=”+d.toUTCString();

//console.log(prefix + cname + “=” + cvalue + “;” + expires + “;path=/”);
document.cookie = prefix + cname + “=” + cvalue + “;” + expires + “;path=/”;

function getCookie(cname, prefix) {
//default prefix is ‘artnet_newsletter_’
if (prefix == undefined) {
prefix = ‘artnet_newsletter_’;
var name = prefix + cname + “=”;
var ca = document.cookie.split(‘;’);
for(var i = 0; i <ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') {
c = c.substring(1);
if (c.indexOf(name) == 0) {
return c.substring(name.length,c.length);
return "";

function closeSignupBar() {
var $modal = $('#ouibounce-modal');
$modal.addClass( $modal.hasClass('slideInUp') ? 'slideOutDown': 'slideOutUp' );

function loadJQuery() {
var script = document.createElement('script');
script.src = "";
script.integrity = "sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=";
script.crossorigin = "anonymous";

function checkCookies() {
//if any of these cookies are found, we don't show the modal.
var cookieNames = ['recentlyShown', 'signedUp', 'closedSignupBar','signup_cookie'];
var i = cookieNames.length,
found = false;
while (i–) {
if (getCookie(cookieNames[i]).length) {
found = true;

if (!found) {

var SignupForm = {
regex: {
email: /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/

// Init – Anything you want to happen onLoad (usually event bindings)
// ——————————————————————-
init: function (formElement, onSuccess) {
var ctx = this;
if (!onSuccess) {
throw Error('onSuccess callback is required');

var $form = $(formElement);

var $email = $form.find('.signup-email');
var valid = ctx.validate( $form, $email);
// Hide the errors
// Submit the form
ctx.submit($form, onSuccess);
} else {
// Focus on the email input box
// Show email validation error and hide other errors

// ===================================================================

// Signup validation
// ——————————————————————-
validate: function( $form, $email ){
var ctx = this;
// Does the email match our regex?
return $email.val() );

// Signup submission
// ——————————————————————-
submit: function($form, onSuccess) {
var ctx = this;
type: $form.attr('method'),
url: $form.attr('action'),
data: JSON.stringify( $form.serializeFormJSON() ),
// dataType: 'json',
contentType: 'application/json; charset=UTF-8',
crossDomain: true,
timeout: 10000
.done(function(data, textStatus, jqXHR) {
.fail(function(jqXHR, textStatus){
// Show signup failure error and hide other errors

// Extends jQuery with a function to serialize to JSON
// ——————————————————————-
customSerializer: function(){
$.fn.serializeFormJSON = function () {
var o = {};
var a = this.serializeArray();
$.each(a, function () {
if (o[]) {
if (!o[].push) {
o[] = [o[]];
o[].push(this.value || '');
} else {
o[] = this.value || '';
return o;

//show automatically after delay
var $modal = $('#ouibounce-modal');
//if there are cookies indicating that we shouldn't show the signup bar, then the modal won't have been added to the page
//and we can just return here.
if (!$modal.length) {
//don't run this function if the user has already triggered the modal by leaving the viewport
if ($modal.hasClass('slideInDown')) return;

//position at bottom of screen
top: 'auto',
bottom: 0


},20000); //20 seconds

$(function() {

}, 7500);
} else {
setTimeout(function() { defernl() }, 250);