Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Use Next.js’s ImageResponse with a TSX element to render a 1200×630 PNG for social previews. In the App Router, place an explicit handler at app/api/og/route.tsx when you need a callable endpoint and request parameters. Use opengraph-image.tsx when the image is the metadata asset for a specific route. Both approaches render JSX on the server, not in a browser, so the supported CSS subset, runtime, font files and bundle size determine whether an example works unchanged.

What TSX Open Graph generation actually does

Next.js passes a React element to ImageResponse. The renderer converts that element and its inline, CSS-like styles into an image response. As the Next.js documentation puts it, “The ImageResponse constructor allows you to generate dynamic images using JSX and CSS.” TSX is therefore the authoring format; it does not make the output a client-side webpage.

Vercel recommends a 1200×630-pixel canvas for Open Graph images. The documented renderer uses Satori and Resvg, supports flexbox and a subset of CSS, and does not support CSS Grid. Fonts must be TTF, OTF or WOFF. Vercel’s guide states a 500 KB maximum bundle size including JSX, CSS, fonts, images and other assets. Treat those as implementation limits from the current documentation, not browser-equivalent behavior.

Choose an App Router route or metadata image

Explicit route handler: app/api/og/route.tsx

Choose a route handler when callers need a stable URL such as /api/og?title=..., request-derived content, or an endpoint that can be reused by several pages. You control query parsing, validation, response headers and caching in one place.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Sale
AEEZO Digital Picture Frame, 10.1 Inch Digital Photo Frame with 1280 * 800 HD IPS Touch Screen, Smart Digital Frame Built-in 32GB Memory, Auto-Rotate Easy Setup via AiMOR APP(Black)
  • Instantly Share Every Moment with Loved Ones: With the AiMOR app, Instantly share life's special moments to the digital picture frame from anywhere. You can also grant photo upload access to family members and friends. Move beyond fleeting messages—enjoy a continuous stream of photos and videos on the digital photo frame. Watch images transition in a slideshow, as if every captured moment is unfolding right beside you, no matter the distance.
  • 10.1 Inch Crystal-Clear Touchscreen: Featuring a 1280×800 high-definition IPS touchscreen with adjustable brightness, this digital picture frame faithfully reproduces every intricate detail. Switch to Fill Frame mode to freely adjust the display area of your photos, allowing your cherished memories to unfold naturally, just as you prefer.
  • Large Memory with Auto-Rotate Function: Built-in gravity sensor auto-adjusts photo orientation based on how the smart picture frame is placed, ensuring landscapes and portraits are always perfectly displayed. Store over 50,000 photos directly on the digital frame's 32GB internal storage. Also the digital frame support max 64GB SD card for file management. (Please note: Photos/videos cannot play directly from SD cards. You must import them into the digital frame first.)
  • Thoughtfully Designed with Smart Features: The built-in light sensor can automatically adjust digital photo frame screen brightness according to ambient light level to provide best visual effect. Customize your experience with versatile settings like slideshow, adjus brightness/volume, and sleep mode ect. You can also enable time and weather displays in the bottom corner—stay informed with a glance, without reaching for your phone.
  • A Gift That Connects Everyone You Loved: Gifting this electronic picture frame to parents, grandparents, children, or friends means surrounding them with an ever-flowing stream of memories and warmth. This electronic photo frame is a vessel for shared emotions and unspoken care—bridging distances and turning every photo transition into a moment that brings hearts closer. Easy to setup, designed for all ages—grandparents and grandchildren alike can master this digital photo frame in no time.

Route-associated image: opengraph-image.tsx

Choose the metadata convention when an image belongs to one route’s metadata. Next.js supports opengraph-image.tsx and can generate the image at build time or request time. The generated asset is associated with that route instead of being an independently designed API surface.

Question Route handler opengraph-image.tsx
URL control Explicit endpoint and parameters Managed as route metadata
Best input Query, headers or other request data Fixed or route-specific metadata
Timing Usually request-time for dynamic input Build-time or request-time, depending on route configuration
Operational focus Validation, caching and API behavior Metadata inheritance and crawler access

