Shared definitions
work.sequential.defs
Panels, localized text and images, versions, credits and more.
#localizedImage
object| Property | Type | Description |
|---|---|---|
imagerequired | blob | The localized image. ≤ 4 MiB Accepts image/jpegimage/pngimage/webpimage/avif |
langrequired | language | BCP-47 language tag for this image (e.g. 'en', 'pt-BR'). |
#localizedAlt
objectLocalized alt text. Describes the art and transcribes the dialogue, captions and sound effects.
| Property | Type | Description |
|---|---|---|
langrequired | language | BCP-47 language tag for this text. |
textrequired | string | ≤ 10000 graphemes |
#localizedTitle
object| Property | Type | Description |
|---|---|---|
langrequired | language | BCP-47 language tag for this title. |
textrequired | string | ≤ 100 graphemes |
#localizedDescription
object| Property | Type | Description |
|---|---|---|
langrequired | language | BCP-47 language tag for this description. |
textrequired | string | ≤ 3000 graphemes |
#localizedText
object| Property | Type | Description |
|---|---|---|
langrequired | language | BCP-47 language tag for this text. |
textrequired | string | ≤ 1000 graphemes |
#version
objectAnother version of the same artwork, such as a production stage (pencils, inks) or an alternate treatment (virgin, black and white).
| Property | Type | Description |
|---|---|---|
imagerequired | blob | The version image. ≤ 4 MiB Accepts image/jpegimage/pngimage/webpimage/avif |
kindrequired | string | What this version shows. AppViews may define their own kinds. ≤ 64 graphemes Known thumbnailslayoutroughspencilslineartinksflatscolorsletters |
#aspectRatio
object| Property | Type | Description |
|---|---|---|
widthrequired | integer | ≥ 1 |
heightrequired | integer | ≥ 1 |
#credit
object| Property | Type | Description |
|---|---|---|
displayNamerequired | string | ≤ 100 graphemes |
did | did | |
rolerequired | string | The role of the credit. AppViews may define their own roles. ≤ 64 graphemes Known writerpencilerinkercoloristflatsletterercovercreatoreditoreditorInChiefassociateEditorassistantEditordesignerartisttranslatorpainterbackgrounds |
#category
stringA category for a series. AppViews may define their own categories.
#tag
stringA free-form tag, without a leading '#'.
#panel
objectA panel on a page or strip. Carries the image's alt text, one description per panel, and optionally its position for panel-by-panel reading. A splash page or single-panel strip is a single panel.
| Property | Type | Description |
|---|---|---|
bounds | #bounds | Where the panel sits on the image. Optional, so alt text can be added without mapping panel positions. |
alt | defs#localizedAlt[] | Localized alt text for this panel: describes the art and transcribes the dialogue, captions and sound effects. ≤ 100 items |
background | #rgba | When reading panel-by-panel, fills the viewport around the panel if the panel's aspect ratio differs from the viewport's. The alpha is the opacity: 0 shows the panel with the surrounding page still visible, 100 hides the page behind a solid color so the panel stands on its own. Treated as fully transparent when omitted. |
mask | blob | Black and white mask of the panel's exact shape, for panels that aren't rectangles or whose art bleeds past the panel border. Covers the panel's bounds, at the same size or aspect ratio, so the bounds must enclose everything the mask shows. Ignored when bounds are omitted. White shows the art, black hides it, and grays blend for soft edges. ≤ 4 MiB Accepts image/png |
transition | string | When reading panel-by-panel, how the app moves to this panel from the previous one. Played in reverse when reading backward. 'none' switches instantly, 'pan' moves the view across the image to the panel, 'fade' crossfades from the previous panel, and 'zoom' pulls back to show the whole image then pushes in to the panel. Duration is up to the AppView. AppViews treat unknown values as 'none'. default: none Known nonepanfadezoom |
#rgba
objectA color with opacity.
| Property | Type | Description |
|---|---|---|
rrequired | integer | 0–255 |
grequired | integer | 0–255 |
brequired | integer | 0–255 |
arequired | integer | Opacity, from 0 (fully transparent) to 100 (fully opaque). 0–100 |
#bounds
objectA rectangle relative to an image, in ten-thousandths of the image's width and height (0-10000), with the origin at the top left.
| Property | Type | Description |
|---|---|---|
xrequired | integer | 0–10000 |
yrequired | integer | 0–10000 |
widthrequired | integer | 1–10000 |
heightrequired | integer | 1–10000 |
Raw schema
{
"lexicon": 1,
"id": "work.sequential.defs",
"defs": {
"localizedImage": {
"type": "object",
"properties": {
"image": {
"type": "blob",
"maxSize": 4194304,
"accept": [
"image/jpeg",
"image/png",
"image/webp",
"image/avif"
],
"description": "The localized image."
},
"lang": {
"type": "string",
"format": "language",
"description": "BCP-47 language tag for this image (e.g. 'en', 'pt-BR')."
}
},
"required": [
"image",
"lang"
]
},
"localizedAlt": {
"type": "object",
"properties": {
"lang": {
"type": "string",
"format": "language",
"description": "BCP-47 language tag for this text."
},
"text": {
"type": "string",
"maxLength": 100000,
"maxGraphemes": 10000
}
},
"description": "Localized alt text. Describes the art and transcribes the dialogue, captions and sound effects.",
"required": [
"lang",
"text"
]
},
"localizedTitle": {
"type": "object",
"properties": {
"lang": {
"type": "string",
"format": "language",
"description": "BCP-47 language tag for this title."
},
"text": {
"type": "string",
"maxLength": 1000,
"maxGraphemes": 100
}
},
"required": [
"lang",
"text"
]
},
"localizedDescription": {
"type": "object",
"properties": {
"lang": {
"type": "string",
"format": "language",
"description": "BCP-47 language tag for this description."
},
"text": {
"type": "string",
"maxLength": 30000,
"maxGraphemes": 3000
}
},
"required": [
"lang",
"text"
]
},
"localizedText": {
"type": "object",
"properties": {
"lang": {
"type": "string",
"format": "language",
"description": "BCP-47 language tag for this text."
},
"text": {
"type": "string",
"maxLength": 10000,
"maxGraphemes": 1000
}
},
"required": [
"lang",
"text"
]
},
"version": {
"type": "object",
"properties": {
"image": {
"type": "blob",
"maxSize": 4194304,
"accept": [
"image/jpeg",
"image/png",
"image/webp",
"image/avif"
],
"description": "The version image."
},
"kind": {
"type": "string",
"maxLength": 640,
"maxGraphemes": 64,
"knownValues": [
"thumbnails",
"layout",
"roughs",
"pencils",
"lineart",
"inks",
"flats",
"colors",
"letters"
],
"description": "What this version shows. AppViews may define their own kinds."
}
},
"description": "Another version of the same artwork, such as a production stage (pencils, inks) or an alternate treatment (virgin, black and white).",
"required": [
"image",
"kind"
]
},
"aspectRatio": {
"type": "object",
"properties": {
"width": {
"type": "integer",
"minimum": 1
},
"height": {
"type": "integer",
"minimum": 1
}
},
"required": [
"width",
"height"
]
},
"credit": {
"type": "object",
"properties": {
"displayName": {
"type": "string",
"maxLength": 1000,
"maxGraphemes": 100
},
"did": {
"type": "string",
"format": "did"
},
"role": {
"type": "string",
"maxLength": 640,
"maxGraphemes": 64,
"knownValues": [
"writer",
"penciler",
"inker",
"colorist",
"flats",
"letterer",
"cover",
"creator",
"editor",
"editorInChief",
"associateEditor",
"assistantEditor",
"designer",
"artist",
"translator",
"painter",
"backgrounds"
],
"description": "The role of the credit. AppViews may define their own roles."
}
},
"required": [
"displayName",
"role"
]
},
"category": {
"type": "string",
"maxLength": 640,
"maxGraphemes": 64,
"description": "A category for a series. AppViews may define their own categories."
},
"tag": {
"type": "string",
"maxLength": 640,
"maxGraphemes": 64,
"description": "A free-form tag, without a leading '#'."
},
"panel": {
"type": "object",
"properties": {
"bounds": {
"type": "ref",
"ref": "#bounds",
"description": "Where the panel sits on the image. Optional, so alt text can be added without mapping panel positions."
},
"alt": {
"type": "array",
"items": {
"type": "ref",
"ref": "work.sequential.defs#localizedAlt"
},
"maxLength": 100,
"description": "Localized alt text for this panel: describes the art and transcribes the dialogue, captions and sound effects."
},
"background": {
"type": "ref",
"ref": "#rgba",
"description": "When reading panel-by-panel, fills the viewport around the panel if the panel's aspect ratio differs from the viewport's. The alpha is the opacity: 0 shows the panel with the surrounding page still visible, 100 hides the page behind a solid color so the panel stands on its own. Treated as fully transparent when omitted."
},
"mask": {
"type": "blob",
"maxSize": 4194304,
"accept": [
"image/png"
],
"description": "Black and white mask of the panel's exact shape, for panels that aren't rectangles or whose art bleeds past the panel border. Covers the panel's bounds, at the same size or aspect ratio, so the bounds must enclose everything the mask shows. Ignored when bounds are omitted. White shows the art, black hides it, and grays blend for soft edges."
},
"transition": {
"type": "string",
"knownValues": [
"none",
"pan",
"fade",
"zoom"
],
"default": "none",
"description": "When reading panel-by-panel, how the app moves to this panel from the previous one. Played in reverse when reading backward. 'none' switches instantly, 'pan' moves the view across the image to the panel, 'fade' crossfades from the previous panel, and 'zoom' pulls back to show the whole image then pushes in to the panel. Duration is up to the AppView. AppViews treat unknown values as 'none'."
}
},
"description": "A panel on a page or strip. Carries the image's alt text, one description per panel, and optionally its position for panel-by-panel reading. A splash page or single-panel strip is a single panel."
},
"rgba": {
"type": "object",
"properties": {
"r": {
"type": "integer",
"minimum": 0,
"maximum": 255
},
"g": {
"type": "integer",
"minimum": 0,
"maximum": 255
},
"b": {
"type": "integer",
"minimum": 0,
"maximum": 255
},
"a": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"description": "Opacity, from 0 (fully transparent) to 100 (fully opaque)."
}
},
"description": "A color with opacity.",
"required": [
"r",
"g",
"b",
"a"
]
},
"bounds": {
"type": "object",
"properties": {
"x": {
"type": "integer",
"minimum": 0,
"maximum": 10000
},
"y": {
"type": "integer",
"minimum": 0,
"maximum": 10000
},
"width": {
"type": "integer",
"minimum": 1,
"maximum": 10000
},
"height": {
"type": "integer",
"minimum": 1,
"maximum": 10000
}
},
"description": "A rectangle relative to an image, in ten-thousandths of the image's width and height (0-10000), with the origin at the top left.",
"required": [
"x",
"y",
"width",
"height"
]
}
}
}