{"product":"anthias","releases":[{"date":"2026-05-08","entries":[{"areas":[],"breaking":false,"content_html":"\u003cp\u003eThe Anthias web interface has a new design in Anthias 2026.05.0, and it works on a phone: every page fits a small screen, and the menu folds into a button. The Schedule, Integrations, Settings and System info pages, the sign-in and error pages, and the splash screen on the player\u0026#39;s display all look different. The web interface also no longer loads a font from Google Fonts, so it looks the same on a network with no internet access.\u003c/p\u003e\n\u003ch2 id=\"the-schedule-page\"\u003eThe Schedule page\u003c/h2\u003e\n\u003cp\u003eThe two lists are now called \u0026quot;Enabled\u0026quot; and \u0026quot;Inactive\u0026quot;. The separate Start and End columns become one \u0026quot;Schedule window\u0026quot; column that says where each item stands: \u0026quot;Live · ends in 3 days\u0026quot;, \u0026quot;Starts in 2 days\u0026quot;, \u0026quot;Ended 4 days ago\u0026quot;, or \u0026quot;Scheduled · off-window now\u0026quot; when a \u003ca href=\"/releases/anthias/2026.05.0/schedule-by-day-and-time/\"\u003eday or time limit\u003c/a\u003e keeps it off the screen at the moment.\u003c/p\u003e\n\u003cp\u003eYou can preview any item from the Schedule page. Images and videos play right there, and web pages and streams load inside the preview. Some sites won\u0026#39;t load inside another page; for those, use \u0026quot;Open in new tab\u0026quot;.\u003c/p\u003e\n\u003cp\u003eWhen you edit an item, its start, end and duration are under \u0026quot;Availability\u0026quot;. Days and times, \u0026quot;No cache\u0026quot;, \u0026quot;Skip asset check\u0026quot; and, for web pages, the auto-refresh interval are under \u0026quot;Advanced\u0026quot;.\u003c/p\u003e\n\u003ch2 id=\"the-splash-screen\"\u003eThe splash screen\u003c/h2\u003e\n\u003cp\u003eThe splash screen says \u0026quot;Detecting network…\u0026quot; until the player has an address. Then it switches to \u0026quot;Ready to manage\u0026quot;, lists the addresses to open in a browser, and shows a QR code for the first one, so you can open the web interface by scanning it with a phone. The old splash screen looked up the addresses once and showed \u0026quot;Unable to retrieve IP.\u0026quot; if none had come up yet. This one keeps checking for up to 2 minutes, so a player that\u0026#39;s slow to get an address shows it as soon as it has one. In this release it could still show the address saved at install time after the network changed; \u003ca href=\"/releases/anthias/2026.05.1/fixes-and-improvements/\"\u003eAnthias 2026.05.1\u003c/a\u003e fixes that.\u003c/p\u003e\n\u003ch2 id=\"settings-and-system-info\"\u003eSettings and System info\u003c/h2\u003e\n\u003cp\u003eSettings is split into \u0026quot;Player identity\u0026quot;, \u0026quot;Display \u0026amp; playback\u0026quot;, \u0026quot;Authentication\u0026quot;, \u0026quot;Backup \u0026amp; restore\u0026quot; and \u0026quot;System controls\u0026quot;. System info is grouped into \u0026quot;Live diagnostics\u0026quot;, \u0026quot;Display \u0026amp; hardware\u0026quot; and \u0026quot;Identity\u0026quot;.\u003c/p\u003e\n","description":"Every page of the Anthias web interface has a new design and works on a phone. The Schedule page says where each item stands right now and lets you preview it, and the splash screen shows a QR code that opens the web interface.","title":"A redesigned web interface","type":"release","url":"https://www.screenly.io/releases/anthias/2026.05.0/new-web-interface/"},{"areas":[],"breaking":false,"content_html":"\u003cp\u003eA lunch menu that should only run from 11:30am to 2pm, a promotion for weekdays, a notice for the Monday morning shift: in Anthias 2026.05.0, each piece of content can be limited to certain days of the week and a window of the day, on top of the start and end dates it already had. Content without these limits plays as before.\u003c/p\u003e\n\u003cp\u003eTo set them, edit the content on the Schedule page and open \u0026quot;Advanced\u0026quot;. Tick the days it should play, then fill in \u0026quot;Play from\u0026quot; and \u0026quot;Play until\u0026quot;. With the default 12-hour clock in Settings, saving a time window from the web interface failed with an error until \u003ca href=\"/releases/anthias/2026.06.3/fixes-and-improvements/\"\u003eAnthias 2026.06.3\u003c/a\u003e; the API and the 24-hour clock weren\u0026#39;t affected. Leave both times empty to play all day. The Schedule page marks content that\u0026#39;s outside its window right now as \u0026quot;Scheduled · off-window now\u0026quot;.\u003c/p\u003e\n\u003ch2 id=\"how-the-times-work\"\u003eHow the times work\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTimes follow the player\u0026#39;s time zone.\u003c/li\u003e\n\u003cli\u003e\u0026quot;Play until\u0026quot; is the first minute the content is off. A window from 9:00am to 5:00pm stops at 5:00pm.\u003c/li\u003e\n\u003cli\u003eA window that ends before it starts runs past midnight. Friday from 10:00pm to 2:00am plays on Friday night and into Saturday morning. The days you tick are the days a window starts on.\u003c/li\u003e\n\u003cli\u003eThe player checks the windows about once a minute, so content comes on and goes off within a minute of its window opening and closing.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"for-developers\"\u003eFor developers\u003c/h2\u003e\n\u003cp\u003eOn API v2, assets have 3 new fields. \u003ccode\u003eplay_days\u003c/code\u003e is a list of weekday numbers from 1 (Monday) to 7 (Sunday), and defaults to all 7. An empty list is rejected. \u003ccode\u003eplay_time_from\u003c/code\u003e and \u003ccode\u003eplay_time_to\u003c/code\u003e take a time such as \u003ccode\u003e09:00:00\u003c/code\u003e, or \u003ccode\u003enull\u003c/code\u003e, and have to be set together. Only API v2 has these fields.\u003c/p\u003e\n","description":"A lunch menu from 11:30am to 2pm, or a promotion that runs only on weekdays: each piece of content can now be limited to certain days of the week and a window of the day, on top of its start and end dates.","title":"Content can play only on certain days and at certain times","type":"release","url":"https://www.screenly.io/releases/anthias/2026.05.0/schedule-by-day-and-time/"},{"areas":[],"breaking":true,"content_html":"\u003cp\u003eIf you turned on authentication on Anthias 0.20.5 or earlier, the web interface stops asking for a password once you upgrade to 2026.05.0. Set a new password right after the upgrade.\u003c/p\u003e\n\u003cp\u003eAnthias 2026.05.0 keeps the username and password in the player\u0026#39;s database instead of in the \u003ccode\u003e[auth_basic]\u003c/code\u003e section of the config file. Anthias 0.20.5 and earlier saved the password in a format the new sign-in can\u0026#39;t read, and it can\u0026#39;t be converted without the password itself. So when the upgrade finds one, it removes the \u003ccode\u003e[auth_basic]\u003c/code\u003e section from \u003ccode\u003e~/.anthias/anthias.conf\u003c/code\u003e, switches authentication off and logs this line, which you can read with \u003ccode\u003ejournalctl -t anthias-server\u003c/code\u003e:\u003c/p\u003e\n\u003cdiv class=\"code-block\"\u003e\n  \u003cbutton type=\"button\" class=\"code-copy\" aria-label=\"Copy code\" data-copy-code\u003e\n    \u003csvg data-copy viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\n      \u003crect x=\"9\" y=\"9\" width=\"11\" height=\"11\" rx=\"2\"\u003e\u003c/rect\u003e\n      \u003cpath d=\"M5 15V5a2 2 0 0 1 2-2h10\"\u003e\u003c/path\u003e\n    \u003c/svg\u003e\n    \u003csvg data-check viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\n      \u003cpath d=\"M20 6 9 17l-5-5\"\u003e\u003c/path\u003e\n    \u003c/svg\u003e\n  \u003c/button\u003e\n  \u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-text\" data-lang=\"text\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eInsecure password hash in /data/.anthias/anthias.conf; clearing credentials and disabling basic auth. Re-set the password from the Settings page.\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eIf you turned on authentication on Anthias 0.20.5 or earlier:\u003c/strong\u003e after upgrading, open Settings, go to \u0026quot;Authentication\u0026quot;, choose \u0026quot;Basic auth\u0026quot; under \u0026quot;Method\u0026quot;, enter a username and a new password, and select \u0026quot;Save settings\u0026quot;. Until you do, anyone who can reach the player on your network can use the web interface.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThe new password has to be at least 8 characters, can\u0026#39;t be a commonly used password or only numbers, and can\u0026#39;t be too close to the username.\u003c/p\u003e\n\u003cp\u003eIf authentication was off before the upgrade, it stays off. Any username and password left in the config file are removed, so you choose new ones when you turn it on.\u003c/p\u003e\n\u003ch2 id=\"for-developers\"\u003eFor developers\u003c/h2\u003e\n\u003cp\u003eScripts that call the API with HTTP Basic credentials keep working with the new username and password. Each use is logged as a \u003ccode\u003eDEPRECATED\u003c/code\u003e warning, at most once an hour for each user, client address and path, and the warning says HTTP Basic will be removed in a future release.\u003c/p\u003e\n","description":"If you turned on authentication on Anthias 0.20.5 or earlier, the upgrade to 2026.05.0 switches it off, and anyone on your network can use the web interface until you set a new password in Settings. The old password can't be carried over.","title":"Upgrading from Anthias 0.20.5 or earlier switches off the web interface password","type":"security","url":"https://www.screenly.io/releases/anthias/2026.05.0/password-not-carried-over/"},{"areas":[],"breaking":true,"content_html":"\u003cp\u003eAnthias releases are now numbered by the calendar: the year, a two-digit month and a patch number. 2026.05.0 is the first, and it follows 0.20.5. You\u0026#39;ll see the new number on System info, and the update notice now only appears when a newer release has been published.\u003c/p\u003e\n\u003cp\u003eIts git tag is \u003ccode\u003ev2026.05.0\u003c/code\u003e. To pin a player to it, choose \u0026quot;tag\u0026quot; at the installer\u0026#39;s version prompt and enter \u003ccode\u003ev2026.05.0\u003c/code\u003e.\u003c/p\u003e\n\u003ch2 id=\"the-version-and-the-update-notice\"\u003eThe version and the update notice\u003c/h2\u003e\n\u003cp\u003eOn System info, \u0026quot;Anthias version\u0026quot; shows the release, such as \u003ccode\u003ev2026.05.0\u003c/code\u003e, with the short commit hash in brackets under it. It used to show the branch and the commit, such as \u003ccode\u003emaster@a1b2c3d\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u0026quot;Update available\u0026quot; appears next to the version when a newer release has been published, and links to the latest release on GitHub. The player looks for a new release once a day. Before, Anthias compared your commit with the newest commit on your branch, so a player installed from \u003ccode\u003emaster\u003c/code\u003e was told to update after any change landed there, release or not. The notice is no longer in the navigation bar, where people had complained on the forum since 2025 that it never went away. From July 2026, when the newest release on GitHub was a WebView release, the check failed on players older than \u003ca href=\"/releases/anthias/2026.07.1/fixes-and-improvements/\"\u003eAnthias 2026.07.1\u003c/a\u003e.\u003c/p\u003e\n\u003ch2 id=\"for-developers\"\u003eFor developers\u003c/h2\u003e\n\u003cp\u003eIn \u003ccode\u003eGET /api/v2/info\u003c/code\u003e, \u003ccode\u003eanthias_version\u003c/code\u003e changes from \u003ccode\u003ebranch@hash\u003c/code\u003e, such as \u003ccode\u003emaster@a1b2c3d\u003c/code\u003e, to the release followed by the short hash in brackets: \u003ccode\u003ev2026.05.0 (a1b2c3d)\u003c/code\u003e. On a branch other than \u003ccode\u003emaster\u003c/code\u003e or \u003ccode\u003emain\u003c/code\u003e, the branch name follows the hash: \u003ccode\u003ev2026.05.0 (a1b2c3d, my-branch)\u003c/code\u003e. \u003ccode\u003eup_to_date\u003c/code\u003e now compares the player\u0026#39;s release with the latest published release.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eIf a script reads \u003ccode\u003eanthias_version\u003c/code\u003e:\u003c/strong\u003e it no longer contains \u003ccode\u003e@\u003c/code\u003e. Take the release from the text before the first space, and the commit hash from inside the brackets.\u003c/p\u003e\n\u003c/blockquote\u003e\n","description":"Releases are numbered by year, month and patch instead of 0.20.x. System info shows the release number, and the update notice appears only when a newer release is published.","title":"Anthias moves to calendar versions, starting with 2026.05.0","type":"release","url":"https://www.screenly.io/releases/anthias/2026.05.0/calendar-versions/"},{"areas":[],"breaking":false,"content_html":"\u003cp\u003eAnthias 2026.05.0 installs and runs on Raspberry Pi OS Trixie (Debian 13) as well as Bookworm, which people had asked for since Trixie came out in 2025. The README\u0026#39;s compatibility list, which used to warn that Trixie wasn\u0026#39;t supported, now names both for every board:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRaspberry Pi 5, 4 and 3: 64-bit Trixie and Bookworm\u003c/li\u003e\n\u003cli\u003eRaspberry Pi 2: 32-bit Trixie and Bookworm\u003c/li\u003e\n\u003cli\u003ex86 PCs: 64-bit Trixie and Bookworm\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBullseye, and 32-bit Raspberry Pi OS on the Raspberry Pi 3 and 4, are no longer on the list.\u003c/p\u003e\n\u003ch2 id=\"the-containers\"\u003eThe containers\u003c/h2\u003e\n\u003cp\u003eWhatever the host runs, the containers are now built on Debian Trixie with Python 3.13. The Raspberry Pi images used to start from Balena\u0026#39;s Bookworm-based images. On the Raspberry Pi 4, the viewer now uses the Qt 6 build of the WebView and plays video with mpv, the same as on the Raspberry Pi 5 and x86. The Raspberry Pi 2 and 3 stay on Qt 5 and VLC.\u003c/p\u003e\n\u003ch2 id=\"raspberry-pi-1-zero-and-the-32-bit-raspberry-pi-4\"\u003eRaspberry Pi 1, Zero and the 32-bit Raspberry Pi 4\u003c/h2\u003e\n\u003cp\u003eImages are built for the Raspberry Pi 2, 3, 4 (64-bit) and 5 and x86, and balenaOS disk images for the 4 Raspberry Pi boards. The installer stops on a Raspberry Pi 1 or any Zero with \u0026quot;Unsupported Raspberry Pi model\u0026quot;, and installs the 64-bit images on every Raspberry Pi 4.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eIf you run Anthias on a Raspberry Pi 1, a Zero, or a Raspberry Pi 4 with 32-bit Raspberry Pi OS:\u003c/strong\u003e there\u0026#39;s no Anthias 2026.05.0 for the Raspberry Pi 1 or the Zero, so keep those on 0.20.5. Before you upgrade a Raspberry Pi 4, run \u003ccode\u003edpkg --print-architecture\u003c/code\u003e on it. If it prints \u003ccode\u003earmhf\u003c/code\u003e rather than \u003ccode\u003earm64\u003c/code\u003e, reinstall it with 64-bit Raspberry Pi OS first.\u003c/p\u003e\n\u003c/blockquote\u003e\n","description":"Raspberry Pi OS Trixie (Debian 13) is supported alongside Bookworm, which people had asked for since it came out in 2025. The Raspberry Pi 1 and Zero stay on 0.20.5, and a Raspberry Pi 4 now needs 64-bit Raspberry Pi OS.","title":"Anthias supports Raspberry Pi OS Trixie","type":"release","url":"https://www.screenly.io/releases/anthias/2026.05.0/raspberry-pi-os-trixie/"},{"areas":[],"breaking":false,"content_html":"\u003cp\u003eUpload a photo straight from an iPhone or a video from a camera, and Anthias 2026.05.0 converts it into something the player can show.\u003c/p\u003e\n\u003ch2 id=\"images\"\u003eImages\u003c/h2\u003e\n\u003cp\u003eThese image formats are converted to lossless WebP when you upload them: HEIC and HEIF (what iPhones save photos as), TIFF, BMP, ICO, TGA, JPEG 2000 and AVIF. A converted image can be up to 50 megapixels. JPEG, PNG, WebP, GIF and SVG are kept as they are.\u003c/p\u003e\n\u003ch2 id=\"videos\"\u003eVideos\u003c/h2\u003e\n\u003cp\u003eEvery uploaded video is checked, and converted when the player can\u0026#39;t play it as it is. A video plays as it is when:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eits file is MP4, M4V, MKV, MOV, WebM, TS, MPG, MPEG, FLV or AVI\u003c/li\u003e\n\u003cli\u003eits audio is AAC, MP3, Opus, Vorbis or AC3, or it has none\u003c/li\u003e\n\u003cli\u003eits video is H.264, or HEVC on a Raspberry Pi 4, Raspberry Pi 5 or x86 PC\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eAnything else is converted to H.264 on a Raspberry Pi 2 or 3, and to HEVC on the other boards. A conversion that takes longer than 30 minutes stops and fails.\u003c/p\u003e\n\u003cp\u003eYouTube links you add with \u0026quot;From URL\u0026quot; are downloaded as video and go through the same check.\u003c/p\u003e\n\u003ch2 id=\"while-it-converts\"\u003eWhile it converts\u003c/h2\u003e\n\u003cp\u003eNew content shows \u0026quot;Processing\u0026quot; on the Schedule page until it\u0026#39;s ready. If the file can\u0026#39;t be converted, it shows \u0026quot;Failed\u0026quot; and is switched off, so it never reaches the screen. Edit or delete it, or upload a fixed file.\u003c/p\u003e\n\u003cp\u003eConversion runs at the lowest CPU and disk priority on the player, so playback keeps going while a large video is processed.\u003c/p\u003e\n\u003ch2 id=\"for-developers\"\u003eFor developers\u003c/h2\u003e\n\u003cp\u003eOn API v2, assets have a read-only \u003ccode\u003emetadata\u003c/code\u003e field. After a failed conversion, \u003ccode\u003emetadata.error_message\u003c/code\u003e says what went wrong.\u003c/p\u003e\n","description":"Photos straight from an iPhone, TIFFs, and videos in formats the player can't play are converted when you upload them, so they show on the screen. A file that can't be converted is marked \"Failed\" and never reaches the screen.","title":"Uploads accept HEIC, TIFF and other image and video formats","type":"release","url":"https://www.screenly.io/releases/anthias/2026.05.0/upload-formats/"},{"areas":[],"breaking":false,"content_html":"\u003cp\u003eA web page on the screen can now reload itself, so a dashboard or a status page that doesn\u0026#39;t update on its own stays current while it\u0026#39;s showing.\u003c/p\u003e\n\u003cp\u003eTo turn it on, edit the web page on the Schedule page, open \u0026quot;Advanced\u0026quot; and fill in \u0026quot;Auto-refresh interval (seconds)\u0026quot;. The field is only there for web pages. Leave it empty or enter 0 to switch it off, which is the default. The longest interval is 86400 seconds, which is 24 hours.\u003c/p\u003e\n\u003ch2 id=\"for-developers\"\u003eFor developers\u003c/h2\u003e\n\u003cp\u003eOn API v2, assets have a \u003ccode\u003erefresh_interval_s\u003c/code\u003e field, an integer from 0 to 86400, where 0 means off. You can set it when you create or update a web page, and it comes back when you read one.\u003c/p\u003e\n","description":"Set an auto-refresh interval on a web page and the player reloads it at that interval while it's on screen, so a dashboard or status page that doesn't update itself stays current.","title":"Web pages on the screen can reload on a timer","type":"release","url":"https://www.screenly.io/releases/anthias/2026.05.0/webpage-auto-refresh/"},{"areas":[],"breaking":false,"content_html":"\u003cp\u003eFrom Anthias 2026.05.0, one script on the player puts its web interface behind HTTPS, so signing in and managing content stay private on a network you share with others.\u003c/p\u003e\n\u003cp\u003eRun it on the player in one of 3 ways:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e~/anthias/bin/enable_ssl.sh\u003c/code\u003e uses a certificate the player issues itself. It works when you reach the player by its IP address on a local network, and browsers warn about the certificate until you trust it.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~/anthias/bin/enable_ssl.sh --domain signage.example.com\u003c/code\u003e gets a certificate from Let\u0026#39;s Encrypt and renews it. The domain has to point at the player, and Let\u0026#39;s Encrypt has to be able to reach it on port 80. Add \u003ccode\u003e--email\u003c/code\u003e with your address for Let\u0026#39;s Encrypt\u0026#39;s notices, or \u003ccode\u003e--staging\u003c/code\u003e to try it against Let\u0026#39;s Encrypt\u0026#39;s test service first.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~/anthias/bin/enable_ssl.sh --cert cert.pem --key key.pem\u003c/code\u003e uses a certificate and key you already have.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWith HTTPS on, the web interface answers on port 443, and port 80 redirects to it. If the player runs a firewall, open port 443, for example with \u003ccode\u003esudo ufw allow 443/tcp\u003c/code\u003e. To go back to plain HTTP on port 80, run \u003ccode\u003e~/anthias/bin/disable_ssl.sh\u003c/code\u003e. It keeps the certificate, so turning HTTPS on again reuses it.\u003c/p\u003e\n\u003cp\u003eHTTPS runs in an extra container, \u003ccode\u003eanthias-caddy\u003c/code\u003e, which only exists while it\u0026#39;s on. Upgrades keep it running.\u003c/p\u003e\n\u003ch2 id=\"if-you-ran-enable_sslsh-before\"\u003eIf you ran enable_ssl.sh before\u003c/h2\u003e\n\u003cp\u003eEarlier versions had a script with the same name, but it has done nothing since Anthias 0.18.4: it finished and printed that you could reach the web interface at https://, while the player kept serving it over plain HTTP on port 80. If you ran it on 0.18.4 or later, your web interface was never on HTTPS. Run the new script after upgrading to turn it on.\u003c/p\u003e\n","description":"One script on the player puts the web interface behind HTTPS, so signing in and managing content stay private on a network you share with others. It can use a certificate the player issues itself, one from Let's Encrypt, or your own.","title":"The web interface can run over HTTPS","type":"release","url":"https://www.screenly.io/releases/anthias/2026.05.0/https-web-interface/"},{"areas":[],"breaking":false,"content_html":"\u003cp\u003eUpgrading to Anthias 2026.05.0 changes what runs on the player and where its files live. The installer and the upgrade script make every change for you. This is what you\u0026#39;ll see afterward, and what to update if your own scripts or firewall rules depend on the old layout.\u003c/p\u003e\n\u003ch2 id=\"fewer-containers\"\u003eFewer containers\u003c/h2\u003e\n\u003cp\u003eAnthias 0.20.5 ran \u003ccode\u003eanthias-server\u003c/code\u003e, \u003ccode\u003eanthias-viewer\u003c/code\u003e, \u003ccode\u003eanthias-celery\u003c/code\u003e, \u003ccode\u003eanthias-websocket\u003c/code\u003e, \u003ccode\u003eanthias-nginx\u003c/code\u003e, \u003ccode\u003eanthias-wifi-connect\u003c/code\u003e and \u003ccode\u003eredis\u003c/code\u003e. Anthias 2026.05.0 runs \u003ccode\u003eanthias-server\u003c/code\u003e, \u003ccode\u003eanthias-viewer\u003c/code\u003e, \u003ccode\u003eanthias-celery\u003c/code\u003e and \u003ccode\u003eredis\u003c/code\u003e, and the upgrade script removes the containers that are gone. \u003ccode\u003eanthias-server\u003c/code\u003e serves the web interface itself, still on port 80. \u003ccode\u003eanthias-celery\u003c/code\u003e runs on the \u003ccode\u003eanthias-server\u003c/code\u003e image, so an upgrade downloads one image fewer.\u003c/p\u003e\n\u003cp\u003eThe \u003ca href=\"/releases/anthias/2026.05.0/wifi-connect-hotspot-removed/\"\u003eWi-Fi Connect hotspot\u003c/a\u003e went with its container.\u003c/p\u003e\n\u003ch2 id=\"folders-and-files-renamed\"\u003eFolders and files renamed\u003c/h2\u003e\n\u003cp\u003eThe folders and files named after Screenly are renamed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e~/screenly\u003c/code\u003e is now \u003ccode\u003e~/anthias\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~/screenly_assets\u003c/code\u003e is now \u003ccode\u003e~/anthias_assets\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~/.screenly\u003c/code\u003e is now \u003ccode\u003e~/.anthias\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003escreenly.conf\u003c/code\u003e and \u003ccode\u003escreenly.db\u003c/code\u003e inside it are now \u003ccode\u003eanthias.conf\u003c/code\u003e and \u003ccode\u003eanthias.db\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe paths inside \u003ccode\u003eanthias.conf\u003c/code\u003e are rewritten to match. The old names stay behind as symlinks for now, so cron jobs, backups and scripts that use them keep working, but switch them to the new names.\u003c/p\u003e\n\u003ch2 id=\"only-anthias39s-own-files-belong-in-anthias_assets\"\u003eOnly Anthias\u0026#39;s own files belong in \u003ccode\u003e~/anthias_assets\u003c/code\u003e\u003c/h2\u003e\n\u003cp\u003eEvery hour, Anthias deletes any file directly inside \u003ccode\u003e~/anthias_assets\u003c/code\u003e that no content item uses, once it\u0026#39;s more than an hour old. If you keep other files there, move them somewhere else before you upgrade.\u003c/p\u003e\n\u003ch2 id=\"images-come-from-ghcrio\"\u003eImages come from ghcr.io\u003c/h2\u003e\n\u003cp\u003eThe player pulls \u003ccode\u003eghcr.io/screenly/anthias-server\u003c/code\u003e, \u003ccode\u003eanthias-viewer\u003c/code\u003e and \u003ccode\u003eanthias-redis\u003c/code\u003e instead of the \u003ccode\u003escreenly/anthias-*\u003c/code\u003e images on Docker Hub. The Docker Hub images are still published as a mirror, but players don\u0026#39;t use them. If your network only allows certain registries, allow \u003ccode\u003eghcr.io\u003c/code\u003e.\u003c/p\u003e\n\u003ch2 id=\"container-logs-go-to-the-journal\"\u003eContainer logs go to the journal\u003c/h2\u003e\n\u003cp\u003eEach container\u0026#39;s logs go to the host\u0026#39;s journal instead of Docker\u0026#39;s own log files, so they follow the journal\u0026#39;s size limits and rotation, and can no longer fill the storage the way a single viewer log file could. Raspberry Pi OS keeps the journal in memory, so these logs don\u0026#39;t survive a reboot there. Read them with \u003ccode\u003ejournalctl -t anthias-server\u003c/code\u003e, or with \u003ccode\u003eanthias-viewer\u003c/code\u003e, \u003ccode\u003eanthias-celery\u003c/code\u003e or \u003ccode\u003eanthias-redis\u003c/code\u003e in its place.\u003c/p\u003e\n","description":"Upgrading leaves fewer containers on the player and renames the screenly folders and files to anthias, with the old names kept as symlinks for now. If your scripts or firewall rules depend on the old layout, or you keep your own files in ~/anthias_assets, read this before you upgrade.","title":"Anthias runs fewer containers, and its folders are renamed to anthias","type":"improvement","url":"https://www.screenly.io/releases/anthias/2026.05.0/fewer-containers-and-anthias-folders/"},{"areas":[],"breaking":true,"content_html":"\u003cp\u003eA player that starts without an internet connection no longer opens its own Wi-Fi network for you to set it up from a phone. If that\u0026#39;s how you get players onto Wi-Fi, you\u0026#39;ll need a keyboard or an Ethernet connection to do it from Anthias 2026.05.0 on.\u003c/p\u003e\n\u003cp\u003eAnthias 2026.05.0 removes Wi-Fi Connect. On Anthias 0.20.5, a player that started without an internet connection opened a Wi-Fi network called \u0026quot;Anthias WiFi Connect\u0026quot; and showed setup steps on the screen, so you could join that network from a phone and pick the player\u0026#39;s Wi-Fi. After the upgrade, that network no longer appears. The upgrade removes the \u003ccode\u003eanthias-wifi-connect\u003c/code\u003e container and the \u003ccode\u003ewifi-connect.service\u003c/code\u003e unit on the host.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eIf you set up Wi-Fi through the Anthias WiFi Connect network:\u003c/strong\u003e connect a keyboard, or SSH in over Ethernet, and join the network with \u003ccode\u003enmtui\u003c/code\u003e or \u003ccode\u003enmcli\u003c/code\u003e. Both come with NetworkManager, which the installer sets up when you answer yes to \u0026quot;Would you like Anthias to manage the network for you?\u0026quot;.\u003c/p\u003e\n\u003c/blockquote\u003e\n","description":"A player that starts without an internet connection no longer opens its own Wi-Fi network for setup. Join a Wi-Fi network on the player with nmtui or nmcli instead.","title":"The Wi-Fi Connect hotspot is removed","type":"removed","url":"https://www.screenly.io/releases/anthias/2026.05.0/wifi-connect-hotspot-removed/"},{"areas":[],"breaking":false,"content_html":"\u003ch2 id=\"fixes\"\u003eFixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWeb pages on the screen show their current version. The player used to keep a copy of each page on its storage and could show it for days after the page changed. Now it only keeps copies until the viewer restarts. People reported this on the forum as far back as 2023.\u003c/li\u003e\n\u003cli\u003eVideos on a Raspberry Pi 4 or 5 connected to a 4K display play at 1920x1080 at 60 Hz. A Raspberry Pi 5 used to play them in the display\u0026#39;s 4K mode, which is more than the board can keep up with, so video stuttered.\u003c/li\u003e\n\u003cli\u003eThe \u0026quot;Audio output\u0026quot; setting applies to video on the Raspberry Pi 4, Raspberry Pi 5 and x86 PCs. On the Raspberry Pi 5 and x86, video used to ignore it.\u003c/li\u003e\n\u003cli\u003eWeb pages no longer flash white before they draw.\u003c/li\u003e\n\u003cli\u003eShorter blank gap between videos on a Raspberry Pi 2 or 3.\u003c/li\u003e\n\u003cli\u003eYouTube links that downloaded but then played as a blank screen now play, with an updated yt-dlp.\u003c/li\u003e\n\u003cli\u003eA YouTube video that fails to download shows \u0026quot;Failed\u0026quot; and is switched off, instead of looking ready with no video behind it.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"improvements\"\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOn a 4K display, web pages are scaled up 2x so they look the same size as on a 1080p display, and wider displays get 3x or 4x. To pick your own scale, set \u003ccode\u003eQT_SCALE_FACTOR\u003c/code\u003e in the \u003ccode\u003eanthias-viewer\u003c/code\u003e container\u0026#39;s environment.\u003c/li\u003e\n\u003cli\u003eA new \u003ccode\u003esplash_logo_url\u003c/code\u003e setting under \u003ccode\u003e[main]\u003c/code\u003e in \u003ccode\u003e~/.anthias/anthias.conf\u003c/code\u003e puts your own logo on the splash screen.\u003c/li\u003e\n\u003cli\u003eWeb page and stream links are checked in the background every 15 minutes instead of before every play, so a slow or unreachable link no longer holds up the rotation. A link that gets skipped is checked again within about a minute. On API v2, assets report the result in \u003ccode\u003eis_reachable\u003c/code\u003e and \u003ccode\u003elast_reachability_check\u003c/code\u003e. Until \u003ca href=\"/releases/anthias/2026.07.0/fixes-and-improvements/\"\u003eAnthias 2026.07.0\u003c/a\u003e, this check marked links on your local network, such as an intranet page, a NAS or another container on the player, as unreachable and skipped them.\u003c/li\u003e\n\u003cli\u003eAnthias\u0026#39;s anonymous usage event goes out at most once a day, under a random device ID, and now reports the branch and commit, the board and hardware model, whether the player runs balenaOS, the configured resolution, the \u0026quot;Audio output\u0026quot; setting, the \u003ccode\u003euse_ssl\u003c/code\u003e setting, and how many images, videos and web pages are enabled. Set \u003ccode\u003eanalytics_opt_out = True\u003c/code\u003e under \u003ccode\u003e[main]\u003c/code\u003e in \u003ccode\u003e~/.anthias/anthias.conf\u003c/code\u003e to turn it off.\u003c/li\u003e\n\u003cli\u003eThe installer sets up its own tools with uv in a temporary folder that it deletes when it finishes, so it no longer creates \u003ccode\u003e~/installer_venv\u003c/code\u003e. You can delete one left by an earlier install.\u003c/li\u003e\n\u003cli\u003eThe images no longer carry the X11 libraries or a set of unused Python packages.\u003c/li\u003e\n\u003cli\u003eThe documentation moved from the repository\u0026#39;s \u003ccode\u003edocs\u003c/code\u003e folder to anthias.screenly.io, with a new API reference and FAQ.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"for-contributors\"\u003eFor contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eThe web interface is built with Django templates, HTMX and Alpine.js instead of a React app, and its frontend builds with Bun in place of webpack and npm.\u003c/li\u003e\n\u003cli\u003ePython code lives under \u003ccode\u003esrc/\u003c/code\u003e, in \u003ccode\u003eanthias_server\u003c/code\u003e, \u003ccode\u003eanthias_viewer\u003c/code\u003e and \u003ccode\u003eanthias_common\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003ePython dependencies are declared as dependency groups in \u003ccode\u003epyproject.toml\u003c/code\u003e and installed with uv, replacing the per-service requirements files.\u003c/li\u003e\n\u003cli\u003eThe Python tests run with pytest and pytest-django, browser tests use Playwright, and CI runs mypy in strict mode.\u003c/li\u003e\n\u003cli\u003eThe server and the viewer exchange messages over Redis, on the \u003ccode\u003eanthias.viewer\u003c/code\u003e channel, instead of ZeroMQ.\u003c/li\u003e\n\u003cli\u003eThe WebView binary is now \u003ccode\u003eAnthiasWebview\u003c/code\u003e, built for the Raspberry Pi 2, 3, 4 (64-bit) and 5 and x86, and its releases are tagged \u003ccode\u003eWebView-vYYYY.MM.PATCH\u003c/code\u003e. Anthias 2026.05.0 ships WebView 2026.05.0.\u003c/li\u003e\n\u003cli\u003eCI builds the images for the same boards and pushes them to ghcr.io, with Docker Hub as a best-effort mirror. Base images come from \u003ccode\u003emirror.gcr.io\u003c/code\u003e and the Bun image from \u003ccode\u003eghcr.io/screenly/bun\u003c/code\u003e, to stay clear of Docker Hub rate limits.\u003c/li\u003e\n\u003cli\u003eSBOMs are versioned by commit on \u003ccode\u003emaster\u003c/code\u003e and by tag on releases.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDependencies and build tooling were updated throughout, including a Debian Trixie base, Python 3.13 and Django 5.2 LTS.\u003c/p\u003e\n","description":"Videos on a Raspberry Pi 4 or 5 play smoothly on a 4K display, the Audio output setting reaches video on more boards, and web pages on a 4K display are scaled up to a readable size.","title":"Web pages on the screen no longer show a days-old copy, and other fixes","type":"roundup","url":"https://www.screenly.io/releases/anthias/2026.05.0/fixes-and-improvements/"}],"json":"https://www.screenly.io/releases/anthias/2026.05.0/v1.json","product":"anthias","product_label":"Anthias","url":"https://www.screenly.io/releases/anthias/2026.05.0/","version":"2026.05.0"}],"title":"Anthias 2026.05.0","url":"https://www.screenly.io/releases/anthias/2026.05.0/","version":1}