0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIと無料APIで"マルチ投稿ブログ"を自動化してみた(第2回)— 記事内容に合うカバー画像を自動生成

Posted at

Originally published at https://beachone1155.vercel.app/blog/multi-blog-automation-2

第1回では「1枚のMarkdownからマルチ投稿」を整えました。第2回は、記事に“合う”カバー画像を無料の生成AI×画像APIで自動生成します。


なにを実現したか(概要)

  • 記事のタイトル・要約・タグからプロンプトを生成し、Hugging Face Inference Providers(Stable Diffusion XL)で画像を生成
  • 生成に失敗・レート制限等の際はUnsplash APIに自動フォールバック
  • 取得/生成した画像はOGP推奨サイズ(1200x630)に自動リサイズ
  • 画像はpublic/images/[slug]-cover.jpgへ保存し、Frontmatterのcoverを自動更新
  • ローカル実行で確認後にコミット→Vercelに自動反映

技術スタックと優先順位

  • 生成AI: Hugging Face Inference Providers(最優先)
    • エンドポイント: https://router.huggingface.co/hf-inference/models/...
    • モデル例: stabilityai/stable-diffusion-xl-base-1.0
  • フォールバック(任意):
    • Fal.ai(FLUX.1 Schnell)→ Stability AI API → Unsplash API
  • 画像処理: sharp(1200x630にトリミング/リサイズ)

実装ポイント(今回の差分)

1) プロンプト生成

記事のtitle/summary/tagsから技術文脈を抽出して、生成AIに渡す短い英語プロンプトを作成。

modern web development, Next.js framework, clean minimal illustration

基準:

  • プラットフォーム名(qiita, zenn, devto)や日本語の汎用語は除外
  • 技術タグ(nextjs, awsなど)を優先
  • 人物/顔などは避け、著作権や生成リスクを下げるテイストに寄せる

2) 生成→フォールバックの順序

  1. Hugging Face(生成AI)
  2. Replicate(クレジット不足/429等は自動スキップ)
  3. Fal.ai(statusポーリングで完了判定)
  4. Stability AI(multipart/form-data + Accept: image/*
  5. Unsplash(検索API)

すべて失敗時はエラーログを出し、処理を中断します。

3) OGP最適化

  • すべての画像を1200x630に正規化(中央トリミング)
  • app/blog/[slug]/page.tsxのOpen Graph/Twitterでpost.coverが設定されていればOGに載る構成

使い方(ローカル)

1) APIキーの設定(最低1つ)

.env.local に以下のいずれかを設定(Hugging Face推奨)

HUGGING_FACE_API_KEY=xxxx
# 任意
REPLICATE_API_TOKEN=xxxx
FAL_API_KEY=xxxx
STABILITY_API_KEY=xxxx
UNSPLASH_ACCESS_KEY=xxxx

2) 画像生成を実行

npm run generate-images:dry-run   # ダウンロードなしで候補を確認
npm run generate-images          # 実際に保存&Frontmatter更新

処理対象は、Frontmatterのcoverが空/未設定の記事。保存先はpublic/images/[slug]-cover.jpgです。


実装ファイル

  • scripts/generate-cover-images.mjs
    • 記事スキャン、プロンプト生成、Frontmatter更新
  • scripts/utils/prompt-generator.mjs
    • タイトル/要約/タグから英語プロンプトを生成
  • scripts/utils/image-fetcher.mjs
    • Hugging Face→Fal.ai→Stability→Unsplashの順で画像取得
    • Stabilityはmultipart/form-data/Accept: image/*で実装
    • 取得画像をsharpで1200x630へ

コストとライセンス

  • Hugging Face: 無料枠あり(Inference Providers)
  • Replicate/Fal.ai/Stability: 無料枠やトライアルあり(枯渇時は自動スキップ)
  • Unsplash: 無料(クレジット/規約に従う)

記事配信は従来どおりQiita / Zenn / DEV.toへ自動。OGP画像が安定して付与され、リンクプレビューがリッチになりました。


まとめ

  • 記事1枚から**「配信」と「見栄え(OGP)」**まで自動化
  • 無料枠を中心に構成し、失敗時のフォールバックで運用を安定化
  • 画像サイズを固定化してSNS/検索の表示品質を担保

次回は、記事の内容要約や目次の自動生成を予定。生成AIを“安全に”仕込む設計を解説します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?