Copy everything below the line into a new Cursor agent session running in
tojemoc/sofie-demo-blueprints.
Implement blueprint integration for the 360 sekúnd / SPRÁVY v2 CasparCG HTML templates
already merged in tojemoc/sofie-demo-assets (PR #3 on main). Demo-assets builds and
packages templates; you own everything that turns Rundown Editor pieces into Caspar
TEMPLATE commands.
Demo deadline: Friday — scope to an MVP first (see below), open a PR, run
yarn test:blueprints and yarn lint.
Cross-repo context: the Sofie megarepo (tojemoc/sofie) tracks integration status in
docs/integration/SPRAVY-V2-INTEGRATION.md. Update that file (or ask the megarepo agent
to update it) when your PR merges.
Repo: https://github.com/tojemoc/sofie-demo-assets (main @ PR #3 merged 2026-06-24)
- 10 HTML templates with shared
src/shared/caspar-bridge.js,tokens.css, GSAP animations - Build:
yarn build→deploy/template-path+deploy/media-path - Caspar layout (
scripts/assemble-caspar.mjs):
<template-path>/gfx/<name>/<name>.html
- PR #4 (may merge soon): GitHub pre-release zip per
mainpush:sofie-demo-template/+sofie-demo-media/
| Piece type ID (suggested) | Caspar TEMPLATE name (clipName) |
Payload fields for data |
|---|---|---|
headline |
gfx/headline |
iluFile (string, media path), source (string) |
l3d-headline |
gfx/l3d-headline |
title, subtitle |
l3d-mod |
gfx/l3d-mod |
name |
l3d-tema |
gfx/l3d-tema |
headline |
l3d-syn |
gfx/l3d-syn |
name, role |
l3d-sjv |
gfx/l3d-sjv |
headline |
l3d-sport |
gfx/l3d-sport |
headline, source |
weather |
gfx/weather |
cities (array of { name, temp, condition }) |
outro |
gfx/outro |
(empty — play/stop only) |
logo-bug |
gfx/logo-bug |
(empty — play/stop only) |
Templates expose window.play(), window.stop(), window.update(data). Sofie already
emits TimelineContentCCGTemplate with templateType: 'html', name, data — your job
is to set name and populate data correctly.
- No Sofie piece types, parsers, or layer mappings
- No hypercomposed studio preset (planned megarepo PR2)
- No real production media (clips are imported manually; dev uses
clips/premiera.mp4) - v1 types (
gfx/l3d,gfx/strap,gfx/ticker,gfx/head) are removed from build — stop referencing them for v2
Add piece type definitions for v2 templates with payload fields matching the table above. Editors import this JSON into Rundown Editor.
Today:
const graphicTypes = ['strap', 'head', 'l3d', 'fullscreen', 'stepped-graphic']
// ...
piece.clipName = 'gfx/' + piece.objectTypeExtend graphicTypes with all v2 IDs. Map piece.attributes from RE payload to the
template data keys (replace legacy field0/field1 mapping for v2 types). Pass attributes
through unchanged where field names already match (headline, name, title, etc.).
Today: regex routes ticker/strap/fullscreen; default → CasparCGGraphicsLowerThird (ch3/111).
You must:
- Route
logo-bug→CasparCGGraphicsLogo(ch3/113) withPieceLifespan.OutOnRundownEnd - Route fullscreen-style templates (
weather,outro) appropriately - Ensure
content.dataspreads allobject.attributes(v2 fields), not onlyname/description/location/textintemplateData - For Friday MVP: single-channel is OK — all GFX on existing lower-third/logo layers
Files under packages/blueprints/src/base/studio/applyConfig/mappings/.
Current hybrid demo uses ch3 for graphics. Friday: keep single-channel; post-demo:
map headline → LED channel, and all gfx/l3d-* templates →
casparcg_graphics_pgm_l3d on PGM channel 2, layer 121, per
../OUTPUT_TOPOLOGY.md.
logo-bug should appear at rundown start and persist (OutOnRundownEnd). Wire in
rundown/baseline.ts or equivalent — layer 113 exists but is unused today.
Extend GraphicObjectAttributes for v2 fields (headline, title, subtitle, role,
iluFile, source, cities, …).
Add/adjust blueprint unit tests and smoke rundown JSON for at least MVP types.
gfx/logo-bug— baselinegfx/l3d-tema—headlinegfx/l3d-mod—namegfx/l3d-headline—title,subtitle
Defer: weather, l3d-sport, headline+ILU, hypercomposed preset, wipes, v1 types.
cd packages/blueprints && yarn dist— produce bundle- Caspar manual test (before Sofie):
CG 1 ADD 0 "gfx/l3d-tema" 1
CG 1 UPDATE 0 "gfx/l3d-tema" "{\"headline\":\"Test headline\"}"
- Upload bundle to Sofie Core; apply studio config
- Ingest a test rundown from Rundown Editor with new piece types; take on air
| v1 piece | clipName | Layer |
|---|---|---|
| l3d | gfx/l3d | ch3/111 |
| strap | gfx/strap | ch3/112 |
| ticker | gfx/ticker | ch3/110 |
| head | gfx/head | ch3/111 |
| fullscreen | gfx/fullscreen | ch1/110 + VM cut |
tojemoc/sofie-corecode changestojemoc/unopusUI work (only export updatedpiece-types.json)tojemoc/sofie-demo-assetstemplate HTML changes- Full hypercomposed PR2 (separate follow-up)
- PR against
tojemoc/sofie-demo-blueprintsmain(orvmix-demo-blueprintsif that is the active Správy branch — confirm with user) - Updated
assets/sofie-rundown-editor-piece-types.json - Brief PR description listing MVP templates wired + test steps
- Note the exact
pre-<sha>demo-assets zip used for manual Caspar verification