You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
v2026.8.4
Fixed a bug where Exporting or Importing a backup closed the app's database forever — after Export, going back to the home screen crashed the app; after Import, the database stayed broken until a manual restart. Export now flushes the database through SQLite's WAL checkpoint without closing it, and Import properly reopens the restored database and relaunches the app automatically so everything is rebuilt from the restored data.
Fixed a bug where exporting a large page (PDF/PNG/ZIP) could fail cryptically: if rendering the page threw (e.g. an out-of-memory moment on a very large raster), the PDF page was left open, which made PdfRenderer.close() throw "Current page not closed" and masked the real error. Pages are now always released even when rendering fails, so the export either completes or reports the true error.
Fixed a small renderer resource leak: if a page render failed partway through (a bad PDF page, an out-of-memory moment, or an ink-drawing error), the bitmap borrowed from the reuse pool was never handed back, silently shrinking the pool until the next render reallocated a fresh one. A failed render now returns its bitmap to the pool before rethrowing, so the reuse pool stays intact across transient render errors.
Redesigned the Create New dialog with a Material 3 Expressive look. New Folder, New Notebook, and Import PDF each appear as a tinted, color-coded card (blue folder, purple notebook, red PDF) with icon, title, and description, a springy scale-in animation when the dialog opens, and a tactile press effect — the plain text-only list is gone.
The notebook title you type in the basic create dialog is now carried over to the Advanced Template dialog when you tap "Choose / Edit Template", so you don't have to retype it.
Shrunk the template preview in the basic create dialog so the dialog feels lighter and the title field gets more visual priority.
Fixed a crash in the Pages view: fast-scrolling the page grid and closing it could crash with "Document already closed" because thumbnail renders were still queued on the app-wide scope and ran against a closed PDF renderer. The grid now runs on its own dialog-scoped coroutine that is cancelled the moment the dialog closes, and the thumbnail renderer is closed-safe — an in-flight render simply gives up instead of touching the closed document.
Made the Pages view much faster on large PDFs. Thumbnails used to render one-at-a-time behind a single native renderer lock (a fast fling could queue dozens of renders waiting their turn). The renderer now keeps a small pool of independent renderers so several thumbnails draw in parallel, duplicate renders of the same page are skipped, and thumbnails for holders that scrolled off-screen are never wasted.
Thumbnail loading in the Pages view now follows the same engine design that makes the main PDF view fast: renders run on their own dedicated worker threads (instead of the app-wide IO pool fighting over one lock), a page that scrolls off-screen cancels its queued render so a fast fling only draws what you're looking at, and rendered bitmaps are reused from a small pool instead of allocating fresh memory for every thumbnail — so the grid fills in noticeably faster and scrolling through huge PDFs stays smooth.
Added a draggable scroll pill to the Pages view. Just like the one in the PDF view, it appears on the right edge of the page grid: drag it to glide through hundreds or thousands of pages, release to land exactly on the page you pointed at, and it fades away when you stop scrolling.
Fixed a memory leak in the zoomed-in view: quickly pinching, panning, or starting a scroll-pill drag could cancel a hi-res tile render partway through, and the page bitmaps it had already produced were never recycled — rapid zooming silently churned native memory. A cancelled render now recycles its finished tiles before the job stops.
Fixed a crash when working with several large inserted images at once: the image cache could evict (and recycle) a selected picture's bitmap while the selection was still drawing it, and the next redraw threw "trying to use a recycled bitmap". Selected pictures now survive cache evictions — a recycled bitmap is re-decoded on the spot instead of drawn.
Fixed opening PDFs from other apps (Open with… → Octopus Notes): the import could crash or leave an empty notebook when the file couldn't be read (e.g. a permission grant that expired between tapping and reading). Failed imports now show an error and roll back the half-created notebook.
Fixed heavy stutter when a page holds several large photos — inserting or lasso-selecting them used to decode each photo on the main thread, freezing frames for up to a second (and the frozen frames made the system skip touch events, spamming "Error processing scroll; pointer index for id 1 not found"). Photos are now decoded on a background thread, the selection appears instantly with frame outlines that fill in as pictures load, and two-finger events are no longer leaked to the list while a selection is being moved.