香り画像の生成方法
本ドキュメントでは、源氏物語の香り情報から視覚的イメージを生成する方法について説明します。
概要
scripts/generate-smell-images.tsスクリプトを使用して、抽出された香り情報からDALL-E 3により源氏物語絵巻風の画像を自動生成します。
必要な環境
前提条件
- Node.js (v18以上推奨)
- TypeScript
- Azure OpenAI DALL-E 3 APIアクセス
- Sharp(画像処理ライブラリ)
環境変数の設定
.envファイルに以下の環境変数を設定してください:
AZURE_IMAGE_ENDPOINT=https://your-resource.openai.azure.com
AZURE_IMAGE_API_KEY=your-api-key
インストール
必要なパッケージをインストール:
npm install axios sharp dotenv
npm install --save-dev @types/node typescript
使用方法
基本的な実行
# TypeScriptで直接実行
npx tsx scripts/generate-smell-images.ts --generate
オプション
1. 件数制限
# 最初の10件のみ処理
npx tsx scripts/generate-smell-images.ts --generate --limit 10
2. 巻指定
# 第1巻のみ処理
npx tsx scripts/generate-smell-images.ts --generate --vol 01
3. 組み合わせ
# 第2巻の最初の5件
npx tsx scripts/generate-smell-images.ts --generate --vol 02 --limit 5
画像生成の仕様
生成パラメータ
- サイズ: 1024x1024ピクセル
- 品質: HD(高品質)
- スタイル: Vivid(鮮やか)
- 出力形式: WebP(変換後)
- 圧縮品質: 80%
プロンプト構成
画像生成プロンプトは以下の要素で構成されます:
const baseStyle = `
源氏物語絵巻風、
平安時代、
大和絵の技法、
繊細な線画、
淡い色彩、
上品で幻想的、
雅な雰囲気、
詩的な美しさ、
平安貴族の邸宅、
寝殿造りの室内、
几帳や御簾のある空間
`;
プロンプト生成例
この君は、この御香(におい)に慣れ親しんでいらっしゃるわけではなかったので、
一般的な高貴な思いでこの君を自分のものと思い込むことは限りがなかった。
匂いの性質:やかに、うつくしけなる。
源氏物語絵巻風、平安時代、大和絵の技法、繊細な線画、淡い色彩、
上品で幻想的、雅な雰囲気、詩的な美しさ、平安貴族の邸宅、
寝殿造りの室内、几帳や御簾のある空間
処理の流れ
1. データ読み込み
src/data/smells-index.jsonから香り情報を読み込み- 指定された条件でフィルタリング
2. 画像生成
各香り情報について:
- プロンプト生成: 現代語訳 + 性質 + ベーススタイル
- DALL-E 3 API呼び出し: 画像URLを取得
- 画像ダウンロード: PNG形式で一時保存
- WebP変換: Sharpで圧縮・変換
- メタデータ保存:
images.jsonに記録
3. 進捗管理
public/images/smells/images.jsonに生成状況を保存- 既に生成済みの画像はスキップ
- エラー情報も記録
4. レート制限対策
- 各生成後3秒待機
- API制限を考慮した処理速度
出力
ファイル構成
public/images/smells/
├── 01-06-01.webp # 生成画像
├── 01-07-01.webp
├── ...
└── images.json # メタデータ
メタデータ形式
{
"01-06-01": {
"smell": {
"id": "01-06-01",
"Smell_Word": "御にほひ",
"Sentence_ModernJapanese": "..."
},
"imageUrl": "https://...",
"localPath": "/path/to/01-06-01.webp",
"status": "completed",
"createdAt": "2024-01-01T00:00:00.000Z"
}
}
ステータス
completed: 生成完了failed: 生成失敗- エラー情報を
errorフィールドに記録
パフォーマンスとコスト
処理時間
- 1画像あたり約5-10秒
- 100件の処理で約10-20分
API コスト(DALL-E 3)
- HD品質、1024x1024: $0.080/画像
- 100件で約$8.00
ストレージ
- WebP形式: 約100-300KB/画像
- 1000件で約100-300MB
トラブルシューティング
よくあるエラー
-
API認証エラー
Error: AZURE_IMAGE_API_KEY environment variable is not set→
.envファイルを確認 -
画像生成失敗
Error generating image: [詳細]→ プロンプトが長すぎる場合は調整 → API制限を確認
-
WebP変換エラー
Error: Sharp conversion failed→ Sharpの再インストール:
npm install sharp
再試行
失敗した画像のみ再生成:
# images.jsonでstatus="failed"のみ処理
npx tsx scripts/generate-smell-images.ts --generate --retry-failed
ベストプラクティス
1. 段階的生成
大量生成時は段階的に:
# まず10件でテスト
npx tsx scripts/generate-smell-images.ts --generate --limit 10
# 問題なければ全体
npx tsx scripts/generate-smell-images.ts --generate
2. 巻ごとに処理
# 第1巻
npx tsx scripts/generate-smell-images.ts --generate --vol 01
# 第2巻
npx tsx scripts/generate-smell-images.ts --generate --vol 02
3. 進捗確認
# 生成状況のサマリーを確認
cat public/images/smells/images.json | jq 'to_entries | map(.value.status) | group_by(.) | map({status: .[0], count: length})'
カスタマイズ
プロンプトの調整
generatePrompt関数を編集してスタイルを変更:
const baseStyle = 'あなたの好みのスタイル';
画像サイズの変更
size: '1792x1024', // ワイドサイズ
品質の調整
quality: 'standard', // コスト削減