github xiao-villamor/PrintStash v0.15.1
v0.15.1 — multi-plate 3MF, more formats and faster similarity

3 hours ago

Back up before upgrading and restart every API and worker process on the same
image. Changed recipes refresh metadata and previews in the background; Similar
Models recomputes fingerprints on its next analysis. Rollback requires the
pre-upgrade backup.
See 0.15.1 upgrade notes.

Added

  • Multi-plate 3MF projects show their plates. A Bambu Studio, OrcaSlicer or Creality Print project lists each plate on the model page with the slicer's number, name, object count and saved preview. Choosing a plate shows only that plate's parts in the 3D viewer; All plates shows the whole build. Existing 3MF files are read in the background.

  • GLB, glTF, PLY, Rhino 3DM and FBX models. Upload, import or scan .glb, .gltf, .ply, .3dm and .fbx files like STL and OBJ: they get a thumbnail, measurements, the 3D viewer and similar-model analysis. Each format's own unit and axes are converted to millimetres with Z up, so a part reads at the same size and orientation as its STL. A .gltf must embed its buffers.

  • 7z, RAR and TAR archives. Upload or link a .7z, .rar, .tar, .tar.gz, .tgz, .tar.bz2 or .tar.xz archive and review its models exactly like a ZIP, with the same size, entry and path limits.

  • Model Overview shows each file’s SHA-256 in place of the AI caption panel, with its geometric SHA-256 when a current whole-mesh fingerprint is available. Compact seven-character hashes reveal the full value on hover and copy the complete SHA with one click.

  • Library filters use compact dropdowns for upload dates, print history, file types and printed status. Date fields offer calendar pickers, file formats support multiple selections, and printed status offers All, Printed and Not printed using the same checkbox rows and count badges as the other facets. Printer location and Tags share these rows, including single-choice location selection and searchable tag multiselect. Neutral picker buttons show selection counts, while blue chips below show the active values.

  • Filament and printer profiles use compact summaries and collapsible details with inline notes, an explicit editor and searchable slicer settings from G-code. Equal configurations are grouped with their source files, different presets and values remain separate variants, and print settings stay with each source file. Existing files are refreshed in the background. These are observed print settings, not restorable slicer preset backups.

  • Builds is now reached from Multipart Models through Create build and Build history, keeping manufacturing out of general navigation while preserving existing runs and viewer access.

