---
title: Release Notes
slug: release-notes
createdAt: 2026-06-08T21:09:12.585Z
---

:::Iframe{iframeHeight="0" code="<div id=&#x22;filmbot-release-notes&#x22;&#xA;     data-base-url=&#x22;https://release-notes.filmbot.com/archbee/latest-updates/&#x22;&#xA;     data-page-size=&#x22;10&#x22;&#xA;     style=&#x22;white-space: normal&#x22;></div>&#xA;&#xA;<script>&#xA;(function () {&#xA;    const container = document.querySelector('#filmbot-release-notes');&#xA;    if (!container) {&#xA;        console.log('Release notes container not found.');&#xA;        return;&#xA;    }&#xA;&#xA;    const baseUrl = container.dataset.baseUrl;&#xA;    const pageSize = parseInt(container.dataset.pageSize || '10', 10);&#xA;    if (!baseUrl) {&#xA;        console.log('Release notes base URL not specified (data-base-url).');&#xA;        return;&#xA;    }&#xA;&#xA;    function urlForPage(page) {&#xA;        return page > 1&#xA;            ? baseUrl + pageSize + '/page/' + page + '/'&#xA;            : baseUrl + pageSize + '/';&#xA;    }&#xA;&#xA;    function scrollToTop() {&#xA;        // The page scrolls inside a custom scroll container (OverlayScrollbars),&#xA;        // not the window — so walk up to find the real scrollable ancestor.&#xA;        let el = container.parentElement;&#xA;        while (el) {&#xA;            const oy = getComputedStyle(el).overflowY;&#xA;            if ((oy === 'auto' || oy === 'scroll') && el.scrollHeight > el.clientHeight) {&#xA;                el.scrollTo({ top: 0, behavior: 'smooth' });&#xA;                return;&#xA;            }&#xA;            el = el.parentElement;&#xA;        }&#xA;        // Fallbacks if no scrollable ancestor is found.&#xA;        window.scrollTo({ top: 0, behavior: 'smooth' });&#xA;        if (document.scrollingElement) {&#xA;            document.scrollingElement.scrollTo({ top: 0, behavior: 'smooth' });&#xA;        }&#xA;    }&#xA;&#xA;    function fetchPage(page) {&#xA;        fetch(urlForPage(page))&#xA;            .then(function (r) { return r.ok ? r.text() : Promise.reject(r); })&#xA;            .then(function (html) { render(html, page); })&#xA;            .catch(function (err) { console.warn('Failed to fetch release notes.', err); });&#xA;    }&#xA;&#xA;    function render(html, page) {&#xA;        const wrap = document.createElement('div');&#xA;        wrap.innerHTML = html;&#xA;&#xA;        const first = wrap.firstElementChild;&#xA;        const totalPages = parseInt((first && first.dataset && first.dataset.totalPages) || '1', 10);&#xA;&#xA;        container.innerHTML = html;&#xA;&#xA;        if (totalPages > 1) {&#xA;            const nav = document.createElement('div');&#xA;            nav.className = 'release-notes-pagination';&#xA;            nav.style.cssText = 'display:flex;justify-content:space-between;align-items:center;margin-top:1.5rem;font-weight:bold;';&#xA;&#xA;            const newer = document.createElement('a');&#xA;            newer.href = '#';&#xA;            newer.textContent = '← Newer Releases';&#xA;            newer.style.visibility = page > 1 ? 'visible' : 'hidden';&#xA;            newer.addEventListener('click', function (e) { e.preventDefault(); fetchPage(page - 1); });&#xA;&#xA;            const status = document.createElement('span');&#xA;            status.textContent = 'Page ' + page + ' of ' + totalPages;&#xA;&#xA;            const older = document.createElement('a');&#xA;            older.href = '#';&#xA;            older.textContent = 'Older Releases →';&#xA;            older.style.visibility = page < totalPages ? 'visible' : 'hidden';&#xA;            older.addEventListener('click', function (e) { e.preventDefault(); fetchPage(page + 1); });&#xA;&#xA;            nav.appendChild(newer);&#xA;            nav.appendChild(status);&#xA;            nav.appendChild(older);&#xA;            container.appendChild(nav);&#xA;        }&#xA;&#xA;        scrollToTop();&#xA;    }&#xA;&#xA;    fetchPage(1);&#xA;})();&#xA;</script>"}

:::