Prerequisites and version checks

  • Vercel’s current guide describes Node.js 22 or newer and Next.js 12.2.3 or newer for its implementation.
  • For an App Router example, the guide says the package used by the example is already included; do not add a second package until you have checked your Next.js version.
  • Pages Router and non-Next.js examples may use @vercel/og. The import and file convention change with the router.
  • Confirm whether your deployment uses Node.js or Edge. Vercel documents different response-syntax support: Pages Router with Node.js does not support the return new Response(...) syntax shown in some examples, while Pages plus Edge and App Router with Node.js or Edge do.
  • Keep the OG endpoint fetchable by social crawlers. Vercel recommends allowing these routes in robots.txt; review the crawler policy of your own deployment.

Versions and runtime behavior change, so check the current Next.js and Vercel documentation when you upgrade or move hosting.

Build a dynamic TSX route handler

Create app/api/og/route.tsx with this minimal, runnable implementation:

Rank #2
Sale
Frameo 10.1" WiFi Digital Picture Frame, Electronic Photo Frames - 32GB
  • SHARE MOMENTS INSTANTLY & SECURELY: Easily send photos and videos (up to 15s) from anywhere to your Frameo digital frame via the free Frameo app (iOS/Android). With advanced privacy protection, your frame only receives content from invited family and friends, ensuring your personal memories stay completely safe and private. Invite multiple loved ones to join — so everyone can share and stay connected.
  • 10.1-INCH IPS HD TOUCH SCREEN: The stunning 1280x800 resolution of this 10.1 inch smart WiFi digital photo frame delivers true-to-life clarity, while the IPS panel ensures vivid, crisp images from any viewing angle. Designed with an intuitive, grandparent-friendly touch screen, swiping through memories and adjusting settings is effortless for all ages.
  • 32GB LARGE STORAGE: Ample storage meets your daily storage needs! The built-in 32GB memory holds over 80,000 photos, while the microSD card slot allows for easy transfers and backups. Bypass the 15-second app limit by uploading longer videos directly via microSD card. (Note: For optimal compatibility, please use microSD cards up to 32GB, formatted as FAT32. Larger capacities (e.g., 64GB/128GB) may not work properly.)
  • PERFECT GIFT FOR LOVED ONES: Share everyday memories instantly via WiFi and the Frameo app — from grandkids’ smiles and family vacations to pet videos and daily moments. Designed with a simple, senior-friendly setup and packed in an elegant gift-ready box, this Frameo digital photo frame is a thoughtful present for Mother’s Day, Father’s Day, Christmas, birthdays, anniversaries, or just because.
  • MORE THAN A PHOTO FRAME: Seamlessly sync your calendar to keep track of daily plans, important events, and personal agendas. Organize memories into custom albums, display up to 6 photos in collage mode, and send themed greetings for birthdays and holidays. With date, clock, weather, brightness, volume, and custom sleep mode settings, it’s a smarter way to enjoy photos and daily life.
import { ImageResponse } from 'next/og'

export async function GET() {
  return new ImageResponse(
    (
      <div
        style={{
          display: 'flex',
          width: '100%',
          height: '100%',
          alignItems: 'center',
          justifyContent: 'center',
          background: 'white',
          color: 'black',
          fontSize: 64,
        }}
      >
        Hello from TSX
      </div>
    ),
    { width: 1200, height: 630 },
  )
}

Start the app and request /api/og. The response is an image, so save it as a PNG or let an image-capable client display it. The documented ImageResponse options also include emoji selection, custom fonts, debug mode, HTTP status, status text and headers. Width and height default to 1200 and 630, but specifying them makes the contract obvious.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Add validated request data

Vercel’s examples read a title from the request URL and truncate it to 100 characters. The following version handles a missing value, limits length and avoids using untrusted values as markup or URLs:

import { ImageResponse } from 'next/og'

export const runtime = 'edge'