Fixed

  • Creating a subcollection waits for its parent to finish loading, so a quick submission is no longer silently ignored.

  • Multipart sets can be selected in Library grid and list views, including select-all, and moved to Trash with confirmation while keeping their Models, files, revisions and guides. Trash restores the complete grouping with its parts and cover, supports selection alongside Models without ID collisions, and offers permanent grouping-only deletion through the normal guarded cleanup lifecycle. The detail header exposes deletion alongside consistent edit, build and history buttons. Build history and creation share the app’s framed work surface, with source-set context, responsive actions and clear loading and empty states.

  • Library actions for Similar models and New collection are visible beside Filters in the library toolbar, wrapping within the same area on narrow screens. Models and folders offer direct selection checkboxes in grid and list views. On devices with a mouse, card checkboxes appear on hover or keyboard focus and remain visible during selection. Touch devices retain visible controls. Batch actions appear after the first selection and close when the last item is deselected.

  • Buttons, links and clickable controls consistently show the arrow cursor, using shared action and disabled cursor tokens. Text editing, dragging and resizing retain their appropriate cursors.

  • Settings → Imports links directly to the published PrintStash Chrome extension, alongside its source instructions.

  • Multipart Models with uploaded covers can be deleted on Unraid/FUSE and other Guarded storage. Removing or replacing a cover also works: PrintStash verifies its recorded content hash, retires the reference, and retains the image bytes when safe physical deletion is unavailable. Unverifiable ownership returns storage guidance instead of a generic server error.

  • Detail tabs keep keyboard focus through route changes, mobile Library sort and display menus stay open, and touch previews reserve enough space for interaction.

  • Keep the ZIP and multipart model browsers steady while changing folders, with coordinated content loading, directional transitions, and reduced-motion support.

  • New multipart sets let you browse collections, search and select Models before creating the set. The explorer shares search, breadcrumbs and selection cards with the ZIP importer, retains choices between folders and pages, selects whole folder trees through their checkboxes, and saves the selected pieces together. The destination dropdown shows readable folder names and full paths.

  • Already-processed linked STL files show current storage-access failures in the viewer and their Source Files card, with safe credential guidance instead of a generic server error and no extra probe.

  • New library thumbnails crossfade from their placeholder after decoding, while cached images stay visible on revisits without another download.

  • Source File retry actions have visible button boundaries. Narrow cards give filenames more room, and mobile 3D toolbars no longer cover loading or error messages.

  • Model details retain storage failure guidance in the 3D viewer and Source Files. Long filenames, error explanations and retry controls fit narrow panels.

  • The Model Similar tab uses the same section headings, surfaces and compact empty states as the other detail tabs.

  • Collapsing All Models hides its folders as well as root Models, including folder-only libraries, and preserves branch expansion when reopened.

  • Remote storage checks explain expired credentials, rejected authentication, missing permissions and invalid signatures. Connection warnings include recovery guidance without exposing provider details or ending the PrintStash session.

  • Previews, metadata and 3D views work again on hosts whose kernel or container predates pidfd (Linux 5.3+), such as some NAS systems. Since 0.15.0 every native mesh worker failed there; workers now fall back to process-group supervision and the server logs a warning once.

  • Failed previews, metadata and 3D views explain the cause in plain terms (unreadable file, too large, processing stopped, storage unavailable) instead of a misleading server-connection error, and outputs that failed for the same reason share one explanation.

  • Similar comparisons keep aligned review actions, larger shared-scale previews, measurements and match evidence together without nested information dropdowns. Match rows show their explanation directly beside a clear Compare action, with a side-by-side comparison pictogram in place of the exchange arrows.

  • Language choices open in a framed menu with keyboard navigation and return focus to their button. Saved views uses the full quick-access row with a visible open state and compact search focus.

  • Model and collection names open a compact editor beside the title with Save and Cancel. Renaming keeps Add tags, Favorite and the page controls visible; full Model details remain a separate action.

  • Similar models opens on visual matches with direct review tabs, separate analysis settings/history, readable pair previews and clear confirmation actions. Comparison links retain review filters, and empty states describe the selected review state accurately.

  • The Model Similar tab keeps every review state visible without a horizontal scrollbar, with consistently sized action buttons aligned below the states in narrow panels.

  • Library filter loading stays aligned with the filter controls without adding an empty spinner row.

  • Wiki links open the PrintStash documentation site on desktop and mobile.

  • Desktop Library filters open beside the results with active criteria and expanded dates visible, while collection browsing keeps quick access to Favorites, Saved views, Printers and Trash.

  • Library tools opens beside its button and preserves Similar models, New collection and selection. My workspace keeps Builds and Statistics separate and avoids duplicating the Library printer shortcut.

  • Keep the rename pen vertically aligned with Model and collection titles, including wrapped names.

  • Empty collections offer an upload into the current folder; read-only members see permission guidance, and active filters offer filter recovery.

  • Multipart member cards keep Model names readable when file badges wrap on desktop.

  • Builds and Pending Imports now provide visible starting links and guidance for creating a build or capturing a model URL.

  • Collection delete confirmations explain that folders cannot be restored and their Models recover from Trash into All Models.

  • Keep multipart set names and counts readable on narrow screens by placing header actions below the title.

  • Backup uploads explain invalid filenames, damaged archives, and existing copies so operators can correct the file and retry.

  • Member Settings explain administrator-only remote storage access, omit unavailable version information, disable update checks that require an administrator, and explain why backup controls are unavailable.

  • Empty Statistics periods explain that reports use completed jobs and offer a direct link to manage printers while keeping the period controls available.

  • Canceling a new filament or printer preset discards its draft and returns keyboard focus to the New button. Collapsing the form still preserves a draft for later.

  • Collection history and Recent folders follow stable identities after heading or bulk renames. Unavailable destinations offer explicit recovery instead of showing an empty library or unrelated results.

  • Recent folders now opens inside the screen edge, and long collection paths
    wrap within the Model Overview panel without horizontal overflow.

  • Collection and Model headings offer a pen button and double-click shortcut
    for renaming, while respecting editing permissions.

  • Backup settings keep titles and translated action labels readable on narrow screens.

  • Members no longer see a permanently loading server version in Settings; storage settings explain when administrator access is required.

  • URL capture now explains invalid links, and offline printer errors identify the printer connection instead of blaming the PrintStash server. Offline controls explain their connection requirement; transport details remain in Diagnostics.

  • Notification channel and Spoolman form fields expose their visible labels to assistive technology and focus correctly when their labels are clicked.

  • The collection access picker uses an opaque surface and opens outside its Settings card, keeping options readable and reachable on narrow screens.

  • Dropdown menus stay on screen on narrow and short displays, including Statistics customization and Model actions. Statistics options remain above the page header in very short windows.

  • Builds is reachable from the account menu and mobile More sheet. Inbox, Builds,
    Search, and the getting-started guide have distinct, translated browser titles.

  • Add printer setup scrolls within short screens so every field and action remains reachable. Its dialog is announced by its title to assistive technology.

  • Saved-view naming dialogs focus the name field immediately; renaming has a visible accessible label and selects the existing name for keyboard replacement.

  • G-code layer controls remain usable across the full slider on phones. Mesh-only zoom, reset and dimensions overlays now appear only in the 3D model view.

  • Completed uploads identify whether they created a Model or saved to an existing
    one, with a visible completion notice and Open Model action. The result link
    remains available in Notifications after reloading.

