ScreenTinker v3.1.4
Added
-
Native Samsung SSSP3 / Orsay player (#806, with #802, #803, #805). A native player for
Samsung's older SSSP3 / Orsay smart-signage panels, with legacy-compatibility rendering kept
isolated from the modern path (#805) and server-approved media renditions bounded so an old panel
is never handed a stream it cannot decode (#803). Contributed by @MashaWaleed. -
Offline schedule plan (#804, #818). The server resolves a device's schedule into a bounded,
already-UTC timeline and attaches it to the payload (offline_plan), and a player that declares
the capability pre-caches every state's media and transitions between scheduled playlists and idle
gaps while disconnected, instead of replaying its last non-empty playlist past the end of its
schedule. The SSSP3 and Android players (#819) both honour it. Requested by @MashaWaleed. -
Live in-place data-source field updates on slides (#790, #817). When a bound scalar field
changes, the player patches just that value in the live widget instead of reloading the whole
slide, so an animation or video no longer restarts on a data refresh. Behind an org flag
(live_field_patch, off by default), slides only; templates keep the safe reload path.
Requested by @olchinga-de. -
LED screens: animation and remote settings (#812). Animated GIFs and slides render on LED
matrix screens, with remote brightness and a power limiter. A new Traffic page shows bandwidth
served by kind, workspace and screen beside the NIC totals (#813). Contributed by @renebohne. -
Configurable PDF import resolution (#816). The maximum edge a PDF page is rendered at is now an
organisation setting (1920 / 2560 / 3840, default 1920) instead of a fixed constant, so a site that
needs sharper pages no longer has to patch the build. Requested by @olchinga-de. -
Flash an ESP32 controller from the dashboard (#823). René's esp-web-tools web-serial installer,
vendored in and served at/flash(linked from Add Display), so an operator can flash a
Seeed/Elecrow controller (LED wall, reTerminal e-paper, CrowPanel) over USB and have it point back
at this instance (the server URL is pre-filled). Chrome/Edge/Opera desktop only; complements the
existing OTA update path for already-paired devices. Firmware by @renebohne.
Fixed
-
A slide fed by a data source only reloads when a field it shows changes (#790, #814). A REST
source that stamps a fresh timestamp on every fetch no longer reloads every bound slide; the server
reloads only slides whose{{ds:slug.key}}tags name a changed key. Reported by @olchinga-de. -
Recurring schedule occurrence semantics are defined (#802), so the live resolver, the preview
simulator and the offline plan agree on when a recurring schedule is active. Contributed by
@MashaWaleed. -
Recurring database corruption after the nightly backup is fixed (#815). The 03:00 backup's
cross-process VACUUM reader raced the off-thread TRUNCATE checkpointer; the checkpointer now pauses
for the backup window, so a busy database is no longer at risk of free-list corruption. -
Legacy web panels play cached video offline (#820). On webOS / Tizen-era Chromium (e.g. Chrome
79) a<video src=url>request bypasses the service worker, so a cached clip failed offline; a
local, cached, size-bounded clip is now played from ablob:URL built from the cached bytes. -
SSO: the SAML Issuer check stays in
issuerMatches, not node-saml (#811).
Dependencies
- Routine server, Docker and Gradle dependency bumps (#807, #808, #809, #810), and two build-only
security bumps:decode-uri-component0.5.1 (Roku build tooling) andsetuptools84.1.0 (macOS
packaging CI) (#821).
Artifacts
screentinker-3.1.4.tar.gz- bundle: server + frontend source + the Tizen .wgt (the signed Android APK is added at the root during release finalization).ScreenTinker.wgt- Tizen TV web app, unsigned - for inspection only.
Sign it with your own Samsung certificate (Tizen Studio + a profile that includes
your TV's DUID) to install, or - easiest - point a Tizen TV browser / URL Launcher
athttps://<your-instance>/player(no signing needed).ScreenTinker.ipk- LG webOS Signage app. Install from USB or an SI server; it then
updates itself from your instance. Built without LG's SCAP library (not redistributable),
so power and self-update controls need a build fromwebos/build-ipk.shwith the SDK
files inwebos/vendor/; seedocs/webos-player.md.com.lg.app.signage.ipk- the same webOS app for panels in Local application launch
mode, which install only a file of this name from theapplication/folder of a USB stick.autorun.zip- BrightSign player installer. Drop it on the root of a player's
storage (microSD, USB, or internal flash) and power-cycle: it unpacks itself and
reboots into the player. Editscreentinker.jsoninside the archive first to
point it at your own server.autorun-server.zip+server-payload.zip+server-payload.json- make a
BrightSign run the ScreenTinker server rather than just a player. Drop the
first on the player's storage root with anst-config.jsoncontaining
{"server": 1}; it fetches the payload on boot. PointpayloadUrlat your
own host - the default reaches ours, which is wrong for your site. The manifest
must sit beside the payload wherever you serve it: the launcher reads it to
decide whether an update is published.- Docker image:
ghcr.io/screentinker/screentinker:3.1.4(also:latest). ScreenTinker.apk- signed Android player (attached during release finalization).screentinker-sbom-3.1.4.cdx.json- CycloneDX 1.5 software bill of materials for the server's production dependencies, with the licence of every component.screentinker-3.1.4.provenance.sigstore.json- signed SLSA build provenance for every file above that this workflow built (the APK and Roku package are attached later, from a workstation, and are not covered).
Verify a download came from this repository's release workflow:
gh attestation verify <file> --repo screentinker/screentinker