This specification is provisional. It is the current beta contract shared by Reader and Reader Publisher, not yet a stable interchange or archival standard. Fields, limits, profiles, and migration rules may change before a stable release.
iComic is a page-first interactive-comic format, not a video with comic controls. Each page owns layered panels, an explicit accessible reading order, and discrete reveal steps. Local images, video, audio, transitions, and optional compositing can respond to those steps. The essential page must remain understandable when those enhancements are unavailable.
{
"format": "valentine.interactive-comic",
"schemaVersion": "0.4.0"
}The development container is .icomic: an ordinary ZIP
archive with a custom extension. The provisional app file-handler MIME
is application/vnd.gremmoire.icomic+zip; generic
application/zip remains accepted during beta
development.
The current Reader:
0.4.0;0.3.1,
0.3, and 0.2;valentine.interactive-story;Draft 0.4.0 adds fail-closed capability negotiation,
explicit page reading order and summaries, optional cover metadata,
verifiable media byte declarations, and a bounded compositing
vocabulary. Legacy drafts remain readable but do not retroactively gain
guarantees for fields they never declared.
{
"format": "valentine.interactive-comic",
"schemaVersion": "0.4.0",
"id": "my-comic",
"title": "My Comic",
"capabilities": {
"required": ["reading-order"],
"optional": ["panel-reveals"]
},
"pages": [
{
"id": "page-1",
"label": "Page 1",
"summary": "The protagonist enters a dark station.",
"readingOrder": ["page-1-art"],
"panels": [
{
"id": "page-1-art",
"type": "image",
"src": "assets/pages/page-001.webp",
"alt": "A lone figure enters an unlit railway station."
}
]
}
]
}The assets catalog is optional, so one local source per
panel is valid. In 0.4.0 every image, GIF, and video panel needs
meaningful alt; every text panel needs nonempty
text. Media-bearing content needs a local src,
including content that also references a logical asset.
my-comic.icomic
|-- comic.json
|-- assets/
| |-- panels/
| | |-- page-001.avif
| | `-- page-001.webp
| |-- audio/
| | |-- rain.opus
| | `-- rain.m4a
| `-- video/
| |-- motion-av1.webm
| `-- motion-h264.mp4
`-- README.txt
For schema 0.4.0, comic.json is the only accepted
manifest name and must be at the archive root. The aliases
story.json, manifest.json, and
reader.json remain readable only for legacy schema
packages.
Archive rules:
/-separated, and
case-sensitive. A leading ./ is normalized away.capabilities has two arrays, each capped at 32 unique
lowercase kebab-case names:
{
"capabilities": {
"required": ["reading-order"],
"optional": ["audio-cues", "visual-compositing"]
}
}A Reader rejects a package when it does not understand a required capability. It may open a package with an unknown optional capability, but warns and uses the readable fallback. Capability names describe behavior; they do not grant permissions.
| Capability | Contract |
|---|---|
reading-order |
Page panels can declare a separate accessible order. |
media-variants |
Logical assets can provide bounded local alternatives. |
panel-reveals |
Panels appear on discrete reveal steps. |
panel-transitions |
The bounded transition vocabulary may be used. |
panel-animations |
Decorative motion may be used and must respect reduced motion. |
audio-cues |
Bounded local audio cues may run on entry/reveal/step. |
video-panels |
Local video panels may be present. |
visual-compositing |
Opacity, blend mode, and bounded effects may be used. |
context-appendix |
Reader-wide context and linked terms may be present. |
The older experimental booleans remain descriptive
compatibility hints. They are not a substitute for required/optional
capability negotiation.
The formats named here are first-class options, not universal winners. Results depend on the source, encoder, quality target, browser and operating system, and the author’s experience and preference.
| Role | Preferred high-efficiency choices | Practical compatibility choices |
|---|---|---|
| Static image | AVIF or WebP | WebP, JPEG, or PNG where appropriate |
| Lossy audio | Opus or AAC-LC in M4A/MP4 | MP3 or supported Ogg audio |
| Lossless audio | FLAC | PCM WAV when its size is deliberate |
| Video | AV1 in WebM/MP4 | H.264/AVC in MP4 |
WavPack and H.266/VVC may be useful authoring/master inputs. They are not 0.4.0 browser-delivery promises. Publisher rejects WavPack in an iComic delivery package instead of silently exporting an unplayable cue. Animated AVIF and GIF imports remain deferred until bounded playback and fallback policies exist.
One manifest may declare at most 10,000 logical assets. Each may contain one to four ordered local variants:
{
"assets": [
{
"id": "page-1-art",
"kind": "image",
"fallback": "assets/pages/page-001.webp",
"delivery": {
"profile": "painted-page",
"selection": "first-supported"
},
"variants": [
{
"src": "assets/pages/page-001.avif",
"type": "image/avif",
"bytes": 481203
},
{
"src": "assets/pages/page-001.webp",
"type": "image/webp",
"bytes": 639441
}
]
}
]
}| Asset field | Meaning |
|---|---|
id |
Unique stable logical-asset ID. |
kind |
image, audio, or video; every
variant must match. |
fallback |
Required baseline path and one of the declared variants. |
delivery.profile |
Inspectable authoring label; it does not select a decoder. |
delivery.selection |
The only current value is first-supported. |
variants |
One to four alternatives in preference order. |
| Variant field | Meaning |
|---|---|
src |
Required relative local path. |
type |
Required MIME type consistent with the role and actual file. |
codecs |
Optional browser capability hint, principally for audio/video. |
bytes |
Optional positive integer. If supplied, it must exactly equal the packaged entry size and remain within the 80 MB ceiling. |
Do not duplicate a source within one asset, bind one path to multiple logical assets, or assign one path conflicting roles. A declared type cannot disguise an extension or file signature.
An image background, cover, image/video panel, or audio cue can
reference an asset. Its src must still exactly equal that
asset’s fallback. The Reader tries variants in author order
when the browser appears to support them and may retry a later local
alternative after decoding failure.
| Field | Current meaning |
|---|---|
format |
Must be the working ID or a recognized legacy ID. Unknown IDs reject. |
schemaVersion |
0.4.0; 0.3.1, 0.3, and
0.2 are legacy-readable. Unknown versions reject. |
id |
Stable work identifier, normalized to a safe local ID. |
title |
Defaults to Untitled comic, maximum 240
characters. |
creator |
Optional, maximum 240 characters. |
description |
Optional, maximum 1,000 characters. |
language |
Language hint, defaults to en, maximum 35
characters. |
direction |
ltr or rtl; full RTL certification remains
open. |
cover |
Optional image source/asset plus required alt text in 0.4.0. |
context |
Optional Reader-wide context/appendix, maximum 100 entries. |
capabilities |
Required and optional behavior declarations. |
assets |
Optional logical-media catalog. |
experimental |
Legacy provisional behavior hints. |
presentation |
Default fit, start mode, and page gap. |
pages |
Required, 1–10,000 pages. |
presentation.fit accepts contain,
width, or height;
presentation.startMode accepts panel or
page; pageGap is clamped 0–100.
| Field | Current meaning |
|---|---|
id |
Unique stable page ID. |
label |
Timeline label, maximum 120 characters. |
summary |
Optional accessible/editorial page summary, maximum 2,000 characters. |
aspectRatio |
Positive number or ratio string such as 2/3 or
16:9. |
background |
Color, gradient, image, or provisional dynamic background. |
readingOrder |
Panel IDs in the order assistive and page-mode reading should use. |
panels |
Layered visual/text/video content. |
cues |
Page-scoped events such as entry ambience. |
If readingOrder is supplied, it must name every panel
exactly once: unknown, duplicate, and omitted IDs reject. When absent,
manifest panel order is the fallback. z controls visual
stacking and never changes reading order.
Background values accept only a narrow sanitized color/gradient
grammar. Image backgrounds may use src, asset,
fit, and bounded depth. URL/data/blob
functions and network-capable CSS are discarded.
| Field | Current meaning |
|---|---|
id |
Unique within the page. |
type |
image, text, video,
gif, pdf-page, or reserved
canvas. |
asset / src |
Optional logical reference plus required local fallback for media. |
alt |
Nonvisual description, maximum 500 characters; required for 0.4 media panels. |
text |
Plain text, maximum 10,000 characters; required for 0.4 text panels. |
frame |
Page-relative percentages, rotation, and radius. |
fit |
contain, cover, or fill. |
opacity |
Number clamped 0–1. |
blendMode |
normal, multiply, screen, or
overlay. |
effect |
none, blur, glow, or
monochrome. |
depth |
Optional pointer/tilt depth, clamped -10–10. |
z |
Visual layer order, clamped -100–1,000. |
reveal |
atStep 0–10,000, transition, and duration 0–30,000
ms. |
animation |
Optional decorative motion. |
playback |
Video autoplay, mute, loop, and inline hints. |
cues |
Events attached to this panel/reveal. |
Frame x/y are clamped -300–300 and
width/height 1–300, permitting bounded off-canvas placement and
overscan. Supported transitions are none,
fade, rise, slide-left,
slide-right, ink, and focus.
Decorative animations are none, drift,
pulse, float, pan, and
breathe; they must never carry information lost under
reduced motion.
Recognized cue types are audio, tone,
background, vibrate, and caption.
Audio cues may use a local audio asset. Current triggers are:
enter for page-entry behavior;reveal for a panel-local cue; andstep:N for a page cue at a discrete step from
0–10,000.The Reader cancels delayed cues when a new reveal or page supersedes them. Browser autoplay and codec rules override playback hints. Channel replacement, crossfade, loop lifetime, mastering metadata, and transcript linkage remain provisional.
cover is optional and uses the same local image asset
bridge as a panel. In 0.4.0, a supplied cover needs both a source and
meaningful alt text.
Each top-level context entry needs a stable
id, label, title, and concise
body. An optional term links exact matching
text to a hover/focus preview and click/tap appendix entry. Optional
details supplies the expanded explanation. Entries without
a term remain available from Comic margins. The limit is 100
author-context entries per work.
The Reader opens comic.json first, resolves only media
for the current page, and may warm a bounded part of the next page while
idle.
comic.json and small
text files.Reader Publisher 0.4.0 exports text entries with DEFLATE and media entries with Store. Its current beta export uses one declared delivery source per staged layer; the format supports up to four. Importing a multi-variant package stages its declared fallback and warns the author to retain the original and masters.
Current rejection ceilings include:
These are rejection limits, not performance promises. A valid package can still exceed the practical memory or decoding capacity of a particular phone.
A conforming beta Reader should:
The iComic template compiles a real Reader-openable
.icomic, rather than a generic prose package carrying an
iComic label. Publisher maps included page records, summaries, scoped
media layers, reveal steps, transitions, compositing, video playback,
audio entry/step cues, context, cover art, and opening artwork into the
manifest and archive.
Pages with no visual media receive a readable text fallback. Staged
opening artwork receives its own first reveal on page one; that page’s
authored panel and step-cue numbers shift forward so the opener is not
immediately covered. Export runs the same validator used by Reader.
Publisher draft JSON remains the editable working record;
.icomic is the delivery copy and does not publish
itself.
Local .icomic import uses the actual Reader loader and
validator. It rebuilds pages and editable placements from safe local
fallbacks. This is an editing bridge, not lossless source recovery:
retain the original package and masters.
See Authoring and encoding for the production workflow.
The iComic specification and observable behavior may be discussed publicly. The Gremmoire Reader and its authoring/tooling source remain closed.
For a bespoke Reader or authoring workflow adapted to another site, contact [email protected]. A recipient of a bespoke source copy may host, adapt, modify, and use that delivered copy. This does not make the Gremmoire Reader or general toolchain open source.