Manifest ReferenceSettings

Settings

The Settings section — typography defaults, reader UI defaults, preload strategy, and per-output-format presets in a PanelWave manifest.

settings is an optional top-level section holding work-wide defaults: typography and balloon styling, reader UI behavior, asset preloading, and per-output-format presets. Everything here is a default — many values cascade down and can be overridden at more specific levels (character, panel, layer).

Settings has four optional property groups: typography, ui, preload, and outputPresets.

settings.typography

Global text and page styling defaults for the work.

PropertyTypeDefaultConstraintsDescription
default_fontstring"Roboto"—Default font family for text
default_font_sizeinteger148–72Default font size in points
default_page_bg_colorColorHex—hex colorDefault background color for pages
balloon_configBalloonConfig——Default balloon styling for all speech bubbles in this work; start of the balloon cascade (work → character → bubble). See Speech Bubbles
panel_border_styleobject——Default panel border: color (ColorHex), thickness (integer 0–10, default 1, px), style (solid | dashed | dotted | none, default solid)
gutter_widthinteger100–50Space between panels in pixels
textStylesmap of TextStyle—keys are IdentifiersSchema 1.3+. Named, reusable text style presets referenced by TextLayer.styleRef. See below
balloonPresetsmap of BalloonConfigOverride—keys are IdentifiersSchema 1.3+. Named, reusable balloon presets referenced by SpeechBubble.styleRef. See below

Reusable style presets

Both maps work like CSS classes for the manifest: define shared styling once, reference it by name, and restyle every referencing element by editing the preset in one place.

  • textStyles maps a preset name to a TextStyle (font, sizePt, color, strokeColor, strokeWidth). A text layer opts in with styleRef; its inline style fields override the preset field-by-field.
  • balloonPresets maps a preset name to a BalloonConfigOverride. A speech bubble opts in with styleRef; the preset slots into the balloon cascade as work → character → preset → bubble.
{
  "settings": {
    "typography": {
      "textStyles": {
        "caption": { "font": "CrimsonPro", "sizePt": 14, "color": "#fdf6e3", "strokeColor": "#0a1a24", "strokeWidth": 3 }
      },
      "balloonPresets": {
        "speech-down-right": { "tail": { "position": 150, "length": 50 } },
        "shout-down-right": { "balloonType": "shout", "strokeWidth": 4, "tail": { "position": 150, "length": 50 } }
      }
    }
  }
}

Before presets, restyling the captions of a 61-page album meant editing 100+ identical inline style blocks. Sample 11 uses one caption text style and six balloon presets for all of its 104 captions and 79 bubbles.

A styleRef that names no existing preset is ignored by consumers (the element renders as if styleRef were unset). Authoring tools should warn about dangling references — the CMS validation panel does.

settings.ui

Reader-behavior defaults. The player exposes matching toggles (controlled via UI settings); these values seed them.

PropertyTypeDefaultConstraintsDescription
mangaModebooleanfalse—Right-to-left reading direction
autoplayDefaultbooleanfalse—Start in autoplay mode
secondsPerPanelnumber—0.5–120Autoplay dwell time per panel; a panel's own durationMs overrides this
speechDefaultbooleantrue—Initial state of the reader's speech-bubble toggle. Schema 1.3+: every speech bubble is implicitly gated by this toggle — see Speech Bubbles
audioDefaultbooleantrue—Music/ambient audio on by default
sfxDefaultbooleantrue—Sound effects on by default
scrollingDefaultbooleantrue—Scrolling navigation enabled by default
videoPlayModeDefaultstring"once"once | loop | pingpong | loop-fromWork-level default for VideoLayer.playMode (schema 1.1+); cascades to per-layer overrides
videoStartModeDefaultstring"on-view"on-view | on-hover | on-clickWork-level default for VideoLayer.startMode (schema 1.1+)
videoMutedDefaultbooleantrue—Work-level default for VideoLayer.muted (schema 1.1+)

The three video*Default fields follow the same cascade pattern as balloon config: the work default applies whenever a video layer does not specify its own value.

settings.preload

Controls how aggressively the player prefetches upcoming panel assets.

PropertyTypeDefaultConstraintsDescription
strategystring"lookahead"none | lookahead | aggressivePreload strategy
panelsAheadinteger2≥ 0How many panels ahead to prefetch (for lookahead)
maxConcurrentinteger4≥ 1Maximum parallel asset downloads

Panels can additionally hint specific assets via preloadHints — see Panels.

settings.outputPresets and FormatPreset

outputPresets maps an OutputFormat name to a FormatPreset. The schema lists the eight classic formats as named properties (flex-landscape, mobile-portrait, bigscreen-landscape, a4-portrait, a4-landscape, us-portrait, us-landscape, video-16-9) and additionally accepts any other key with a FormatPreset value (covering square, desktop-landscape, tablet-portrait).

FormatPreset

PropertyTypeDefaultDescription
panelViewbooleantrueAllow panel-by-panel viewing in this format
pageViewbooleanfalseAllow whole-page viewing in this format (requires page layouts)
canvasViewbooleanfalseEnable infinite-canvas view in this format (1.4+). Renders only for chapters that define a canvas; players fall back to panel view otherwise
defaultTransitionTransition—Default transition between panels in this format; individual edges override it
defaultCameraMoveCameraMove—Default canvas-view camera move for edges without an explicit cameraMove (1.4+)

Individual panels can further restrict views per format with formatViews (allowPageView / allowPanelView / minimalFocusRect) — see Panels.

Example

{
  "settings": {
    "typography": {
      "default_font": "Roboto",
      "default_font_size": 14,
      "default_page_bg_color": "#111111",
      "gutter_width": 10,
      "panel_border_style": { "color": "#000000", "thickness": 1, "style": "solid" },
      "textStyles": {
        "caption": { "font": "Roboto", "sizePt": 14, "color": "#ffffff", "strokeColor": "#000000", "strokeWidth": 3 }
      },
      "balloonPresets": {
        "whisper-soft": { "balloonType": "whisper", "strokeWidth": 1 }
      }
    },
    "ui": {
      "mangaMode": false,
      "autoplayDefault": false,
      "secondsPerPanel": 4,
      "speechDefault": true,
      "audioDefault": true,
      "sfxDefault": true,
      "scrollingDefault": true,
      "videoPlayModeDefault": "once",
      "videoStartModeDefault": "on-view",
      "videoMutedDefault": true
    },
    "preload": {
      "strategy": "lookahead",
      "panelsAhead": 2,
      "maxConcurrent": 4
    },
    "outputPresets": {
      "bigscreen-landscape": {
        "panelView": true,
        "pageView": true,
        "defaultTransition": { "type": "slide", "dir": "left", "durationMs": 400 }
      },
      "mobile-portrait": {
        "panelView": true,
        "pageView": false,
        "defaultTransition": { "type": "fade", "durationMs": 200 }
      }
    }
  }
}

How the player applies these defaults at runtime is described in Player Configuration.