Skip to content
PanelWave
Layer 1panelwave.json · CC BY 4.0

JSON Schema 2020-12 · CC BY 4.0

An open format for graphic novels made for screens

panelwave.json describes a whole work — panels and layers, page layouts per screen, live-text balloons, video and sound, the story graph, variants and paywall rules. Public, documented, versioned. Your content, your format.

panelwave.json
{
  "id": "sb-07",
  "characterId": "mira",
  "text": {
    "en-US": "Something's not right here.",
    "de-DE": "Hier stimmt etwas nicht.",
    "ja-JP": "何かがおかしい。"
  },
  "shape": { "x": 0.58, "y": 0.06, "w": 0.32, "h": 0.16 },
  "balloonConfig": {
    "balloonType": "whisper",
    "tail": { "position": 210, "length": 40, "curve": "left" }
  }
}
StructureEleven top-level properties · three required

A complete storytelling data model

Every ID is a string, every user-facing text a map of BCP-47 locales, and custom fields are welcome under x-.
PropertyRequiredWhat it holds
panelwaveyesFormat version and schema reference
metayesTitle, creators, locales, characters, age rating, content warnings, licence
chaptersyesPanels, the story graph, page layouts per format, optional infinite canvas
assets—Images, video, audio, subtitles with responsive variants; folders
variables—Typed story variables in five scopes
settings—Typography, balloon presets, UI defaults, preloading, format presets
localization—Translation state and glossary (authoring metadata)
extras—Covers, character sheets, interviews, bonus art, behind the scenes
paywall—Rules per work, chapter, panel or extras; products
tracking—Consent-aware event tracking
ui—Branding and reader controls
SamplesSchema-valid snippets

Copy, paste, validate

What it looks like

Linear chapter
{
  "id": "ch-01",
  "title": { "en-US": "Night Shift" },
  "panels": {
    "p1": { "layers": [{ "id": "art", "kind": "image", "assetId": "img-p1" }] },
    "p2": { "layers": [{ "id": "art", "kind": "image", "assetId": "img-p2" }] },
    "p3": { "layers": [{ "id": "art", "kind": "image", "assetId": "img-p3" }] }
  },
  "graph": {
    "entry": "p1",
    "edges": [
      { "from": "p1", "to": "p2" },
      { "from": "p2", "to": "p3", "transition": { "type": "fade", "durationMs": 400 } }
    ]
  }
}
RevisionsVersioned and stable

Additive releases. A 1.0 file still validates.

Minor versions only add; nothing breaks. The current release is 1.7.0: linear chapters can skip edges entirely and follow the panel order, and choices carry their own labels.

CC BY 4.0Schema · docs
1.7Oct 2026Chapters without edges follow the panel order; labelled choices, hotspots shown as buttons, lettering colour, snake_case variable ids, x- fields on panels and extras
1.6Sep 2026Several products per paywall rule, product display info, layer keyframe animations, alternative covers, ensemble character sheets
1.5Aug 2026Portable work archive: asset folders and translation state
1.4Jul 2026Infinite canvas: world-space placements, camera moves along edges, webtoon-style vertical reading from the same model
1.3Jul 2026Style presets for text and balloons; the narrator caption as tenth balloon type
1.2Jul 2026Leaner manifests: optional MIME types, inherited transitions
1.1Jul 2026Video panels: play modes, start modes, reverse variants, posters
1.0Q1 2026Panels, chapters, graph flow, assets, variables + JSON Logic, multilingual text, output formats, paywall, tracking, plugins

Help shape the standard.

Report issues, propose enhancements or send a pull request. Open, versioned and built for creators.