export async function GET(request: Request) {
  const { searchParams } = new URL(request.url)
  const rawTitle = searchParams.get('title') ?? 'Untitled page'
  const title = rawTitle.replace(/[u0000-u001Fu007F]/g, '').slice(0, 100)

  return new ImageResponse(
    (
      <div
        style={{
          display: 'flex',
          flexDirection: 'column',
          width: '100%',
          height: '100%',
          padding: '72px',
          background: '#111827',
          color: '#f9fafb',
          fontFamily: 'Arial',
        }}
      >
        <div style={{ display: 'flex', fontSize: 30, color: '#93c5fd' }}>
          itechguides.com
        </div>
        <div style={{ display: 'flex', marginTop: 36, fontSize: 64, lineHeight: 1.1 }}>
          {title}
        </div>
      </div>
    ),
    { width: 1200, height: 630 },
  )
}

Validate any slug, identifier or numeric option before using it. For external images, allow-list hosts, enforce a size and timeout policy, and decide what happens when the asset is unavailable. A query parameter is not a security policy merely because it came from your own page.

Rank #3
Sale
Frameo 15.6'' Digital Picture Frame, Digital Photo Frame WiFi Large Display
  • Instant Share via Frameo APP; Connect your frame to WIFI, and share photos and videos(Max.15s) quickly via a reliable App - Frameo to our electronic photo frame from anywhere, privately and safely, no member numbers limited. For those who already have a Frameo digital frame, no need to download another app. It has 32GB built-in memory and support up to 32GB external storage, enables you to share 50,000+ photos. Also, you can transfer via external storage or through a computer, no Wi-Fi needed
  • A Present of Love; Still looking for the wonderful present for your loved ones? Whether you need birthday presents for women, wedding presents, anniversary presents for him/her, house warming presents for a new home, retirement presents, or for best friend, Pastigio has you covered. Our digital frame makes great presents for men, women, mom, dad. It’s more than just a device; it's a heartfelt present of love and memories. Also comes in an elegant package, making it a delightful present to give
  • FHD IPS Touch Screen Display; Pastigio digital picture frame equipped with a 15.6 inch digital panel with FHD 1920x1080 Pixels for vivid color and exquisite details. Set up and view photos conveniently with the touch screen. Through the wifi digital photo frame, You can see the furry hair of your lovely pet, see the youthful freckles on smiley faces, see how every teeny tiny detail builds up your colorful life. Multiple image formats are supported, JPG/JPEG/BMP/PNG, and video format by MP4
  • Fun Features; Use the "React" feature to send emojis back to loved ones in real time. Let them know how you like the picture they sent to your frame. This wifi digital frame also can select the main part and adjust the photo to fill the frame, Auto-rotate the picture to portrait or landscape, and adjust brightness and volume as you like. For eco-friendly concerns, you can set a sleep mode in Pastigio digital photo frame. It will automatically turn off when the sleep mode is on
  • Support Non-WiFi Transmission; If WiFi and Apps seem overwhelming for you or your family, no need to worry! Our digital frame supports non-WiFi transmission. You can easily upload photos via SD Card(Full Sized) /USB Drive (Only support FAT32 format), or through computer (Windows Only; USB-C cable needed). This feature is user-friendly for seniors unfamiliar with electronics or app downloads, allowing them to quickly enjoy the frame. The SD card(Full Sized) or USB drive can be used directly as external storage

Use the metadata convention

For a route such as app/blog/[slug]/, add opengraph-image.tsx in the route segment. Return an ImageResponse from its default export (or use the convention supported by your Next.js version), then let Next.js attach the generated image to that route’s metadata. This keeps social-image ownership next to the page that uses it. If the title comes from route data, load and validate that data in the metadata-image implementation, and keep the same 1200×630, CSS-subset and asset-size constraints.

Use the explicit handler instead when a design system, preview UI, webhook or other service must call one image URL with arbitrary input. Do not expose database secrets or unrestricted fetch URLs through either convention.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Styling that survives the renderer

Prefer supported layout primitives

  • Use flexbox with explicit display: 'flex', direction, alignment and gaps.
  • Set dimensions, padding, colors, font sizes and line heights directly in the style object.
  • Do not rely on CSS Grid; the Vercel guide lists it as unsupported.
  • Avoid browser-only layout assumptions, pseudo-elements and styles that require a live DOM.

Fonts and images

Use TTF, OTF or WOFF files and include only the weights you need. Vercel recommends TTF or OTF for faster font parsing. A typical custom-font option is an array containing the font name, binary data and weight; load the file in a way supported by your runtime, then pass it through the fonts option. Keep the complete deployment bundle under the documented 500 KB limit.

