タグ: 画像生成

  • 【超入門】Stability AI API の革新的機能(1)Edit機能からInpaintとOutpaintを便利に使おう!

    こんにちは、AICU media編集部です。ライターのRUNO.がお送りします!

    今回は、Stability AI API Guideの「革新的機能紹介」!
    全4回に分けてお送りします!

      おさらい:プロンプトの文法

      まずはプロンプトの基礎から始めたい!という場合は、
      合わせてこちらの記事をご覧ください!

      「プロンプトの文法」編で、こんなことがわかる!

      • Stability AI APIとは?
      • Stability AI APIの種類と特徴・構成
      • プロンプトの文法基礎
      • [機能紹介] Generate APIとは?
      • [機能紹介] Generate APIよりUpscale機能のデモ

      Stability AI APIの種類と特徴・構成

      「プロンプトの文法」編でもご紹介したように、Stability AI APIの画像生成系の機能は2024年8月現在、4つの機能に大別されています。

      • 「Generate」:いわゆる「TextToImage」です
        • プロンプト(テキスト)によって画像生成を行う
        • 現在6つのモデルが提供されている
      • 「Upscale」:高解像度化
        • ベースとなる画像を入力し、そこにプロンプト(テキスト)で指示を追加し画像生成を行う
        • 現在{Creative, Conservative}という2つのモデルが提供されている(加えて、Standardがcoming soonとして予告されている)
      • 「Edit」いわゆるImageToImageです
        • ベースとなる画像を入力し、そこにプロンプト(テキスト)で指示を追加し画像再生成を行う
        • 現在{Search and Replace, Inpaint, Outpaint, Remove Background, Erase Object}5つのモデルが提供されている
      • 「Control」こちらも いわゆる ImageToImage です
        • ベースとなる画像を入力し、そこにプロンプト(テキスト)で指示を追加し画像再生成を行う
        • 現在{Sketch, Structure, Style}3つのモデルが提供されている(加えて、 Recolorがcoming soonとして予告されている)

      https://platform.stability.ai

      今回扱うInpaintとOutpaintは、このうちの「Edit API」に当たります。

      Edit APIとは?

      Edit APIのAPIリファレンスはこちらから確認できます。

      https://platform.stability.ai/docs/api-reference#tag/Edit

      公式のAPIリファレンスによると、
      Edit機能は「既存の画像を編集するためのツール」です。

      2024年8月現在、全部で5つのEdit機能が公開されています。

      • Erase
        • 画像マスクを必要とする機能です
        • 画像マスクを使用して、元画像の汚れや、机の上のアイテム等の不要なオブジェクトを削除します
      • Inpaint
        • 画像マスクを必要とする機能です
        • 画像マスクを使用して、指定された領域を新しいコンテンツで埋めたり置き換えたりすることで、画像をインテリジェントに変更します
      • Outpaint
        • 画像に追加のコンテンツを挿入して、任意の方向のスペースを埋めます
        • 画像内のコンテンツを拡大する他の手段と比較して、
          Outpaint機能は、元の画像が編集された違和感を最小限に抑えます
      • Search and Replace
        • 画像マスクを必要としない、特殊なバージョンの修復機能です
        • 画像マスクの代わりに、search_promptに置換対象をテキストで指定します
        • この機能は、search_promptに指定されたオブジェクトを自動的にセグメント化し、promptで要求されたオブジェクトに置き換えます
      • Remove Background
        • 画像から前景(背景に対して、手前に位置する要素)を正確に分割し、背景を削除します
        • 結果として、前景を残し、背景が透過された状態の画像が得られます

      今回はこのうちの「Inpaint」と「Outpaint」について詳しく取り扱います。

      Inpaint機能とは?

      入力画像の一部の範囲(マスク)を簡易的に指定し、その部分のみを生成して変化させるImageToImage(img2img)の機能です。

      入力画像の背景や細かいパーツなどを後から追加したり、逆に削除することができます。

      公式が提供しているGoogle Colabでは次のように例が紹介されています。

      prompt: artificer of time and space(時間と空間の錬金術師)

      画像
      inpaint前の元画像
      画像
      inpaint後の画像

      このように、マスキングした画像を入力として与え、そこにどのような描画を施すか?をprompt、つまり文字列で与えることによって、新たな画像を生成してくれる、というのがInpaint機能です。

      実際にInpaintを使ってみよう!

      ここからは、公式が提供しているGoogle Colabを使ってデモを行なっていきます。

      このColabへのアクセス、初期設定の方法は「超入門」編の記事を参考にしてください。

      準備:画像のパスの入手方法

      Inpaintでも、このあと紹介するOutpaintでも、この準備が必要になります。

      まずは、画面左側の「ファイルマーク」をクリックします。
      下に示す画像に従って、順番にクリックしていきましょう。

      画像

      次に、Edit対象の画像を選んで、アップロードします。

      少し待つと、この三角マークを押して表示される「content」フォルダの中にアップロードした画像の名前が表示されます。

      画像

      ここから先、「画像のパスをペーストします」という工程が何度も出てくるのですが、ここで得られるパスを入力してくださいね
      (つまり、画像を入力として入れる際には、「Google Colab内のこのファイル部分にアップロード後に得られるパス」を入力してくださいね)。

      これで、Edit機能を利用する準備ができました!

      ステップ1:マスキング前の画像のパスを取得する

      Inpaintの入力項目に、「image」と「mask」があります。

      • image:マスキング前の画像のパスを入力しましょう
      • mask:マスク画像のパスを入力しましょう
      画像

      まずは、元画像のパスを取得しましょう。

      マスクを必要とする機能を使う場合、マスク画像とピクセルがずれた画像を入力したり、本来の画像とは関係のない部分(画像をGoogle Slideなどに貼り付けた場合の余った余白の部分など)を含む画像を入力すると、マスク画像とうまくリンクせずに画像が揺れてしまうことがあります。

      そのため今回は、Google Slideを使って丁寧にマスクをしていきます。

      まず、今回使うinpaint対象の元画像がこちらです。

      画像
      こちらをinpaint機能を使って加工していきます!

      これをGoogle Slideに貼り付け、「背景」を選択し、黒を選択します。

      画像
      画像
      背景色を黒に選択します

      この状態で、ファイル>ダウンロード>png画像 と選択し、画像をダウンロードしましょう。

      画像
      スクリーンショットだとピクセルを確実に合わせるのが困難なので、
      スライドごと画像ダウンロードしましょう

      これで、元画像の画像パスが得られました。
      プロンプトの「image」部分に、今得られた画像パスを入力しましょう。

      ステップ2:マスク画像のパスを取得する

      元画像に、Google Slideの機能を使って白い丸を乗せて、マスクしました。

      これはまだ「マスク画像」ではないので、注意してください。

      画像
      マスキングを施した画像。ただし、「mask」に入れるパスはこの画像のパスではありません

      次に、先ほどと同じように、背景を黒に設定します。
      重要な工程なので、スキップしないようにお願いします。

      背景が黒に設定できたら、元画像を削除し、黒背景とマスクのみが残る状態にしてください。

      画像
      これが「mask」に入れるマスク画像になります!

      ここまで完了したら、ファイル>ダウンロード>png画像 と選択し、画像をダウンロードしましょう。

      画像
      (※再掲)
      スクリーンショットだとピクセルを確実に合わせるのが困難なので、
      スライドごと画像ダウンロードしましょう

      これを先ほど同様に、Colab上にアップロードします。画像のパスを取得できたら、プロンプトの「mask」部分に得られたパスを入力します。

      これで、「image」と「mask」に適切な画像パスが入力できました。

      ステップ3:prompt, negative prompt, seedを指定する

      今回は、元画像のドレスを着た女性がもともと「何も持っていない」ところを、マスクした箇所において「一輪の白い薔薇を持っている」ようにEditを施したいと思います。

      そこで、それぞれ次のように設定します。

      • prompt:holding a red white rose
      • negative prompt:ugly, normal quality
      • seed:39(お好みで)

      ここまでで、必要な設定が完了しました!

      ステップ4:いざ、実行!

      さあ、画像を生成してみましょう。

      得られた画像が、こちら!

      画像
      inpaint後の画像がこちら

      ちゃんと、指定した位置に白薔薇を持ってくれています!うれしい!

      このように、inpaint機能を使えば、
      「あとちょっと、この部分だけ変えたい!」というときに、
      その位置にマスキングを施すことで
      「欲しい位置」に「欲しい修正」を施してくれます。

      他の画像生成APIと組み合わせて使うことで、さらに創作の幅が広がりますね!

      お手軽テクニック:Google Slide上でマスク画像を編集する

      Google Slideは画像編集ソフトではありませんが、このような簡易な塗りつぶしはラインツールやオブジェクトツールで何度でもやり直しできます。マスクに求められる解像度は高くはないので特に影響はありません。

      もちろんWindowsのペイントなどのアプリでも構いませんが、狙った場所に塗りを入れるツールとして非常にお手軽です。

      少し手間が多いですが、丁寧にやることで手戻りも少なく済むので、
      確実な手順を踏むことをおすすめします。

      Outpaint機能とは?

      入力画像を「指定された方向に」「指定された分だけ」新たな絵を生成してくれる、ImageToImage(img2img)の機能です。

      例えば、「入力画像のサイズを変えたいけれど、今の背景に対するメインモチーフの大きさは変えたくない…」というときに大活躍します!

      公式が提供しているGoogle Colabでは次のように例が紹介されています。

      元画像の左(left)に100、右(right)に512新たに生成する、という指定がされています。

      画像
      公式Colabを開いたら最初から入っている例
      画像
      Outpaint前の元画像
      画像
      Outpaint後の生成結果

      このように、元画像と背景のバランスを保ったまま、ある方向に画像を広げてみたいときに非常に便利な機能です。

      実際にOutpaintを使ってみよう!

      ステップ1:元画像のパスを取得する

      今回Outpaint対象とする画像はこちらになります。

      画像
      先ほどInpaintでEditを施した画像を使用します

      こちらをColabのファイルにアップロードし、パスを取得します。
      完了したら、「image」にパスを入力します。

      ステップ2:画像をどのように広げるか指定する

      今回は、上と左右を広げて広く見せることで、より臨場感のある画像に仕上げたいと思います。

      そこで、次のように指定します。

      • left:200
      • right:200
      • up:500
      • down:0

      場所としては「中世のお姫様が住む高級感のあるお屋敷」とします。

      • prompt:a luxurious mansion, medieval, a princess
      • creativity:0.5
      • seed:39

      これで、Outpaintを実行する準備が完了しました。

      ステップ3:いざ、実行!

      得られた画像がこちら!

      画像
      Outpaint後の生成結果がこちら!

      元の画像には存在しなかった「お屋敷の天井」が、元画像に合った雰囲気で生成されました!

      元画像では切れて写っていた、左端に飾ってある花が、白薔薇として生成されているのが面白いですね。これはInpaint機能と掛け合わせてさらに自然に見えるよう修正してもいいポイントですね。

      このように、Outpaint機能を使えば、用途に合わせて画像サイズを変更する、というのが簡単にできます。

      元の画像に写っていない部分を新たに自分で描き足さなくても、

      「こんなふうにしたい」をプロンプトで指定することで実現できてしまうのが、Stability AI APIのパワーですね!

      さいごに

      公式Colabには今回紹介した以外にも多くのAPIが公開されており自由に触ることができます。
      様々なモデルを試し、ぜひ色々なタイプの画像生成にチャレンジしてみてくださいね!

      Stable Diffusionを開発・公開している Stability AI は、HuggingFaceで無償でダウンロード可能な Stable Diffusion をはじめとするオープンモデル以外に「Stability AI API」という有償のAPIも提供しています。高品質で高速、高機能なAPIであり、新しく魅力的な機能もどんどんリリースされているので 開発者向けのAPIガイド として紹介していきたいと思います。

      上記「Stability AI API Guide」noteより

      それぞれのAPIについて解説した「Stability AI API Guide」は
      こちらに随時更新していきますので、ぜひ合わせてご覧ください。

      https://note.com/aicu/n/n4eda1d7ffcdf

      【AICUからビッグなプロダクトのお知らせ!】

      以上の通り、高速・高画質・高機能で、とても便利な「Stability AI API」ですが、こちらに関連してオンライン講座プラットフォーム「Coloso」と一緒に企画した講座「超入門: Stable Diffusionではじめる画像生成AI」が8月23日に公開されます!
      約10時間超えの豊富なカリキュラムで構成されています。

      画像

      今、Colosoで講座の事前通知申請を申請すると6,000円の割引クーポンがもらえるので、お得な特典をお見逃しなく!

      講座内容は主にStable Diffusionと、Stability AI APIを使ってファッションや広告デザインに活用する方法になる予定です。

      画像
      画像

      リアルテイストのかわいいビジュアル満載のやさしい入門ラーニング動画になる予定なので今から楽しみ!

      画像

      講座のカリキュラムが確認できる詳細ページは、
      8月23日に公開される予定ですので、もう少しお待ちください。

      事前通知はこちら>> https://bit.ly/3YGSNda

      最後までお読みいただき、ありがとうございました!


      この記事の続きはこちらから https://note.com/aicu/n/n605c1963f13b

      Originally published at https://note.com on Aug 20, 2024.

    1. ConoHa AI Canvasガチレビュー

      2024年8月1日、「ConoHa by GMO」 が画像生成AIサービス「ConoHa AI Canvas」を開始しました。

      今回は、この「ConoHa AI Canvas」を、利用者視点・画像生成AIの使い手の視点で忖度なしで2万2千字ほどのガチレビューをしていきたいと思います。

        今回のレビュー担当と読み手の設定

        今回のレビュー担当であるAICU AIDX Labは、すでに
        ・ConoHaを使ったVPSは経験済み
        ・Linuxの管理等は自分でできる
        ConoHa VPS GPUサーバーを使用したことがある
        ・Google(GCP), Amazon (AWS)でのGPUインスタンスも構築できる
        ・実際にAUTOMATIC1111を業務的に使っているがコスト面などに課題があると感じている
        ・もちろんGoogle ColabもProで使っているが、AUTOMATIC1111を業務として展開する際にはGoogle側のサービスポリシー変更や突然の停止があるため代替案を考えねばならない…。
        という技術者です。

        読み手としては以下のような方を対象にしております。

        ・VPSでWordpressなどをマネージドサービスで立ち上げられる
        ・AUTOMATIC1111の使用方法は一応わかる
        ・画像生成に詳しく「GPU搭載PCを増強するまでもないな…」というプロシューマー/ホビー用途
        ・もしくは「小規模チームや複数ユーザーが業務的に使う用途」で社内展開を検討する担当者
        ・自分でクラウドGPUのサーバーを維持するのは敷居が高い
        ・ConoHa AI Canvasについては興味がある
        ・実際にアカウント作ったら「いくらぐらいでどれぐらいのことができるのか」疑問……
        …といった方を想定してレポートしております。

        ✨️AUTOMATIC1111の使い方については「SD黄色本」をどうぞ!(宣伝)


        新規アカウント作成の場合

        いますぐ、速く構築したい!というひとは新規アカウントを作成しましょう

        画像
        画像

        電話/SMS認証

        利用にあたって複雑な審査は不要

        ConoHa VPS GPUサーバーでは法人利用、個人利用、本人認証などの審査が必要でしたが、AI Canvasについてはそのような審査は不要だそうです。SMSもしくは電話認証があります。

        画像

        これだけでダッシュボードにたどり着けます!

        既存のConoHaアカウントがある場合

        画像
        画像

        AICU AIDX Labはすでに ConoHa VPS GPUサーバーを使用したことがあるので「ConoHaアカウントをお持ちの方」を選んでみたのですが、結果的にはあまりシンプルではありませんでした。

        支払い情報カードの登録

        結果から言うと、クレジットカード、特に3Dセキュア2.0対応のカードが必要です。楽天カードはいけました。プリペイドカードは注意です。

        https://support.conoha.jp/c/security-3ds/?_ga=2.80313239.109950757.1722495027-668426941.1722335492

        「ご利用のサービスを選んでください」というダッシュボードまでたどり着きましょう。

        画像

        未払がないこと!!

        すでに請求中、未払の案件があると新規作成はできません。
        GPUサーバーの未払があることに気づきました…(すみません)。
        こういうこともあるので『用途ごと、新規でアカウント作成』大事ですね!!

        画像

        未払案件は「決済🔃」のボタンを押すことでConoHaチャージで決済できます(未払は決済しました!すみませんでした!!)。

        ConoHaチャージの利用

        クレジットカード以外の決済方法は、Amazon Pay、コンビニエンスストア、銀行決済(ペイジー)、PayPalが使えます。クレジットカードでの支払いは3Dセキュア2.0対応が必要ですが、ConoHaチャージ自体は、多様な支払いをサポートしていますので未成年でも利用可能と考えます。また、余ったConoHaチャージがあるのであれば、試すにもちょうどよいのでは。

        前払いも可能

        自動引落やConoHaチャージによる後払いではなく、
        いわゆるクレジットカードでの毎月払いのイメージで、多くの利用者はこちらを使うと想像します。
        試しに495円だけチャージしてみる、といった使い方もあるかもしれません(…が前述の通り未払になる可能性も高まりますので注意)。

        画像
        画像

        インスタンスの作成と起動・料金計算

        コントロールパネルからインスタンスの作成と起動を行います。
        契約サービスを選びます。

        いちばん安いのは「エントリー」で495円です。
        これは期間限定とはいえ業界最安値でしょう。

        画像
        画像

        ここでは「おすすめ!」と書かれている「スタンダード」を選んでおきます(あとで「総評」で評価しましょう)。

        画像
        画像

        今回はスタンダードで自動終了時間設定を60分に設定しておきました。
        こういう機能はありがたいですね!

        画像

        だいたい5分かからないぐらいでこの状態になりました。

        画像

        WebUI利用者認証情報の設定

        起動したWebUIは世界中に公開されている状態です。生成ごとにコストが掛かりますので、不特定多数に公開した状態はいろいろなリスクが生まれると考えます。
        もともとのAUTOMATIC1111にもユーザーを設定する機能はありますが、GMOさん側のほうで「WebUI利用者認証情報の設定」という画面が追加開発されたようです。

        画像

        WebUIのログイン画面

        あらかじめ設定したユーザー名とパスワードで利用できます。

        画像

        キター!

        画像

        AUTOMATIC1111バージョンは1.6.0

        下部にバージョン表記があります

        API: version: 1.6.0、python: 3.10.9、xformers: N/A、gradio: 3.41.2、  checkpoint: 6ce0161689、torch: 2.0.1+cu118
        「Created by AUTOMATIC1111 / ConoHa by GMO」とあります。

        モデルはSD1.5です。プロンプトを「1girl」として「Generate」ボタンを右クリックしてを「Generate forever」で動作確認します。
        (これで明示的に指定しない限り永遠に画像を作り続けます)

        画像

        AI Canvasのサイトにはサンプルプロンプトも紹介されています。
        https://www.conoha.jp/ai/canvas/example/

        画像
        画像
        画像
        画像

        機能拡張のインストールが可能

        (多くのWebUI提供サービスで封じられている)
        Extensionsのインストールが可能です。ありがたいですね。

        画像

        処理能力: 連続生成は2.3秒/gen

        SD1.5での「1girl」連続生成は2.3秒/genですね

        複雑なプロンプトも実施してみます。

        1boy, solo, upper body, front view, gentle smile, gentle eyes, (streaked hair), red short hair with light highlight, hoodie, jeans, newest, 1boy, solo, upper body, front view, gentle smile, gentle eyes, (streaked hair), red short hair with light highlight, hoodie, jeans, newest Negative prompt: worst quality, normal quality, ugly,, worst quality, normal quality, ugly, Steps: 20, Sampler: Euler, CFG scale: 7, Seed: 413102864, Size: 512×512, Model hash: 6ce0161689, Model: v1-5-pruned-emaonly, Version: 1.6.0

        Time taken: 2.4 sec.

        A: 1.79 GB, R: 3.41 GB, Sys: 3.7/21.9648 GB (16.8%)

        L4 GPU, Intel(R) Xeon(R) Gold 5318Y CPU @ 2.10GHz

        AUTOMATIC1111下部の「Startup Profile」では起動時間の所要時間を確認できます。

        画像

        AUTOMATIC1111下部の「Startup Profile」では起動時間の所要時間を確認できます。

        画像

        Sysinfoによると、L4 GPU, Intel(R) Xeon(R) Gold 5318Y CPU @ 2.10GHz
        avx命令なども有効になっています。

        {
            "Platform": "Linux-5.15.0-113-generic-x86_64-with-glibc2.31",
            "Python": "3.10.9",
            "Version": "1.6.0",
            "Commit": "<none>",
            "Script path": "/stable-diffusion-webui",
            "Data path": "/stable-diffusion-webui",
            "Extensions dir": "/stable-diffusion-webui/extensions",
            "Checksum": "3253fc9546a1cea4d3b9262670da9f3dd7b418b1a9f25310e13a5afe38253b5c",
            "Commandline": [
                "webui.py",
                "--listen",
                "--port",
                "7860",
                "--enable-insecure-extension-access",
                "--disable-safe-unpickle",
                "--opt-sdp-attention",
                "--opt-channelslast",
                "--theme",
                "dark",
                "--medvram",
                "--gradio-auth-path=/gradio/.gradio-auth",
                "--hide-ui-dir-config",
                "--no-half-vae"
            ],
            "Torch env info": {
                "torch_version": "2.0.1+cu118",
                "is_debug_build": "False",
                "cuda_compiled_version": "11.8",
                "gcc_version": "(Debian 10.2.1-6) 10.2.1 20210110",
                "clang_version": null,
                "cmake_version": "version 3.25.0",
                "os": "Debian GNU/Linux 11 (bullseye) (x86_64)",
                "libc_version": "glibc-2.31",
                "python_version": "3.10.9 (main, Feb  4 2023, 11:55:23) [GCC 10.2.1 20210110] (64-bit runtime)",
                "python_platform": "Linux-5.15.0-113-generic-x86_64-with-glibc2.31",
                "is_cuda_available": "True",
                "cuda_runtime_version": null,
                "cuda_module_loading": "LAZY",
                "nvidia_driver_version": "535.183.01",
                "nvidia_gpu_models": "GPU 0: NVIDIA L4",
                "cudnn_version": null,
                "pip_version": "pip3",
                "pip_packages": [
                    "mypy-extensions==1.0.0",
                    "numpy==1.23.5",
                    "open-clip-torch==2.20.0",
                    "pytorch-lightning==1.9.4",
                    "torch==2.0.1+cu118",
                    "torchdiffeq==0.2.3",
                    "torchmetrics==1.2.0",
                    "torchsde==0.2.5",
                    "torchvision==0.15.2+cu118"
                ],
                "conda_packages": null,
                "hip_compiled_version": "N/A",
                "hip_runtime_version": "N/A",
                "miopen_runtime_version": "N/A",
                "caching_allocator_config": "",
                "is_xnnpack_available": "True",
                "cpu_info": [
                    "Architecture:                       x86_64",
                    "CPU op-mode(s):                     32-bit, 64-bit",
                    "Byte Order:                         Little Endian",
                    "Address sizes:                      46 bits physical, 57 bits virtual",
                    "CPU(s):                             20",
                    "On-line CPU(s) list:                0-19",
                    "Thread(s) per core:                 1",
                    "Core(s) per socket:                 1",
                    "Socket(s):                          20",
                    "NUMA node(s):                       1",
                    "Vendor ID:                          GenuineIntel",
                    "CPU family:                         6",
                    "Model:                              106",
                    "Model name:                         Intel(R) Xeon(R) Gold 5318Y CPU @ 2.10GHz",
                    "Stepping:                           6",
                    "CPU MHz:                            2095.051",
                    "BogoMIPS:                           4190.10",
                    "Virtualization:                     VT-x",
                    "L1d cache:                          640 KiB",
                    "L1i cache:                          640 KiB",
                    "L2 cache:                           80 MiB",
                    "L3 cache:                           320 MiB",
                    "NUMA node0 CPU(s):                  0-19",
                    "Vulnerability Gather data sampling: Unknown: Dependent on hypervisor status",
                    "Vulnerability Itlb multihit:        Not affected",
                    "Vulnerability L1tf:                 Not affected",
                    "Vulnerability Mds:                  Not affected",
                    "Vulnerability Meltdown:             Not affected",
                    "Vulnerability Mmio stale data:      Vulnerable: Clear CPU buffers attempted, no microcode; SMT Host state unknown",
                    "Vulnerability Retbleed:             Not affected",
                    "Vulnerability Spec rstack overflow: Not affected",
                    "Vulnerability Spec store bypass:    Mitigation; Speculative Store Bypass disabled via prctl and seccomp",
                    "Vulnerability Spectre v1:           Mitigation; usercopy/swapgs barriers and __user pointer sanitization",
                    "Vulnerability Spectre v2:           Mitigation; Enhanced IBRS; IBPB conditional; RSB filling; PBRSB-eIBRS SW sequence; BHI Syscall hardening, KVM SW loop",
                    "Vulnerability Srbds:                Not affected",
                    "Vulnerability Tsx async abort:      Mitigation; TSX disabled",
                    "Flags:                              fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology cpuid pni pclmulqdq vmx ssse3 fma cx16 pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves wbnoinvd arat avx512vbmi umip pku ospke avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq la57 rdpid fsrm md_clear arch_capabilities"
                ]
            },
            "Exceptions": [],
            "CPU": {
                "model": "",
                "count logical": 20,
                "count physical": 20
            },
            "RAM": {
                "total": "126GB",
                "used": "6GB",
                "free": "78GB",
                "active": "7GB",
                "inactive": "39GB",
                "buffers": "2GB",
                "cached": "41GB",
                "shared": "22MB"
            },
            "Extensions": [
                {
                    "name": "stable-diffusion-webui-localization-ja_JP",
                    "path": "/stable-diffusion-webui/extensions/stable-diffusion-webui-localization-ja_JP",
                    "version": "d639f8ca",
                    "branch": "main",
                    "remote": "https://github.com/AI-Creators-Society/stable-diffusion-webui-localization-ja_JP"
                }
            ],
            "Inactive extensions": [],
            "Environment": {
                "GRADIO_ANALYTICS_ENABLED": "False"
            },
            "Config": {
                "outdir_samples": "",
                "outdir_txt2img_samples": "/output/txt2img",
                "outdir_img2img_samples": "/output/img2img",
                "outdir_extras_samples": "/output/extras",
                "outdir_grids": "",
                "outdir_txt2img_grids": "/output/txt2img-grids",
                "outdir_img2img_grids": "/output/img2img-grids",
                "outdir_save": "/output/saved",
                "outdir_init_images": "/output/init-images",
                "font": "DejaVuSans.ttf",
                "sd_model_checkpoint": "v1-5-pruned-emaonly.safetensors [6ce0161689]",
                "sd_checkpoint_hash": "6ce0161689b3853acaa03779ec93eafe75a02f4ced659bee03f50797806fa2fa"
            },
            "Startup": {
                "total": 7.647331237792969,
                "records": {
                    "launcher": 0.010724067687988281,
                    "import torch": 2.8648695945739746,
                    "import gradio": 0.6514277458190918,
                    "setup paths": 1.2402830123901367,
                    "import ldm": 0.014907598495483398,
                    "import sgm": 1.3828277587890625e-05,
                    "initialize shared": 0.3266317844390869,
                    "other imports": 0.6456654071807861,
                    "opts onchange": 0.0003814697265625,
                    "setup SD model": 0.006415843963623047,
                    "setup codeformer": 0.10921597480773926,
                    "setup gfpgan": 0.009504556655883789,
                    "set samplers": 5.0067901611328125e-05,
                    "list extensions": 0.0007519721984863281,
                    "restore config state file": 1.33514404296875e-05,
                    "list SD models": 0.03431081771850586,
                    "list localizations": 0.008013725280761719,
                    "load scripts/custom_code.py": 0.047803401947021484,
                    "load scripts/img2imgalt.py": 0.0017917156219482422,
                    "load scripts/loopback.py": 0.001001596450805664,
                    "load scripts/outpainting_mk_2.py": 0.0024428367614746094,
                    "load scripts/poor_mans_outpainting.py": 0.0012700557708740234,
                    "load scripts/postprocessing_codeformer.py": 0.0005180835723876953,
                    "load scripts/postprocessing_gfpgan.py": 0.00044536590576171875,
                    "load scripts/postprocessing_upscale.py": 0.0015022754669189453,
                    "load scripts/prompt_matrix.py": 0.0011546611785888672,
                    "load scripts/prompts_from_file.py": 0.0012383460998535156,
                    "load scripts/refiner.py": 0.0005872249603271484,
                    "load scripts/sd_upscale.py": 0.0009734630584716797,
                    "load scripts/seed.py": 0.0011196136474609375,
                    "load scripts/xyz_grid.py": 0.007689714431762695,
                    "load scripts/bilingual_localization_helper.py": 0.3125584125518799,
                    "load scripts/ldsr_model.py": 0.03952455520629883,
                    "load scripts/lora_script.py": 0.1912364959716797,
                    "load scripts/scunet_model.py": 0.026271343231201172,
                    "load scripts/swinir_model.py": 0.03376197814941406,
                    "load scripts/hotkey_config.py": 0.00037789344787597656,
                    "load scripts/extra_options_section.py": 0.0007958412170410156,
                    "load scripts": 0.6741135120391846,
                    "load upscalers": 0.108856201171875,
                    "refresh VAE": 0.05080389976501465,
                    "refresh textual inversion templates": 8.678436279296875e-05,
                    "scripts list_optimizers": 0.00021529197692871094,
                    "scripts list_unets": 1.33514404296875e-05,
                    "reload hypernetworks": 0.04795503616333008,
                    "initialize extra networks": 0.0044841766357421875,
                    "scripts before_ui_callback": 0.0001342296600341797,
                    "create ui": 0.7404024600982666,
                    "gradio launch": 0.0898442268371582,
                    "add APIs": 0.00691986083984375,
                    "app_started_callback/lora_script.py": 0.0003218650817871094,
                    "app_started_callback": 0.0003368854522705078
                }
            },
            "Packages": [
                "absl-py==2.0.0",
                "accelerate==0.21.0",
                "addict==2.4.0",
                "aenum==3.1.15",
                "aiofiles==23.2.1",
                "aiohttp==3.8.6",
                "aiosignal==1.3.1",
                "altair==5.1.2",
                "antlr4-python3-runtime==4.9.3",
                "anyio==3.7.1",
                "async-timeout==4.0.3",
                "attrs==23.1.0",
                "basicsr==1.4.2",
                "beautifulsoup4==4.12.2",
                "blendmodes==2022",
                "boltons==23.0.0",
                "cachetools==5.3.2",
                "certifi==2022.12.7",
                "charset-normalizer==2.1.1",
                "clean-fid==0.1.35",
                "click==8.1.7",
                "clip==1.0",
                "cmake==3.25.0",
                "contourpy==1.1.1",
                "cycler==0.12.1",
                "deprecation==2.1.0",
                "einops==0.4.1",
                "exceptiongroup==1.1.3",
                "facexlib==0.3.0",
                "fastapi==0.94.0",
                "ffmpy==0.3.1",
                "filelock==3.9.0",
                "filterpy==1.4.5",
                "fonttools==4.43.1",
                "frozenlist==1.4.0",
                "fsspec==2023.10.0",
                "ftfy==6.1.1",
                "future==0.18.3",
                "gdown==4.7.1",
                "gfpgan==1.3.8",
                "gitdb==4.0.11",
                "gitpython==3.1.32",
                "google-auth-oauthlib==1.1.0",
                "google-auth==2.23.3",
                "gradio-client==0.5.0",
                "gradio==3.41.2",
                "grpcio==1.59.0",
                "h11==0.12.0",
                "httpcore==0.15.0",
                "httpx==0.24.1",
                "huggingface-hub==0.18.0",
                "idna==3.4",
                "imageio==2.31.6",
                "importlib-metadata==6.8.0",
                "importlib-resources==6.1.0",
                "inflection==0.5.1",
                "jinja2==3.1.2",
                "jsonmerge==1.8.0",
                "jsonschema-specifications==2023.7.1",
                "jsonschema==4.19.1",
                "kiwisolver==1.4.5",
                "kornia==0.6.7",
                "lark==1.1.2",
                "lazy-loader==0.3",
                "lightning-utilities==0.9.0",
                "lit==15.0.7",
                "llvmlite==0.41.1",
                "lmdb==1.4.1",
                "lpips==0.1.4",
                "markdown==3.5",
                "markupsafe==2.1.2",
                "matplotlib==3.8.0",
                "mpmath==1.3.0",
                "multidict==6.0.4",
                "mypy-extensions==1.0.0",
                "networkx==3.0",
                "numba==0.58.1",
                "numpy==1.23.5",
                "oauthlib==3.2.2",
                "omegaconf==2.2.3",
                "open-clip-torch==2.20.0",
                "opencv-python==4.8.1.78",
                "orjson==3.9.9",
                "packaging==23.2",
                "pandas==2.1.1",
                "piexif==1.1.3",
                "pillow==9.5.0",
                "pip==22.3.1",
                "platformdirs==3.11.0",
                "protobuf==3.20.0",
                "psutil==5.9.5",
                "pyasn1-modules==0.3.0",
                "pyasn1==0.5.0",
                "pydantic==1.10.13",
                "pydub==0.25.1",
                "pyngrok==7.0.0",
                "pyparsing==3.1.1",
                "pyre-extensions==0.0.29",
                "pysocks==1.7.1",
                "python-dateutil==2.8.2",
                "python-multipart==0.0.6",
                "pytorch-lightning==1.9.4",
                "pytz==2023.3.post1",
                "pywavelets==1.4.1",
                "pyyaml==6.0.1",
                "realesrgan==0.3.0",
                "referencing==0.30.2",
                "regex==2023.10.3",
                "requests-oauthlib==1.3.1",
                "requests==2.28.1",
                "resize-right==0.0.2",
                "rpds-py==0.10.6",
                "rsa==4.9",
                "safetensors==0.3.1",
                "scikit-image==0.21.0",
                "scipy==1.11.3",
                "semantic-version==2.10.0",
                "sentencepiece==0.1.99",
                "setuptools==65.5.1",
                "six==1.16.0",
                "smmap==5.0.1",
                "sniffio==1.3.0",
                "soupsieve==2.5",
                "starlette==0.26.1",
                "sympy==1.12",
                "tb-nightly==2.16.0a20231024",
                "tensorboard-data-server==0.7.2",
                "tifffile==2023.9.26",
                "timm==0.9.2",
                "tokenizers==0.13.3",
                "tomesd==0.1.3",
                "tomli==2.0.1",
                "toolz==0.12.0",
                "torch==2.0.1+cu118",
                "torchdiffeq==0.2.3",
                "torchmetrics==1.2.0",
                "torchsde==0.2.5",
                "torchvision==0.15.2+cu118",
                "tqdm==4.66.1",
                "trampoline==0.1.2",
                "transformers==4.30.2",
                "triton==2.0.0",
                "typing-extensions==4.4.0",
                "typing-inspect==0.9.0",
                "tzdata==2023.3",
                "urllib3==1.26.13",
                "uvicorn==0.23.2",
                "wcwidth==0.2.8",
                "websockets==11.0.3",
                "werkzeug==3.0.1",
                "wheel==0.38.4",
                "xformers==0.0.21.dev544",
                "yapf==0.40.2",
                "yarl==1.9.2",
                "zipp==3.17.0"
            ]
        }

        ✨️上記の情報は、AICU AIDX Labが偶然つかんだVPSの情報かもしれません。別の環境を引き当てたひとは是非レポートお願いいたします。

        生成した画像の扱い

        (多くのAUTOMATIC1111提供サービスでは問題になる)生成した画像の扱いですが、ConoHaのファイルマネージャーで一括してダウンロードできます。これは便利かもしれませんね!

        画像

        独自モデルのアップロード

        今回のガチレビューで最大の注目ともいえる「独自モデルのアップロード」を試してみました。
        上記の「ファイルマネージャー」の隣に「アップロード」があり、専用のチュートリアル画面があります。

        画像
        画像
        画像

        AUTOMATIC1111/models/Stable-diffusionディレクトリへのアクセスも簡単

        画像
        画像

        大きなファイルも分割してアップロードしてくれるようです。

        画像

        Animagine XL 3.1をアップロードしてみます。

        いったん手元のPCにダウンロードしたファイルをアップロードしてみます。
        (直接サーバ側にダウンロードさせる方法はなさそうです)

        画像

        アップロード中も画像生成できるので、生成しながらアップロードしましょう(利用時間を節約するためにも…)。

        画像

        だいたい25分ぐらいでアップロードできました。これは接続環境によるかもしれません。

        Animagine XL 3.1でのベンチマーク

        Animagine XL 3.1公式設定に従い、CFG Scale を5~7程度に下げ、サンプリング・ステップを30以下にし、サンプラーとしてオイラー・アンセストラル(Euler a)を使用することをお勧めします。

        https://huggingface.co/cagliostrolab/animagine-xl-3.1

        VRAMは上限は低め

        GPU NVIDIA L4 は VRAMは24GB搭載されているはずです。
        HiRes.fixでSwinIR 4xでを使い2倍の設定、 1024×1024の解像度を2048×2048にしてみます。

        もっと無茶な設定もしてみましたが流石にメモリが足りなくなるようです。
        OutOfMemoryError: CUDA out of memory. Tried to allocate 16.00 GiB (GPU 0; 21.96 GiB total capacity; 11.44 GiB already allocated; 9.10 GiB free; 12.58 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
        Time taken: 34.7 sec.

        A: 12.44 GB, R: 16.74 GB, Sys: 17.0/21.9648 GB (77.5%)

        この設定で予約しようとしたVRAMが16GB。総容量21.96GBですが、PyTorchに11.44GB割り当て済み、9.10GiB空き…よってアロケート(配分)が12.58GBで予約失敗という状態でした。
        より小さいモデルを使うか、面積の小さい画像を生成するか、タイリングなどの多段階の処理で節約するか、というところです。

        まずは1.5倍の1536×1536で再挑戦したところ、問題なくアロケートできました。だいたい1分/genというところです。

        生成結果です。高解像度で素晴らしい…!

        画像

        ✨️アップスケーリングは多様な方法があるので、今回みたいな高解像度を生成しながら様子を見る、という使い方は必ずしも正しくはありません。

        https://note.com/aicu/n/n6d8ddcdf2544

        忘れちゃいけない終了方法

        AI CanvasでのAUTOMATIC1111を利用中はダッシュボードに「WebUIを開く」というボタンが表示されています。

        画像

        AUTOMATIC1111の上部にも(ふだんのAUTOMATIC1111と違い)「WebUIの終了」というボタンが表示されています。

        画像

        こちらを押すことで、明示的に終了させることができます。
        ファイルマネージャーから画像をダウンロードし、念の為、不要になったインスタンスは削除しておきましょう。

        総評:ワークショップ用途であれば最適。

        以上の通り、忖度なしのガチレビューを実施いたしました。
        スペック的にはL4 GPUで、AUTOMATIC1111 1.6.0で問題ないようであれば、モデル追加も機能拡張のインストールも可能なので、カスタマイズ性も特に問題はないという印象を得ました。

        比較対象としては、海外の安めのGPUホスティングサービス、例えばPaperspaceというよりは、国内のGPUホスティングサービスが対象になると考えます。

        あとは Google Colabでしょう。Google Colab Paid Plan の場合はGoogle 最大のメモリを搭載したマシンにアクセス可能で「1ヶ月あたり1,179円」です。

        画像

        Google Colab Proは環境として自由度は高いですが、マネージドサービスの一種であり、共有。L4以外のGPUも選択できますが、GPU環境の利用は優先度設定があり、相応のコンピューティングユニットを消費する形です。

        画像

        さらにAUTOMATIC1111は連続使用が禁止されています。特に連続したサービスとしての使用が禁じられているようで(明示はされていない)、無料アカウントでAUTOMATIC1111を使用していると警告とともに停止します。
        あくまで実験・研究・教育用途と考えましょう。

        https://note.com/aicu/n/n4fcc8c200569

        実験・研究・教育用途なら「エントリー」

        Google Colabと同じような用途、つまり「実験・研究・教育」という用途で、特にPythonノートブックについて学ぶ要素や、AUTOMATIC1111最新の1.10.xが必要ではない用途であれば「エントリー」が良いと考えます。

        AICUのような企業向け・教育向けのワークショップのような用途で使うのであれば、期間限定でも1画像生成あたり2-3秒で提供できるL4環境は魅力的です。

        ✨️ワークショップの実施についてはこちらからお問い合わせください✨️

        https://corp.aicu.ai/ja/pricing

        教育機関、未成年の部活動、公金等の研究費等で「クレジットカードが使えない」といった用途であれば、ConoHaチャージでの精算が選択肢になる可能性がありますね。ちなみにConoHaには学割があるようです。

        https://www.conoha.jp/gakuwari

        業務用途ならストレージで選びたい

        今回は単発ワークショップのような期間限定利用ではなく、小規模チームや複数ユーザーが業務的に使う用途、もしくは「GPU搭載PCを増強するまでもないな…」というプロシューマー/ホビー用途での想定です。「おすすめ!」にしたがって「スタンダード」を選んでみましたが、この期間中、いちばん安いのはやはり「エントリー」で495円です。これまでのセットアップのステップを見てもわかりますが、無料枠の1時間ではモデルのアップロードで半分使い切ってしまいます。

        上のクラスの「スタンダード」と比較計算してみたところ、仮に1時間以上~5時間以下の使用となる場合、495円+3.3円 x 60分 x 5時間で1485円です。つまり5時間ではなく、「6時間/月ぐらい」からがスタンダードに「おすすめ」の利用時間になります。

        注目したいのはストレージです。Google Colabの場合は一時ストレージはColab環境ですが、多くの場合はGoogle Driveのストレージを消費することになります。無料で利用できるかに見えるGoogle Driveの容量ですが、15GBとなると、実際に画像生成AIのモデルをダウンロードしたり、静止生成他画像を保存したりという用途には難しいサイズになります(これは多様な環境でGoogle Colabを使ってきたAICUならではの知見です)。
        結局のところ、Google Oneを追加契約することになり、最低でもベーシックの100GBを250円/月で契約することになります。そうすると、1,179+250=1,429円となり、ConoHa AI Canvasの価格とほぼ変わらない水準になります。

        画像

        またGoogle Oneの場合はGeminiがついてきますので、判断が難しいところです。

        https://note.com/aicu/n/n73e4937bf165

        今回の実験ではスタンダードとエントリーの両方で実験を行いましたが、今回のようなAnimagine XL 3.1を利用した画像生成の例でも13GB程度でした。

        画像

        上手にストレージを節約して使うのであれば、30GB程度で十分なのかもしれませんね。

        API用途では使えないが、GCP/AWSには対抗できる可能性。

        VPSとはいえマネージドサービスなので、セキュリティ対策に心配がないのはありがたいですね。GCPやAWSでの同等のAUTOMATIC1111サーバーをL4で運用する場合、数千円で収まる話ではありませんので、まずはそことは価格競争力があります。

        「Google Colabを許可されない企業におつとめで、審査等が必要ないがクレジットカードで利用できる国内企業」というマーケットはたしかにありそうです。

        次にセキュリティ面です。昔話でありますがshare設定で放置してあるAUTOMATIC1111は危ないですし、Google Colabでのサービス開放が禁じられているのも、このようなトンネルでの放置サーバー利用が危ないという視点もあります。だからこそ、企業内GPU(オンプレミス)での利用はGradioのVPNトンネルを掘る形になりがちで、それによって社内のセキュリティやファイルアクセスを社外に晒す可能性があり、非常に危険なセキュリティホールになります。

        そういった意味で(まだ現時点でこのサービスでは提供されていませんが)クラウド環境におけるAPIでの利用や、非公開の学習モデルやLoRAの運用サーバー、APIサーバーは需要があるかもしれません。現状はAPIのみでの利用は想定されていないようですが、起動時のオプションひとつですし、いちおう認証が作られていますから、そのうちサポートされるかもしれませんね。

        例えばDifyでのStable Diffusionの独自サーバーの利用や、WordPress向けのプラグインでのAPI利用といったサービスがありますので、Stability AIの商用ライセンスとともに検討できるといいかもしれませんね!

        こういった Stability AI関連のシステム構築の話題は SAI@aicu.ai にお問い合わせいただければ幸いです。クラウドも、VPSも、オンプレミスも、APIサービス化もそれぞれ良いところがあります。

        https://j.aicu.ai/ConohaAICanvas

        以上です!なにか間違いがあったらすみません!

        この記事が面白かった、しかもまだConoHaを試していないアナタ!
        こちらのリンクからご契約いただけると、AICUのConoHa利用料の足しになるかもしれません…。無理にとはいいませんが、ね!

        https://www.conoha.jp

        ガチレビュー案件の依頼もお待ちしております!

        Originally published at https://note.com on Aug 4, 2024.

      1. ComfyUIの操作系とショートカット、ノードで「Stable Diffusion」の内部処理を学ぼう

        こんにちわ、AICU media編集部です。
        ComfyUIマスターガイド」シリーズの第2回になります。
        今回は、ComfyUIの基本操作と画像の生成についてご説明をしていきたいとおもいます。

        第1回はこちら

        第2回は、ComfyUIの基本的な操作から、ショートカット、画像の出力までの簡単な流れを解説します。AUTOMATIC1111と違い、完全にグラフィカルなユーザーインターフェースで操作するノードシステムは慣れるまで大変かと思いますが、用語や操作方法に慣れると大変見やすく効率的になります。またここでは、簡単な用語と中で起きている生成AIの処理についても解説していきます。

        ComfyUIの基本操作とUIの名称

        ComfyUI Manager入りのComfyUIが起動したら、まずは基本的な操作方法やユーザーインターフェース(UI)の名称をおさらいしておきましょう。

        ユーザーインターフェース

        画像

        ComfyUIではおもに上のようなグラフキャンバス(GraphCanvas、以下Canvas)上で作業します。以下で説明をする『ノード(node)』と呼ばれる部品を使用して、画像生成を行うためのネットワークを作成していきます。

        Canvasの右にあるメニュー(Menu)では、画像生成(Queue Prompt)のコマンドを投入したり、その他各種設定を行うことができます。

        ノード (node)

        ノード (node) とは、こぶ、結び目、節、という意味ですが、 ネットワーク用語では「結び目」「集合点」といった意味で「ノード」と呼びます。例えばコンピュータネットワークは、点(装置)とそれを結ぶ線(伝送路)で表すことができます。
        ComfyUIにおける画像生成AIはこのようなネットワークの部品で表現されています。

        例えば以下は「プロンプトとネガティブプロンプトを指定して、KSamplerに入力とする」を意味します。

        画像

        ComfyUIではノードシステムを利用して「グラフ」もしくはワークフロー(後述)を構築することで画像生成のネットワークをつくることができます。

        ノードシステムとは、指示を出すノード(点)とその指示を受けるノードをライン(線)で繋げるイメージです。
        複数の点を連結させていくことで、複雑な指示を出すことができ、
        最終的に精密な画像を出力することができます。

        ちなみに、ノードを繋げた一連を『ノードツリー』と呼ぶこともあります。
        (ノードの一連流れが樹と枝葉に似ていることからこのような呼び方が生まれました)

        マウス操作

        左・中ボタンドラッグアンドドロップ:画面の移動
        中央ホイールのスクロール:画面の拡大 / 縮小
        ワークスペース上で右ボタンのクリック:ノードの追加

        左ボタンダブルクリック:ノードの検索

        キーボードショートカット

        上から順によく使うものです、いまはまだわからない用語も多いかもしれませんが、使いながら覚えていくことをおすすめします。

        Ctrl + S : ワークフローの保存
        Ctrl + Enter : 現在のグラフを生成するためにキューに入れる
        グラフとは現在のワークフローのことを指します。
        キュー(queue)とはこれから画像生成を行う待ち列です。
        Ctrl + Shift + Enter : 現在のグラフを生成の最初としてキューに入れる
        いま作業している内容を待ち列の先頭に入れるという意味になります。

        Ctrl+Z:もとに戻す
        Ctrl+Y:操作のやり直し

        Ctrl + O : ワークフローの読み込み
        Ctrl + D : デフォルトのグラフを読み込み

        [ノード操作系]
        Ctrl/Shift + Click : クリックしたノードを選択範囲に追加
        Ctrl + A : すべてのノードを選択
        Delete/Backspace(Windows) : 選択したノードを削除
        Ctrl + Delete/Backspace : 現在のグラフを全削除
        Shift + Drag : 選択した複数のノードを同時に移動
        Alt + C : 選択したノードを折りたたむ/折りたたまない
        Ctrl + M : 選択したノードをミュート/ミュート解除
        Ctrl + B : 選択したノードをバイパス
        (ノードがグラフから削除され、ワイヤが再接続されたように動作)
        Ctrl + C/Ctrl + V : 選択したノードをコピーして貼り付け
        (選択されていないノードの出力への接続は維持されない)
        Ctrl + C/Ctrl + Shift + V : 選択したノードをコピーして貼り付け
        (選択されていないノードの出力から貼り付けたノードの入力への接続を維持)

        [表示系]
        Q : キューの表示を切り替え
        H : 履歴の表示を切り替え
        R :グラフを更新

        Space : カーソルを押しながら移動するとキャンバスが移動


        ComfyUIのワークフローとノード

        ComfyUIで画像生成を実行する前に、基本となるワークフローについて説明をします。ここでは、ComfyUIの起動時に表示されるデフォルトのワークフローを例にとります。Ctrl + Dでいつでも読み込めます。

        画像

        ワークフロー(Workflow)とは

        ワークフローとは、ComfyUIにおいて画像生成プロセスを視覚的に表現したものです。複数のノード(点)を線で接続し、データの流れを示しています。各ノードは特定の処理を担当し、それらを組み合わせることで望む画像を生成します。
        ワークフローはjson形式でテキストファイルとして保存することもできますが、ComfyUIで生成されたPNG画像にも埋め込まれています。

        デフォルトのワークフローの構成

        デフォルトのワークフローは、以下のノード構成になっています。
        この連載では基本的に、左上から右下に向かうようにノードツリーを配置して解説していきます。

        画像
        • Load Checkpoint
          • モデルをロードするノードです。
          • ここでは “v1-5-pruned-emaonly.ckpt” というStable Diffusion 1.5のベースモデルが使用されています。
          • ダウンロード済みであれば他のファイルを選択することができます。
        画像
        • CLIP Text Encode (Prompt)
          • CLIP (Contrastive Language-Image Pretraining)というOpenAIが最初に提案した言語と画像の学習モデルです。
          • テキストプロンプトを「条件付け(Conditioning)」にエンコードします。
          • 2つあり、上部のものがポジティブプロンプト(生成したい内容)、下部のものがネガティブプロンプト(見せたくない要素)を指定します。ノードの種類としては同じものです。
        画像
        • Empty Latent Image
          • 潜在空間(Latent Space)から与える初期画像です。この段階では「サイズだけを持った無の画像」とイメージしておくと良いでしょう。
          • 生成する画像の解像度やバッチサイズ(一度の画像生成で何枚の画像を生成するか)を設定します。
          • ここでは512×512ピクセル、バッチサイズ1が設定されています。
        画像
        • KSampler
          • 実際の画像生成を行うノードです。
          • サンプリング方法、ステップ数、どれだけプロンプトに従うかを指定するCFG(Classifier Free Guidance)、乱数のシードなど、画像生成とその画質に関わる重要なパラメータを設定します。
        画像
        • VAE Decode
          • ここまでの処理は潜在空間での演算なので、最終的に人間が見れる画像(RGBのPNGファイル)に変換するため、VAE(Variational autoencoder; 可変オートエンコーダ)を使って圧縮された潜在表現(latent representation)を実際の画像に変換します。
        画像
        • Save Image
          • 生成された画像を保存します。保存される場所は、”ComfyUI/output”フォルダになります。
          • ファイル名のプレフィックス(前置詞)を設定できます。例えば、プレフィックスに”ComfyUI”を設定した場合、保存される画像のファイル名は”ComfyUI_00001″、”ComfyUI_00002″となります。
        画像

        以上で、ComfyUIの基本的な操作から、ショートカット、画像の出力までの簡単な流れを解説しました。ノードシステムは慣れるまで大変かと思いますが、慣れると大変見やすく効率的になります。また、AUTOMATIC1111と違い、用語の解説とともに触ってみると、中で起きている生成AIの処理がわかりやすくなったかと思います。
        次回はComfyUI Managerやmodelの基本的な使い方をご説明したいと思います。

        画像生成AI「ComfyUI」マスターPlan

        画像

        画像生成AI「Stable Diffusion」特に「ComfyUI」を中心としたプロ向け映像制作・次世代の画像生成を学びたい方に向けたプランです。最新・実用的な記事を優先して、まとめて購読できます。 メンバーシップ掲示板を使った質問も歓迎です。

        • メンバー限定の会員証が発行されます
        • 活動期間に応じたバッジを表示
        • メンバー限定掲示板を閲覧できます
        • メンバー特典記事を閲覧できます
        • メンバー特典マガジンを閲覧できます
        • 動画資料やworkflowといった資料への優先アクセスも予定

        メンバーシップ参加者にはもれなく「AICU Creator Union」へのDiscordリンクをお伝えし、メンバーオンリー掲示板の利用が可能になります。

        https://note.com/aicu/membership/boards/61ab0aa9374e/posts/db2f06cd3487

        もちろん、初月は無料でお試しいただけます!
        毎日新鮮で確かな情報が配信されるAICUメンバーシップ。
        退会率はとても低く、みなさまにご満足いただいております。


        この記事の続きはこちらから https://note.com/aicu/n/nb9657cfc3d8f

        Originally published at https://note.com on Aug 2, 2024.

      2. 【新シリーズ開始】 Google ColabでComfyUIを動かしてみよう!

        「ComfyUIマスターガイド」シリーズの第1回になります。
        第0回はこちら

        ComfyUI ManagerとGoogle Colabではじめる「ComfyUI」

        ComfyUIには様々なインストール、セットアップ方法があります。「SD黄色本」でA1111を学んだ方が、ComfyUIを簡単に試すのであれば、「Stability Matrix」によるインストールが速いかもしれません。
        GPU搭載のWindows11をお持ちの方は「Stability Matrix」公式サイトからインストーラーを使い、A1111と並んで「ComfyUI」をパッケージからインストールするだけで起動できます。

        https://github.com/LykosAI/StabilityMatrix

        より実用的かつシンプルなインストール手順

        このシリーズではAICU特製の Google Colabノートブックを使ってよりシンプルなインストール手順を紹介します(文末)。

        さらに実用的な方法として「ComfyUI Manager」という拡張機能を使用することで、カスタムノードやモデルの管理、ComfyUI本体の更新など、より効率的な運用が可能になります。

        本記事では、ComfyUIの基本的な特徴から、Google Colabでの使用方法、基本的なワークフローの解説、そしてComfyUI Managerの活用方法まで、幅広くカバーしています。AI画像生成に興味がある方、より高度な制御を求めているクリエイターの方々に、ComfyUIの可能性を探っていただければ幸いです。

        1. ComfyUIとは

        ComfyUIは、AI画像生成の世界に革新をもたらした強力かつ柔軟なオープンソースのグラフィカルユーザーインターフェイス(GUI)です。Stable Diffusionをベースにしており、画像生成プロセスを視覚的に構築し、細かく制御することができます。

        https://github.com/comfyanonymous/ComfyUI

        ComfyUIの主要な特徴

        1. ノードベースのインターフェイス:
          • 複雑な画像生成プロセスを視覚的にデザインできます。
          • 各ノードが特定の機能を表し、それらを線で結んでワークフローを作成します。
          • この方式により、初心者でも直感的に操作でき、上級者は複雑な処理を構築できます。
        2. 高度なカスタマイズ性:
          • 生成プロセスの各段階で細かなパラメータ調整が可能です。
          • プロンプト、シード値、サンプリング方法、ステップ数など、あらゆる要素を制御できます。
          • これにより、望む結果を得るための精密な調整が可能になります。
        3. 拡張性と柔軟性:
          • プラグインやカスタムノードを追加することで機能を拡張できます。
          • コミュニティによって開発された多様な拡張機能を利用できます。
          • 必要に応じて独自のノードを作成し、特殊な処理を組み込むことも可能です。
        4. リソース効率:
          • 他のGUIに比べて軽量で、システムリソースの使用が効率的です。
          • これにより、比較的低スペックのマシンでも快適に動作します。
          • Google Colabのような環境でも十分なパフォーマンスを発揮します。
        5. 幅広い互換性:
          • 様々なStable Diffusionモデルに対応しています。
          • LoRA(Low-Rank Adaptation)やControlNetなどの技術もサポートしています。
          • これにより、多様なスタイルや特殊な画像生成が可能になります。
        6. バッチ処理と自動化:
          • 複数の画像を一度に生成するバッチ処理が可能です。
          • ワークフローを保存し、再利用することで作業を効率化できます。
          • これにより、大量の画像生成や実験的な試行が容易になります。
        7. コミュニティサポート:
          • 活発なユーザーコミュニティがあり、情報交換や問題解決が容易です。
          • GitHub上でオープンソースとして開発されているため、最新の機能や改善が継続的に行われています。

        ComfyUIの活用シーン

        ComfyUIは、以下のような幅広い用途で活用されています:

        • アーティストやデザイナー: 独創的なビジュアルアートの制作
        • ゲーム開発者: キャラクターデザインや背景画像の生成
        • 映画・アニメ制作者: コンセプトアートやストーリーボードの作成
        • 研究者: AI画像生成の実験や新しいテクニックの開発
        • 教育者: AI技術と創造性の教育ツールとして
        • ホビースト: 個人的な創作活動や画像生成の探求

        ComfyUIを使いこなすことで、AIアート制作の可能性が大きく広がります。その柔軟性と強力な機能セットにより、初心者から上級者まで、様々なレベルのユーザーが自分のビジョンを実現するためのツールとして活用できます。

        2. ComfyUI Managerとは

        ComfyUI Managerは、ComfyUIの機能を大幅に拡張し、使いやすさを向上させるための強力な拡張機能です。

        https://github.com/ltdrdata/ComfyUI-Manager

        主に以下の機能を提供することで、ComfyUIの管理と拡張を容易にします。

        1. カスタムノードの管理: ComfyUI Managerを使用すると、カスタムノード(拡張機能)のインストール、アンインストール、有効化、無効化を簡単に行うことができます。これにより、ComfyUIの機能を柔軟に拡張し、ワークフローをより高度にカスタマイズすることが可能になります。
        2. モデルの管理: チェックポイントモデル、AIアップスケーラー、VAE、LoRA、ControlNetモデルなど、様々なAIモデルのインストールと管理が可能です。
        3. ComfyUI本体の更新: ComfyUI自体のアップデートも、ComfyUI Managerを通じて行うことができます。
        4. ワークフローの互換性確認: 現在のワークフローに必要な不足ノードを検出し、インストールする機能があります。これにより、他の人が作成したワークフローを簡単に使用できるようになります。
        5. 検索機能: 必要なカスタムノードを簡単に見つけることができる検索機能を提供しています。
        6. バージョン管理: インストールされたカスタムノードのバージョン管理が可能で、最新の状態を保つことができます。

        ComfyUI Managerのインストール後は、ComfyUIのインターフェースに「Manager」ボタンが追加され、そこから各種管理機能にアクセスできるようになります。

        ComfyUI Managerを使用することで、ユーザーはComfyUIの潜在能力を最大限に引き出し、より効率的かつ柔軟な画像生成ワークフローを構築することができます。特に、多様なカスタムノードを簡単に追加・管理できる点は、ComfyUIの利用者にとって非常に有益な機能と言えるでしょう。

        3. Google ColabでのComfyUIの使用準備

        ComfyUIをGoogle Colabで使用するには、ComfyUI ManagerのGitHubページで提供されているGoogle Colabノートブックを利用します。以下の手順に従い、環境構築を行います。

        Google Colabの有料プランへの加入

        Google ColabでStable Diffusionを動作させるには、Colabの有料プランに加入する必要があります。プランにより、使用可能なGPUの種類や、付与されるコンピューティングユニットの量が変わるため、お好みのプランに加入してください。今回は、Colab Proプランに加入します。

        画像

        Notebookのコピー

        ComfyUI-ManagerのGitHubページ(原作)はこちらです。

        https://github.com/ltdrdata/ComfyUI-Manager

        GitHubページには、以下のようにComfyUIおよびComfyUI-ManagerをインストールするためのGoogle ColabのNotebookが提供されています。”click on this link”をクリックすることで、Notebookにアクセスできます。

        画像

        以下、メンバーシップ向けに続きます!

        画像生成AI「ComfyUI」マスター プランをご購読お願いします


        この記事の続きはこちらから https://note.com/aicu/n/ndceebdc12ff4

        Originally published at https://note.com on July 31, 2024.

      3. [新連載] ここからはじめる「ComfyUIマスターガイド」

        【特報です!!】2024年8月からAICU mediaにて集中連載「ComfyUIマスターガイド」がはじまります!

        コンセプト:こんな方に読んでほしい

        ・イラストレーションや漫画だけでなく映像制作に画像生成AIを使いたい
        ・画像生成AI「Stable Diffusion」を業務に活かしていきたい
        ・AUTOMATIC1111は何となく使えるが、ComfyUIに移行したい
        ・いったんゼロから学んで、最新の技術をキャッチアップできるところまで連れて行ってほしい
        ・Pythonのプログラミングとかはわかりません!
        ・高価なVRAM搭載PCを買えないわけではないけど、プロとしてはクラウドやサービスでの利用も当然可能、活用していきたい
        ・どうやったら品質を上げられるのか知りたい
        ・画像生成AIシステム開発の社内PoCをつくりたい、相談したいが、そもそも技術者として広範な知識が必要すぎる
        ・法律だけでなくクリエイターや消費者の倫理など、危ない技術やモデル、使い方における注意点もしっかり教えてほしい
        ・(わかっている人向け情報ではなく)映像系の読み手でもわかるように、環境やセットアップについても丁寧に教えてほしい
        ・内部の技術についても解説してほしい

        配信方式

        無料/有料を含めて様々な方法で配信します!
        ・毎日のnoteでの配信(週3本程度を予定)
        ・メンバーシップ向けの優先配信
        ・noteマガジンでの配信
        ・オウンドメディアでの無料配信
        ・インデックス化による読みやすい体系化
        ・多メディア等による配信(予定…!!)

        配信予定コンテンツ

        (随時更新・変更される可能性もございます)

        1. Google ColabでComfyUIを動かしてみよう!
        2. 操作系とショートカット、ノードで「Stable Diffusion」の内部処理を学ぼう
        3. ゼロからつくるとよく分かる!ComfyUIワークフロー作成で学ぶStable Diffusionの内部動作
        4. ComfyUIカスタムノード導入ガイド! 初心者でも安心のステップバイステップ解説
        5. ComfyUI カスタムノード徹底解説!機能とメリットを理解しよう
        6. ComfyUI設定完全ガイド!(前編)
        7. ComfyUI設定完全ガイド!(後編)
        8. 画像化も可能!ComfyUIワークフロー管理の基礎
        9. ComfyUIでワークフロー大公開!あなたの作品を世界へ発信
        10. ComfyUIで画像を高解像度化!Hires.fix完全ガイド
        11. ComfyUIでのTextToImageを極める!!(1)プロンプトの基本文法
        12. ComfyUIでのTextToImageを極める!!(2)CombineとConcat

        ・Image to Image
        ・ContorolNet
        ・LoRA
        ・アプリケーション開発
        ・画像生成の原理と歴史
        ・AIの倫理と社会
        ……以下続きます……!

        基本的な流れは書籍「画像生成AI Stable Diffusionスタートガイド」のAUTOMATIC1111を踏襲しつつ、A1111からより実用的な画像生成AIのプロフェッショナル/マスターとして体系的な知識を得られる構成になっています。

        豪華なライター陣

        ・ゲストライター Yas さん @earlyfield8612

        生成AIを含む最新テクノロジーの実用化と企業のDXを支援するポノテク株式会社の代表。AICUコラボクリエイターとして技術調査や記事の全般に参加します。電気電子工学専攻、Bond University MBA取得。

        ・エディター はねごろう @hane_desu

        ボーカロイドからゲームCGなど映像系ラインプロデューサーを経験し、AICUではメディアエディター「クリエイティブAIプロマネ」という新しい職業を開拓するAIビジュアルデザインPさんです。映像系のプロフェッショナルの視点から見た「画像生成AIのここがわからん!」、クリエイティブの分野にいつつ、画像生成AIの初心者や中級者にやさしい視点を担保します。

        ・アーティスト 犬沢某 いぬさわばう @InsBow

        働きすぎて肩を壊して絵描きとしての筆を折ってしまったのですが画像生成AIのおかげで最近リハビリ中……という経歴を持ったビジュアルアート/漫画/イラストレーターさん。グラフィックス、挿絵、カバーアートなどで参加します。

        ・AICU media代表 しらいはかせ @o_ob

        画像生成AI「Stable Diffusion」をリリース直後からまいにち研究・開発・発信し続けてきた「つくる人をつくる」AICU mediaの代表。デジタルハリウッド大学大学院特任教授。東京工業大学知能システム工学・博士(工学)、東京工芸大学画像工学専攻、写真工学科。芸術科学会副会長。科学コミュニケーター。画像生成AIの使い手として、学習者やクリエイター、オープンソース開発者にとってわかりやすい解説や視点を「わかるAIを伝える」AICUとしての品質を高く維持・管理して発信しています。

        「noteメンバーシップ」ご参加がオススメ

        生成AIクリエイターユニオン『AICU: AI Creators Union』は、「つくる人をつくる」をビジョンに活動するアメリカのスタートアップ企業「AICU」社が「note」で提供するプロ生成AIクリエイター養成ユニオンです。このユニオンでは、画像生成AIやLLMなど、高速に進化する生成AIの最先端を学びながら、一緒に生成AIの価値を生む仲間を得ます。メンバーは、生成AIに関する最新の知識と技術を自分のペースと興味の深さで追い、それを社会に明確に伝えて価値を生む能力を養うことに焦点を置いています。
        Google Colabで動くGPU不要な環境についても紹介しています。
        AICU社のパートナーである生成AIトップの企業での技術と専門知識や情報にいち早く触れる機会を得られます。プロフェッショナルな環境で学び、実践的なライティング技術、PoC開発、コンテンツ作成のノウハウを習得しましょう。
        プロのクリエイターを目指す学生さんや、個人ブログでの執筆を超え生成AIでの転職や起業を考えるプロフェッショナル志向の方々の参加を歓迎します。もちろん「これから勉強したい」という人々も歓迎です。

        https://note.com/aicu/membership/info

        画像

        新登場: 画像生成AI「ComfyUI」マスターPlan

        画像

        画像生成AI「Stable Diffusion」特に「ComfyUI」を中心としたプロ向け映像制作・次世代の画像生成を学びたい方に向けたプランです。最新・実用的な記事を優先して、まとめて購読できます。 メンバーシップ掲示板を使った質問も歓迎です。

        • メンバー限定の会員証が発行されます
        • 活動期間に応じたバッジを表示
        • メンバー限定掲示板を閲覧できます
        • メンバー特典記事を閲覧できます
        • メンバー特典マガジンを閲覧できます
        • 動画資料やworkflowといった資料への優先アクセスも予定

        ゼロから学ぶ「ComfyUI」マガジン

        https://note.com/aicu/m/md2f2e57c0f3c

        マガジン単体の販売は1件あたり500円を予定しております。
        2件以上読むのであればメンバーシップ参加のほうがお得です!というのもメンバーシップ参加者にはもれなく「AICU Creator Union」へのDiscordリンクをお伝えし、メンバーオンリー掲示板の利用が可能になります。

        https://note.com/aicu/membership/boards/61ab0aa9374e/posts/db2f06cd3487?from=self

        もちろん、初月は無料でお試しいただけます!
        毎日新鮮で確かな情報が配信されるAICUメンバーシップ。
        退会率はとても低く、みなさまにご満足いただいております。

        AICUメンバーシップは「AI Creator Union」つまりお仕事を得やすい?

        メンバー限定の会員証、活動期間に応じたバッジに加えて、以下のような「AIクリエイターユニオン」としてのメリットも可能性があります。

        AICU メンバーシップ向け情報の例

        AIクリエイターユニオンならではのオトクな情報が…
        ・コンテスト情報
        ・編集部からのおしらせ(キャンペーンとか)
        ・ライター依頼(フルリモートワーク)
        ・業務案件
        ・サンプルアートの募集など
        ・人材募集
        などなど

        もちろん、参加するだけでなく、記事へのフィードバックやご貢献、
        Discordでの自己紹介やご反応をよろしくお願いいたします!

        ご参加はこちらから!

        https://note.com/aicu/membership/join

        ↓例えばペイウォールの向こうには「何人の人が参加しているのか」が表示されます↓


        この記事の続きはこちらからhttps://note.com/aicu/n/n876fab5a0736

        Originally published at https://note.com on July 31, 2024.

      4. 「Omost」で画像生成を細かく制御しよう

        「Omost」で画像生成を細かく制御しよう

        Omost(オモスト)とは?

        Omost(オモスト)とは、ControlNetやStable Diffusion WebUI Forge、Foocusの開発者として著名なlllyasviel氏が開始した、新しいオープンソースプロジェクトです。

        https://github.com/lllyasviel/Omost

        Omostは、LLMを利用して、画像生成AIが生成する画像のコーディングをしようという試みで、簡単に言ってしまえば「Omostを使うことで、Stable Diffusionにレイアウト指定をほとんど制御できる」――「ほとんどできる」から、AlmostでOmost…という洒落のようです。

        ご存じの通り、画像生成AIというのは、どんなに厳密なプロンプトを組んだり、ComifyUIを使って緻密なノードを組んだとしても、完全に制御できるものではありません。それはこのOmostを使っても同じことです。そこには「生成AIに共通する入力に対する出力のゆらぎ」のようなものがあります。

        それでもOmostを使うと、それまで偶然に頼ることが多かったtxt2Imgでの画像生成に対して、かなり再現性の高いレイアウトを指定することができるようです。

        lllyasviel氏の過去作「Fooocus」でも多くの内部最適化と品質改善がGPT-2をベースに組み込まれています。

        https://github.com/lllyasviel/Fooocus

        Fooocusで使われている技術詳細はこちら

        https://github.com/lllyasviel/Fooocus?tab=readme-ov-file#tech_list

        書籍「画像生成AI Stable Diffusionスタートガイド」でも、最初の段階でこちらの日本語版を扱っています。

        書籍[画像生成AI Stable Diffusionスタートガイド]

        https://j.aicu.ai/FoooC

        Book-StartGuideSDXL/Fooocus_onColab.ipynb at main · aicuai/Book-StartGuideSDXL

        さて、今回紹介する「Omost」は、より上を目指す、ちょっとマニアックなツールになりますが、幸いなことにHuggingFace Spaceで試すことができます。さっそく使用感を見ていきましょう。

        上手に使えると、こんな高度なポージングをした画像が再現性高く生成できます。

        画像

        Omostを準備する

        Spaceを使う場合

        一番お手軽に使う方法はHuggingFaceのSpaceを利用することです。下のURLからアクセスできます。

        Omost – a Hugging Face Space by lllyasviel

        使ってみた印象では、ちょっと試すぐらいならSpaceを使うとよいと思います。スピードはローカルと変わらないぐらい速いです。

        ローカル環境にインストールする場合

        Omostは、お使いのWindows PCが8GB以上のVRAMを搭載しているNVIDIA製のビデオボードを搭載していれば、ローカル環境で動かすことができます。

        ローカル環境で動かすためのインストールの方法は、Omostのリポジトリより Get Started(https://github.com/lllyasviel/Omost#get-started)より確認してください。
        Omostをインストールする前に、事前に以下の環境が整っていることが必要です。

        • Git for Windows
        • AnacondaのWindowsローカル環境(Python 3.10)
        • CUDA 11.8 もしくは 12.5
        • インストールしたCUDAに対応したPyTorch

        これらがコマンドプロンプトから動作するように、適切にWindowsの環境変数が設定されていることも必要です。

        もし頑張ってインストールする場合には、ChatGPTなどに相談しながらやるとよいでしょう。
        ここではOmostのインストールは終わっているものとして、進めます。

        Omostを使ってみる

        Omostのメイン画面は以下のようなものです。

        レイアウトを指示する

        画像

        画面右下の「Submit」ボタンの横にチャットウィンドウがあります。そこに、欲しいイラストの内容を指定します。この指定は日本語でもいけます。LLMのおかげですね!

        せっかくですので、以下のような面倒くさいイラストを指定してみましょう。

        白い髪のバニーガールの少女が、異次元空間に浮かんでいる開いたドアの中をのぞき込み、ドアの中から光の珠(素晴らしい未来の象徴)を取り出そうとしている。
        少女の表情は好奇心に溢れていつつも、心持ち不安げ。不安げなのは、未来に何が待っているのかまだわからないから。
        異次元空間は真っ暗で、ドアが沢山浮かんでいる。
        少女の表情と仕草をイラストの中心として、ダイナミックな構図で表現すること。
        異次元空間なので、少女が立つ地平線は斜めに傾いている。
        16:9の横長のコンポジションで作画すること。

        画像

        イラストは16:9で指定しているので、左側にある Omostの「Image Diffusion Model」内の Image Width を「1920」と Image Hight も「1080」になるように指定をしておくと、後ほどチェックするのに便利です。

        画像
        画像

        ここまで終わったら、「Submit」ボタンを押して実行します。
        するとその上の「Omost」というウィンドウ内に、延々とCanvasと呼ばれるオブジェクトが書かれていきます。これがOmostが生成AIに与えるイラストのレイアウト指示になっています。

        画像

        画像を生成する

        ここでCanvasの生成が終わったら、左側に「Render the Image!」というボタンが追加されます。このボタンを押すと、今Canvasに設定された画像が続いて生成されます。

        画像
        画像
        画像
        画像

        いくつかサイズも変えて生成してみたところ、大体、白髪のウサギ少女、ドア、オーブが配置されたイラストになります。2枚目が典型的ですね。

        皆さんはうまく生成できましたか?
        生成されたキャンバスの説明の生成も興味深いです。

        AICUではOmostに関してさらなる活用方法を調査中です。
        続報をお楽しみに!

        この記事が面白かったらフォローやいいねをお願いします!

      5. Stable Diffusionの仕組み(入門編)

        Stable Diffusionの仕組み(入門編)

        Stable Diffusionの仕組みについてご存知ですか?
        プロンプトを入れると画像が生成される…その内部を説明できるとかっこいいですよね。
        こちらの講演で使用したスライドを白井CEOから頂いたので一部公開いたします。

        https://note.com/aicu/n/n8d4575bcf026

        画像生成AIの誕生と変遷(2)画像生成技術の歴史年表

        https://note.com/o_ob/n/n971483495ef3

        画像生成AIの誕生と変遷(4) 画像生成AIの2014–2024におきたパラダイムシフト

        https://note.com/o_ob/n/n3c1d8523cf68

        Stable Diffusionの仕組み(入門編)

        CLIPとは画像とテキストの関係だけを学んでいます。
        CLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image

        https://github.com/openai/CLIP

        実はネガティブプロンプトはStable Diffusionが公開されてからAUTOMATIC111で生まれました。

        https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Negative-prompt

        ネガティブプロンプトは、正プロンプトと同じ仕組みでCLIPを持ち、サンプラーが条件付き逆拡散をする際にUNETの左側に入ります。
        画像のLatent Space化はちょうどZIP圧縮のような超圧縮で、フロート列が並んでいるweight&biasです。VAEを使うことで画像に展開できます。

        ImageToImageやControlNetも、基本的にはLatent SpaceでUNETの左側に入ります。

        UNetについて補足

        UNETは元々は医用画像のセグメンテーションタスクのために想定されたが、多くの画像2-画像タスクに再利用されている。畳み込みエンコーダ(ダウンサンプリング)とデコーダ(アップサンプリング)を持つ。

        マルチスケール、マルチ抽象レベルで変調を学習。

        ReLU(Rectified Linear Unit)のことで、max(0, x)のような実装をする。Convolution層ではこの活性化関数を使うことが多い。

        https://deepage.net/deep_learning/2016/11/07/convolutional_neural_network.html

        https://lmb.informatik.uni-freiburg.de/people/ronneber/u-net/

        画像生成AI Stable Diffusion スタートガイドより。

        https://j.aicu.ai/SBXL

        https://j.aicu.ai/SBXL

        Originally published at https://note.com on May 30, 2024.

      6. Fooocus v2.4.0リリース & AICUによるColab無料版で動く日本語UI版も継続メンテナンス実施

        Fooocus v2.4.0リリース & AICUによるColab無料版で動く日本語UI版も継続メンテナンス実施


        midJourneyや nijiJourneyスタイルのカンタン高画質なAI画像生成が行える「Fooocus」の最新版がリリースされました。AICU Inc.が原作そのままに Google Colab (無料版も可) を使って、旧来のv2.3.0も日本語UIで動くようにメンテナンスを実施したのでお知らせします。

        2024年3月24日にリリースされた v.2.3.0 からUI変更に加え、機能面が大きく追加されています。
        https://github.com/lllyasviel/Fooocus/releases/tag/v2.4.0

        https://github.com/lllyasviel/Fooocus/releases/

        v2.4.0動きました。Lightning速いですが、HyperSDはもっと高速です。
        Fooocus v2.4.0

        v2.4.0 最新版リリースノートより

        変更点
        feat: ミラーサイトからの huggingface ファイルのダウンロードをサポート。
        chore: インターポーザーを v3.1 から v4.0 に更新 by @mashb1t in #2717
        feat: ページをリロードせずに UI を再接続するボタンを追加 by @mashb1t in #2727
        feat: オプションのモデルVAE選択を追加 by @mashb1t in #2867
        feat: ランダムスタイルを選択 by @mashb1t in #2855
        feat: アニメを animaPencilXL_v100 から animaPencilXL_v310 に更新 by @mashb1t in #2454
        refactor: 再接続ボタンのラベル名を変更 by @mashb1t in #2893
        feat: 履歴ログに完全な生プロンプトを追加 by @docppp in #1920
        修正: 正しい border radius css プロパティを使用するようにしました by @khanvilkarvishvesh in #2845
        修正: HTMLヘッダでメタタグを閉じないようにした by @e52fa787 in #2740
        機能: uov 画像アップロード時に画像を自動的に記述 by @mashb1t in #1938
        nsfw 画像の検閲を設定とチェックボックスで追加 by @mashb1t in #958
        feat: 手順を揃えるスケジューラーを追加 by @mashb1t in #2905
        lora のインラインプロンプト参照をサポート by @cantor-set in #2323
        feat: sgm_uniform (lcmと同じ)に基づくtcdサンプラーと離散蒸留tcdスケジューラの追加 by @mashb1t in #2907
        feat: 4step LoRA に基づくパフォーマンス Hyper SD を追加 (@mashb1t 氏による) #2812
        修正: HyperSDテスト用に残っていたコードを削除しました。
        feature: nsfw 画像検閲のモデル管理を最適化 by @mashb1t in #2960
        feat: プログレスバーの改善 by @mashb1t in #2962
        feat: インラインローラの最適化 by @mashb1t in #2967
        feat: コードの所有者を @lllyasviel から @mashb1t に変更 by @mashb1t in #2948
        feat: 有効なインラインローラのみを使用し、サブフォルダをサポート by @mashb1t in #2968
        feature: イメージのサイズと比率を読み取り、推奨サイズを与える by @xhoxye in #2971
        feature: ghcr.io 用コンテナイメージのビルドとプッシュ、docker.md の更新、その他関連する修正 by @xynydev in #2805。
        利用可能なイメージを見る
        feat: 行末のデフォルト設定を調整 by @mashb1t in #2991
        feat: image size description の翻訳を追加しました。
        feat: ‘CFG Mimicking from TSNR’ の値をプリセットから読み込む by @Alexdnk in #2990
        feat: ブラシのカラーピッカーを追加 by @mashb1t in #2997
        feat: ほとんどの画像入力フィールドからラベルを削除 by @mashb1t in #2998
        feat: クリップスキップ処理を追加 by @mashb1t in #2999
        feat: UI設定をよりコンパクトに by @Alexdnk and @mashb1t in #2590

        HyperSDのサポート

        https://huggingface.co/ByteDance/Hyper-SD

        ByteDanceによる「Hyper-SD(効率的な画像合成のための軌跡分割整合モデル)」がサポートされました。

        論文 https://arxiv.org/abs/2404.13686

        サンプリングが4ステップという非常に短いステップで高品質な画像が生成されます。

        Google Colabでの起動

        #SD黄色本「画像生成AI Stable Diffusionスタートガイド」の p.13-18でも扱っているとおり、FooocusはGoogle Colabで動作可能です。具体的にはこのようなコードを書けば最新のFooocusを実行することができます。

        !pip install pygit2==1.12.2
        %cd /content
        !git clone https://github.com/lllyasviel/Fooocus.git
        %cd /content/Fooocus
        !python entry_with_update.py --share --always-high-vram
        

        Fooocus 日本語アニメ特化版 j.aicu.ai/FoooC の更新

        AICU Inc.が #SD黄色本 でリリースしたバージョン「Fooocus 日本語アニメ特化版 j.aicu.ai/FoooC」についてもメンテナンスを実施しました。

        原作そのままに Google Colab (無料版も可) を使って、日本語UIで動くようにしたものです。

        配布等は原作のライセンスに従います。

        https://github.com/lllyasviel/Fooocus/blob/main/fooocus_colab.ipynb

        超初心者向け使い方

        ランタイムを実行「▶」を押してしばらくお待ち下さい。 https://….gradio.com のURLが表示されたらそれをクリックして別タブで遊べます。最大72時間有効ですが、途中で切断されたり止まったり、エラーが出た場合は「■」(停止)をしてもう一度「▶」を押してください。

        起動オプション

        このスクリプトではGUIで操作できるスイッチにしてあります。

        このスクリプトでは Google Driveの マイドライブ直下「Fooocus-outputs」に保存されるようにしました。

        • target_drive_dir: /content/gdrive/MyDrive/Fooocus-outputs
        • use_japanese: UIに日本語が表示されます。
        • model_type: anime
        • fixed_version: バージョンを書籍「画像生成AI Stable Diffusion スタートガイド」で紹介した v2.3.1 (e2f9bcb) に固定して実行します

        無料版 Colab での動作について

        このColabはデフォルトでrefinerを無効にすることに注意してください。なぜならColab freeのリソースは比較的限られているからです(そして画像プロンプトのようないくつかの「大きな」機能はfree-tier Colabの切断を引き起こすかもしれません)。フリー版のColabでは、基本的なテキストから画像への変換が常に動作するようにしています。「Image Prompt/画像で指示」は 無料版 Google Colab T4 GPU では動作しない可能性があります。

        v2.3.1 (e2f9bcb) が動作しています。生成結果はGoogle Driveに生成されるので業務内システムへの活用も可能かもしれませんね。

        日本語化の部分もAICUが翻訳を行っています。カスタマイズや、より子供向けや企業内ワークショップの開発の案件はぜひAICU Inc.までご相談ください。

        https://corp.aicu.ai/ja/pricing

      7. 日報を画像生成でバエさせる #10分で学べるAI

        日報を画像生成でバエさせる #10分で学べるAI

        新企画「#10分で学べるAI」

        「つくる人をつくる」AICU新人ライターのNaruです。初の原稿となる今回は、Stability AIが提供しているStable Diffusion 3 APIを用いた画像生成ついて、忙しいビジネスパーソンがめっちゃ使えそうなテクニックを #10分で学べるAI というシリーズで紹介していきたいと思います。

        今すぐ終業、でもバエる絵が見つからない…。

        「提案書や日報にバエる、インパクトがある画像がほしいな…」と思ったこと、ありませんか?でもライセンスフリーの画像検索では画像的にも著作権的に微妙…有料のストックフォトを日報に使うなんて予算がない…そんなあなたに送る、画像生成テクニックです。

        <設定>新入社員のSくん
        新人研修ももうすぐ終わり…毎日の日報もネタがつきてきました。今すぐスライドのトップページに16:9の画像を付け足して、BOSSに送りつけて帰宅したい…!でも検索しても検索してもバエる絵が見つからない…!

        ふと某ChatGPT 4oさんにお願いしてみました。
        「今日の日報に使える16:9のバエる画像がほしい」

        うーん、ちょっと、微妙すぎやしませんか。ここは日本ですし。

        ちなみに今日は飛び込み営業で、 日焼けした27歳の元気なスタートアップ企業の社長さんにお会いしました。というレポートしたいので、そんな感じの絵を作りたかったのです。

        そしてBOSSから注文が入りました。

        「今日の日付を入れて」

        いま16時30分ですよ?

        出来上がった画像がこれです。

        念の為、ソースコードへのリンクがあったので確認してみました。

        from PIL import Image, ImageDraw, ImageFont
        import matplotlib.font_manager as fm
        
        # Load the image
        image_path = "/mnt/data/A_vibrant,_eye-catching_image_for_a_daily_report,_.png"
        image = Image.open(image_path)
        
        # Define the date text
        date_text = "2024年5月20日"
        
        # Get a font
        # Using a default font as an example
        font_path = fm.findSystemFonts(fontpaths=None, fontext='ttf')[0]
        font = ImageFont.truetype(font_path, 40)
        
        # Initialize ImageDraw
        draw = ImageDraw.Draw(image)
        
        # Define the text position and color
        text_position = (image.width - 300, image.height - 70)
        text_color = (255, 255, 255)  # White color
        
        # Add the date text to the image
        draw.text(text_position, date_text, font=font, fill=text_color)
        
        # Save the edited image
        output_path = "/mnt/data/A_vibrant_image_with_date.png"
        image.save(output_path)
        
        output_path

        ちがう!僕がやりたいのはこういうことじゃない…!

        僕が作りたいのは、こういうインパクトがある絵です。

        ギラッギラです

        ギラッギラなカバーアートでぜひともBOSSに読んでもらいたい!
        ですが、
        必要な知識は AICU media の過去記事だけで十分でした。
        非エンジニアでも大丈夫、コーディングはゼロ、絵心もゼロです。
        さて作っていきましょう。

        必要なもの

        • Google Colab(無料アカウントでOK)
        • Stability AI のアカウント

        Stability AIのアカウントを持っていない人は https://platform.stability.ai/ にアクセスすると作成できます。

        右上からアカウントを作成できます

        セットアップしよう

        APIキーを取得する

        まずはGoogle Colabで呼び出すためのAPIキーを用意しましょう。

        https://platform.stability.ai/account/keys

        https://platform.stability.ai/account/keys にアクセスするとAPIの管理画面に行くことができます。

        ここでAPIキーを発行できます

        右上にあるCreate API Key というボタンを押すと新しくAPIキーが発行されます。
        なおAPIの呼び出しにはクレジットを使うので不足した人は適宜追加をしてください。

        クレジットはDreamStudioと共通です。10ドルは僕の時給よりも安いです。

        Colabでプログラムを実行する

        今回は実行に必要なPythonコードをアナタのために限定で用意しました。
        日本語解説付きです。

        https://colab.research.google.com/drive/1mc1iQyIDT7FTO74SWcGqqHItUr9nkIC8?usp=sharing

        GitHubは こちら ✨️現在はGitHubに バグ があるのでひと手間あります。

        このColabを開いたら、まずは「ドライブにコピー」のボタンを押してからはじめのコードを▶を押して実行しましょう。

        ドライブにコピーをお忘れなく
        これで必要なライブラリをインポートできます

        次のコードを実行して、取得したAPIキーを入力します。

        実行すると入力画面が現れます

        最後のコードで画像生成の機能を準備します。

        モデルをColab上に用意しないので非常に速いです

        これで画像を生成する準備ができました!


        実際に生成してみよう

        いよいよ画像の生成に取り掛かります。
        下にスクロールするとプロンプトの入力画面があるので[prompt]に生成したい画像を入力し、実行します。

        ここまで正しくできていれば ▶ を押すたびに画像が生成されます。

        文字までしっかりと生成されました!
        ※日本語はまだ書けないっぽいです。

        さて日報のカバーイラスト作っていきます

        ここまでの部分は何度でも再利用できます。
        今日の日報も明日の日報も今週末の日報も、これでイケるって寸法です。

        今日の飛び込み営業で体験した日焼けした27歳の元気なスタートアップ企業の社長さんというレポートにふさわしいカバーイラストを作りましょう。

        [Prompt]にプロンプトを入力しますが、英語で入力する必要があります。
        ここは大人しくDeepLを使いましょう、早く退勤しないとなので。

        https://www.deepl.com/ja/translator/l/ja/en-US

        日報の表紙イラスト、日焼けした27歳の元気な日本人社長のマンガ。右下に「5/20th」の文字。

        Cover illustration of the daily bulletin, a manga of a Japanese president tanned, energetic 27-year-old man, With the words “May/20th” in the lower right corner.

        prompt: Cover illustration of the daily bulletin, a manga of a Japanese president tanned, energetic 27-year-old man, With the words “May/20th” in the lower right corner.

        negative_prompt: NSFW

        aspect_ratio: 16:9

        output_format: png

        こんな感じに入力して▶を押します。

        気に入る画像になるまで、何度でも押しましょう。数秒で生成されます。
        SD3は実写も綺麗ですが、イラストレーションとか漫画も得意です。
        美少女っぽいのもめちゃ良いですが、オジサンが好きそうな絵も作れます。

        どやっ!

        どやっ!

        ちょうどイメージぴったりです!
        このカバーアートに続くレポートの本文にはもちろん、この若くて何か大きなことをしでかしそうな社長さんへの提案が記載されています。
        きっとBOSSも興味を持って読んでくれることでしょう!

        明日からはこの[Prompt]を書き換えるだけです!やったぜ

        10分でできましたか?

        今回はここで終わります。また次回もぜひ読んでください!

        なおStable Diffusion 3 APIの技術詳細についてはこちらで紹介しているのでぜひ読んでくださいね~。

        https://note.com/aicu/n/n838bf71a361f

        https://note.com/aicu/n/ne2fe8a0073b0


        ✨️以上のように業務で仕事でパッと使える画像生成を社内やサービスに導入したい、使いこなせる社員をパッと育成したい!そんな需要がございましたら sai@aicu.ai までどうぞご相談ください。

        本記事が面白かったら、ぜひシェアをよろしくお願いいたします!
        社内Slack等のシェアでも歓迎です。
        また「こんな記事欲しい」といったリクエストがございましたら X@AICUai までメンションやDMでいただければ幸いです。

        AICU Inc.は Stability AI 公式パートナーです。
        様々なアプリ開発のご相談も承っております!

        https://corp.aicu.ai/ja/stability-ai

        https://corp.aicu.ai/ja/stability-ai-membership

        Originally published at https://note.com on May 20, 2024.

      8. [保存版] Animagine XL 3.1 生成比較レポート

        [保存版] Animagine XL 3.1 生成比較レポート

        つくる人をつくる!AICU media の知山ことねです。

        Animagine XL 3.1リリース

        2024年1月16日に公開された Stable Diffusion の画像生成モデル「Animagine XL 3.0」から、新バージョンとなる Animagine XL 3.1 がリリースされました!

        この記事では、Animagine XL 3.0 と比較して画風などに違いはあるか、また Animagine XL 3.1 から搭載された新たなタグについて紹介していきます。

        【関連記事】

        漫画制作に適したモデルは?Animagine 3.1 vs Animagine 3.0 徹底比較を行いました!

        XL 3.1 では、Animagine XL 3.0 で重要だったプロンプトも引き続き使用できます!

        https://note.com/aicu/n/n44085d702617

        Animagine XL 3.0 リリースノートはこちら。

        https://note.com/aicu/n/nd05f3a656dd8

        Hugging Face はこちら

        https://huggingface.co/cagliostrolab/animagine-xl-3.1

        公式リリース 和訳(一部抜粋)

        Animagine XL 3.1は、前バージョンのAnimagine XL 3.0を強化したもので、より高い品質でアニメスタイルの画像を生成できるように改良されています。有名なアニメシリーズからのより幅広いキャラクター、最適化されたデータセット、より良い画像作成のための新しいタグが含まれています。アニメキャラクターの正確で詳細な表現を生成することで、アニメファン、アーティスト、コンテンツクリエイターにとって価値あるリソースとなることを目指しています。

        Animagine XL 3.0 をより高品質にしたということですね!

        Animagine XL 3.0 との比較

        それでは、実際に生成して Animagine XL 3.0 と比較していきましょう。
        今回生成に使用した環境は、Windows10、NVIDIA GeForce RTX 3060 搭載の VRAM6GB の GALLERIA ノート PC に直接インストールした ComfyUI です。

        画風

        まずシンプルなプロンプトで生成し、Animagine XL 3.0 と比較してみます。

        プロンプト: best quality, 1girl
        ネガティブプロンプト: worst quality, low quality, nomal quality, bad anatomy, NSFW

        Animagine XL 3.0

        Animagine XL 3.1

        強い光源、耳の見える髪型、逆光感などの大きな特徴はそのまま残っていますが、Animagine XL 3.0 の特徴だった切れ長の目とピンクの頬が目立たなくなり、露出度も軽減されました。また Animagine XL 3.0 では肌がつやっとする雰囲気がありましたがそれも軽減され、全体的に落ち着いたように感じます。

        また Animagine XL 3.0 よりも Animagine XL 3.1 の方が線画が細くはっきり出ていて、厚塗り感、立体感が減り少し平面的になった印象を受けますね。

        タグ

        Animagine XL 3.0 には画風を指定する「年代タグ」やクオリティを指定する「クオリティタグ」がありましたが、Animagine XL 3.1 ではそれらがアップデートされたことに加え、「Aesthetic Tags」が追加されました。

        クオリティタグ

        Animagine XL 3.1 公式 Hugging Face より

        従来のクオリティタグから数値が少し調整され、タグ名が一部変更されました。よく使用する「masterpiece」「best / worst / low quality」は変わらないので、今まで通りの感覚で使えそうです。

        年代タグ

        Animagine XL 3.1 公式 Hugging Face より

        「2024」が追加され年が少しずつ調整されていること、「late」が「recent」に変更されたことが主な変更で、年代タグも大きくは変わっていません。

        実際の生成画像比較

        newest (2021–2024)

        Animagine XL 3.0 に似た絵柄です

        recent (2018–2020)

        newestを少し繊細にした雰囲気です。VTuber全盛期ですね。

        mid (2015–2017)

        退廃的な雰囲気が可愛いです
        明らかに画風がVTuber風ではなくなってきました。

        early (2011–2014)

        セピアな雰囲気が出ています

        https://j.aicu.ai/Mag2405

        Oldest (2005–2010)

        年代的には涼宮ハルヒや長門有希が流行った時期ですね。
        90年代風のテイストもありますが、明らかに描きわけができています。

        レーティングタグ(年齢制限タグ)

        Animagine XL 3.1 公式 Hugging Face より

        センシティブな表現を調節するレーティングタグも、Animagine XL 3.0 から大きく変化はありません。プロンプトとネガティブプロンプトを使い分けて露出度を調節しましょう。

        Aestheticタグ

        アニメデータに特化したViT(Vision Transformer)画像分類モデルと、コンテンツの美的価値を評価するモデルshadowlilac/aesthetic-shadow-v2を利用し、視覚的に魅力的であるものを生成するタグです。

        aesthetic

        プロンプト「best quality, 1girl, very aesthetic」

        カメラアングルやポーズがダイナミックになりました!

        「aesthetic」(イェステティック;美的)というプロンプトは Nijijourney や Novel AI でも有効なので、ぜひ試してみてください!

        推奨設定

        公式 Hugging Face で紹介されている推奨設定、プロンプトを紹介します。

        「Absurdres」とは造語で、absurd-res、ありえないぐらい高解像度、という意味のようです。

        プロンプト

        masterpiece, best quality, very aesthetic, absurdres

        ネガティブプロンプト

        nsfw, lowres, (bad), text, error, fewer, extra, missing, worst quality, jpeg artifacts, low quality, watermark, unfinished, displeasing, oldest, early, chromatic aberration, signature, extra digits, artistic error, username, scan, [abstract]

        CFG Scale

        低め(5–7)

        Sampling Steps

        30以下

        Sampler

        Euler a(Euler Ancestral)

        https://j.aicu.ai/Mag2404

        ギャラリー

        お気に入りの生成画像です!

        パステルカラー!

        抜け感

        kotoちゃん

        oldest

        newest

        アニメ風

        皆さんもお気に入りの画像が生成できたら、ぜひご共有ください!

        メンバーオンリー画像投稿コーナー https://note.com/aicu/membership/boards

        https://note.com/aicu/membership/boards/61ab0aa9374e/posts/17273820a798

        Animagine XL 3.0 おすすめのプロンプトはこちら

        ANIMAGINE XL 3.0 画風が変わる!おすすめプロンプト集
        https://note.com/aicu/n/n44085d702617

        Stable Diffusion — ControlNet入門はこちらから
        https://note.com/aicu/n/nde6fe41f077b

        img2img 入門シリーズはこちらから。
        https://note.com/aicu/n/n08ebe0637a41

        この下にGoogle Colabで動作する「AUTOMATIC1111/Stable Diffusion WebUI」へのリンクを紹介しています。

        https://note.com/aicu/membership/boards/61ab0aa9374e/posts/7cab00942b22?from=self

        メンバーシップ向けサポート掲示板はこちら!応援よろしくお願いします!

        AICU mediaによる新作書籍「画像生成AI Stable Diffusionスタートガイド」ついに予約開始です!(2024年3月29日リリース)

        詳細はこちらから https://ja.aicu.ai/sbxl/

        今回の記事の内容はAICUマガジンでもご覧いただけます

        AICU magazine Vol.1 2024年4月号 https://j.aicu.ai/Mag2404

        AICU magazine Vol.1 2024年5月号 https://j.aicu.ai/Mag2405

        AICU:AIクリエイターユニオンでは皆様のご質問をお待ちしております
        https://note.com/aicu/membership/boards

        Originally published at https://note.com on March 19, 2024.