Loading...
Loading...
Schema Explorer
Designer-friendly catalogue of the canonical EBU manifest schema. Browse the top-level fields, see every operator-input type with a real visual mock, and skip the JSON-Schema jargon entirely.
14
Manifest fields
6
Required
5
Clusters
9
Operator-input types
Everything an OGraf manifest can contain — required fields in pink, optional in slate. Click any branch below to jump to the detailed card.
required · optional · click any branch to jump to its full card below
Everything that can live at the top of an .ograf.json manifest, grouped into the five things designers actually care about: who is this graphic, how does it behave, what data does it ask the operator for, what custom buttons can the operator press, and what does it need from the renderer.
Who is this graphic? A name, a version, a credit.
How does it run? Pages, modes, where it can play.
How many separate views your graphic has. -1 means dynamic (graphic decides at runtime), 0 is a fire-and-forget sting, 1 is a single state that stays on screen until stopped (a lower third), 2+ is a multi-page graphic the operator clicks through. Default is 1.
Example: default 1 · min -1 · -1 = dynamic
What the operator types in — like a form: name, title, score.
The minimum the renderer must guarantee — size, transparency, audio.
A list of acceptable rendering environments — at least one entry must be satisfied. Each entry can constrain resolution, frame rate, internet access, and the rendering engine + version. Constraints use min/max/exact/ideal so the renderer can negotiate the best match.
Inside the schema field — that's the form the controller builds for the operator. These are the input types you can use, each one with a mock of what the operator actually sees in the controller. Compose them to ask for whatever your graphic needs: name, score, photo, colour, position…
What the operator sees
Name
What the operator sees
Quote
What the operator sees
Theme music
/audio/intro.mp3What the operator sees
Logo
station-logo.svg
Drop or browse
What the operator sees
Position
What the operator sees
Accent
#2563ebWhat the operator sees
Overlay
#0f172accα 0.80What the operator sees
Opacity
72%100%Two extras every field can have
hidden: true — when present, the field's value is excluded from the graphic's display label in playout/automation UIs. Use it for technical or noisy fields.order: 0 — UI ordering hint. Lower numbers come first. Lets you control where each field appears in the operator's form.Copy the prompt below into any chat AI. It teaches the model the OGraf rules at a level a designer can rely on — required fields, the canonical gddTypes, vendor extensions, the lot.
You are an OGraf manifest expert helping a broadcast designer create or debug an .ograf.json manifest.
CONTEXT
- OGraf is the EBU's open specification for HTML-based broadcast graphics: https://ograf.ebu.io
- Canonical JSON Schema (root): https://ograf.ebu.io/v1/specification/json-schemas/graphics/schema.json
- Sub-schemas live under /lib (action.json, constraints/{boolean,number}.json) and /gdd (object.json, basic-types.json, gdd-types.json)
- A manifest is plain JSON.
REQUIRED top-level fields
$schema, id, name, main, supportsRealTime, supportsNonRealTime
OPTIONAL top-level fields
version, description, stepCount, author, customActions, schema, renderRequirements, thumbnails
CONSTRAINTS (often missed)
- additionalProperties: false at every level. The only escape: vendor extensions prefixed "v_" — allowed at every level (manifest root, author, action, thumbnail, requirement, GDD field).
- stepCount is a NUMBER with minimum -1 and default 1. Use -1 for dynamic, 0 for fire-and-forget sting, 1 for stays-on (lower third), 2+ for multi-page. (Do NOT use the string "dynamic".)
- thumbnails use { "file": "...", "resolution": { "width": N, "height": N } } — NOT { "src", "width", "height" } flat.
- renderRequirements is an ARRAY of requirement objects (any-of). Each requirement may have resolution { width, height }, frameRate, accessToPublicInternet, engine[]. Constraints use the shape { min?, max?, exact?, ideal? } (number) or { exact?, ideal? } (boolean).
- customActions[].schema can be null when the action takes no parameters.
GDD TYPES (the 9 canonical operator-input types inside the "schema" field)
single-line string
multi-line string
file-path string + gddOptions.extensions[]
file-path/image-path string + gddOptions.extensions[]
select string|number|integer + enum[] + gddOptions.labels{}
color-rrggbb string · pattern ^#[0-9a-f]{6}$
color-rrggbbaa string · pattern ^#[0-9a-f]{8}$
percentage number
duration-ms integer
Every GDD field can also carry:
hidden: boolean (skip in display label)
order: number (UI sort hint, lower first)
HOW TO HELP ME
1. If I paste a manifest, validate it against the rules above and list issues with severity (error / warning / info), the JSON path, and a fix.
2. If I describe a graphic in plain English, draft a complete manifest with reasonable defaults and explain each field.
3. If I ask about a specific field or gddType, explain it in plain language and show a tiny working example.
4. Don't invent fields. If I describe something the spec doesn't cover, suggest a v_yourCompany_* extension and say so explicitly.
5. After every answer, remind me to run the Package Checker at https://ograf.dev/check (or the embedded validator) before shipping.
Now wait for me to share the manifest or describe what I want to build.A heads-up: AI output is a great draft, never a final answer. Always run what you get through the Package Checker before shipping.
The Spec page walks you through the full manifest end-to-end with a worked example. The Tutorials show 11 graphics built start to finish. The Package Checker validates a finished package against this same schema.