2025年9月13日土曜日

NanoBanana に4コマ漫画を描いてもらう

NanoBanana に4コマ漫画を描いてもらう

概要

前回普通に漫画を描いてもらいました
今回は4コマ漫画を描いてもらいます

環境

  • NanoBanana
    • Google AI Studio 2025/09/10 時点

コマ割り

ChatGPT に作成してもらいました

参照画像

前回のをそのまま使います

プロンプトで指示

各種画像をアップロードしプロンプトに以下を入力します

4コマ漫画を作成してください。テーマは「天気」でお願いします。コマ割りはアップロードした4panel.pngを使ってください。登場させるキャラクターはref1.pngからref7.pngを使ってください。背景はテーマに合わせていい感じに描いてください。

結果

1コマ目

キャラクターが空を見上げて「現れた!」と何かを見つけている様子。青空には白い雲が浮かんでいます。

2コマ目

大雨と雷に見舞われ、キャラクターが慌てて頭を抱えています。

3コマ目

大雨が止み、窓の外には虹がかかっています。キャラクターはブランケットにくるまって温かい飲み物を飲んでいて、ホッと一息ついています。

4コマ目

天気によってキャラクターの感情が豊かに表現された4コマ漫画ですね。

最後に

吹き出しのセリフもしっかりしてしてあげないとやはりセリフがおかしくなるようです
各コマごとにどういうシチュエーションなのか、セリフはどうするかキャラはどういう感じにするかななど細かく設定できれば精度も良くなりそうです

画像自体は問題なく描いてくれるようです

コマの採番も削除するように指示したほうがいいかもしれません

2025年9月12日金曜日

NanoBanana に漫画を描いてもらう

NanoBanana に漫画を描いてもらう

概要

前回漫画を描くために必要な準備をしました
今回は実際に漫画を描いてもらいます

環境

  • NanoBanana
    • Google AI Studio 2025/09/10 時点

漫画を描いてもらう

前回生成した参照画像とコマ割りをアップロードして描いてもらいます
プロンプトにもアップロードした画像を使ってもらうように指示します

参照画像のアップロードとプロンプト準備

プラスボタンから参照画像をすべて選択しアップロードします
画像数が多いとチャットで使えるトークン数の上限にあたってしまうのでその場合は画像を少なくするか1ファイルにまとめるなどしてトークン数を削減してください

プロンプトは「適当な漫画を描いてください。セリフ付きでお願いします。登場させる人物はアップロードした画像を参照し必ず登場させてください。コマ割りもアップロードしたファイルを参照し描いてください。」にしました

生成結果

漫画の流れと実際に描いた漫画の画像が出力されます
今回漫画は1ページでかつ話の内容や流れなどは何も与えてないので本当に適当な漫画が作成されています

ちゃんと参照画像を使ってます
セリフ部分もちゃんと描かれていますが日本語が一部うまく描けていないのでこのあたりは手動で修正すればいいかなと思います

自分が試してみた感じ何度か描画に失敗したり一部のコマが真っ白になったりするケースがありました
その場合はリトライでもいいですがやはりストーリーをしっかり与えたり各コマごとに何を描くか細かく指定すればしっかり描いてくれるのではと思います

