<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Anthias 2026.06.1 | Screenly</title><description>Video plays on the Raspberry Pi 2 and Pi 3 instead of a black screen, and more smoothly on the Pi 4 and Pi 5. Older balena players that lost their playlist after 2026.05.2 get it back.</description><link>https://www.screenly.io/releases/anthias/2026.06.1/</link><language>en</language><atom:link href="https://www.screenly.io/releases/anthias/2026.06.1/rss.xml" rel="self" type="application/rss+xml"/><lastBuildDate>Tue, 02 Jun 2026 00:00:00 +0000</lastBuildDate><item><title>Anthias 2026.06.1: Balena devices from before the Anthias rename keep or recover their playlist on upgrade</title><link>https://www.screenly.io/releases/anthias/2026.06.1/older-balena-devices-keep-their-playlist-on-upgrade/</link><guid isPermaLink="true">https://www.screenly.io/releases/anthias/2026.06.1/older-balena-devices-keep-their-playlist-on-upgrade/</guid><pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate><category>fix</category><description>&lt;p&gt;From Anthias 2026.06.1, a balena device installed before the Screenly to Anthias rename keeps its playlist and content when it upgrades. A device that already lost them gets them back when it starts 2026.06.1.&lt;/p&gt;
&lt;p&gt;Before, such a device could come up with an empty playlist after an upgrade, and many did when Anthias 2026.05.2 rolled out. Nothing had been deleted. Its data was still under &lt;code&gt;/data/.screenly&lt;/code&gt; and &lt;code&gt;/data/screenly_assets&lt;/code&gt;, but Anthias reads &lt;code&gt;/data/.anthias&lt;/code&gt; and &lt;code&gt;/data/anthias_assets&lt;/code&gt;, so it started with a new, empty database. Raspberry Pi OS and Debian installs weren&amp;#39;t affected, because the installer and the upgrade script already &lt;a href="https://www.screenly.io/releases/anthias/2026.05.0/fewer-containers-and-anthias-folders/"&gt;rename those folders&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now the containers run that same migration against &lt;code&gt;/data&lt;/code&gt; every time they start:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On a device that hasn&amp;#39;t been migrated yet, the configuration, database and content move to the &lt;code&gt;anthias&lt;/code&gt; names, and the paths inside &lt;code&gt;anthias.conf&lt;/code&gt; are rewritten to match.&lt;/li&gt;
&lt;li&gt;On a device that already came up empty, if &lt;code&gt;anthias.db&lt;/code&gt; has no content and the old &lt;code&gt;screenly.db&lt;/code&gt; does, the old database is copied into place. The empty one is kept as &lt;code&gt;anthias.db.emptybak.&amp;lt;timestamp&amp;gt;&lt;/code&gt;. If &lt;code&gt;anthias_assets&lt;/code&gt; is empty too, it becomes a link to the old media folder.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anthias 2026.06.0 already included this migration, but inside the containers it stopped with an error before doing anything, so it takes effect from 2026.06.1. You don&amp;#39;t need to do anything. The recovery only replaces a database with no content in it, so if you added content to an affected device after the upgrade, nothing is replaced, and the old database stays at &lt;code&gt;/data/.screenly/screenly.db&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Anthias 2026.06.1: Smoother video on Raspberry Pi 4 and Pi 5</title><link>https://www.screenly.io/releases/anthias/2026.06.1/smoother-video-on-raspberry-pi-4-and-pi-5/</link><guid isPermaLink="true">https://www.screenly.io/releases/anthias/2026.06.1/smoother-video-on-raspberry-pi-4-and-pi-5/</guid><pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate><category>improvement</category><description>&lt;p&gt;Video on a Raspberry Pi 4 or Pi 5 plays smoothly in Anthias 2026.06.1. Since the viewer started &lt;a href="https://www.screenly.io/releases/anthias/2026.05.1/video-decode-and-codec-check/"&gt;playing video itself in 2026.05.1&lt;/a&gt;, these boards decoded video without trouble but only got 8 to 12 frames per second onto the screen, so video looked choppy.&lt;/p&gt;
&lt;p&gt;In the project&amp;#39;s testing with a 1080p, 30 fps clip:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Board&lt;/th&gt;
&lt;th&gt;Frames per second on screen&lt;/th&gt;
&lt;th&gt;Viewer CPU use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Raspberry Pi 4&lt;/td&gt;
&lt;td&gt;8.3 before, 30 now&lt;/td&gt;
&lt;td&gt;about 115% before, 64% now&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Raspberry Pi 5&lt;/td&gt;
&lt;td&gt;11.7 before, 26.6 now&lt;/td&gt;
&lt;td&gt;about 155% before, 13% now&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The old path copied every frame from the GPU back to the CPU before drawing it. Frames now stay on the GPU until they&amp;#39;re on the screen. x86 and generic arm64 boards use the same viewer, but the project measured the change on the Pi 4 and Pi 5 only. The Pi 4 decodes H.264 in hardware up to 1080p; a 4K H.264 file still decodes in software, which uses every core and drops frames.&lt;/p&gt;
&lt;p&gt;If you read the viewer&amp;#39;s playback log, &lt;code&gt;/data/.anthias/playback-stats.log&lt;/code&gt;, the &lt;code&gt;SAMPLE&lt;/code&gt;, &lt;code&gt;END_FILE&lt;/code&gt; and &lt;code&gt;STOP&lt;/code&gt; lines now have a &lt;code&gt;frames-rendered&lt;/code&gt; field next to &lt;code&gt;frames-delivered&lt;/code&gt;. &lt;code&gt;frames-delivered&lt;/code&gt; counts frames the decoder handed over, and &lt;code&gt;frames-rendered&lt;/code&gt; counts how often the picture was drawn to the screen, so a big gap between them means the screen isn&amp;#39;t keeping up. Fields are &lt;code&gt;key=value&lt;/code&gt;, and the new one sits in the middle of each line, so a script that reads them by position needs updating.&lt;/p&gt;</description></item><item><title>Anthias 2026.06.1: Raspberry Pi 2 and Pi 3 play video instead of a black screen</title><link>https://www.screenly.io/releases/anthias/2026.06.1/pi-2-and-pi-3-play-video/</link><guid isPermaLink="true">https://www.screenly.io/releases/anthias/2026.06.1/pi-2-and-pi-3-play-video/</guid><pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate><category>fix</category><description>&lt;p&gt;From Anthias 2026.06.1, video plays on a Raspberry Pi 2 or Pi 3. Before, the screen stayed black for the length of every video, while the viewer log said it was showing it:&lt;/p&gt;
&lt;div class="code-block"&gt;
&lt;button type="button" class="code-copy" aria-label="Copy code" data-copy-code&gt;
&lt;svg data-copy viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;
&lt;rect x="9" y="9" width="11" height="11" rx="2"&gt;&lt;/rect&gt;
&lt;path d="M5 15V5a2 2 0 0 1 2-2h10"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;svg data-check viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;
&lt;path d="M20 6 9 17l-5-5"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/button&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Showing asset ... (video)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Images and web pages displayed as usual. This had been the case since the Pi 2 and Pi 3 images moved to Debian Bookworm in 2024, whatever OS version the Pi ran.&lt;/p&gt;
&lt;p&gt;These boards now play video with GStreamer, and the Pi&amp;#39;s video hardware does the heavy work: it decodes the H.264, then scales and converts the picture for the screen. VLC and the &lt;code&gt;python-vlc&lt;/code&gt; package are no longer in the Pi 2 and Pi 3 image. In the project&amp;#39;s testing on a Pi 3, this pipeline handled 1080p video at about 40 frames per second with no dropped frames, more than a 30 fps clip needs.&lt;/p&gt;
&lt;p&gt;Uploads to these boards were already limited to H.264, the codec this hardware decodes. Video follows the &amp;quot;Screen rotation&amp;quot; setting, but rotated 1080p video plays at only 1 or 2 frames per second on these boards. &lt;a href="https://www.screenly.io/releases/anthias/2026.07.4/rotated-video-on-pi-2-3/"&gt;Anthias 2026.07.4&lt;/a&gt; speeds up 180°; 90° and 270° stay slow.&lt;/p&gt;</description></item><item><title>Anthias 2026.06.1: Screen rotation turns web pages and images on Raspberry Pi 4</title><link>https://www.screenly.io/releases/anthias/2026.06.1/screen-rotation-works-on-raspberry-pi-4/</link><guid isPermaLink="true">https://www.screenly.io/releases/anthias/2026.06.1/screen-rotation-works-on-raspberry-pi-4/</guid><pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate><category>fix</category><description>&lt;p&gt;From Anthias 2026.06.1, the &amp;quot;Screen rotation&amp;quot; setting on the web interface&amp;#39;s Settings page turns the whole display on a Raspberry Pi 4. Web pages, images and video all turn together. In this release, 90° and 270° turn a Pi 4 the opposite way to a 32-bit Raspberry Pi 2 or 3; &lt;a href="https://www.screenly.io/releases/anthias/2026.07.3/screen-rotation-the-same-on-every-board/"&gt;Anthias 2026.07.3&lt;/a&gt; makes every board turn the same way.&lt;/p&gt;
&lt;p&gt;Before, only video turned on a Pi 4. Web pages and images stayed in landscape whatever you picked, as the &lt;a href="https://www.screenly.io/releases/anthias/2026.05.1/screen-rotation-setting/"&gt;2026.05.1 entry that introduced the setting&lt;/a&gt; described.&lt;/p&gt;
&lt;p&gt;When you save a new rotation, the viewer restarts with it, with no reboot. On the Pi 4 the viewer sets &lt;code&gt;QT_QPA_EGLFS_ROTATION&lt;/code&gt; from the setting each time it starts.&lt;/p&gt;</description></item><item><title>Anthias 2026.06.1: x86 displays no longer freeze on a heavy web page</title><link>https://www.screenly.io/releases/anthias/2026.06.1/x86-display-no-longer-freezes-on-the-last-frame/</link><guid isPermaLink="true">https://www.screenly.io/releases/anthias/2026.06.1/x86-display-no-longer-freezes-on-the-last-frame/</guid><pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate><category>fix</category><description>&lt;p&gt;If the screen on an x86 PC, mostly one with Intel graphics, froze on a single frame when the playlist reached a complex web page, Anthias 2026.06.1 fixes it and you don&amp;#39;t need to do anything. The screen keeps updating now.&lt;/p&gt;
&lt;p&gt;Before, the screen stayed on the last frame it showed while the viewer carried on through the playlist behind it. Only restarting the viewer container brought the display back. The viewer log showed a line like this:&lt;/p&gt;
&lt;div class="code-block"&gt;
&lt;button type="button" class="code-copy" aria-label="Copy code" data-copy-code&gt;
&lt;svg data-copy viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;
&lt;rect x="9" y="9" width="11" height="11" rx="2"&gt;&lt;/rect&gt;
&lt;path d="M5 15V5a2 2 0 0 1 2-2h10"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;svg data-check viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;
&lt;path d="M20 6 9 17l-5-5"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/button&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[ERROR] [backend/drm/atomic.c:79] connector HDMI-A-1: Atomic commit failed: Device or resource busy&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The x86 viewer now sets &lt;code&gt;WLR_DRM_NO_ATOMIC=1&lt;/code&gt; and &lt;code&gt;WLR_DRM_NO_MODIFIERS=1&lt;/code&gt; by default. They make the display compositor use the older way of updating the screen, which copes when the graphics chip is still busy drawing a page. A single display doesn&amp;#39;t need anything the newer way adds.&lt;/p&gt;
&lt;p&gt;Both are defaults you can override: set either to &lt;code&gt;0&lt;/code&gt; in the viewer&amp;#39;s environment, for example in a &lt;code&gt;docker-compose.override.yml&lt;/code&gt; for the &lt;code&gt;anthias-viewer&lt;/code&gt; service. Raspberry Pi and generic arm64 boards are unchanged.&lt;/p&gt;
&lt;p&gt;This covers the freeze that leaves &lt;code&gt;Atomic commit failed&lt;/code&gt; lines in the log. A screen that freezes with nothing in the log, for example when the network drops while a page is loading, recovers from &lt;a href="https://www.screenly.io/releases/anthias/2026.06.3/webview-recovery/"&gt;Anthias 2026.06.3&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Anthias 2026.06.1: Raspberry Pi 2 and Pi 3 viewers retry a crashed start, and other fixes</title><link>https://www.screenly.io/releases/anthias/2026.06.1/fixes-and-improvements/</link><guid isPermaLink="true">https://www.screenly.io/releases/anthias/2026.06.1/fixes-and-improvements/</guid><pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate><category>roundup</category><description>&lt;h2 id="fixes"&gt;Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;On a Raspberry Pi 2 or Pi 3, the viewer often crashed while starting, with &lt;code&gt;malloc(): unaligned tcache chunk detected&lt;/code&gt; in the log, and the container restarted in a loop. The viewer now retries the launch itself with a growing delay, up to 30 times at startup, and 3 times when it has to relaunch while content is playing, so playback doesn&amp;#39;t stall for minutes. That gets many players going, but on some the crash happens on every launch and the screen stays dark. &lt;a href="https://www.screenly.io/releases/anthias/2026.07.2/pi-2-and-pi-3-blank-screen/"&gt;Anthias 2026.07.2&lt;/a&gt; fixes the crash itself.&lt;/li&gt;
&lt;li&gt;A Raspberry Pi 4 with no display attached could still crash-loop with &lt;code&gt;no screens available&lt;/code&gt; on balenaOS 2026.x, despite the &lt;a href="https://www.screenly.io/releases/anthias/2026.06.0/fixes-and-improvements/"&gt;wait added in 2026.06.0&lt;/a&gt;. A virtual output that is always present was counted as a connected screen. It&amp;#39;s ignored now, so the Pi 4 waits for a real display.&lt;/li&gt;
&lt;li&gt;On x86, Raspberry Pi 5 and generic arm64 boards, the viewer no longer logs &lt;code&gt;A configure is scheduled for an uninitialized xdg_surface&lt;/code&gt; when it starts.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="improvements"&gt;Improvements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Device logs are much easier to read. The viewer image no longer turns on Qt debug logging, which had been adding many lines a second to the logs on every board.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="for-contributors"&gt;For contributors&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The C++ viewer tests run with &lt;code&gt;QT_QUICK_BACKEND=software&lt;/code&gt;, so the video scene loads on hosts without a usable OpenGL context.&lt;/li&gt;
&lt;li&gt;The Qt 6 viewer images install &lt;code&gt;qt6-declarative-dev&lt;/code&gt; and the &lt;code&gt;qml6-module-qtquick&lt;/code&gt; and &lt;code&gt;qml6-module-qtmultimedia&lt;/code&gt; runtime modules, and no longer install &lt;code&gt;libqt6multimediawidgets6&lt;/code&gt;. The QML modules aren&amp;#39;t linked at build time, so a build without them succeeds, and the viewer then exits at startup with &lt;code&gt;VideoView: QML video scene unavailable&lt;/code&gt; in its log.&lt;/li&gt;
&lt;li&gt;The Pi 2 and Pi 3 viewer image installs &lt;code&gt;gstreamer1.0-tools&lt;/code&gt; and the &lt;code&gt;gstreamer1.0-plugins-base&lt;/code&gt;, &lt;code&gt;-plugins-good&lt;/code&gt;, &lt;code&gt;-plugins-bad&lt;/code&gt; and &lt;code&gt;gstreamer1.0-alsa&lt;/code&gt; packages in place of &lt;code&gt;vlc&lt;/code&gt;, and &lt;code&gt;python-vlc&lt;/code&gt; is gone from the Python dependencies.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docs/board-enablement.md&lt;/code&gt; documents the Pi 2 and Pi 3 video path, the startup crash on the 32-bit viewer and the launch retries, and the new Pi 4 and Pi 5 video path.&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>