CommunityBildgithub.com

og-image-kit

Generiert Open-Graph-/Twitter(X)-Teilerbilder für alle Seiten einer Website, fügt die og:* und twitter:* Meta-Tags hinzu und überprüft die soziale Vorschau. Unterstützt Next.js App Router (opengraph-image.tsx mit next/og ImageResponse), Astro (Build-Zeit-PNGs via satori + resvg) und jede statische Website (Pillow-Skript). Verwenden, wenn der Benutzer nach OG-Bildern, Social-Share-Karten, Link-Vorschauen fragt, sagt ‚mein Link sieht auf X/Slack/LinkedIn/WeChat schlecht aus‘, twitter:card oder vor dem Start einer Website.

Was ist og-image-kit?

Das Skill `og-image-kit` automatisiert die Erstellung und Validierung von Open Graph (OG) und Twitter (X) Teilen-Bildern für praktisch jede Webseite. Es stellt sicher, dass jede öffentliche Seite ein 1200×630 Pixel großes Vorschaubild und die korrekten `og:*` / `twitter:*` Meta-Tags besitzt, und prüft diese automatisch mit einem Python-Skript. Das Skill erkennt automatisch den verwendeten Tech-Stack (Next.js App Router, Astro oder statische Sites) und wendet den passenden Generator an: für Next.js nutzt es `next/og` mit `ImageResponse`, für Astro `satori + resvg` und für statische Sites ein Pillow-basiertes Python-Skript. Es unterstützt dynamische Routen (Blog, Produkte), benutzerdefinierte Schriftarten (auch CJK), Markenfarben und Logos. Nach der Generierung überprüft das Skill mit `scripts/check_og.py` die Meta-Tags und Bildattribute (Auflösung, Seitenverhältnis, Größe) und gibt detaillierte Fehler- und Warnmeldungen aus. Social-Platform-Caches werden dabei berücksichtigt. Das Skill ist ideal für Entwickler, die vor dem Start einer Website sicherstellen möchten, dass Link-Vorschauen auf Plattformen wie X, LinkedIn, Slack oder WeChat optimal aussehen und keine Fehler aufweisen.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/getpaidskills/skills/tree/HEAD/skills/og-image-kit

Installed? Explore more Bild skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht og-image-kit?

Ziel: Jede öffentliche Seite hat ein 1200×630-Sharing-Bild und korrekte og:* / twitter:*-Tags, und du hast sie überprüft mit scripts/check_og.py, nicht nur geschrieben.

Schritt 1 – Stack erkennen

Sieh dir das Repository an, bevor du etwas schreibst:

SignalStackGehe zu
next in package.json und ein app/ (oder src/app/)-VerzeichnisNext.js App RouterSchritt 2A
next nur mit pages/Next.js Pages RouterSchritt 2C (statisch) oder /api/og mit ImageResponse hinzufügen
astro in package.jsonAstroSchritt 2B
Reines HTML, Hugo, Jekyll, Vite SPA, alles andereStatischSchritt 2C

Finde auch: die kanonische Basis-URL der Seite (Umgebungsvariable wie NEXT_PUBLIC_SITE_URL, site in astro.config.*), Markenfarben, Logo und die verwendete Schriftart. Frage den Benutzer nur, wenn nichts gefunden werden kann.