ここからのポイント

  • まず左上から始まっているので右上から開始にしてもらう
    • これは前回作成したコマ割りの問題でもあるのでコマ割りを修正すればOKです
  • 背景などを細かく指定する
  • ストーリーを与える
    • 各コマごとに与えてもいいと思う
    • セリフなども細かく指定するといいのかも
  • 他のキャラクターを登場させる
  • 更に応用として API を使って完全自動化する
    1. ストーリーの生成
    2. 参照画像の生成 (必要であれば
    3. コマ割りの生成 (必要であれば
    4. 参照画像+コマ割りを元に漫画の作成
      • 参照画像やコマ割りは再利用できるので同じキャラであれば使い回せば OK
      • 新規のキャラクターや新規のコマ割りの場合は生成する
  • 細かい修正を手動で行うか更にプロンプトで行うか
    • プロンプトでどこまで修正できるか不明だが NanoBanana であれば元画像をそのまま残したまま一部を修正できるので頑張ればプロンプトだけでも修正できるかも
    • どうしても無理そうであれば手動で直す

最後に

NanoBanana で漫画を描いてもらう基本的な方法を紹介しました
今回は1ページでしたが漫画はストーリーがあり複数ページが必要なのでそれらを考えたうえで実際には漫画を描いてもらう必要があるかなと思います

ストーリーなども AI に考えてもらうことができるので完全に自動化して漫画を描いてもらうこともそこまで難しくはないかもしれません

4コママンガなどであればストーリーも作成しやすいのでまずは4コママンガから作成するとかはありかなと思います

2025年9月11日木曜日

NanoBanana を使って漫画を描くための参照画像を作成してみた

NanoBanana を使って漫画を描くための参照画像を作成してみた

概要

NanoBanana を使って漫画を描くためには登場させる人物の参照画像を作る必要があります
参照画像は直立や横向き、いろいろな表情の画像があると便利です
基本的には自分で描くものっぽいのですが今回は参照画像も NanoBanana で作ってみました

環境

  • NanoBanana
    • Google AI Studio 2025/09/10 時点

元画像

参照画像を作成するための元画像は以下を使います
ちなみにこの画像も AI で生成した画像です
ChatGPT などで適当に描いてもらう感じで OK です

参照画像の作成

あとは NanoBanana で作成していきます
基本は編集してほしい画像をアップロードしてチャットで指示すれば OK です

背景を白にする

まずは背景を白にします
「この画像の背景を白にしてください」と指示します

以下のような背景白の画像が簡単に生成されました

シンプルな立ち絵を生成する

先ほどの背景白の画像から今度はシンプルな立ち絵を生成してもらいます

「更にこの絵の「正面」「左向き」「右向き」「背面」の直立立ちの絵を描いてください」あたりの指示で OK です

生成してくれた画像は以下です
それぞれ別のファイルとして生成されました

なぜか左向きは作れなかったので諦めました
また右向きといいつつ正面を複数作成したりするのでうまくいかない場合はリトライすれば OK です

正面

右向き

背面

表情を変更する

元画像から表情を変更した画像をいくつか生成します
もしかすると顔部分だけを抜き出してそれの違う表情を複数作成するほうがいいのかもしれませんが今回は元画像を使って複数の表情の画像を生成します

まずは「この絵の表情を変更したいです、笑っている顔にしてください」で指示します

笑顔が生成できました
更に別の表情も作成していきます

「更に怒っている表情と悲しい表情も描いてください」

悲しい顔

怒っている顔

とりあえずこれくらいの参照画像があれば何とかなりそうです

おまけ: コマ割りも作成してもらう

ChatGPT で作成しましたが Google AI Studio の画像生成でも作成できると思います

「漫画のコマ割りを作って欲しいです。コマ数は5でお願いします。行数は3行で真ん中の行は1コマでお願いします。右上から左下に向かってコマに番号を振ってください。各コマには番号だけ振りそれ以外は白紙で大丈夫です」

なぜか左上から番号が振られていますがこの辺は自分で直すか NanoBanana に与えるのであれば機にする必要はないと思います

最後に

NanoBanana で漫画を描くための第一歩としてキャラクターの参照画像を生成してみました
漫画は当然1キャラクターというわけにはいかないので同じように他のキャラクターも参照画像を作成するといいかなと思います

表情に関しては今回は3種類ですができればもう少しあったほうがいいのかもしれません

1つのチャットないで使用できるトークン数が限られているので編集してもらう画像や生成してもらう画像は可能な限り少なくしてもらったほうがいいです
チャットを新規で立ち上げても OK です
その場合は Branch from here という機能がありそこから新規でチャットを立ち上げることができます

次回はこれらを元に漫画を描いてもらいます

参考サイト

2025年9月10日水曜日

Gitlab と ldap の接続テストを CLI で行う

Gitlab と ldap の接続テストを CLI で行う

概要

基本的には接続テストのみなので実際に LDAP 内のユーザでログインできるかどうかは UI から試すしかありません

環境

  • Gitlab-ee 18.0.6
  • openldap 2.6.10

CLI

今回は結果を確認するために標準出力と標準エラーを別のファイルにリダイレクトしています

  • docker compose exec gitlab gitlab-rake gitlab:ldap:check > stdout.log 2> stderr.log

  • cat stdout.log

Checking LDAP ...

LDAP: ... Server: ldapmain
LDAP authentication... Success
LDAP users with access to your GitLab server (only showing the first 100 results)
        DN: uid=hawk,dc=example,dc=org   uid: hawk
Server: ldapsecondary
Exception: getaddrinfo: Name or service not known

Checking LDAP ... Finished
  • cat stderr.log

基本的には結果はすべて標準出力に表示されます
gitlab.rb に記載されている LDAP サーバごとにチェックはしてくれますが結果はすべて標準出力になります

最後に

Gitlab に LDAP を設定したあとにうまくログインできない場合にトラシュとして使う感じになりそうです
特定のユーザでログインできるかのチェックも CLI でやりたいですがそれは厳しいようです

2025年9月9日火曜日

OpenLDAP + phpLDAPAdmin の compose.yaml

OpenLDAP + phpLDAPAdmin の compose.yaml

概要

前回 OpenLDAP + TLS の設定を compose.yaml で定義しました
今回は更に phpLdapAdmin を追加して UI からも確認できるようにします

環境

  • Ubuntu 24.04
  • docker 28.3.3
  • openldap 2.6.10
  • phpLDAPAdmin 0.9.0

compose.yaml

services:
  openldap:
    image: bitnami/openldap:latest
    container_name: openldap
    ports:
      - "636:636"
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
      - LDAP_ENABLE_TLS=yes
      - LDAP_TLS_CERT_FILE=/opt/bitnami/openldap/certs/fullchain.pem
      - LDAP_TLS_KEY_FILE=/opt/bitnami/openldap/certs/privkey.pem
      - LDAP_TLS_CA_FILE=/opt/bitnami/openldap/certs/fullchain.pem
      - LDAP_PORT_NUMBER=389
      - LDAP_LDAPS_PORT_NUMBER=636
    volumes:
      - /etc/letsencrypt/live/your-domain.com/:/opt/bitnami/openldap/certs
      - ./ldif/base.ldif:/ldifs/base.ldif
      - ./ldif/hawk.ldif:/ldifs/hawk.ldif
    restart: unless-stopped

  phpldapadmin:
    image: osixia/phpldapadmin:0.9.0
    container_name: ldap-admin
    ports:
      - "6443:443"
    environment:
      - PHPLDAPADMIN_LDAP_HOSTS=openldap
      - PHPLDAPADMIN_HTTPS=true
      - PHPLDAPADMIN_HTTPS_CRT_FILENAME=fullchain.pem
      - PHPLDAPADMIN_HTTPS_KEY_FILENAME=privkey.pem
    volumes:
      - ./certs:/container/service/phpldapadmin/assets/apache2/certs/
    restart: unless-stopped

ポイント

  • LDAP_LDAPS_PORT_NUMBER と LDAP_PORT_NUMBER を使ってポートをデフォルトのポートにしなければいけない
    • phpldapadmin がデフォルトポートの LDAP を参照するためです
  • PHPLDAPADMIN_LDAP_HOSTS は ldaps じゃないポートを参照する
    • phpLDAPAdmin からは ldaps ではない 389 ポートを参照すると簡単です
  • PHPLDAPADMIN_HTTPS は phpLDAPAdmin の UI 用の https 設定
    • 接続する LDAP の TLS の設定ではないので注意
    • UI を https 化するなら設定必須
  • openldap と phpldapadmin が使用する証明書が同じ場合には権限が変わるので注意しましょう
    • phpldapadmin が証明書を 600 の権限にコンテナ内で偏光子してしまう
    • そうすると openldap が証明書を読み込めなくなってしまうため TLS の設定がおかしくなり ldap にアクセスできなくなってしまう
    • なので openldap と phpldapadmin の使用する証明書が同じであってもホスト側では別のパスに保存しそれぞれでマウントして使うようにしましょう

最後に

UI へのログインは過去に紹介した通り ldapsearch で使用する dc 情報を使ってログインします

phpLDAPAdmin は 0.9.0 で更新が止まっているので代替できるツールが他にあるといいかなと思っています

参考サイト

2025年9月8日月曜日

pyenv 自身を更新する方法

pyenv 自身を更新する方法

概要

Homebrew などは brew update すればいいですが Ubuntu などに直接インストールした場合にはそうはいきません
今回はそんな場合の pyenv のバージョンアップ方法を紹介します

環境

  • Ubuntu 24.04
  • pyenv 2.6.1 -> 2.6.7

コマンド

  • pyenv update

最後に

一定以上の pyenv であればデフォルトで update コマンドが使えます
古い pyenv であれば

  • rm -rf ~/.pyenv
  • curl https://pyenv.run | bash

で最新バージョンをインストールし直すといいかなと思います
ただこの方法だとインストールした Python までアンインストールされるのでインストールコマンドだけ実行しても最新版になるかもしれません

参考サイト

2025年9月4日木曜日

tls な openldap サーバを docker compose で構築する方法

tls な openldap サーバを docker compose で構築する方法

概要

過去に openldap を tls 化する方法を紹介しました
今回はそれを docker compose で一発で構築しかつユーザも自動で登録する方法を紹介します

環境

  • Ubuntu 24.04
  • docker 28.3.3
  • openldap 2.6.10

compose.yaml

LDAP_TLS_CA_FILE には LDAP_TLS_CERT_FILE と同じものを指定すれば大丈夫でした
fullchain.pem は分割しないでもいいようです

services:
  openldap:
    image: bitnami/openldap:latest
    container_name: openldap
    ports:
      - "1636:1636"
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
      - LDAP_ENABLE_TLS=yes
      - LDAP_TLS_CERT_FILE=/opt/bitnami/openldap/certs/fullchain.pem
      - LDAP_TLS_KEY_FILE=/opt/bitnami/openldap/certs/privkey.pem
      - LDAP_TLS_CA_FILE=/opt/bitnami/openldap/certs/fullchain.pem
    volumes:
      - /etc/letsencrypt/live/your-domain.com/:/opt/bitnami/openldap/certs
      - ./ldif/base.ldif:/ldifs/base.ldif
      - ./ldif/hawk.ldif:/ldifs/hawk.ldif
    restart: unless-stopped

ldif/base.ldif

今回 bitnami の openldap イメージの機能で /ldifs にファイルを置くと自動でユーザや組織を追加する仕組みを使っています

この仕組みを使うと環境変数に設定してあるデフォルトの組織情報が無視されるので自分で作成してあげます

dn: dc=example,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: Example Organization
dc: example

ちなみにログには以下のようなログが出力されます

WARN  ==> Ignoring LDAP_USERS, LDAP_PASSWORDS, LDAP_USER_OU, LDAP_GROUP_OU and LDAP_GROUP environment variables...

ldif/hawk.ldif

ユーザ追加用の ldif ファイルです
ユーザごとに作成してもいいですしまとめて書いてしまっても OK です

dn: uid=hawk,dc=example,dc=org
uid: hawk
cn: hawk
sn: snowlog
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
loginShell: /bin/bash
homeDirectory: /home/hawk
uidNumber: 1000
gidNumber: 1000
userPassword: {SSHA}MYHODLo+3s3ZuMCN7qDw4hWY8JZ7O6YA
mail: hawk@example.org
gecos: hawksnowlog

起動

  • docker compose up -d

動作確認

以下どれでも OK です
admin ユーザは作成されるので admin でも追加したユーザでも検索できることを確認しましょう

  • docker exec openldap ldapsearch -x -H ldap://localhost:1389 -b "dc=example,dc=org" -D "uid=hawk,dc=example,dc=org" -w xxx "(objectClass=*)"
  • docker exec openldap ldapsearch -x -H ldap://localhost:1389 -b "dc=example,dc=org" "(uid=hawk)"
  • docker exec openldap ldapsearch -x -H ldap://localhost:1389 -b "dc=example,dc=org" -D "cn=admin,dc=example,dc=org" -w xxx "(objectClass=*)"

tls で確認したい場合は以下のようにします

  • docker exec openldap ldapsearch -x -H ldaps://your-domain.com:1636 -b "dc=example,dc=org" -D "uid=hawk,dc=example,dc=org" -w xxx "(objectClass=*)"

最後に

docker compose を使って openldap を tls で構築する方法を紹介しました
今回データ領域は使っていないのでコンテナをダウンさせるたびにユーザ情報は消えますが毎回 ldif を実行するため同じ状態で起動はしてきます

コンテナ起動後に手動でユーザなどを追加した場合は ldif も作成しないと次回起動時に消えてしまうので注意しましょう

参考サイト