Logo
Now Available in Euros EU
Unlock the Full Power of ShotsVideos & zooms, animations, and effortless styles.
LoginGet back to your account
@guillaume_rygn
@ledevultime
Logoopengraphh
Terms of ServicePrivacy Policy
Logo

Frame

Layer

Background

Gradient

Solid

Wallpaper

pattern
Blur0
Noise0

Pre-made

Custom

Abstract Dark
Abstract Light
Shadow overlays
Pattern
Opacity100
Pattern Color
opengraphh Logoopengraphh
Layout Presets
Export Code
Choose your framework
Export
App Router avec ImageResponse (Next.js 13+)
Options
Inclure les types TypeScript
Inclure les polices personnalisées
Edge Function
Code Preview
route.tsx
import { ImageResponse } from "next/og";
import type { NextRequest } from "next/server";

export const runtime = "edge";

export async function GET(request: NextRequest) {
  const baseUrl = new URL(request.url).origin;

  return new ImageResponse(
    (
      <div style={{ display: "flex", width: 1200, height: 630, position: "relative", backgroundColor: "#ffffff" }}>
        <div style={{ display: "flex", position: "absolute", top: 0, left: 0, width: 1200, height: 630, overflow: "hidden" }}>
          {/* eslint-disable-next-line @next/next/no-img-element */}
          <img src={`${baseUrl}/background/abstract_light/abstract_light_1.png`} width={1200} height={630} alt="" style={{ display: "flex", position: "absolute", top: 0, left: 0, width: 1200, height: 630, objectFit: "cover" }} />
          {/* eslint-disable-next-line @next/next/no-img-element */}
          <img src={`${baseUrl}/pattern/plan.png`} width={1200} height={630} alt="" style={{ display: "flex", position: "absolute", top: 0, left: 0, width: 1200, height: 630, opacity: 1, objectFit: "fill" }} />
        </div>
        <div style={{ position: "absolute", top: 516, left: 86, width: 60, height: 60, boxSizing: "border-box", display: "flex", borderTopLeftRadius: "0px", borderTopRightRadius: "0px", borderBottomLeftRadius: "0px", borderBottomRightRadius: "0px", overflow: "hidden", zIndex: 10 }}>
          {/* eslint-disable-next-line @next/next/no-img-element */}
          <img src="/logo/logo-black.svg" width={60} height={60} alt="" style={{ position: "absolute", top: 0, left: 0, width: 60, height: 60, objectFit: "cover" }} />
        </div>
        <div style={{ position: "absolute", top: 94, left: 83, width: 543, height: "auto", boxSizing: "border-box", display: "flex", color: "rgba(0, 0, 0, 1)", fontFamily: "Montserrat", fontWeight: 600, fontStyle: "normal", fontSize: 70, lineHeight: 1.1, letterSpacing: -6, textAlign: "left", flexDirection: "column", alignItems: "flex-start", justifyContent: "flex-start", marginTop: 0, marginBottom: 0, wordBreak: "break-word", whiteSpace: "pre-wrap", zIndex: 10 }}>Every share, perfectly crafted</div>
        <div style={{ position: "absolute", top: 519, left: 165, width: 391, height: "auto", boxSizing: "border-box", display: "flex", color: "rgba(0, 0, 0, 1)", fontFamily: "Montserrat", fontWeight: 600, fontStyle: "normal", fontSize: 50, lineHeight: 1, letterSpacing: -2, textAlign: "left", flexDirection: "column", alignItems: "flex-start", justifyContent: "flex-start", marginTop: 0, marginBottom: 0, wordBreak: "break-word", whiteSpace: "pre-wrap", zIndex: 10 }}>opengraphh</div>
      </div>
    ),
    {
      width: 1200,
      height: 630,
      fonts: [
    {
      name: "Montserrat",
      data: await fetch(`${baseUrl}/fonts/montserrat-600-normal.ttf`)
        .then((res) => res.arrayBuffer()),
      weight: 600,
      style: "normal",
    }
      ],
    }
  );
}
FontsGoogle Fonts used in your project
Montserrat600normal
Images & AssetsBackgrounds, overlays and local images
Background
Background
Pattern
Pattern
logo
logo