Screenly Cast
Screenly Cast
Description
Screenly Cast turns WordPress into a simple content creation tool for digital
signage, and for Screenly in particular.
It deliberately does not try to make WordPress into a digital signage CMS. There
are no zones, no feeds and no playlists. It does one thing: it takes a post, page
or image you have already published and renders it so it reads well on a screen
nobody is standing next to.
That covers most of what a screen on a wall is actually for: a digital notice
board in a school or an office, opening hours and a menu board in a café, a lobby
display, or a Raspberry Pi in kiosk mode showing whatever you published this
morning.
Point a screen at an ordinary page URL and it shows the signage view. Recognized
signage players are detected from their request and sent to the signage version
of whatever they asked for, so there is nothing to remember and nothing to edit.
Appending ?srly still works, and still wins, which is what you want for
previewing on your own machine.
A signage render is the title, the date, a short body, and the featured image if
there is one. Everything that assumes a person with a mouse is removed:
navigation, sidebars, comments, links, sharing buttons.
Your theme is never touched. A signage request renders through the plugin’s
own template and leaves your site’s active theme exactly as it was. Earlier
versions of this plugin switched the whole site’s theme when a signage URL was
requested; that is gone. See the changelog.
Some specifics, because they are the difference between “works” and “works on a
wall”:
- Fits the screen. Content is trimmed to what actually fits, at the
resolution the screen actually is. A screen cannot scroll and nobody is there
to try. - Every resolution, both orientations. Correct from an 800×480 Raspberry Pi
Touch Display up to 4K, in landscape and portrait, with no configuration. - Works on old players. Signage hardware is often years behind the desktop.
The stylesheet is compiled down to a Chrome 87 baseline, and players below that
get a reduced-motion mode rather than a broken layout. - No external requests. Fonts are bundled with the plugin. Nothing is fetched
from a CDN, which matters both for privacy and because a player is frequently
offline. - Not indexed. Signage renders are marked noindex, so they do not compete
with your real pages in search results.
Works with Screenly and
Anthias out of the box. Because a signage render
is just a URL, it works the same way on Yodeck, Xibo, OptiSigns, ScreenCloud,
Rise Vision, Signagelive, BrightSign, IAdea and any other player, wallboard or
Chrome kiosk that can open a web page. Those are other companies’ products and
are not affiliated with Screenly; they are listed because the plugin genuinely
works with them.
The source code is on GitHub. Contributions and bug reports are welcome.
Support
For support, feature requests and bug reports, please use the
GitHub Issues page.
Installation
- Install and activate the plugin.
- Optionally, go to Settings Screenly Cast and choose a logo to show in
the corner of every render. - Open any post, page or image and append
?srlyto its URL. - Add that URL as content in Screenly, or whichever signage system you use.
Screenshots

An ordinary post as a visitor sees it: navigation, byline, comments, next and previous links.

The same post rendered for a screen. Same content, nothing that assumes somebody is holding a mouse.

The same layout in portrait. Both orientations work from 800x480 up to 4K with nothing to configure.

The whole settings screen. A logo, and whether to recognize signage players.
Faq
Use ?srly when the URL has no other parameters:
https://www.mydomain.com/some-page?srly
Use &srly when it already has some:
https://www.mydomain.com/?somevar=1&anothervar=2&srly
The parameter needs no value. ?srly on its own is enough.
From their request: the X-Screenly-* metadata headers a Screenly player can
send, the Android package name several other players identify themselves with,
and user agent tokens that name a player and nothing else: Screenly, Anthias,
BrightSign, IAdea, Slideshow and Unifi Connect.
Detection is deliberately cautious, because the two kinds of mistake are not
equally bad. A player it misses still works if you add ?srly. A device it
wrongly claims would show a signage render to somebody who was just browsing,
with no explanation and no way back.
So a signal has to name a player and nothing else. Notably absent: LG webOS and
Samsung Tizen, which run signage displays and every LG and Samsung smart TV,
and QtWebEngine, which signage players embed and so does any desktop Qt
application. Search engines, signed-in users and meeting-room devices are
excluded too: a room calendar is not signage.
A detected player is sent to the same URL with ?srly added rather than being
shown signage on the original URL, so that a page cache or CDN never has to serve
two different pages for one URL. Only the redirect itself is uncacheable.
Turn it off under Settings Screenly Cast if you would rather add ?srly
yourself, or use the screenly_cast_is_signage_player filter to widen or narrow
which requests count.
No. A signage request renders through the plugin’s own template for that one
request. Your active theme, and what every other visitor sees, is unaffected.
Versions up to 1.0.5 did switch the site’s theme, and could leave a site stuck on
the bundled Screenly Cast theme. On upgrade this plugin detects that, switches
your original theme back, and tells you it has done so.
Assume a couple of hundred characters will be comfortably read at a distance.
Longer content is trimmed to what fits rather than overflowing or scrolling.
If you need a different limit, filter it:
add_filter( 'screenly_cast_character_budget', fn() => 900 );
Yes, via the screenly_cast_allowed_tags filter. The default set is small on
purpose, and links are reduced to their text because there is nothing to click on
a screen.
The featured image if the post has one. Failing that, the first image in the post
content that comes from your media library, so adding a picture with the “Add
Media” button is enough, and you do not have to set a featured image as well.
Images hotlinked from other sites are ignored.
On an image’s own media URL, that image is the subject of the render.
Yes:
add_filter( 'screenly_cast_show_date', '__return_false' );
The line above the title then shows your site name instead, so the render still
says where it came from.
The design is built on CSS custom properties, so overriding a handful of them is
usually enough. Add your own stylesheet after ours by attaching it to the
screenly-cast handle:
add_action( 'wp_enqueue_scripts', function () {
wp_add_inline_style( 'screenly-cast', ':root{--color-ground:#101820;}' );
}, 100 );
The tokens worth knowing are --color-ground, --color-ink,
–color-ink-soft, --color-ink-dim and --color-brand, plus --root-min,
–root-gain and --root-max, which together drive the whole type scale.
Over a photograph there are two more: --srly-ground-deep-rgb, the scrim color
written as R G B channels, and --srly-text-shadow.
Since WordPress 6.4, attachment pages are disabled by default and redirect to the
image file itself. This plugin keeps them renderable for signage requests only,
so casting a media URL still works without re-enabling attachment pages for
ordinary visitors.
No, by design. On a large, non-interactive display, fixed unmoving content reads
better than anything that moves.
Reviews
Changelog
2026.8.1
No functional changes. Every file the plugin ships behaves as it did in 2026.8.0,
and the only edits inside them are to comments.
What this release exists for is the listing you are reading. WordPress.org serves a
plugin’s description from the readme in its stable tag, so revised wording only
reaches the directory when a new version is published. This is that publish.
The full detail for every release is in changelog.txt.