OPF
SpecDefinition referenceView source

Speaker

A person presenting the deck. A speaker is drawn only through built-in variables ('{{speaker.name}}' inside any string, a header or footer text included, and 'var:speaker.photo' as a whole image field). No layout, cover or bio slide places a speaker on its own. See docs/templates-and-variables.md.

Metadata

Definition
#/$defs/Speaker
Form
object
Source
spec/schemas/opf.schema.json

Field index

FieldTypeReq.Description
idstringyesStable identifier for the speaker. Must be unique among speakers (a duplicate is a validation error). Addresses this speaker in built-in variables as 'speaker.<id>.<field>', such as '{{speaker.alice.title}}'.
namestringyesDisplay name. Built-in variable 'speaker.name' (first speaker) or 'speaker.<id>.name'; every name is listed by 'speakers'.
titlestring—Role or title. Built-in variable 'speaker.title' (or 'speaker.<id>.title'), for example in a footer text of '{{speaker.name}}, {{speaker.title}}'.
photoref:Asset—Source for the speaker's headshot image. Accepts an HTTPS URL, data URI, relative path (resolved against the OPF file location), local path, or 'asset:<id>' reference. Common formats are JPG or PNG; SVG is not appropriate for photographic content. Never drawn automatically: it is the built-in image variable 'speaker.photo' (or 'speaker.<id>.photo'), placed with 'var:speaker.photo' in a slide's image field. It also round-trips through PPTX provenance.
emailstring—Contact email. Never drawn automatically; available as the built-in variable 'speaker.email'.
phonestring—Contact phone number for the speaker. E.164 format is recommended. Never drawn automatically; available as the built-in variable 'speaker.phone'.
biostring—Short biographical paragraph. Never drawn automatically; available as the built-in variable 'speaker.bio', for a bio or 'about the speaker' slide you write.
organizationIdstring—Reference to an Organization.id in organization; it must name an existing organization (a validation error otherwise). Attribution metadata for hosts: no engine draws it or changes which organization is primary because of it.
socialsref:Socials—Optional social media handles or URLs for the speaker. Authoring metadata only: nothing draws speaker socials and there is no built-in variable for them (the 'socials' header/footer field draws the primary organization's socials).

id

typestringrequiredyesdefault—pattern^[a-zA-Z0-9_-]+$

Stable identifier for the speaker. Must be unique among speakers (a duplicate is a validation error). Addresses this speaker in built-in variables as 'speaker.<id>.<field>', such as '{{speaker.alice.title}}'.

id.json
{
  "id": "alice"
}

name

typestringrequiredyesdefault—

Display name. Built-in variable 'speaker.name' (first speaker) or 'speaker.<id>.name'; every name is listed by 'speakers'.

name.json
{
  "name": "Alice Chen"
}

title

typestringrequirednodefault—

Role or title. Built-in variable 'speaker.title' (or 'speaker.<id>.title'), for example in a footer text of '{{speaker.name}}, {{speaker.title}}'.

title.json
{
  "title": "VP of Engineering"
}

photo

typeref:Assetrequirednodefault—

Source for the speaker's headshot image. Accepts an HTTPS URL, data URI, relative path (resolved against the OPF file location), local path, or 'asset:<id>' reference. Common formats are JPG or PNG; SVG is not appropriate for photographic content. Never drawn automatically: it is the built-in image variable 'speaker.photo' (or 'speaker.<id>.photo'), placed with 'var:speaker.photo' in a slide's image field. It also round-trips through PPTX provenance.

photo.json
{
  "photo": "https://cdn.acme.com/headshots/alice.jpg"
}

email

typestringrequirednodefault—

Contact email. Never drawn automatically; available as the built-in variable 'speaker.email'.

email.json
{
  "email": "alice@acme.com"
}

phone

typestringrequirednodefault—

Contact phone number for the speaker. E.164 format is recommended. Never drawn automatically; available as the built-in variable 'speaker.phone'.

phone.json
{
  "phone": "+14155551234"
}

bio

typestringrequirednodefault—

Short biographical paragraph. Never drawn automatically; available as the built-in variable 'speaker.bio', for a bio or 'about the speaker' slide you write.

bio.json
{
  "bio": "Alice leads engineering at Acme, where she's spent the last six years scaling distributed systems from prototype to billions of requests per day. Previously, she was a staff engineer at Google."
}

organizationId

typestringrequirednodefault—

Reference to an Organization.id in organization; it must name an existing organization (a validation error otherwise). Attribution metadata for hosts: no engine draws it or changes which organization is primary because of it.

organizationId.json
{
  "organizationId": "acme"
}

socials

typeref:Socialsrequirednodefault—

Optional social media handles or URLs for the speaker. Authoring metadata only: nothing draws speaker socials and there is no built-in variable for them (the 'socials' header/footer field draws the primary organization's socials).

socials (property names) · Allowed values
"linkedin""x""github""youtube""instagram""facebook""tiktok""threads""mastodon""bluesky"
Complete definition constraints
Schema constraints
{
  "type": "object",
  "description": "A person presenting the deck. A speaker is drawn only through built-in variables ('{{speaker.name}}' inside any string, a header or footer text included, and 'var:speaker.photo' as a whole image field). No layout, cover or bio slide places a speaker on its own. See docs/templates-and-variables.md.",
  "required": [
    "id",
    "name"
  ],
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9_-]+$",
      "description": "Stable identifier for the speaker. Must be unique among speakers (a duplicate is a validation error). Addresses this speaker in built-in variables as 'speaker.<id>.<field>', such as '{{speaker.alice.title}}'.",
      "examples": [
        "alice",
        "alice-chen",
        "speaker-1"
      ]
    },
    "name": {
      "type": "string",
      "description": "Display name. Built-in variable 'speaker.name' (first speaker) or 'speaker.<id>.name'; every name is listed by 'speakers'.",
      "examples": [
        "Alice Chen",
        "Bob Lee",
        "Dr. Carla Diaz"
      ]
    },
    "title": {
      "type": "string",
      "description": "Role or title. Built-in variable 'speaker.title' (or 'speaker.<id>.title'), for example in a footer text of '{{speaker.name}}, {{speaker.title}}'.",
      "examples": [
        "VP of Engineering",
        "Founder & CEO",
        "Chief Product Officer",
        "Senior Staff Engineer"
      ]
    },
    "photo": {
      "$ref": "#/$defs/Asset",
      "description": "Source for the speaker's headshot image. Accepts an HTTPS URL, data URI, relative path (resolved against the OPF file location), local path, or 'asset:<id>' reference. Common formats are JPG or PNG; SVG is not appropriate for photographic content. Never drawn automatically: it is the built-in image variable 'speaker.photo' (or 'speaker.<id>.photo'), placed with 'var:speaker.photo' in a slide's image field. It also round-trips through PPTX provenance.",
      "examples": [
        "https://cdn.acme.com/headshots/alice.jpg",
        "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAr/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AJ//2Q==",
        "./assets/photos/alice.png",
        "asset:photo-alice"
      ]
    },
    "email": {
      "type": "string",
      "format": "email",
      "description": "Contact email. Never drawn automatically; available as the built-in variable 'speaker.email'.",
      "examples": [
        "alice@acme.com",
        "alice.chen@acme.com"
      ]
    },
    "phone": {
      "type": "string",
      "description": "Contact phone number for the speaker. E.164 format is recommended. Never drawn automatically; available as the built-in variable 'speaker.phone'.",
      "examples": [
        "+14155551234",
        "+442071838750"
      ]
    },
    "bio": {
      "type": "string",
      "description": "Short biographical paragraph. Never drawn automatically; available as the built-in variable 'speaker.bio', for a bio or 'about the speaker' slide you write.",
      "examples": [
        "Alice leads engineering at Acme, where she's spent the last six years scaling distributed systems from prototype to billions of requests per day. Previously, she was a staff engineer at Google."
      ]
    },
    "organizationId": {
      "type": "string",
      "description": "Reference to an Organization.id in organization; it must name an existing organization (a validation error otherwise). Attribution metadata for hosts: no engine draws it or changes which organization is primary because of it.",
      "examples": [
        "acme",
        "beta",
        "devconf-2026"
      ]
    },
    "socials": {
      "$ref": "#/$defs/Socials",
      "description": "Optional social media handles or URLs for the speaker. Authoring metadata only: nothing draws speaker socials and there is no built-in variable for them (the 'socials' header/footer field draws the primary organization's socials)."
    }
  }
}