Hugo

Obrazki OG w
Hugo

Wygeneruj obrazki skryptem przed budowaniem i wstaw do front matter.

Gdzie to wpiąć

Hugo nie wykonuje żądań HTTP przy budowaniu w sposób, na którym da się polegać. Prościej i szybciej jest wygenerować obrazki skryptem, zapisać adres w front matter i mieć to w repozytorium.

scripts/og.sh

#!/usr/bin/env bash
set -euo pipefail

# For every post without an og_image field: generate one and write it back.
for file in content/posts/*.md; do
  grep -q '^og_image:' "$file" && continue

  title=$(grep -m1 '^title:' "$file" | sed 's/^title:[[:space:]]*//; s/^"//; s/"$//')

  url=$(curl -sS -X POST "https://imageapi.dev/v1/images?wait=true" \
    -H "Authorization: Bearer $IMAGE_API_KEY" \
    -H "Content-Type: application/json" \
    -d "$(jq -n --arg t "$title" '{template:"blog-og",modifications:{title:$t,site:"yourblog.com"}}')" \
    | jq -r .url)

  # Append to the front matter, right below the first '---' line.
  sed -i "0,/^---$/{s|^---$|---\nog_image: \"$url\"|}" "$file"
  echo "$file -> $url"
done
Pułapka

Uruchamiaj to przed `hugo`, nie w CI przy każdym buildzie — inaczej wygenerujesz obrazki, których nikt nie zatwierdzi do repozytorium, i zapłacisz za nie ponownie przy następnym wdrożeniu.

Co dostajesz w odpowiedzi

Z ?wait=true czekasz na gotowy obrazek w tym samym połączeniu — zwykle około sekundy.

{
    "id": "img_01m08s3ez1zcv28h335g9923bw",
    "status": "completed",
    "url": "https://cdn.imageapi.dev/renders/img_01m08s3ez1zcv28h335g9923bw.png",
    "duration_ms": 912
}

Ile to kosztuje

Sto obrazków miesięcznie za darmo, potem $9 za dwa tysiące. Ten sam wpis wyrenderowany drugi raz zwraca istniejący adres i nie zużywa limitu — więc przebudowanie strony nic nie kosztuje.

Inne frameworki