画像生成AI「Stable Diffusion 」をLaravelで動かしてみた

画像生成AI「Stable Diffusion」をLaravel上で動かしてみました。

数ステップで簡単にできました。

Laravel-Stable-Diffusionを使う

Laravel-Stable-Diffusionを使うのが一番簡単だと思います。

・Laravel-Stable-Diffusion -github

https://github.com/RuliLG/Laravel-Stable-Diffusion

Laravel-Stable-Diffusion の設定

composerを使ってインストールしましょう。

composer require rulilg/laravel-stable-diffusion

インストールした後に3つのコマンドの入力。

php artisan vendor:publish --tag="stable-diffusion-migrations"
php artisan migrate
php artisan vendor:publish --tag="stable-diffusion-config"

app/configにstable-diffusion.phpが生成されていることを確認します。

以下がstable-diffusion.phpの内容。

return [
    'url' => env('REPLICATE_URL', 'https://api.replicate.com/v1/predictions'),
    'token' => env('REPLICATE_TOKEN'),
    'version' => env('REPLICATE_STABLEDIFFUSION_VERSION', 'a9758cbfbd5f3c2094457d996681af52552901775aa2d6dd0b17fd15df959bef'),
];

.envにREPLICATE_TOKENを追記してトークンを設定する必要があります。

REPLICATE_TOKENは、replicate で取得する必要があります。

replicateにアクセスしてサイトインし、アカウントページのAPI tokenを取得して、.envのREPLICATE_TOKENに設定しましょう。

以上で設定は完了です。

Laravel-Stable-Diffusion の使い方

画像生成に必要なコードです。

use RuliLG\StableDiffusion\StableDiffusion;
use RuliLG\StableDiffusion\Prompt;

$result = StableDiffusion::make()
    ->withPrompt(
        Prompt::make()
            ->with('Van Gogh style rose painting')
            ->photograph()
            ->resolution8k()
            ->trendingOnArtStation()
            ->highlyDetailed()
            ->dramaticLighting()
            ->octaneRender()
    )
    ->generate(1);

コード中の下記部分が画像生成のプロンプト(命令文)になります。

->with('Van Gogh style rose painting')

「ゴッホ風のバラの絵(Van Gogh style rose painting)」の画像生成を指示しています。

上記コードでreplicateに画像生成のリクエストが送信されますが、画像生成には数秒間かかるため、数秒後にしか結果は取得できません。

画像生成が完了したら、下記コードで結果(画像のURL)が取得できます。

$freshResults = StableDiffusion::get($result->replicate_id);
if ($freshResults->is_successful) {
    dd($freshResults->output); // List of URLs with the images
}

画像生成に時間が必要な事を考慮して簡単な取得コードを書いてみます。

use RuliLG\StableDiffusion\StableDiffusion;
use RuliLG\StableDiffusion\Prompt;    

    $result = StableDiffusion::make()
            ->withPrompt(
                Prompt::make()
                    ->with('Astronaut riding a horse')
                    ->photograph()
                    ->resolution8k()
                    ->trendingOnArtStation()
                    ->highlyDetailed()
                    ->dramaticLighting()
                    ->octaneRender()
            )
            ->generate(1);

        $loop = true;
        while ($loop){
            sleep(3);
            $freshResults = StableDiffusion::get($result->replicate_id);
            if ($freshResults->is_successful) {
                $loop = false;
            }
        }

        $image = $freshResults->output;

        return view('test', [
            'image' => $image
        ]);

$imageには画像のURLが格納されます。

上のコードで生成された画像です。

すごい!ゴッホが書いたっぽい!

プロンプトを「馬に乗る宇宙飛行士(Astronaut riding a horse)」に変えて生成してみます。

CGみたい!

Stable Diffusion 面白いしめちゃくちゃすごいです。

Laravelに組み込むだけなら簡単でした。

追記:

しばらく遊んでいたら、生成画像が返ってこなくなりました。どうやらreplicateの無料期間が終わったようです・・・

本格的に何かサービスに組み込むなら有料プランにする必要がありそうです。

Related article

おすすめ関連記事