{"product":"anthias","releases":[{"date":"2026-05-28","entries":[{"areas":[],"breaking":true,"content_html":"\u003cp\u003eIf you show video on a Raspberry Pi 4, it plays more smoothly from Anthias 2026.05.1. On every board, check your video files: a video your board can\u0026#39;t decode is now refused when you add it, including H.264 on a Raspberry Pi 5, and you convert it on your own computer with a command Anthias gives you.\u003c/p\u003e\n\u003cp\u003eFrom this release, video on a Raspberry Pi 4, a Raspberry Pi 5, x86 and generic arm64 boards plays inside the viewer itself, instead of in a separate \u003ccode\u003empv\u003c/code\u003e player that shared the screen with it. In the project\u0026#39;s own testing, a 1080p60 H.264 video on a Raspberry Pi 4 went from dropping most of its frames to dropping none. The Raspberry Pi 2 and 3 keep using VLC.\u003c/p\u003e\n\u003cp\u003eOn a Raspberry Pi 4 the viewer now runs at 1920x1080, also on a 4K display, so web pages and images show at 1080p there too.\u003c/p\u003e\n\u003ch2 id=\"uploads-are-checked-not-re-encoded\"\u003eUploads are checked, not re-encoded\u003c/h2\u003e\n\u003cp\u003eAnthias 2026.05.0 re-encoded a video on the device when its codec wasn\u0026#39;t one the board played directly, which could keep a small board busy for a long time. Anthias 2026.05.1 never re-encodes anything. When you add a video, it reads the codec and accepts the file only if your board can decode it:\u003c/p\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003eBoard\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eCodecs accepted\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eRaspberry Pi 2 and 3\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eH.264\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eRaspberry Pi 4\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eH.264 and HEVC\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eRaspberry Pi 5\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eHEVC\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003ex86\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eH.264 and HEVC\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eThe Raspberry Pi 5 has no H.264 decoder Anthias can use, which is why it takes HEVC only. For 4K on a Raspberry Pi 4, the project\u0026#39;s board notes recommend HEVC, since 4K H.264 is more than that board\u0026#39;s decoder keeps up with. Other 64-bit ARM boards are covered in \u003ca href=\"/releases/anthias/2026.05.1/generic-arm64-armbian/\"\u003ethe generic arm64 entry\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eA video that doesn\u0026#39;t pass shows a \u0026quot;Failed\u0026quot; label in the content list. Click it and the \u0026quot;Processing failed\u0026quot; dialog says which codec was refused and which ones your board supports. It also shows an \u003ccode\u003effmpeg\u003c/code\u003e command with your file name filled in, and a \u0026quot;Copy command\u0026quot; button, so you can re-encode the file on your own computer and upload the result.\u003c/p\u003e\n\u003cp\u003eThe check applies to uploads in the web interface and through the API, and to videos Anthias downloads, from YouTube or from a URL posted to the API.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eIf this affects you:\u003c/strong\u003e on a Raspberry Pi 5, an H.264 video, which Anthias 2026.05.0 played as it was, is now refused. On every board, a video in a codec outside the table (VP9 or MPEG-4, for example), which 2026.05.0 re-encoded for you, is now refused, and so is HEVC on a Raspberry Pi 2 or 3. Re-encode those files to a codec in the table before you upload them. On a Raspberry Pi 5, \u003ca href=\"/releases/anthias/2026.07.0/pi5-h264-video/\"\u003eAnthias 2026.07.0\u003c/a\u003e accepts H.264 again.\u003c/p\u003e\n\u003c/blockquote\u003e\n","description":"Video on a Raspberry Pi 4 plays more smoothly: in the project's testing, a 1080p60 H.264 video that dropped most of its frames now drops none. A video your board can't decode is refused at upload with an ffmpeg command to fix it, instead of being re-encoded on the device.","title":"Smoother video on Raspberry Pi 4, and uploads are checked against what your board can decode","type":"improvement","url":"https://www.screenly.io/releases/anthias/2026.05.1/video-decode-and-codec-check/"},{"areas":[],"breaking":true,"content_html":"\u003cp\u003eIf a script or integration of yours adds videos to Anthias through the API by URL, those videos now download to the player and play from there, so the player needs disk space for each one. Videos added in the web interface aren\u0026#39;t affected.\u003c/p\u003e\n\u003cp\u003eWhen you create an asset through the API with \u003ccode\u003emimetype\u003c/code\u003e set to \u003ccode\u003evideo\u003c/code\u003e and an \u003ccode\u003ehttp://\u003c/code\u003e or \u003ccode\u003ehttps://\u003c/code\u003e URL that points at a single video file, Anthias now downloads the file to the device and plays it from there. The asset shows as \u0026quot;Processing\u0026quot; until the download and the \u003ca href=\"/releases/anthias/2026.05.1/video-decode-and-codec-check/\"\u003ecodec check\u003c/a\u003e finish. Before, Anthias stored the URL and played it from the origin server every time, so playback depended on that server being reachable.\u003c/p\u003e\n\u003cp\u003eThis applies to API v1.2 and v2. v1 and v1.1 keep storing the URL as it is.\u003c/p\u003e\n\u003ch2 id=\"what-counts-as-a-downloadable-video\"\u003eWhat counts as a downloadable video\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eURLs that end in \u003ccode\u003e.mp4\u003c/code\u003e, \u003ccode\u003e.webm\u003c/code\u003e, \u003ccode\u003e.mov\u003c/code\u003e, \u003ccode\u003e.mkv\u003c/code\u003e, \u003ccode\u003e.avi\u003c/code\u003e, \u003ccode\u003e.m4v\u003c/code\u003e or \u003ccode\u003e.ogv\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eURLs with no file extension, when the server answers a \u003ccode\u003eHEAD\u003c/code\u003e request with a \u003ccode\u003evideo/*\u003c/code\u003e content type. If the server doesn\u0026#39;t answer that way, the URL is kept as a stream, as before.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eLive streams stay as they were and play from the origin: \u003ccode\u003ertsp://\u003c/code\u003e, \u003ccode\u003ertmp://\u003c/code\u003e, \u003ccode\u003esrt://\u003c/code\u003e, \u003ccode\u003eudp://\u003c/code\u003e and \u003ccode\u003emms://\u003c/code\u003e URLs, and HLS, DASH and Smooth Streaming manifests (\u003ccode\u003e.m3u8\u003c/code\u003e, \u003ccode\u003e.mpd\u003c/code\u003e, \u003ccode\u003e.m3u\u003c/code\u003e, \u003ccode\u003e.ism\u003c/code\u003e).\u003c/p\u003e\n\u003cp\u003eA download is capped at 5 GiB and 15 minutes. If it fails, because the server returns an error, the response isn\u0026#39;t a video, or the file is too large, the asset shows \u0026quot;Failed\u0026quot; with the reason.\u003c/p\u003e\n\u003cp\u003eThe \u0026quot;From URL\u0026quot; tab in the web interface is unchanged and still stores the URL without downloading it.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eIf this affects you:\u003c/strong\u003e if you post video URLs to API v1.2 or v2, the device now needs enough free disk space for each file, and a video in a codec your board can\u0026#39;t decode is refused. If you want a URL to keep playing from its origin, use a streaming URL or API v1 or v1.1.\u003c/p\u003e\n\u003c/blockquote\u003e\n","description":"On API v1.2 and v2, a video URL is downloaded to the device and checked like an upload, so once it's there, playback no longer depends on the server it came from.","title":"Posting a video URL to the API now downloads the file","type":"improvement","url":"https://www.screenly.io/releases/anthias/2026.05.1/api-downloads-video-urls/"},{"areas":[],"breaking":false,"content_html":"\u003cp\u003eIf the screen is a TV, you can now switch it on or off from Anthias\u0026#39;s Settings page. The controls are experimental, and on a Raspberry Pi 2, 3 or 4 they only work from \u003ca href=\"/releases/anthias/2026.08.1/hdmi-cec-rewrite/\"\u003eAnthias 2026.08.1\u003c/a\u003e, which fixes them.\u003c/p\u003e\n\u003cp\u003eSettings has a new \u0026quot;Display power\u0026quot; section, marked Experimental, with \u0026quot;Turn display on\u0026quot; and \u0026quot;Turn display off\u0026quot; buttons. They send the command to the connected display over HDMI-CEC, and a message tells you whether the command was sent. The section only appears when the device has a CEC adapter: \u003ccode\u003e/dev/cec0\u003c/code\u003e on a Raspberry Pi 5, x86 or arm64 board, or \u003ccode\u003e/dev/vchiq\u003c/code\u003e on the older Raspberry Pi models. On a Raspberry Pi 2, 3 or 4 the controls couldn\u0026#39;t work in this release: System info showed \u0026quot;CEC error\u0026quot; and the buttons failed.\u003c/p\u003e\n\u003cp\u003eWhether the TV obeys is up to the TV. A command the display doesn\u0026#39;t answer within 10 seconds comes back as an error.\u003c/p\u003e\n\u003ch2 id=\"raspberry-pi-5\"\u003eRaspberry Pi 5\u003c/h2\u003e\n\u003cp\u003eOn a Raspberry Pi 5 the CEC device wasn\u0026#39;t passed into the Anthias containers, so the \u0026quot;Display Power (CEC)\u0026quot; card on the System info page read \u0026quot;CEC error\u0026quot;. Upgrading to Anthias 2026.05.1 passes \u003ccode\u003e/dev/cec0\u003c/code\u003e and \u003ccode\u003e/dev/cec1\u003c/code\u003e through, and that\u0026#39;s also what makes the new buttons appear there. On x86 and arm64 boards the upgrade passes \u003ccode\u003e/dev/cec0\u003c/code\u003e through when the board has one.\u003c/p\u003e\n\u003ch2 id=\"for-developers\"\u003eFor developers\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003ePOST /api/v2/display/on\u003c/code\u003e and \u003ccode\u003ePOST /api/v2/display/off\u003c/code\u003e do the same thing. They return 200 when the command was sent, 502 when the display or adapter refused it or didn\u0026#39;t respond, and 503 when the device has no CEC adapter.\u003c/p\u003e\n","description":"If the screen is a TV, you can now switch it on or off from Settings \u003e Display power, over HDMI-CEC. The controls are experimental, and on a Raspberry Pi 2, 3 or 4 they only work from Anthias 2026.08.1.","title":"Experimental HDMI-CEC controls turn the display on and off","type":"release","url":"https://www.screenly.io/releases/anthias/2026.05.1/hdmi-cec-display-power/"},{"areas":[],"breaking":false,"content_html":"\u003cp\u003eIf you\u0026#39;re moving from Anthias to Screenly, the cloud-managed product from the same team, you no longer need a script to bring your content along. Settings now has a \u0026quot;Migrate to Screenly\u0026quot; section, and its \u0026quot;Start migration\u0026quot; button takes you through the move:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eSign up or sign in to Screenly, from the link on the page.\u003c/li\u003e\n\u003cli\u003eCreate an API token in Screenly (the page tells you where: Settings \u0026gt; Security \u0026gt; API Tokens), and paste it in. Anthias checks the token before going further, and doesn\u0026#39;t store it on the device.\u003c/li\u003e\n\u003cli\u003eChoose which content to copy. Everything starts selected.\u003c/li\u003e\n\u003cli\u003eStart the migration and watch the progress bar. Each file that fails shows its own error without stopping the rest, and a retry button runs the failed ones again.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eFiles that live on the player, such as images and videos, are uploaded from the device to Screenly. Content that is a URL, such as a web page or a stream, is sent as a link. Everything lands in a group called \u0026quot;Migrated from Anthias\u0026quot;. Nothing already in your Screenly account changes. Anthias doesn\u0026#39;t check for copies, though, so running the migration twice uploads the content twice.\u003c/p\u003e\n\u003cp\u003eThe page uses Screenly API v4.1 and replaces the \u003ccode\u003etools/migrate_assets_to_screenly.py\u003c/code\u003e script, which is removed in this release.\u003c/p\u003e\n","description":"Moving from Anthias to Screenly no longer takes a script. Settings \u003e Migrate to Screenly copies the content on your player to your Screenly account, and shows which files made it and which didn't.","title":"Anthias copies your content to Screenly from Settings","type":"release","url":"https://www.screenly.io/releases/anthias/2026.05.1/copy-content-to-screenly/"},{"areas":[],"breaking":false,"content_html":"\u003cp\u003eIf you have a Rock Pi, Orange Pi or Banana Pi in a drawer, you can now run Anthias on it, as best effort. Images and web pages work on any of these boards, and video works on the Rock Pi 4.\u003c/p\u003e\n\u003cp\u003eBefore, \u003ccode\u003einstall.sh\u003c/code\u003e stopped with \u0026quot;Unsupported Raspberry Pi model\u0026quot; on anything that wasn\u0026#39;t a Raspberry Pi or an x86 PC. From Anthias 2026.05.1 it treats any other 64-bit ARM (\u003ccode\u003eaarch64\u003c/code\u003e) board as a generic \u003ccode\u003earm64\u003c/code\u003e device, skips the Raspberry Pi boot changes (\u003ccode\u003econfig.txt\u003c/code\u003e, \u003ccode\u003ecmdline.txt\u003c/code\u003e), and installs the same web interface, scheduler and viewer. The boards named in the project\u0026#39;s README as tested are the Rock Pi 4, Rock 5, Orange Pi 5 and Banana Pi M5.\u003c/p\u003e\n\u003ch2 id=\"what-to-know-before-you-try-it\"\u003eWhat to know before you try it\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUse the Debian-based Armbian image for your board (Bookworm or Trixie). The installer sets up Docker from Docker\u0026#39;s Debian repository, so an Ubuntu-based Armbian image fails at the first \u003ccode\u003eapt update\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOn a generic \u003ccode\u003earm64\u003c/code\u003e board, Anthias refuses video uploads, because it can\u0026#39;t tell which codecs the board handles. Images and web pages work.\u003c/li\u003e\n\u003cli\u003eThe Rock Pi 4 is the 1 board Anthias recognizes by name. It accepts H.264 and HEVC uploads there, and decodes them in software. In the project\u0026#39;s testing, 1080p H.264 dropped about 1 frame every 14 seconds, while 1080p HEVC dropped about a fifth of its frames.\u003c/li\u003e\n\u003cli\u003eAudio goes to the system\u0026#39;s \u003ccode\u003edefault\u003c/code\u003e ALSA device. If your HDMI output needs something else, set it in \u003ccode\u003e~/.asoundrc\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe Anthias boot splash usually doesn\u0026#39;t show on these boards, so the kernel\u0026#39;s boot messages stay on screen until the viewer starts.\u003c/li\u003e\n\u003cli\u003eWired network interfaces named \u003ccode\u003eend0\u003c/code\u003e, common on Armbian, are recognized, so the splash screen shows the board\u0026#39;s IP address.\u003c/li\u003e\n\u003c/ul\u003e\n","description":"A Rock Pi, Orange Pi or Banana Pi running Debian-based Armbian can now run Anthias, as best effort. Images and web pages work on any of these boards, and video works on the Rock Pi 4.","title":"Anthias installs on Armbian and other 64-bit ARM boards, as best effort","type":"release","url":"https://www.screenly.io/releases/anthias/2026.05.1/generic-arm64-armbian/"},{"areas":[],"breaking":false,"content_html":"\u003cp\u003ePeople have asked for a portrait setting since 2021. Settings now has a \u0026quot;Screen rotation\u0026quot; dropdown with 4 choices:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eLandscape (0°)\u003c/li\u003e\n\u003cli\u003ePortrait (90°)\u003c/li\u003e\n\u003cli\u003eLandscape, inverted (180°)\u003c/li\u003e\n\u003cli\u003ePortrait, inverted (270°)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOn an x86 player, pick one and save, and the whole display turns: web pages, images and video. There\u0026#39;s no reboot and nothing to set in the compositor.\u003c/p\u003e\n\u003cp\u003eOn Raspberry Pi boards, Anthias 2026.05.1 doesn\u0026#39;t fully apply the setting yet. On a Raspberry Pi 2, 3 or 4, video turns but web pages and images stay upright, and on a Raspberry Pi 5 or a generic arm64 board nothing turns. Keep rotating those displays the way you do today. The Pi 4 turns everything from \u003ca href=\"/releases/anthias/2026.06.1/screen-rotation-works-on-raspberry-pi-4/\"\u003eAnthias 2026.06.1\u003c/a\u003e, the Pi 5 and generic arm64 boards from \u003ca href=\"/releases/anthias/2026.07.0/screen-rotation-pi5/\"\u003e2026.07.0\u003c/a\u003e, and the Pi 2 and Pi 3 from \u003ca href=\"/releases/anthias/2026.07.3/screen-rotation-the-same-on-every-board/\"\u003e2026.07.3\u003c/a\u003e.\u003c/p\u003e\n\u003ch2 id=\"for-developers\"\u003eFor developers\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003e/api/v2/device_settings\u003c/code\u003e has a new \u003ccode\u003escreen_rotation\u003c/code\u003e field, with the values \u003ccode\u003e0\u003c/code\u003e, \u003ccode\u003e90\u003c/code\u003e, \u003ccode\u003e180\u003c/code\u003e and \u003ccode\u003e270\u003c/code\u003e.\u003c/p\u003e\n","description":"People have asked for a portrait setting since 2021. Settings now has a Screen rotation option that turns an x86 player's whole display without a reboot, and on Raspberry Pi boards it doesn't fully work yet in this release.","title":"A Screen rotation setting turns x86 displays to portrait","type":"release","url":"https://www.screenly.io/releases/anthias/2026.05.1/screen-rotation-setting/"},{"areas":[],"breaking":false,"content_html":"\u003cp\u003eA board with 1 GB of RAM has little room for the viewer, a web page and a large video at the same time. From Anthias 2026.05.1, a board with less than 1.5 GiB runs in a low-memory mode. That covers every Raspberry Pi 2 and 3, and the 1 GB versions of the Raspberry Pi 4 and the Rock Pi 4. The mode makes 2 changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe viewer doesn\u0026#39;t load the next web page ahead of time. Each page loads when its turn comes, so you see a brief black screen between web pages.\u003c/li\u003e\n\u003cli\u003eA video with more pixels than 1920x1080 is refused at upload, even when its codec is fine. The \u0026quot;Failed\u0026quot; message explains the limit, and the \u003ccode\u003effmpeg\u003c/code\u003e command it shows scales the file down to fit.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe Memory card on the System info page shows a \u0026quot;Low-RAM mode\u0026quot; note when the mode is on. Boards with 2 GB or more are unaffected.\u003c/p\u003e\n\u003ch2 id=\"for-developers\"\u003eFor developers\u003c/h2\u003e\n\u003cp\u003eThe \u003ccode\u003ememory\u003c/code\u003e object in \u003ccode\u003e/api/v2/info\u003c/code\u003e has a new \u003ccode\u003elow_ram\u003c/code\u003e field, \u003ccode\u003etrue\u003c/code\u003e when the mode is on.\u003c/p\u003e\n","description":"On a board with less than 1.5 GiB of RAM, Anthias keeps memory free for your content: it doesn't load the next web page ahead of time, and it refuses video above 1080p at upload.","title":"Boards with 1 GB of RAM run in a low-memory mode","type":"improvement","url":"https://www.screenly.io/releases/anthias/2026.05.1/low-ram-mode-for-1-gb-boards/"},{"areas":[],"breaking":true,"content_html":"\u003cp\u003eFrom Anthias 2026.05.1, a Raspberry Pi boots to the Anthias splash without a rainbow screen, scrolling text or a login prompt first, and an x86 player skips the scrolling text too. If you\u0026#39;ve added your own lines to \u003ccode\u003econfig.txt\u003c/code\u003e on a Raspberry Pi, such as an overlay for a HAT or a forced display mode, copy them somewhere before you run the installer to upgrade, because it now rewrites that file.\u003c/p\u003e\n\u003cp\u003eA player in a lobby shouldn\u0026#39;t show a rainbow screen, scrolling kernel messages or a login prompt before the content starts. The installer sets a Raspberry Pi up for a quiet boot: the firmware\u0026#39;s rainbow splash is off, the kernel prints nothing to the screen, and there\u0026#39;s no login prompt on the first console. On x86, the installer adds the \u003ccode\u003equiet\u003c/code\u003e and \u003ccode\u003esplash\u003c/code\u003e options to GRUB, so the Anthias splash shows instead of kernel text.\u003c/p\u003e\n\u003ch2 id=\"configtxt-and-cmdlinetxt\"\u003econfig.txt and cmdline.txt\u003c/h2\u003e\n\u003cp\u003eOn a Raspberry Pi, the installer now writes \u003ccode\u003econfig.txt\u003c/code\u003e and \u003ccode\u003ecmdline.txt\u003c/code\u003e in the boot partition (\u003ccode\u003e/boot/firmware\u003c/code\u003e on Raspberry Pi OS Bookworm and Trixie) from a template, every time it runs. Before, it changed individual lines in \u003ccode\u003econfig.txt\u003c/code\u003e and left the rest alone.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eLines you added to \u003ccode\u003econfig.txt\u003c/code\u003e are replaced. A custom \u003ccode\u003edtoverlay\u003c/code\u003e, \u003ccode\u003ehdmi_group\u003c/code\u003e or overscan line won\u0026#39;t survive the next run.\u003c/li\u003e\n\u003cli\u003eThe template sets \u003ccode\u003edisable_overscan=1\u003c/code\u003e, \u003ccode\u003edisplay_auto_detect=1\u003c/code\u003e and \u003ccode\u003edtparam=audio=on\u003c/code\u003e. On a Raspberry Pi 5 it also sets \u003ccode\u003edtoverlay=vc4-kms-v3d,cma-512\u003c/code\u003e, which 4K HEVC playback needs.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecmdline.txt\u003c/code\u003e is built from the \u003ccode\u003ecmdline.txt.orig\u003c/code\u003e copy the installer saved on its first run. Only the \u003ccode\u003eroot=\u003c/code\u003e entry and any \u003ccode\u003ecfg80211.\u003c/code\u003e options (the Wi-Fi country setting from \u003ccode\u003eraspi-config\u003c/code\u003e) are kept from it. Other options in that file are dropped.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eIf this affects you:\u003c/strong\u003e if you\u0026#39;ve added your own lines to \u003ccode\u003econfig.txt\u003c/code\u003e or \u003ccode\u003ecmdline.txt.orig\u003c/code\u003e, such as an overlay for a HAT or a forced display mode, copy them somewhere before you run \u003ccode\u003einstall.sh\u003c/code\u003e to upgrade. Once it runs, they\u0026#39;re gone, and adding them back by hand only lasts until the next time it runs.\u003c/p\u003e\n\u003c/blockquote\u003e\n","description":"A Raspberry Pi boots to the Anthias splash without the rainbow screen, kernel messages or a login prompt, and x86 players skip the kernel text too. The catch: every run of the installer rewrites config.txt and cmdline.txt, so lines you added there are lost.","title":"Players boot quietly, and the installer now overwrites config.txt","type":"improvement","url":"https://www.screenly.io/releases/anthias/2026.05.1/quiet-boot-and-boot-config/"},{"areas":[],"breaking":false,"content_html":"\u003cp\u003eIf you reach Anthias through something that adds HTTPS in front of it, such as a Caddy sidecar, a Cloudflare Tunnel or Tailscale Serve, sign-in, uploads and saving settings could fail with a 403 page saying \u0026quot;Your session expired\u0026quot;, and uploads with \u0026quot;Upload failed\u0026quot;. From Anthias 2026.05.1 those requests go through without any change on your side, as long as the browser and Anthias agree on the host name. The same goes for a browser that keeps using HTTPS after you turned SSL off.\u003c/p\u003e\n\u003ch2 id=\"when-the-proxy-changes-the-host-name\"\u003eWhen the proxy changes the host name\u003c/h2\u003e\n\u003cp\u003eSome proxies, such as IIS ARR, send Anthias a different host name than the one in your browser, and then the request is still refused. The simplest fix is to have the proxy pass the original \u003ccode\u003eHost\u003c/code\u003e header through: \u003ccode\u003eproxy_set_header Host $host;\u003c/code\u003e in nginx, \u003ccode\u003eProxyPreserveHost On\u003c/code\u003e in Apache, or \u003ccode\u003epreserveHostHeader=\u0026quot;true\u0026quot;\u003c/code\u003e in IIS ARR. Caddy and Traefik do this by default.\u003c/p\u003e\n\u003cp\u003eIf you can\u0026#39;t change the proxy, Anthias also reads a \u003ccode\u003eCSRF_TRUSTED_ORIGINS\u003c/code\u003e environment variable in the \u003ccode\u003eanthias-server\u003c/code\u003e container. Set it to the address people use, for example \u003ccode\u003ehttps://signage.example.com\u003c/code\u003e, and separate several addresses with commas. It is empty by default.\u003c/p\u003e\n","description":"Uploads, setting changes and sign-in no longer fail with a 403 error when a proxy or tunnel serves Anthias over HTTPS, and there's a setting for proxies that change the host name.","title":"Forms in the web interface work behind an HTTPS proxy","type":"fix","url":"https://www.screenly.io/releases/anthias/2026.05.1/proxy-and-https-form-errors/"},{"areas":[],"breaking":true,"content_html":"\u003cp\u003eIf a script or monitoring tool of yours reads free disk space from the Anthias API, it needs a small change, because the figure now reads like \u003ccode\u003e15.0 GB\u003c/code\u003e instead of \u003ccode\u003e15G\u003c/code\u003e. Otherwise, you\u0026#39;ll only notice the new form on the System info page.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003efree_space\u003c/code\u003e in the response of \u003ccode\u003e/api/v1/info\u003c/code\u003e and \u003ccode\u003e/api/v2/info\u003c/code\u003e used to be a short string such as \u003ccode\u003e15G\u003c/code\u003e. From Anthias 2026.05.1 it is a number with 1 decimal, a non-breaking space and a full unit, such as \u003ccode\u003e15.0 GB\u003c/code\u003e. The units are \u003ccode\u003eKB\u003c/code\u003e, \u003ccode\u003eMB\u003c/code\u003e, \u003ccode\u003eGB\u003c/code\u003e and \u003ccode\u003eTB\u003c/code\u003e. The disk figures on the System info page are written the same way.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eIf this affects you:\u003c/strong\u003e anything that parses \u003ccode\u003efree_space\u003c/code\u003e from the info API, such as a monitoring script, needs to accept the new form, including the non-breaking space between the number and the unit.\u003c/p\u003e\n\u003c/blockquote\u003e\n","description":"free_space in /api/v1/info and /api/v2/info, and the disk figures on System info, now read like 15.0 GB, with 1 decimal and a full unit. Scripts that parse it need to accept the new form, including the non-breaking space before the unit.","title":"Free disk space in the info API now reads 15.0 GB instead of 15G","type":"improvement","url":"https://www.screenly.io/releases/anthias/2026.05.1/info-api-free-space-format/"},{"areas":[],"breaking":false,"content_html":"\u003ch2 id=\"fixes\"\u003eFixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeleting or turning off content that is on screen takes effect right away. Before, an image set to show for an hour stayed up until the hour ended, which people had reported since 2025.\u003c/li\u003e\n\u003cli\u003eDeleting content in the web interface also deletes its file from \u003ccode\u003e~/anthias_assets\u003c/code\u003e. Before, the content disappeared from the list and the file kept using disk space.\u003c/li\u003e\n\u003cli\u003eWith audio set to HDMI on a Raspberry Pi 4 or 5, sound plays through the HDMI port that has a display connected, and the first port when both do. Before, it always used the first port.\u003c/li\u003e\n\u003cli\u003eVideos uploaded through API v1 and v1.1 now go through the same codec check as other uploads. Before, such a video never became playable and could sit on \u0026quot;Processing\u0026quot; indefinitely.\u003c/li\u003e\n\u003cli\u003eContent that has shown \u0026quot;Processing\u0026quot; for more than an hour, for example after a restart in the middle of a job, is retried automatically.\u003c/li\u003e\n\u003cli\u003eAsking the API for content that doesn\u0026#39;t exist returns a 404 instead of a 500 error.\u003c/li\u003e\n\u003cli\u003eOn fresh installs of Anthias 2026.05.0, the host agent service failed to start, so the device\u0026#39;s IP address wasn\u0026#39;t detected and \u003ccode\u003e/api/v2/info\u003c/code\u003e took more than a minute to answer. Installing or upgrading to 2026.05.1 fixes it.\u003c/li\u003e\n\u003cli\u003eUpgrading an install that dates from before the Anthias rename no longer fails on a leftover \u003ccode\u003esrly-ose-redis\u003c/code\u003e container holding port 6379.\u003c/li\u003e\n\u003cli\u003eOn x86, scheduled background tasks, such as clearing out leftover upload files, no longer stop at random.\u003c/li\u003e\n\u003cli\u003eThe Anthias icon shows in Raspberry Pi Imager.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"improvements\"\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWeb pages in the viewer are requested in the device\u0026#39;s language, so sites with several languages show the right one. Anthias reads the language from \u003ccode\u003e/etc/default/locale\u003c/code\u003e (which \u003ccode\u003eraspi-config\u003c/code\u003e and \u003ccode\u003eupdate-locale\u003c/code\u003e write) when you install or upgrade, so a change applies after the next upgrade. On balena, set a \u003ccode\u003eLANG\u003c/code\u003e device variable.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einstall.sh\u003c/code\u003e shows a menu of the 10 most recent releases, with \u0026quot;latest\u0026quot; (the tip of \u003ccode\u003emaster\u003c/code\u003e, which is now the testing channel) and \u0026quot;other\u0026quot; for typing a tag. Its prompts use whiptail instead of gum, and it stops with a clear message if you run it as root, with \u003ccode\u003esh\u003c/code\u003e instead of \u003ccode\u003ebash\u003c/code\u003e, or without network access.\u003c/li\u003e\n\u003cli\u003eThe boot splash fills a 4K display. Before, it showed as a 1080p picture in the middle of a black screen.\u003c/li\u003e\n\u003cli\u003eVideo downloads from a URL and the Screenly migration identify themselves with a \u003ccode\u003eUser-Agent\u003c/code\u003e of \u003ccode\u003eAnthias/\u0026lt;release\u0026gt; (+https://anthias.screenly.io)\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe splash screen no longer falls back to an IP address saved at install time, which could be out of date once the network changed. It shows \u0026quot;Detecting network…\u0026quot; until it has the current address.\u003c/li\u003e\n\u003cli\u003eSecurity fixes in the web interface and the API, and Django 5.2.14 and Pillow 12.2.0, which include security fixes of their own. Upgrading is recommended.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"upgrade-notes\"\u003eUpgrade notes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eThe viewer\u0026#39;s browser stores its data in a new place, and the old data isn\u0026#39;t copied. After upgrading, web pages start with an empty browser profile, so a page that relied on a sign-in saved in the viewer needs signing in again.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"for-contributors\"\u003eFor contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePushes to \u003ccode\u003emaster\u003c/code\u003e now publish container images only, as the testing channel. Balena deploys and disk images are built when a GitHub release is published, with balena-cli 25, and \u003ccode\u003erpi-imager.json\u003c/code\u003e is attached to each release.\u003c/li\u003e\n\u003cli\u003eThe WebView is built as a stage of the viewer image, instead of in a release workflow of its own.\u003c/li\u003e\n\u003cli\u003eThe viewer binary is now \u003ccode\u003eAnthiasViewer\u003c/code\u003e and its D-Bus service is \u003ccode\u003eanthias.viewer\u003c/code\u003e. The Qt source moved from \u003ccode\u003ewebview/\u003c/code\u003e to \u003ccode\u003esrc/anthias_webview/\u003c/code\u003e. The viewer reads the active playlist and its settings from \u003ccode\u003e/api/v2/viewer/playlist\u003c/code\u003e and \u003ccode\u003e/api/v2/viewer/settings\u003c/code\u003e, which only accept a token the viewer holds.\u003c/li\u003e\n\u003cli\u003eVideo on Raspberry Pi 4, Raspberry Pi 5, x86 and arm64 no longer goes through an \u003ccode\u003empv\u003c/code\u003e process. Playback uses QtMultimedia inside the viewer, with the Raspberry Pi \u003ccode\u003elibav\u003c/code\u003e packages pinned in \u003ccode\u003edocker/_rpt1-ffmpeg-pin.j2\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edocs/board-enablement.md\u003c/code\u003e describes a repeatable playback test, and \u003ccode\u003ebin/generate_board_enablement_testbed.sh\u003c/code\u003e builds the 8-clip set it uses (H.264 and HEVC, 1080p and 4K, 30 and 60 fps).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ebin/test_webview_cpp.sh\u003c/code\u003e runs the viewer\u0026#39;s C++ tests.\u003c/li\u003e\n\u003cli\u003eThe installer adds \u003ccode\u003edocker-buildx-plugin\u003c/code\u003e on every board, so building the images on the device works.\u003c/li\u003e\n\u003cli\u003eA \u003ccode\u003emarketing-screenshots\u003c/code\u003e workflow, run by hand, captures screenshots from the Playwright integration suite for a slider on the Anthias website. FAQ entries on the website have links you can share, and the README points to the website for supported hardware.\u003c/li\u003e\n\u003cli\u003eNew tests cover remote video downloads, the Screenly migration, the CSRF origin check, board detection and the viewer\u0026#39;s video player.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDependencies updated.\u003c/p\u003e\n","description":"Deleting content also frees its disk space, HDMI audio follows the port with a display on a Raspberry Pi 4 or 5, and install.sh lets you pick a release from a menu.","title":"Removed content leaves the screen right away, and other fixes","type":"roundup","url":"https://www.screenly.io/releases/anthias/2026.05.1/fixes-and-improvements/"}],"json":"https://www.screenly.io/releases/anthias/2026.05.1/v1.json","product":"anthias","product_label":"Anthias","url":"https://www.screenly.io/releases/anthias/2026.05.1/","version":"2026.05.1"}],"title":"Anthias 2026.05.1","url":"https://www.screenly.io/releases/anthias/2026.05.1/","version":1}