Files
nodecg-venue-gfx/configschema.json
dvdrw 4bb64a8ca3 init: initial commit
- ticker / QR ad overlay / break slide graphics (1920×1080) with all
  geometry derived from one shared module (src/shared/obs-geometry.mjs)
- OBS scene-collection generator (scripts/generate-obs-scenes.mjs) and a
  read-only in-dashboard setup verifier, both driven by the same module
- en/sr dashboard i18n selected via bundle config; configschema.json with
  neutral first-run defaults seeded from optional branding config
- install.sh / systemd user service / update.sh for venue deployment
- reference OBS scene collection + profile from a real venue as fixtures
2026-07-15 19:30:32 +02:00

97 lines
3.4 KiB
JSON

{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"additionalProperties": false,
"properties": {
"locale": {
"description": "Dashboard language",
"type": "string",
"enum": ["en", "sr"],
"default": "en"
},
"branding": {
"description": "First-run replicant seeds — only applied when nothing is persisted yet; everything is editable from the dashboard afterwards",
"type": "object",
"additionalProperties": false,
"properties": {
"tickerBlurb": {
"description": "Recurring ticker blurb shown at every loop seam",
"type": "string"
},
"breakHeading": {
"description": "Default heading on the break slide",
"type": "string"
},
"sampleQrUrl": {
"description": "URL encoded in the sample ad's QR code",
"type": "string"
}
}
},
"obs": {
"type": "object",
"additionalProperties": false,
"properties": {
"enabled": {
"description": "Connect to OBS and drive scene switches",
"type": "boolean",
"default": false
},
"url": {
"description": "obs-websocket URL",
"type": "string",
"default": "ws://127.0.0.1:4455"
},
"password": {
"description": "obs-websocket password (empty when authentication is disabled)",
"type": "string",
"default": ""
},
"scenes": {
"description": "Names of the six scenes NodeCG switches between",
"type": "object",
"additionalProperties": false,
"properties": {
"main": { "type": "string", "default": "MAIN" },
"mainAdTr": { "type": "string", "default": "MAIN_AD_TR" },
"mainAdBl": { "type": "string", "default": "MAIN_AD_BL" },
"break": { "type": "string", "default": "BREAK" },
"breakAdTr": { "type": "string", "default": "BREAK_AD_TR" },
"breakAdBl": { "type": "string", "default": "BREAK_AD_BL" }
}
},
"transitions": {
"description": "Names of the transitions in the OBS transition dock",
"type": "object",
"additionalProperties": false,
"properties": {
"default": {
"description": "Selected before ad shrink/hop switches (the Move transition)",
"type": "string",
"default": "Move"
},
"break": {
"description": "Selected before MAIN↔BREAK toggles (the stinger)",
"type": "string",
"default": "Stinger"
}
}
},
"sources": {
"description": "Names of the shared sources/nested scenes, used by the OBS setup verifier and the scene-collection generator",
"type": "object",
"additionalProperties": false,
"properties": {
"adOverlay": { "type": "string", "default": "AdOverlay" },
"ticker": { "type": "string", "default": "TickerOverlay" },
"breakSlide": { "type": "string", "default": "BreakSlide" },
"programScene": { "type": "string", "default": "PROGRAM" },
"breakScene": { "type": "string", "default": "BREAK_SLIDE" },
"programPlaceholder": { "type": "string", "default": "Program Placeholder" }
}
}
}
}
}
}