Rank #4
10.1 inch Smart WiFi Digital Picture Frame-Load from Phone Capability
  • ✅Privacy Protection:Pair your phone with the digital picture frame using its unique pairing code. Photos transfer directly from your mobile device to the frame once the valid code is entered — no third‑party servers are involved. Only senders and recipients have access to your images. UHALE protects your privacy.
  • ✅ 10.1‑Inch IPS Touch Screen:Digital Photo Frame Equipped with a 10.1‑inch 1280×800 IPS touchscreen for vivid image performance. Perfect for displaying breathtaking scenery and warm family‑gathering snapshots. Supports landscape / portrait placement and multiple photo & video formats.
  • ✅ 16GB Storage & Expandable Memory:Digital Picture Frame Built‑in 16GB internal storage with Micro‑SD card expansion support. Holds roughly 30,000 photos (300KB each), so you can preserve all your precious photos and videos.
  • ✅ Share with Loved Ones — No Distance Limits:Invite family and friends to send photos directly to your digital photo frame. Even miles apart, everyone can enjoy your precious memories in real‑time.
  • 🎁 Perfect Sentimental Gift Choice:An emotional‑driven gift for birthdays, holidays and anniversaries. Great for parents, grandparents and long‑distance family members. Share real‑life photos remotely via your phone, bridging distance with sweet memories. A thoughtful alternative to traditional gifts to deliver your love anytime.

Remote images and fonts introduce availability and trust problems. Prefer packaged assets or controlled origins, validate content, and provide a fallback when a fetch fails. International text may require a font with the necessary glyphs; test accented scripts and emoji rather than assuming the default font covers them.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Production concerns: caching, crawlers and performance

Cache deliberately

Fixed metadata images are good candidates for build-time generation. Request-driven images should have a bounded input space and a cache key that includes every visual input. Vercel says its library adds caching headers to CDN output, but actual behavior depends on the framework and deployment configuration; inspect the response from your deployment before promising cache duration or freshness.

Keep rendering predictable

  • Limit text length and the number of remote assets.
  • Reuse a small set of fonts and avoid unnecessary font weights.
  • Return a clear error status for invalid input rather than rendering a broken image.
  • Use debug mode while diagnosing layout, then remove it from normal output.
  • Check social crawler access, including any robots.txt rule, before announcing a new image URL.

Choose Node or Edge consciously

Edge can reduce distance to crawlers, while Node may fit existing libraries or asset-loading code. The correct choice is deployment-specific. Verify the syntax, package inclusion and font-loading method against your selected router and runtime instead of copying a Pages Router example into an App Router project.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Best Value
64GB 15.6" Frameo Digital Picture Frame WiFi, Large Electronic Photo Frames
  • 【Share Photos & Videos Securely and Privately via “Frameo” App】 Easily connect your 15.6" digital picture frame to Wi-Fi (Only supports 2.4GHz Wi-Fi)and setup in just a few simple steps. Download the free Frameo app on phone (available for iOS and Android) and invite friends and family from anywhere to send their photos/videos (up to 15 seconds)to your wifi digital frame—no distance limits. Stay connected with loved ones wherever they are! Millions of users love Frameo for its private, secure way to share and display photos
  • 【64GB Large Memory & Expandable Storage】This 15.6-inch large digital photo frame has built-in 64GB storage, can store about 100,000 photos to keep your favorite memories always within reach. It also supports easy expansion with SD cards and USB flash drives, making it simple to import, export, and back up photos and videos—even non-WiFi. Note: 1. Please make sure the SD card/USB drive is in "FAT32" format before use. 2. For better compatibility, we recommend using a 32GB SD card/USB drive, as 64GB and 128GB options may not work properly with the frame. 3. The USB port only supports USB flash drives and does not support photos transfer from a computer
  • 【15.6-inch IPS Full HD Touch Screen】This 15.6" large digital photo frame uses a 1920 x 1080 IPS Full HD display with vivid and lifelike colors, perfectly preserving the freshness and beauty of each photo. The IPS panel has a 178° viewing angle, offering stunning visual effects from any angle. The user-friendly touchscreen interface makes operation simple and convenient. Supports multiple image formats, including JPG, JPEG, BMP, PNG, and MP4 videos. Product Dimensions: approx. 15.43 x 9.61 inch.
  • 【Powerful Features】①Use the "Reply" function to instantly send emojis to loved ones to express your appreciation for the photos they share. ②Auto-rotate photos with desktop/wall mounts. You can switch between landscape and portrait modes, and hang it on the wall as a decoration. ③The slideshow feature plays your photos smoothly in a continuous loop. ③More custom settings, as weather/clock display, playback order, hiding/publishing pictures, brightness adjustment, sleep mode, etc
  • 【Video With Sound, Memory More Vividly】Break free from traditional photo frames! This 15.6-inch WiFi digital photo frame has a built-in speaker. You can play or import video with sound by inserting an SD card or USB flash drive. Additionally, you can upload videos to the digital frame via the Frameo app from your mobile phone. (Note: There is no time limit for uploading videos via SD card/USB, but the Frameo app only allows uploading 15-second videos)

