PPTX.gallery

Docs

API & registry reference

Everything in the gallery is consumable programmatically: JSON endpoints per dimension, an open OPF registry, llms.txt discovery, and a prebuilt search index. All endpoints are public, read-only, and require no authentication.

OPF default catalog

PPTX.gallery owns and publishes the default OPF catalog, the catalog whose source is https://www.pptx.gallery. A document embeds the records it uses under catalogs.default, keyed by id; every OPF snippet on this site already does. Every record validates against its OPF companion schema; gallery-only metadata sits in an x-gallery member, which embedding drops. Use these endpoints to look up ids such as narrative or design.theme. Chart types, languages and social platforms are engine vocabularies: their records are display metadata, and a document writes the chart type, the BCP-47 language tag or the platform key directly.

KindIndexIn a document
audiences/audiences/index.jsoncatalogs.default.audiences
chart-types/chart-types/index.jsondisplay metadata
color-schemes/color-schemes/index.jsoncatalogs.default.colorSchemes
font-schemes/font-schemes/index.jsoncatalogs.default.fontSchemes
languages/languages/index.jsondisplay metadata
layouts/layouts/index.jsoncatalogs.default.layouts
narratives/narratives/index.jsoncatalogs.default.narratives
purposes/purposes/index.jsoncatalogs.default.purposes
social-platforms/social-platforms/index.jsondisplay metadata
themes/themes/index.jsoncatalogs.default.themes
tones/tones/index.jsoncatalogs.default.tones

GET /<kind> with Accept: application/json returns the same index; GET /<kind>/<id>.json returns one record. The index carries contentSha256, the SHA-256 of the canonical JSON of its records without x-* members. OPF engines never fetch these URLs: a host registers the catalog, for example the released catalog package in @openpresentation/gallery (catalogs: [defaultCatalog]), and a saved document carries every record it references.

Catalog JSON endpoints

These envelopes carry the gallery's presentation data in its own shape; they are not OPF records. Each live gallery dimension is exposed as a static JSON endpoint. Responses use a shared catalog envelope with version, dimension, and items at minimum, plus dimension-specific supporting data (best practices, categories, legacy aliases).

Envelope shape

{
  "version": "1.0",
  "dimension": "color-schemes",
  "items": [ ... ],
  "name": "Color Schemes",
  "description": "...",
  "routes": {
    "web": "https://www.pptx.gallery/colors",
    "api": "https://www.pptx.gallery/api/color-schemes.json"
  },
  "opfSchema": {
    "name": "design.colorScheme",
    "url": "https://openpresentation.org/schema/opf/v1#/$defs/Design/properties/colorScheme"
  }
}

Legacy aliases redirect with HTTP 308: /api/colors.json → /api/color-schemes.json, /api/typography.json → /api/font-schemes.json, and /api/social-platforms.json → /api/socials.json.

Font replacement data is additive: /api/font-replacements.json lists, for every family a font scheme names, its license class and its open replacement (metric-compatible, look-alike only, none identified yet, or the open font itself), with the OPF core commit and policy sha256 it was imported from. The same per-role data appears as fontReplacements in /api/font-schemes.json and as metadata.font_replacements in font-scheme registry descriptors; scheme records gain one field, webFontPackages (the bundled, pinned font packages behind a scheme's web font families, for example @fontsource-variable/roboto@5.3.0), and webFontUrl is now always null: the gallery no longer mirrors a font CDN stylesheet URL. OPF exports name the selected font (opf-pptx 0.10.0 and later; earlier releases wrote the substitute), so policy.pptxExport.availableFrom and caveat are null and a role's powerpointExport carries only the selected family.

OPF registry

The registry is the delivery contract for OPF design choices — the shadcn-style mechanism that CLIs and agents read to inject OPF into a deck. The canonical index lives at /registry.json; each item has a descriptor at /registry/{category}/{slug}.json.

Index shape

{
  "$schema": "https://pptx.dev/schema/registry.schema.json",
  "opf_version": "1.0",
  "items": [
    {
      "name": "hero-split",
      "type": "registry:layout",
      "registry_url": "https://www.pptx.gallery/registry/layouts/hero-split.json",
      "dependencies": [],
      "opf_version": "1.0"
    }
  ]
}

Registry categories

  • layouts — registry:layout (30 descriptors)
  • color-schemes — registry:color-scheme (14 descriptors)
  • font-schemes — registry:font-scheme (89 descriptors)
  • backgrounds — registry:background (6 descriptors)
  • narratives — registry:narrative (48 descriptors)
  • charts — registry:chart (27 descriptors)
  • themes — registry:theme (3 descriptors)

Descriptor fields

FieldMeaning
nameStable item name; matches the gallery slug.
typeRegistry item type, e.g. registry:layout or registry:color-scheme.
registry_urlCanonical URL of this descriptor.
slug / categoryRoute slug and registry category.
descriptionHuman-readable summary of the design choice.
web_urlThe browsable gallery page for the item.
opfCopyable OPF snippet(s) — the same JSON shown on the gallery page.
copy_targetsPre-rendered copy payloads (e.g. raw OPF JSON) with content types.
metadataDimension-specific metadata such as tags, categories, or source info.
dependenciesSlugs of other registry items this item references.
opf_versionCatalog API version the descriptor was generated against.

The registry format is open: third parties can publish their own registry.json (e.g. a brand-team OPF registry) using the same schema, and downstream tools can consume it interchangeably. Breaking changes to the format require a version bump and a migration path.

Discovery endpoints

  • /llms.txt — full machine-readable catalog index for LLMs and AI agents: every dimension, item, JSON endpoint, and registry descriptor.
  • /sitemap.xml — every catalog page and how-to article.
  • /api/search-index.json — prebuilt search index over all gallery items, dimensions, and articles (title, href, group, description, keywords). The same index powers the site’s ⌘K search.

The stable-slug contract

  • Every gallery item has a stable, human-readable slug (e.g. color-scheme/corporate-trust) that OPF documents reference by name. Renaming a slug is a breaking change across the ecosystem.
  • Detail pages follow /{dimension}/{slug}; legacy routes (/colors, /typography) remain for SEO continuity.
  • Responses are static and cacheable; endpoints send Cache-Control headers and are safe to fetch at build or generation time.
  • No authentication, no rate limiting, no accounts. The catalog is a public good.

See also