og-forge
Free GitHub Action · No headless browser

Forge social images in your pipeline.

og-forge renders crisp 1200×630 Open Graph cards for any repo or site — straight from a workflow step. Satori draws the SVG, resvg bakes the PNG, fonts ship vendored in the box. No Puppeteer, no Chrome, no external service. Commit the image; every share looks intentional.

~40msper render
3templates
0browsers spawned
1200×630every card
02 / Install as a step

Paste one job. Get an image on every push.

Drop this into .github/workflows/. og-forge writes the PNG into your workspace; upload it, commit it, or attach it to a release — your call.

.github/workflows/og.yml
name: forge-og
on: [push]
jobs:
  og:
    runs-on: ubuntu-latest
    steps:
      - uses: percymcn/og-forge@v0.1
        with:
          title: "Why we killed the headless browser"
          description: "Satori + resvg, 40ms a card."
          template: blog       # default | blog | article
          theme: dark          # dark | light
          domain: blog.example.dev
          tag: ENGINEERING
          author: Dana Okafor
          output: public/og.png
      # -> then commit public/og.png, or upload-artifact, etc.
STEP 01

Reference the Action

One uses: line pins og-forge at a released tag. No install, no service key.

STEP 02

Pass your copy

Title, template, theme and a few labels. Everything else has sane defaults.

STEP 03

Ship the PNG

The image lands in your workspace at output. Commit it and set <meta og:image>.

03 / Under the hood

Boring tech, on purpose.

satori lays out the card as an SVG from plain style objects. resvg rasterizes it to a pixel-perfect PNG. Fonts (Noto Serif · Noto Sans · JetBrains Mono, all SIL OFL) are committed to the repo, so a render is byte-for-byte reproducible on any runner with zero network calls. The whole engine is a few hundred lines you can read in one sitting.