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.
Screenshots




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.
FAQ
-
When do I use “?srly” and when do I use “&srly”?
-
Use
?srlywhen the URL has no other parameters:https://www.mydomain.com/some-page?srly
Use
&srlywhen it already has some:https://www.mydomain.com/?somevar=1&anothervar=2&srly
The parameter needs no value.
?srlyon its own is enough. -
How are signage players recognized?
-
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
?srlyadded 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 thescreenly_cast_is_signage_playerfilter to widen or narrow
which requests count. -
Does this change my site’s theme?
-
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. -
How much text will be shown?
-
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_tagsfilter. The default set is small on
purpose, and links are reduced to their text because there is nothing to click on
a screen. -
Which image is used?
-
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.
-
Can I hide the date?
-
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. -
Can I change the colors and typography?
-
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-dimand--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 asR G Bchannels, and--srly-text-shadow. -
Why does my image media page work here but redirect normally?
-
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. -
Does it scroll long content automatically?
-
No, by design. On a large, non-interactive display, fixed unmoving content reads
better than anything that moves.
Reviews
Contributors & Developers
“Screenly Cast” is open source software. The following people have contributed to this plugin.
Contributors“Screenly Cast” has been translated into 1 locale. Thank you to the translators for their contributions.
Translate “Screenly Cast” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
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.
