Tavotto
AI drew your research figure. Tavotto makes it publication-ready: edit matplotlib figures on a canvas, lay out in mm, check journal rules. Free, open source.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證OG image generator, templates, checker, and gallery. Open-source Next.js + Satori kit for Open Graph images (og:image), with 430+ real OG image examples.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
OG Image: open-source generator, templates, checker, and gallery
Make an OG image (Open Graph image) for every page of your site. This repo is the full source of ogimage.org: a free OG image generator, nine Next.js + Satori templates, an Open Graph checker, and a gallery of 430+ real OG image examples.
No hosted API. No database. No sign-up. MIT license. Clone it, self-host it, and ship your own images.
If it helps you, star the repo. Made by Ilias Ism (@illyism).檢視完整 README ↗Make an OG image (Open Graph image) for every page of your site. This repo is the full source of ogimage.org: a free OG image generator, nine Next.js + Satori templates, an Open Graph checker, and a gallery of 430+ real OG image examples.
No hosted API. No database. No sign-up. MIT license. Clone it, self-host it, and ship your own images.
If it helps you, star the repo. Made by Ilias Ism (@illyism).
| Tool | What it does | Live |
|---|---|---|
| OG image generator | Type a title, pick colors, download a 1200×630 PNG | ogimage.org/generator |
| OG image templates | Nine ImageResponse routes you can copy into a Next.js app | ogimage.org/templates |
| OG image checker | Tests the Open Graph tags, image size, and link preview of a URL | ogimage.org/checker |
| OG image gallery | 430+ real OG image examples from live startups, by category | ogimage.org/inspiration |
An OG image is the picture that X, Facebook, LinkedIn, Slack, Discord, WhatsApp, and iMessage show when someone shares a link. One meta tag sets it:
<meta property="og:image" content="https://your-domain.com/og/home.png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta name="twitter:card" content="summary_large_image" />
The standard OG image size is 1200×630 pixels (ratio 1.91:1), as PNG or JPEG, below 1 MB.
Guides: What is an OG image? · OG image size · og:image meta tag · Next.js OG image · Open Graph tags
Requires Bun.
git clone https://github.com/Illyism/ogimage.git
cd ogimage
bun install
cp .env.example .env
bun dev
Open http://localhost:3000. The generator, the templates, the checker, and the gallery run without any keys.
Each template is a route handler that returns a 1200×630 PNG through next/og ImageResponse. Satori renders the JSX. Tailwind classes go in the tw prop.
// app/og/route.tsx
import { ImageResponse } from 'next/og'
import type { NextRequest } from 'next/server'
export async function GET(request: NextRequest) {
const title = request.nextUrl.searchParams.get('title') ?? 'Hello'
return new ImageResponse(
<div tw="flex h-full w-full items-center justify-center bg-black p-20 text-7xl font-bold text-white">
{title}
</div>,
{ width: 1200, height: 630 },
)
}
Point og:image at the route:
export const metadata = {
metadataBase: new URL('https://your-domain.com'),
openGraph: { images: ['/og?title=Launch%20week'] },
twitter: { card: 'summary_large_image' },
}
This repo uses core/seo.tsx as the metadata helper.
All templates are in app/og/templates/. Each one reads its text from the query string, so one route serves every page.
| Template | Card | Query |
|---|---|---|
headline | Two-line headline with a marker on the second line | title, highlight, subtitle, cta, site |
blog-post | Title, excerpt, and author | title, excerpt, author, tag, site |
screenshot | Live capture of a page in a browser window | path |
phone | Live capture of the mobile page in a phone, beside a headline | title, subtitle, cta, site |
button | Emoji, headline, and one large button | emoji, title, cta |
image | Profile card: picture, name, role, handle | name, role, handle |
icon | Icon tile beside a title | title, subtitle |
emoji | One large emoji | emoji, label |
city | Photo of the city of the visitor (needs UNSPLASH_KEY) | brand, prefix |
<meta
property="og:image"
content="https://your-domain.com/og/templates/blog-post?title=Launch%20week&author=Jane"
/>
The generator at /generator uses one more route, app/og/generator/route.tsx, with title, subtitle, site, layout, bg, and accent. This site uses that route for its own link previews. See core/seo.tsx.
Fonts. The cards use Geist, Geist Mono, and Instrument Serif from assets/fonts/. app/og/components/render.ts loads them once. Satori reads TTF, OTF, and WOFF, not WOFF2.
Screenshots. The screenshot and phone templates capture a live page through ScreenshotOne (affiliate link). Set SCREENSHOT_API_URL and SCREENSHOT_API_KEY. Without them, both templates show a sample capture.
The gallery is a git CMS. One site is two files: content/gallery/{domain}.json and public/og/{domain}.{ext}.
Add one site:
bun run gallery:add https://example.com saas productivity
Find good cards automatically:
bun run gallery:find # YC companies, newest first
bun run gallery:find --source hn # popular Show HN launches
bun run gallery:find --file sites.txt # your list, one URL per line
bun run gallery:find --limit 80 --add 15 --min-score 8 --dry-run
gallery:find fetches each site, rejects images with the wrong size or ratio, and asks Claude to score the design from 1 to 10. Cards that pass get a name, a description, categories, and colors. It needs ANTHROPIC_API_KEY.
Open a pull request with the new files. Details are in CONTRIBUTING.md.
| Path | Role |
|---|---|
app/og/templates/ | OG image templates (Satori + Tailwind) |
app/generator/ | Browser OG image generator |
app/checker/ | Open Graph tag and image checker |
app/inspiration/ | Gallery, category pages, and post pages |
content/gallery/ + public/og/ | Gallery data and images |
content/pages.json | Guides and static pages |
scripts/ | add-og.ts and find-og.ts |
docker build -t ogimage .
docker run -p 3000:3000 --env-file .env ogimage
Any Docker host can build from the root Dockerfile. The image uses Next.js output: 'standalone'.
bun run check # lint + typecheck
bun run build # production build
Copy .env.example to .env. All variables are optional for local work.
| Variable | Purpose |
|---|---|
RESEND_API_KEY | Resend API key for gallery suggestions |
CONTACT_EMAIL | Reply-to and inbox for gallery suggestions (default: [email protected]) |
NEXT_PUBLIC_POSTHOG_KEY | PostHog project key |
NEXT_PUBLIC_POSTHOG_HOST | PostHog ingest host |
SCREENSHOT_API_URL | Base URL of the screenshot API (screenshot, phone templates). Works with ScreenshotOne |
SCREENSHOT_API_KEY | API key for that service |
UNSPLASH_KEY | Unsplash access key for the city template |
ANTHROPIC_API_KEY | Design review in bun run gallery:find |
Without the screenshot variables, the screenshot templates show a sample capture.
Plausible page views are sent only when the site runs on ogimage.org. A fork sends nothing. To use your own Plausible site, change the host and the domain in app/layout.tsx.
What size must an OG image be? 1200×630 pixels. See the OG image size guide.
Can I use this without Next.js?
Yes. Deploy this repo and point the og:image tag of any site at a template URL. Or use the generator and upload the PNG.
How do I test my OG image? Paste the URL of your page into the OG image checker.
Is it free for commercial use? Yes. The code is MIT. The gallery images belong to their sites and are shown as examples.
MIT. Fork the kit, the gallery, and the site.
ImageResponse