Schritt 2A – Next.js App Router

  1. Stelle sicher, dass das Root-Layout metadataBase exportiert (OG-URLs müssen absolut sein):
    export const metadata = { metadataBase: new URL(process.env.NEXT_PUBLIC_SITE_URL ?? "http://localhost:3000") }
    
  2. Kopiere assets/nextjs/opengraph-image.tsx nach app/opengraph-image.tsx (Seitenstandard). Bearbeite BRAND, Farben und Tagline.
  3. Für dynamische Routen (Blogbeiträge, Produkte) kopiere es in das Routensegment, z.B. app/blog/[slug]/opengraph-image.tsx, und verwende assets/nextjs/dynamic-opengraph-image.tsx, das params liest und den Titel aus deiner Datenquelle lädt. In Next.js 15+ ist params ein Promise – await es.
  4. Füge twitter-image.tsx nur hinzu, wenn sich die X-Karte unterscheiden muss; andernfalls verwendet Next.js das OG-Bild erneut, wenn du twitter: { card: "summary_large_image" } in den Metadaten setzt.
  5. Pro-Seite-Text: Setze title und description in den metadata/generateMetadata jeder Seite.
  6. Benutzerdefinierte Schriftarten: Lade eine TTF/OTF (nicht WOFF2) via fetch(new URL("./Inter-Bold.ttf", import.meta.url)) oder readFile. CJK-Text benötigt eine CJK-Schriftartdatei, sonst werden sie als Kästchen dargestellt – subsette sie, um die Größe klein zu halten.

Zu beachtende Grenzen (next/og / satori): nur Flexbox (kein Grid), jedes div mit mehreren Kindern benötigt display: "flex", halte das Bundle klein – die Next.js-Dokumentation zu ImageResponse listet ein 500-KB-Limit für JSX + CSS + Schriftarten + Bilder auf. Große Schriftarten verlangsamen auch das Rendering, subsette sie daher.

Schritt 2B – Astro

Verwende assets/astro/og-endpoint.ts als src/pages/og/[...slug].png.ts. Es rendert ein PNG pro Seite zur Build-Zeit mit satori + @resvg/resvg-js (npm i satori @resvg/resvg-js), und du referenzierst es von deinem Layout:

<meta property="og:image" content={new URL(`/og/${slug}.png`, Astro.site)} />

Astro.site muss in astro.config.mjs gesetzt sein. Schriftartdatei: Lege eine TTF in src/assets/fonts/ ab.

Schritt 2C – Statische Seiten / alles andere

Generiere PNGs einmalig und committe sie:

python3 scripts/generate_og.py --pages pages.json --out public/og --brand "Acme" --bg "#0f172a" --fg "#ffffff" --accent "#38bdf8"

pages.json ist eine Liste von {"slug": "pricing", "title": "...", "subtitle": "..."} (siehe assets/pages.example.json). Erfordert Pillow (pip install pillow). Übergib --font path/to/font.ttf für Markenschriftarten oder CJK-Text (z.B. Noto Sans SC). Füge dann die Tags zu jeder Seite hinzu (Vorlage in references/meta-tags.md).

Schritt 3 – Erforderliche Tags (jede Seite)

<meta property="og:title" content="Seitentitel" />
<meta property="og:description" content="Ein Satz, max. ~160 Zeichen" />
<meta property="og:image" content="https://example.com/og/page.png" />   <!-- absolute URL -->
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:url" content="https://example.com/page" />
<meta property="og:type" content="website" />
<meta name="twitter:card" content="summary_large_image" />

Next.js generiert diese aus metadata + opengraph-image.tsx; schreibe keine Duplikate von Hand.

Schritt 4 – Überprüfen (nicht überspringen)

Führe es gegen die laufende Seite aus (Dev-Server, Preview-Deploy oder Produktion):

python3 scripts/check_og.py http://localhost:3000/ http://localhost:3000/pricing
python3 scripts/check_og.py --json https://example.com/   # maschinenlesbar

Es ruft jede Seite ab, überprüft die erforderlichen Tags, dass og:image absolut, erreichbar, ein Bild-Content-Type, ~1,91:1 und mindestens 600 Pixel breit und unter 5 MB ist. Exit-Code 1 bei jedem Fehler. Behebe alles, was als ERROR markiert ist; WARN-Einträge sind Empfehlungen.

Hinweis: Soziale Plattformen cachen Vorschauen. Nach der Behebung verwende den Debugger der Plattform selbst (LinkedIn Post Inspector, Facebook Sharing Debugger), um erneut zu scrapen. X hat keinen öffentlichen Validator mehr; poste in einem Entwurf/einer DM, um zu überprüfen. localhost-URLs können von diesen Tools nicht gescrapt werden – deploye zuerst.