Common failures and fixes

Symptom Likely cause Fix
Module not found for next/og Old Next.js version or wrong router example Confirm the Next.js version and use the import documented for that router; upgrade only after checking compatibility.
Blank or partially styled image Unsupported CSS such as Grid or browser-only behavior Replace it with flexbox and explicit inline styles.
Font missing or text falls back Unsupported format, unavailable asset or oversized bundle Use TTF, OTF or WOFF, verify loading at runtime and reduce files below the documented limit.
Dynamic title breaks layout Unbounded user input or long unbroken text Validate, truncate, normalize whitespace and design a wrapping or smaller-size fallback.
Social site cannot fetch the image Robots, authentication, timeout or deployment URL issue Allow the route for crawlers, make it publicly reachable and inspect the crawler request and response status.
Works locally but fails after deploy Different runtime, missing asset or unsupported response syntax Match local and production runtime settings and test the deployed URL directly.

Or skip the browser setup

If you need screenshots of an already-rendered page rather than TSX-generated artwork, ScreenshotNeo provides a single-call website screenshot API. It accepts cookie and consent banners before capture and removes more than 60 known consent platforms, newsletter popups and chat widgets. Bot checks, CAPTCHAs, blank pages, timeouts, failed loads and cache hits are not billed, and response headers identify the page verdict and billing result. Its MCP server exposes take_screenshot, get_page_info and capture_pdf to Claude, Cursor and other MCP clients.

See the ScreenshotNeo API documentation for all options. A direct request looks like this:

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

Python:

import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)

Node.js:

const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);

ScreenshotNeo includes full-page and element captures, dark mode, device and retina settings, custom CSS and JavaScript, waits, request blocking, headers, cookies, user agents, geolocation, transparent backgrounds, resizing, TTL caching, signed links, asynchronous webhooks, bulk capture of up to 100 URLs per call, usage data and an OpenAPI specification. It offers 1,000 screenshots per month free with no card; paid plans start at $5 for 3,000. Create a free ScreenshotNeo account.

Checklist before publishing an OG image

  1. Choose the metadata convention or an explicit route based on whether you need route ownership or a reusable endpoint.
  2. Confirm your Next.js, Node.js and deployment-runtime versions.
  3. Render at 1200×630 unless a consuming platform requires another size.
  4. Use flexbox and the documented CSS subset; avoid Grid.
  5. Keep fonts in TTF, OTF or WOFF and the bundle within 500 KB.
  6. Validate and constrain every dynamic title, image URL and font input.
  7. Test the deployed URL, crawler access, missing assets and long or international text.

Frequently Asked Questions

Can I use ordinary external CSS files in an ImageResponse?

Treat the renderer as a server-side, limited CSS environment. Put required styles in the element or in a supported, bundled form, and verify each property against the current renderer documentation rather than assuming browser CSS support.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Should every page have a unique generated image?

Only when the visual difference helps sharing or identification. A stable build-time image is simpler and cheaper to operate; use request-time generation when the content genuinely depends on route or query data.

What file format does ImageResponse return?

The standard examples return a PNG image response. Set response headers or status options only when your framework and deployment support the behavior you need.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.