Performance

  • Similar models analysis scales to large libraries. Each fingerprint now keeps a compact surface cloud, and pairs whose clouds are clearly apart are rejected in milliseconds instead of being verified for seconds; pairs that pass are verified exactly as before. A single-body Model is compared once per pair instead of four times; parts of two files already proven identical, rescaled or mirrored are not compared again; outcomes are reused from the other side and by later runs; and pair checks start from the pre-loaded mesh worker. A seven-Model test library went from 21 minutes to under 2.5, and an 18-Model one from over an hour to 9 minutes, with the same matches. Existing fingerprints are recomputed once by the next analysis to add their cloud. The clouds also order each shortlist, so look-alike designs no longer crowd out a real copy: in a 200-Model library of near-identical families, every planted copy was found (one was missed before) in the same time. Pairs are now verified several at a time: the similarity lane's concurrency sets how many, and by default it follows Models processed at once (derived from the machine's CPUs and memory; it was 1), each verification still admitted against the native memory pool, and a pair shortlisted from both sides is verified once. That 200-Model library went from 78 to 24 minutes with the same matches.

  • Task Center batches job-change notices and checks active work every ten seconds while its events connection is open, with one-second polling when disconnected.

  • Mesh workers check cancellation before each output publication instead of forcing a database read for every output fragment.

  • Storage publication acquires its locator lock once per reservation while preserving the durable reservation and receipt needed for recovery.

  • Local AI model warm-up stops re-reading its settings every second while there is nothing to warm, and wakes as soon as a search needs a model.

  • Imports read collections less: a file's collection path is resolved once per commit instead of twice, and search finds every collection above a Model in one query.

  • Search updates share bounded preparation across overlapping Model and collection changes while retaining independent retry checkpoints.

  • G-code metadata and toolpath previews start once an import settles instead of re-checking for work every few seconds while Models are still arriving; mesh thumbnails still start during the import.

  • The background job engine on SQLite skips a connection check on every queue look, about a quarter fewer engine database statements during an import and a third fewer when idle.

  • Mesh workers spend about 10% less CPU: each starts with its preloaded libraries frozen for garbage collection, reclaims memory without starting a helper process, and is watched for memory with a cheaper read.

  • Pull request CI runs the full frontend tests in parallel shards and splits the longest backend partitions, preserving the required checks and separate Deep CI coverage.

Full changelog: v0.15.0...v0.15.1

Don't miss a new PrintStash release

NewReleases is sending notifications on new releases.