Stable Diffusion は、GPU を利用した画像生成 AI の中でも最も有名なプロダクトだと思います。Stable Diffusion の利用者は一般的にまず GPU を準備し、そこで環境を構築してから画像生成を行うのですが、今回は Stability AI(Stable Diffusion の開発元)の用意している API を利用して、塗り絵の自動生成を作ってみました。
塗り絵 自動生成: https://color-painting.vercel.app/

子どもたちのために、塗り絵を自動生成するサービスです。この記事では、どのようにこのアプリを作ったのか簡単に紹介しております。コードは全て JavaScript です。
ソースコードも github で公開しています。Stability AI Developer Platform, Vercel, Google reCAPTCHA に依存しています。
https://github.com/tkihira/color_painting
なお免責事項として、私は Stablity AI Japan 社には仲の良い友人が多数おりますが、このブログを公開するにあたり Stability AI 社からの金銭授与ならびにクレジット授与は一切ありません。 また、AI の業界は変化が激しいので、ここに書かれている内容はすぐに時代遅れになる でしょう。提供されている機能や料金などは、必ず自分でお調べ頂くようにお願いします。
JavaScript において、特に苦手とする人が多い印象のある Promise ですが、await と async の文法が導入されたことで、Promise の仕様を深く理解しなくても非同期処理を自然に書けるようになってきたのではないかと思います。
極論ですが、JavaScript の非同期処理は
asyncawaitnew Promiseのみで、(ほぼ)全て表現可能です。特別な理由がない限り then を使わないようにしましょう、ということを周知するのがこの記事の目的です。
なお本記事では Promise の rejected の状態についてほとんど解説しておりません。基本を理解したら、別記事でぜひ学んでみてください。
"Maximum call stack size exceeded" というエラーに関する解説を書きます。JavaScript を前提に解説しております。
Uncaught RangeError: Maximum call stack size exceeded
これは、関数が何度も深く深く呼ばれてしまった場合に出るエラーです。
大抵は、間違って自分自身の関数を呼んでしまった、もしくは再帰の終了条件をミスった場合に発生します。 ここに検索で来た方は、自分自身を呼んでいたり、関数同士が循環的に呼びあっていたりするミスを犯していないか確認してください 。
図にすると、こんな感じです

ちなみに、関数呼び出しがなければこのエラーは発生しません。ただの無限ループでは決して発生しないエラーです。以下、解説を書きます。
先日、次のような Tweet を見かけました
TIL I discovered that TensorFlow.js uses an interesting trick to sniff your CPU architecture in WebAssembly. pic.twitter.com/LVyywIM48I
— Robert Knight (@robknight_) January 4, 2023
面白かったので、なぜこうなるのかの解説と、ついでにこのテクニックを使った JIT 検知方法などについて紹介します。
2023 年、あけましておめでとうございます!私は元旦に次のようなオリジナル・パズルを出しました。

上の例のように、数字の合間に四則演算(+−×÷)や括弧を入れることで、2023 を作ってください。
オリジナルツイートはこちらです。この記事では、JavaScript によるこのクイズの解き方をご紹介します。