Gestaltungsrichtlinien für das Bild

  • 1200×630, PNG, Text innerhalb eines ~60 px Sicherheitsabstands; Titel ≤ ~60 Zeichen, max. 3 Zeilen.
  • Hoher Kontrast; es wird klein (~500 px breit) in Feeds angezeigt. Teste bei 50 % Zoom.
  • Markenname/Logo einfügen; vermeide winzigen Text (< 28 px bei 1200 Breite).
  • Siehe references/platform-specs.md für plattformspezifische Hinweise.

Erledigt, wenn

  • Jede indexierbare Seite gibt og:title, og:description, og:image (absolut), twitter:card zurück
  • check_og.py beendet sich mit Exit-Code 0 für die Startseite und mindestens eine Seite jedes Routentyps
  • Bilder sehen richtig aus (öffne ein PNG und schau es dir an)

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

getpaidskills/agents-md-starter

Creates or upgrades a repository's AGENTS.md (read by Codex, Cursor, and other agents) and a CLAUDE.md that imports it, so Claude Code, Codex, Cursor and Gemini CLI share one set of project rules. Scans the repo to detect languages, package manager, real build/test/lint commands, framework, directory layout and existing rule files (.cursorrules, .cursor/rules, CLAUDE.md, copilot-instructions), then writes a concise, verified rules file. Use when the user asks to set up AGENTS.md or CLAUDE.md, "project rules", "make Claude Code and Codex follow the same conventions", onboard an agent to a repo, or migrate .cursorrules.

getpaidskills/directory-launch-kit

Prepares a product for submission to launch platforms and directories (Product Hunt, Show HN, BetaList, Uneed, Fazier, SaaSHub, TinyLaunch, AI tool directories, agent-skill marketplaces, Reddit, V2EX and more) without submitting anything itself. Picks only the directories the product fits, writes the copy for each form within its field limits from one product.json, resizes screenshots to each platform's sizes (Product Hunt 1270x760 gallery and 240x240 thumbnail, 1200x630 OG), builds a tracker CSV, re-checks prices and rules on the live pages, and later verifies which listings went live and whether their backlinks are follow or nofollow. Use when the user asks where to launch, how to submit to Product Hunt or AI directories, wants launch copy, a directory list, backlinks, or a launch tracker.

getpaidskills/launch-checklist

Pre-launch audit for a website or SaaS - checks SEO tags (title, description, canonical, lang, Open Graph), robots.txt, sitemap.xml, favicon and apple-touch-icon, real 404 status, HTTPS redirect, legal pages (privacy, terms, refund), image alt text, page weight and response time, plus a payment self-check (webhook signature, raw body, idempotency, refunds, secrets, success-page grants), then lists the problems and fixes them in the codebase. Ships a no-dependency crawler script (audit_site.py) that produces a pass/warn/fail report. Use when the user says they are about to launch, ship, go live, submit to Product Hunt or AI directories, or asks "is my site ready", "SEO check", "why is my site not indexed", or wants a launch checklist, or asks whether their payment or webhook setup is safe.

getpaidskills/legal-pages

Drafts a Privacy Policy, Terms of Service and Refund Policy for a SaaS, digital product or website from a short questionnaire, adapted to the payment provider (Creem, Paddle, Lemon Squeezy as Merchant of Record, or Stripe/direct) and to where users are (EU/UK GDPR, California CCPA/CPRA, China PIPL notes), then renders them as Markdown, HTML or Next.js pages and links them in the footer. Output is a starting template, NOT legal advice - the user must review it and have it checked by a qualified lawyer. Use when the user needs privacy policy, terms, refund policy, legal pages, or a payment provider (Paddle/Creem/Lemon Squeezy/Stripe) review asks for them.

Verwandte Skills