Raw schema
{
"type": "object",
"properties": {
"lines": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"items": {
"oneOf": [
{
"type": "string",
"description": "Plain line text (shorthand)."
},
{
"type": "object",
"required": [
"text"
],
"additionalProperties": false,
"properties": {
"text": {
"type": "string",
"description": "Line text."
},
"font": {
"type": "string",
"description": "Google Fonts family name (e.g. \"Noto Sans Hebrew\"). Defaults to Inter."
},
"sizePx": {
"type": "integer",
"minimum": 12,
"maximum": 64,
"description": "Text size in px. Default 36."
},
"gapPx": {
"type": "integer",
"minimum": 0,
"maximum": 56,
"description": "Horizontal gap between word tokens in px. Default 14."
},
"rtl": {
"type": "boolean",
"description": "Right-to-left layout (Hebrew, Arabic, ...). Default false."
}
}
}
]
},
"description": "Text lines, top to bottom. Each entry is a plain string or an object with per-line visual options."
},
"alignments": {
"type": "array",
"description": "Word-alignment links as [lineA, wordA, lineB, wordB] (0-based indices, lines must be adjacent).",
"items": {
"type": "array",
"minItems": 4,
"maxItems": 4,
"items": {
"type": "integer"
}
}
},
"settings": {
"type": "object",
"additionalProperties": false,
"description": "Global visual overrides. Unset fields inherit defaults.",
"properties": {
"palette": {
"type": "string",
"enum": [
"pastel",
"vivid"
],
"description": "Connection color palette. Default pastel."
},
"lineStyle": {
"type": "string",
"enum": [
"straight",
"curved"
],
"description": "Connection line shape. Default curved."
},
"lineThickness": {
"type": "number",
"minimum": 1,
"maximum": 8,
"description": "Connection line thickness. Default 3."
},
"lineOpacity": {
"type": "number",
"minimum": 0.2,
"maximum": 1,
"description": "Connection line opacity. Default 1."
},
"background": {
"type": "string",
"enum": [
"light",
"dark"
],
"description": "Preview background. Default light."
},
"theme": {
"type": "string",
"enum": [
"light",
"dark"
],
"description": "UI theme (token chip color). Default light."
},
"showNumbers": {
"type": "boolean",
"description": "Show line numbers. Default false."
},
"colorTokensByLink": {
"type": "boolean",
"description": "Tint word tokens in their connection color. Default true."
},
"tokenSplitChars": {
"type": "string",
"description": "Characters (besides whitespace) that split text into tokens and are then removed. Default \".-|\". Set \"-|\" to keep periods in Leipzig glosses."
},
"tokenMergeChar": {
"type": "string",
"maxLength": 1,
"description": "Single char that joins parts into one token rendered with a space (e.g. \"is+playing\"). Default \"+\"."
}
}
},
"pairs": {
"type": "array",
"description": "Per-pair controls for a specific adjacent line pair.",
"items": {
"type": "object",
"required": [
"upper",
"lower"
],
"additionalProperties": false,
"properties": {
"upper": {
"type": "integer",
"description": "0-based index of the upper line."
},
"lower": {
"type": "integer",
"description": "0-based index of the lower line (must equal upper + 1)."
},
"gapPx": {
"type": "integer",
"minimum": 12,
"maximum": 156,
"description": "Vertical gap between the two lines in px. Default 120."
},
"showConnectors": {
"type": "boolean",
"description": "Draw connectors between this pair. Default true."
}
}
}
}
},
"required": [
"lines"
],
"additionalProperties": false
}