Image

by vercel-labsfc2a696a50a3No license18K starsListed Oct 8, 2026Updated Oct 8, 2026Repository updated yesterday

Image renderer for json-render that turns JSON specs into SVG and PNG images via Satori. Use when working with @json-render/image, generating OG images from JSON, creating social cards, or rendering AI-generated image specs.

FeaturedInstructions onlyDesign & CreativeSoftware Development
AI-generated overview

Renders JSON specs into SVG and PNG images via Satori, including OG images and social cards.

What it does
Converts JSON specs into SVG strings or PNG buffers using Satori, with a Frame root container plus layout, content and decorative components. It provides a schema, standard component registry and catalog definitions, and supports custom components defined with zod. Intended for OG images, social cards and AI-generated image specs.
When to use it
Use when working with @json-render/image to render or generate images from JSON specs, such as OG images or social cards. Also applicable when producing image output from AI-generated specs or when extending the catalog with custom components.
Requirements
Runs in a JavaScript/TypeScript environment with the @json-render/image package (Satori); PNG rendering additionally requires @resvg/resvg-js, and fonts must be supplied. Ships no scripts; instructions only.

@json-render/image

Image renderer that converts JSON specs into SVG and PNG images using Satori.

Quick Start

typescript
import { renderToPng } from "@json-render/image/render";import type { Spec } from "@json-render/core";
const spec: Spec = {  root: "frame",  elements: {    frame: {      type: "Frame",      props: { width: 1200, height: 630, backgroundColor: "#1a1a2e" },      children: ["heading"],    },    heading: {      type: "Heading",      props: { text: "Hello World", level: "h1", color: "#ffffff" },      children: [],    },  },};
const png = await renderToPng(spec, {  fonts: [{ name: "Inter", data: fontData, weight: 400, style: "normal" }],});

Using Standard Components

typescript
import { defineCatalog } from "@json-render/core";import { schema, standardComponentDefinitions } from "@json-render/image";
export const imageCatalog = defineCatalog(schema, {  components: standardComponentDefinitions,});

Adding Custom Components

typescript
import { z } from "zod";
const catalog = defineCatalog(schema, {  components: {    ...standardComponentDefinitions,    Badge: {      props: z.object({ label: z.string(), color: z.string().nullable() }),      slots: [],      description: "A colored badge label",    },  },});

Standard Components

ComponentCategoryDescription
FrameRootRoot container. Defines width, height, background. Must be root.
BoxLayoutContainer with padding, margin, border, absolute positioning
RowLayoutHorizontal flex layout
ColumnLayoutVertical flex layout
HeadingContenth1-h4 heading text
TextContentBody text with full styling
ImageContentImage from URL
DividerDecorativeHorizontal line separator
SpacerDecorativeEmpty vertical space

Key Exports

ExportPurpose
renderToSvgRender spec to SVG string
renderToPngRender spec to PNG buffer (requires @resvg/resvg-js)
schemaImage element schema
standardComponentsPre-built component registry
standardComponentDefinitionsCatalog definitions for AI prompts

Sub-path Exports

ExportDescription
@json-render/imageFull package: schema, components, render functions
@json-render/image/serverSchema and catalog definitions only (no React/Satori)
@json-render/image/catalogStandard component definitions and types
@json-render/image/renderRender functions only

Source and attribution

Source:vercel-labs/json-renderinskills/imageat commitfc2a696

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal