{"id":67339,"date":"2017-05-24T15:17:30","date_gmt":"2017-05-24T15:17:30","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/screenly-cast-for-wordpress\/"},"modified":"2026-08-14T06:56:39","modified_gmt":"2026-08-14T06:56:39","slug":"screenly-cast","status":"publish","type":"plugin","link":"https:\/\/lt.wordpress.org\/plugins\/screenly-cast\/","author":2034152,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2026.8.1","stable_tag":"2026.8.1","tested":"7.1","requires":"6.8","requires_php":"8.2","requires_plugins":null,"header_name":"Screenly Cast","header_author":"Screenly, Inc","header_description":"WordPress plugin to enable direct cast of pages, posts and media on Screenly devices.","assets_banners_color":"4a4157","last_updated":"2026-08-14 06:56:39","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/Screenly-Labs\/Screenly-Cast-for-WordPress","header_author_uri":"https:\/\/www.screenly.io","rating":5,"author_block_rating":0,"active_installs":50,"downloads":9151,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1":{"tag":"0.1","author":"vpetersson","date":"2017-05-24 15:19:46"},"0.1.1":{"tag":"0.1.1","author":"vpetersson","date":"2017-05-31 11:32:35"},"0.1.10":{"tag":"0.1.10","author":"vpetersson","date":"2017-06-02 14:41:06"},"0.1.11":{"tag":"0.1.11","author":"vpetersson","date":"2017-06-02 14:54:13"},"0.1.12":{"tag":"0.1.12","author":"vpetersson","date":"2017-06-02 15:02:17"},"0.1.13":{"tag":"0.1.13","author":"vpetersson","date":"2017-06-12 11:07:22"},"0.1.15":{"tag":"0.1.15","author":"vpetersson","date":"2017-06-12 16:51:20"},"0.1.16":{"tag":"0.1.16","author":"vpetersson","date":"2017-06-12 16:54:43"},"0.1.17":{"tag":"0.1.17","author":"vpetersson","date":"2017-06-15 08:34:44"},"0.1.18":{"tag":"0.1.18","author":"vpetersson","date":"2017-07-01 09:27:39"},"0.1.19":{"tag":"0.1.19","author":"vpetersson","date":"2018-09-07 13:08:31"},"0.1.2":{"tag":"0.1.2","author":"vpetersson","date":"2017-05-31 13:13:08"},"0.1.4":{"tag":"0.1.4","author":"vpetersson","date":"2017-05-31 13:48:00"},"0.1.5":{"tag":"0.1.5","author":"vpetersson","date":"2017-05-31 13:58:55"},"0.1.6":{"tag":"0.1.6","author":"vpetersson","date":"2017-06-01 17:18:53"},"0.1.7":{"tag":"0.1.7","author":"vpetersson","date":"2017-06-01 17:52:50"},"0.1.8":{"tag":"0.1.8","author":"vpetersson","date":"2017-06-02 09:36:33"},"0.1.9":{"tag":"0.1.9","author":"vpetersson","date":"2017-06-02 09:50:19"},"1.0.0":{"tag":"1.0.0","author":"vpetersson","date":"2024-12-27 12:12:38"},"1.0.1":{"tag":"1.0.1","author":"vpetersson","date":"2024-12-27 12:17:06"},"1.0.3":{"tag":"1.0.3","author":"vpetersson","date":"2024-12-27 12:23:55"},"1.0.4":{"tag":"1.0.4","author":"vpetersson","date":"2024-12-27 15:13:24"},"1.0.5":{"tag":"1.0.5","author":"vpetersson","date":"2025-01-29 21:09:23"},"2026.8.0":{"tag":"2026.8.0","author":"vpetersson","date":"2026-08-13 17:05:29"},"2026.8.1":{"tag":"2026.8.1","author":"vpetersson","date":"2026-08-14 06:56:39"}},"upgrade_notice":{"2026.8.1":"<p>Nothing to do. This release changes only the wording of the plugin&#039;s own\ndocumentation and directory listing; the plugin behaves exactly as 2026.8.0 did.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3645896,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3645896,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3645896,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3645896,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3645896,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1","0.1.1","0.1.10","0.1.11","0.1.12","0.1.13","0.1.15","0.1.16","0.1.17","0.1.18","0.1.19","0.1.2","0.1.4","0.1.5","0.1.6","0.1.7","0.1.8","0.1.9","1.0.0","1.0.1","1.0.3","1.0.4","1.0.5","2026.8.0","2026.8.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3645896,"resolution":"1","location":"assets","locale":"","width":1920,"height":1080},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3645896,"resolution":"2","location":"assets","locale":"","width":1920,"height":1080},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3645896,"resolution":"3","location":"assets","locale":"","width":1080,"height":1920},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3645896,"resolution":"4","location":"assets","locale":"","width":1600,"height":1000}},"screenshots":{"1":"An ordinary post as a visitor sees it: navigation, byline, comments, next and\nprevious links.","2":"The same post rendered for a screen. Same content, nothing that assumes\nsomebody is holding a mouse.","3":"The same layout in portrait. Both orientations work from 800x480 up to 4K with\nnothing to configure.","4":"The whole settings screen. A logo, and whether to recognize signage players."}},"plugin_section":[],"plugin_tags":[275556,127742,43735,275555,10818],"plugin_category":[],"plugin_contributors":[275557],"plugin_business_model":[],"class_list":["post-67339","plugin","type-plugin","status-publish","hentry","plugin_tags-anthias","plugin_tags-digital-signage","plugin_tags-kiosk","plugin_tags-screenly","plugin_tags-tv","plugin_contributors-vpetersson","plugin_committers-vpetersson"],"banners":{"banner":"https:\/\/ps.w.org\/screenly-cast\/assets\/banner-772x250.png?rev=3645896","banner_2x":"https:\/\/ps.w.org\/screenly-cast\/assets\/banner-1544x500.png?rev=3645896","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/screenly-cast\/assets\/icon.svg?rev=3645896","icon":"https:\/\/ps.w.org\/screenly-cast\/assets\/icon.svg?rev=3645896","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/screenly-cast\/assets\/screenshot-1.png?rev=3645896","caption":"An ordinary post as a visitor sees it: navigation, byline, comments, next and\nprevious links."},{"src":"https:\/\/ps.w.org\/screenly-cast\/assets\/screenshot-2.png?rev=3645896","caption":"The same post rendered for a screen. Same content, nothing that assumes\nsomebody is holding a mouse."},{"src":"https:\/\/ps.w.org\/screenly-cast\/assets\/screenshot-3.png?rev=3645896","caption":"The same layout in portrait. Both orientations work from 800x480 up to 4K with\nnothing to configure."},{"src":"https:\/\/ps.w.org\/screenly-cast\/assets\/screenshot-4.png?rev=3645896","caption":"The whole settings screen. A logo, and whether to recognize signage players."}],"raw_content":"<!--section=description-->\n<p>Screenly Cast turns WordPress into a simple content creation tool for digital\nsignage, and for <a href=\"https:\/\/www.screenly.io\">Screenly<\/a> in particular.<\/p>\n\n<p>It deliberately does not try to make WordPress into a digital signage CMS. There\nare no zones, no feeds and no playlists. It does one thing: it takes a post, page\nor image you have already published and renders it so it reads well on a screen\nnobody is standing next to.<\/p>\n\n<p>That covers most of what a screen on a wall is actually for: a digital notice\nboard in a school or an office, opening hours and a menu board in a caf\u00e9, a lobby\ndisplay, or a Raspberry Pi in kiosk mode showing whatever you published this\nmorning.<\/p>\n\n<p>Point a screen at an ordinary page URL and it shows the signage view. Recognized\nsignage players are detected from their request and sent to the signage version\nof whatever they asked for, so there is nothing to remember and nothing to edit.\nAppending <code>?srly<\/code> still works, and still wins, which is what you want for\npreviewing on your own machine.<\/p>\n\n<p>A signage render is the title, the date, a short body, and the featured image if\nthere is one. Everything that assumes a person with a mouse is removed:\nnavigation, sidebars, comments, links, sharing buttons.<\/p>\n\n<p><strong>Your theme is never touched.<\/strong> A signage request renders through the plugin's\nown template and leaves your site's active theme exactly as it was. Earlier\nversions of this plugin switched the whole site's theme when a signage URL was\nrequested; that is gone. See the changelog.<\/p>\n\n<p>Some specifics, because they are the difference between \"works\" and \"works on a\nwall\":<\/p>\n\n<ul>\n<li><strong>Fits the screen.<\/strong> Content is trimmed to what actually fits, at the\nresolution the screen actually is. A screen cannot scroll and nobody is there\nto try.<\/li>\n<li><strong>Every resolution, both orientations.<\/strong> Correct from an 800x480 Raspberry Pi\nTouch Display up to 4K, in landscape and portrait, with no configuration.<\/li>\n<li><strong>Works on old players.<\/strong> Signage hardware is often years behind the desktop.\nThe stylesheet is compiled down to a Chrome 87 baseline, and players below that\nget a reduced-motion mode rather than a broken layout.<\/li>\n<li><strong>No external requests.<\/strong> Fonts are bundled with the plugin. Nothing is fetched\nfrom a CDN, which matters both for privacy and because a player is frequently\noffline.<\/li>\n<li><strong>Not indexed.<\/strong> Signage renders are marked noindex, so they do not compete\nwith your real pages in search results.<\/li>\n<\/ul>\n\n<p>Works with <a href=\"https:\/\/www.screenly.io\">Screenly<\/a> and\n<a href=\"https:\/\/anthias.screenly.io\/\">Anthias<\/a> out of the box. Because a signage render\nis just a URL, it works the same way on Yodeck, Xibo, OptiSigns, ScreenCloud,\nRise Vision, Signagelive, BrightSign, IAdea and any other player, wallboard or\nChrome kiosk that can open a web page. Those are other companies' products and\nare not affiliated with Screenly; they are listed because the plugin genuinely\nworks with them.<\/p>\n\n<p>The source code is on <a href=\"https:\/\/github.com\/Screenly-Labs\/Screenly-Cast-for-WordPress\/\">GitHub<\/a>. Contributions and bug reports are welcome.<\/p>\n\n<h3>Support<\/h3>\n\n<p>For support, feature requests and bug reports, please use the\n<a href=\"https:\/\/github.com\/Screenly-Labs\/Screenly-Cast-for-WordPress\/issues\">GitHub Issues page<\/a>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Optionally, go to <strong>Settings \u2192 Screenly Cast<\/strong> and choose a logo to show in\nthe corner of every render.<\/li>\n<li>Open any post, page or image and append <code>?srly<\/code> to its URL.<\/li>\n<li>Add that URL as content in Screenly, or whichever signage system you use.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"when%20do%20i%20use%20%22%3Fsrly%22%20and%20when%20do%20i%20use%20%22%26srly%22%3F\"><h3>When do I use \"?srly\" and when do I use \"&amp;srly\"?<\/h3><\/dt>\n<dd><p>Use <code>?srly<\/code> when the URL has no other parameters:<\/p>\n\n<ul>\n<li><code>https:\/\/www.mydomain.com\/some-page?srly<\/code><\/li>\n<\/ul>\n\n<p>Use <code>&amp;srly<\/code> when it already has some:<\/p>\n\n<ul>\n<li><code>https:\/\/www.mydomain.com\/?somevar=1&amp;anothervar=2&amp;srly<\/code><\/li>\n<\/ul>\n\n<p>The parameter needs no value. <code>?srly<\/code> on its own is enough.<\/p><\/dd>\n<dt id=\"how%20are%20signage%20players%20recognized%3F\"><h3>How are signage players recognized?<\/h3><\/dt>\n<dd><p>From their request: the <code>X-Screenly-*<\/code> metadata headers a Screenly player can\nsend, the Android package name several other players identify themselves with,\nand user agent tokens that name a player and nothing else: Screenly, Anthias,\nBrightSign, IAdea, Slideshow and Unifi Connect.<\/p>\n\n<p>Detection is deliberately cautious, because the two kinds of mistake are not\nequally bad. A player it misses still works if you add <code>?srly<\/code>. A device it\nwrongly claims would show a signage render to somebody who was just browsing,\nwith no explanation and no way back.<\/p>\n\n<p>So a signal has to name a player and nothing else. Notably absent: LG webOS and\nSamsung Tizen, which run signage displays <em>and<\/em> every LG and Samsung smart TV,\nand QtWebEngine, which signage players embed <em>and<\/em> so does any desktop Qt\napplication. Search engines, signed-in users and meeting-room devices are\nexcluded too: a room calendar is not signage.<\/p>\n\n<p>A detected player is sent to the same URL with <code>?srly<\/code> added rather than being\nshown signage on the original URL, so that a page cache or CDN never has to serve\ntwo different pages for one URL. Only the redirect itself is uncacheable.<\/p>\n\n<p>Turn it off under <strong>Settings \u2192 Screenly Cast<\/strong> if you would rather add <code>?srly<\/code>\nyourself, or use the <code>screenly_cast_is_signage_player<\/code> filter to widen or narrow\nwhich requests count.<\/p><\/dd>\n<dt id=\"does%20this%20change%20my%20site%27s%20theme%3F\"><h3>Does this change my site's theme?<\/h3><\/dt>\n<dd><p>No. A signage request renders through the plugin's own template for that one\nrequest. Your active theme, and what every other visitor sees, is unaffected.<\/p>\n\n<p>Versions up to 1.0.5 did switch the site's theme, and could leave a site stuck on\nthe bundled Screenly Cast theme. On upgrade this plugin detects that, switches\nyour original theme back, and tells you it has done so.<\/p><\/dd>\n<dt id=\"how%20much%20text%20will%20be%20shown%3F\"><h3>How much text will be shown?<\/h3><\/dt>\n<dd><p>Assume a couple of hundred characters will be comfortably read at a distance.\nLonger content is trimmed to what fits rather than overflowing or scrolling.<\/p>\n\n<p>If you need a different limit, filter it:<\/p>\n\n<pre><code>add_filter( 'screenly_cast_character_budget', fn() =&gt; 900 );\n<\/code><\/pre><\/dd>\n<dt id=\"can%20i%20allow%20more%20html%20tags%20in%20signage%20content%3F\"><h3>Can I allow more HTML tags in signage content?<\/h3><\/dt>\n<dd><p>Yes, via the <code>screenly_cast_allowed_tags<\/code> filter. The default set is small on\npurpose, and links are reduced to their text because there is nothing to click on\na screen.<\/p><\/dd>\n<dt id=\"which%20image%20is%20used%3F\"><h3>Which image is used?<\/h3><\/dt>\n<dd><p>The featured image if the post has one. Failing that, the first image in the post\ncontent that comes from your media library, so adding a picture with the \"Add\nMedia\" button is enough, and you do not have to set a featured image as well.\nImages hotlinked from other sites are ignored.<\/p>\n\n<p>On an image's own media URL, that image is the subject of the render.<\/p><\/dd>\n<dt id=\"can%20i%20hide%20the%20date%3F\"><h3>Can I hide the date?<\/h3><\/dt>\n<dd><p>Yes:<\/p>\n\n<pre><code>add_filter( 'screenly_cast_show_date', '__return_false' );\n<\/code><\/pre>\n\n<p>The line above the title then shows your site name instead, so the render still\nsays where it came from.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20colors%20and%20typography%3F\"><h3>Can I change the colors and typography?<\/h3><\/dt>\n<dd><p>The design is built on CSS custom properties, so overriding a handful of them is\nusually enough. Add your own stylesheet after ours by attaching it to the\n    screenly-cast handle:<\/p>\n\n<pre><code>add_action( 'wp_enqueue_scripts', function () {\n  wp_add_inline_style( 'screenly-cast', ':root{--color-ground:#101820;}' );\n}, 100 );\n<\/code><\/pre>\n\n<p>The tokens worth knowing are <code>--color-ground<\/code>, <code>--color-ink<\/code>,\n    --color-ink-soft, <code>--color-ink-dim<\/code> and <code>--color-brand<\/code>, plus <code>--root-min<\/code>,\n    --root-gain and <code>--root-max<\/code>, which together drive the whole type scale.<\/p>\n\n<p>Over a photograph there are two more: <code>--srly-ground-deep-rgb<\/code>, the scrim color\nwritten as <code>R G B<\/code> channels, and <code>--srly-text-shadow<\/code>.<\/p><\/dd>\n<dt id=\"why%20does%20my%20image%20media%20page%20work%20here%20but%20redirect%20normally%3F\"><h3>Why does my image media page work here but redirect normally?<\/h3><\/dt>\n<dd><p>Since WordPress 6.4, attachment pages are disabled by default and redirect to the\nimage file itself. This plugin keeps them renderable for signage requests only,\nso casting a media URL still works without re-enabling attachment pages for\nordinary visitors.<\/p><\/dd>\n<dt id=\"does%20it%20scroll%20long%20content%20automatically%3F\"><h3>Does it scroll long content automatically?<\/h3><\/dt>\n<dd><p>No, by design. On a large, non-interactive display, fixed unmoving content reads\nbetter than anything that moves.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2026.8.1<\/h4>\n\n<p>No functional changes. Every file the plugin ships behaves as it did in 2026.8.0,\nand the only edits inside them are to comments.<\/p>\n\n<p>What this release exists for is the listing you are reading. WordPress.org serves a\nplugin's description from the readme in its stable tag, so revised wording only\nreaches the directory when a new version is published. This is that publish.<\/p>\n\n<p>The full detail for every release is in changelog.txt.<\/p>","raw_excerpt":"Turn WordPress posts, pages and images into digital signage for any TV, kiosk or notice board. Works with Screenly and Anthias.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/67339","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=67339"}],"author":[{"embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/vpetersson"}],"wp:attachment":[{"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=67339"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=67339"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=67339"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=67339"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=67339"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=67339"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}