Skip to content

Release v0.4.2

Choose a tag to compare

@github-actions github-actions released this 19 Jun 07:55

Patinae v0.4.2

This version spends its budget on the small promises a molecular viewer makes every day:

  • If a structure file contains several logical molecules, Patinae should load them, not quietly pick a favorite.
  • If an older PRS session carries awkward representation state, Patinae should recover what it can and tell you when compatibility rules were used.
  • If a PDB chain ID is blank, generated selections should still be real selections.
  • If a large surface is already on the GPU, the raytracer should not turn that into unnecessary traffic.
  • If the machine has less graphics headroom, Patinae should avoid waste before it asks for more.

This is also the first visible piece of a longer hardware-comfort story. 0.4.2 does not pretend that every huge scene now fits on every computer. Instead it removes some of the obvious pressure points: compact surface triangle storage, visible-surface culling before BVH construction, GPU-resident ray metadata, and a streaming fallback for devices that do not expose buffer binding arrays. It is the kind of work that makes Patinae less dependent on a generously overbuilt workstation.


Highlights

Files with more than one molecule stop losing context

Patinae now reads all logical molecules produced by built-in structure loaders and plugin loaders.

For PDB, CIF, and BinaryCIF, the loader distinguishes between models that belong together and models that should become separate objects. Compatible model ensembles remain states of one object. Incompatible models and multiple data blocks become separate logical molecules with derived object names.

The load command now consumes every returned molecule, applies DSS assignment to each one, and reports a concise multi-object summary. The first loaded object still follows the existing replacement behavior, so the common workflow does not get noisier just because the loader became more complete.

Updated PRS with old sessions compatibility behavior

Patinae now tracks draw-mask states it explicitly hid, materializes atom bits only when that is the safe interpretation, and surfaces compatibility warnings through the load command output. Native PRS saves use a v2 envelope with producer metadata, while raw session fallback loading remains available.

Legacy PRS files can encode object-level representation masks that do not match the atom-level bits Patinae expects today. A special compatibility mode is entered when this case is detected, preparing the session for restoration by materializing atom bits as best as possible.

Ray tracing keeps more of the work where it belongs

0.4.1 moved ray tracing onto renderer-owned GPU artifacts. 0.4.2 tightens the path around large surfaces and warm viewport rays.

Viewport ray output can now stay GPU-resident, with pixel readback reserved for explicit export. Artifact triangle counts, visible surface counts, and indirect dispatch planning move through GPU metadata rather than becoming synchronization points.

Bond generation stops rediscovering amino acids the slow way

Molecule assembly now starts canonical amino-acid residues from known heavy-atom topologies before the spatial distance pass.

That skips a large amount of redundant intra-residue pair checking for common residues while keeping the distance-based path for incomplete residues, hydrogens, OXT, peptide and disulfide links, CCD ligands, and everything outside the canonical shortcut.

A new bond-generation benchmark keeps this path measurable: minus 1 second of load time for 3J3Q (PDB) monster!


New features

  • Multi-molecule structure loading: PDB, CIF, BinaryCIF, and plugin structure readers can now return multiple logical molecules from a single file.
  • Topology-aware model grouping: compatible model ensembles remain states of one object, while incompatible models and multiple data blocks are loaded as separate objects.
  • PRS v2 session envelope: native PRS saves now include producer metadata, making future compatibility handling more explicit.
  • User-visible compatibility warnings: legacy PRS recovery can now report through the load command output instead of disappearing into backend logs.
  • GPU-resident ray metadata: artifact counts, visible surface counts, and indirect dispatch planning can stay on the GPU during warm ray paths.
  • Large-surface streaming fallback: devices without buffer binding arrays can still ray trace large surface artifacts through a bounded streaming path.
  • Canonical amino-acid bond templates: common residue topologies are seeded before spatial bonding, reducing redundant work during molecule assembly.
  • Focused profiling coverage: new raytrace procedure benchmarks, a 3J3Q surface profiling script, and a bond-generation benchmark make the heavy paths easier to measure.

Bug fixes and improvements

  • Large surface ray tracing: surface artifacts now use active draw counts instead of allocation capacity, keeping oversized allocations from confusing ray-tracing geometry counts.
  • Compact surface triangle storage: artifact triangles now use a smaller layout, reducing memory pressure in large-surface ray tracing.
  • Pre-BVH visibility culling: invisible surface triangles are culled before BVH construction, so the raytracer spends less work on geometry that cannot contribute to the image.
  • Surface alpha preservation: per-atom surface alpha is preserved in the artifact ray-tracing path.
  • PRS draw-mask restoration: old sessions no longer restore object-level representation masks as if matching atom-level bits were guaranteed.
  • Representation toggle consistency: selection-scoped show, hide, and show_as paths now keep command behavior, scene state, GUI summaries, and redraw invalidation aligned.
  • Blank-chain selections: generated selectors now emit blank PDB chain IDs as quoted empty-chain clauses instead of malformed commands.
  • Surface transparency control: the representation popover now writes surface_transparency directly instead of going through the deprecated generic transparency alias.
  • Display recovery cleanup: redraw recovery state, helper logic, and diagnostics moved into a focused module while preserving the existing app-level behavior.
  • Renderer contract cleanup: effective representation queries live on MoleculeObject, and cartoon/ribbon retained-backbone behavior is named more clearly.
  • Plugin loader coverage: plugin host registration and wire-contract behavior gained additional tests.

Downloads

Bundles (recommended)

Self-contained packages with the app, plugins, and runtime pieces. Unzip or mount and run.

Platform Architecture Download
macOS Apple Silicon Patinae.dmg
Windows x86_64 patinae-bundle-windows-x86_64.zip
Windows ARM64 patinae-bundle-windows-arm64.zip

Standalone executables

Bare binaries for advanced users. Plugins can be installed separately.

Platform Architecture Executable Plugins
macOS Apple Silicon patinae-macos-arm64.tar.gz patinae-plugins-macos-arm64.tar.gz
Windows x86_64 patinae-windows-x86_64.zip patinae-plugins-windows-x86_64.zip
Windows ARM64 patinae-windows-arm64.zip patinae-plugins-windows-arm64.zip
Linux x86_64 patinae-linux-x86_64.tar.gz patinae-plugins-linux-x86_64.tar.gz
Linux ARM64 patinae-linux-arm64.tar.gz patinae-plugins-linux-arm64.tar.gz

Python and web

Package Download
Python wheels pip install patinae or see release assets below
Web viewer (WASM + JS) patinae-web.tar.gz

Release scale

Compared with v0.4.1, this release touches 88 files, with 10,299 insertions and 1,842 deletions. The main work is in structure loading, session compatibility, representation-state handling, molecule bonding, display recovery, and the raytracer's GPU artifact path.


Full Changelog: v0.4.1...v0.4.2