Static molecular visualization app for .cube/.cub, .2ccube, and .xyz files, with a companion Python automation client.
It also accepts vibrational sidecar inputs (.vib.json, .vmodes.json, .modes.json, ORCA .hess, and Psi4 .dat/.out frequency outputs).
- Surface rendering and cloud rendering modes
- 2-component CUBE support with global 2C mode selection across loaded 2C files
- Molecule styles:
BasicToon (luminous)Kit (collar joints)(internal style id:kit)
- Edit mode and measurement mode
- Calculations mode: select atomic functions on the structure, preview MINAO subspaces and π planes, and generate forte2 AVAS input
- Save PNG, batch export, and XYZ export
- Portable preset save/load in the web UI
- Complete session save/open, with browser autosave and recovery
- Shared preset model with CLI (
window.VibeMolPreset+ Python client) - Vibrational mode playback from sidecar JSON (
.vib.json), ORCA Hessian files (.hess), and Psi4 vibration outputs (.dat,.out) - Click a scene's Orbitals header to edit all its surfaces together in Appearance: colors, iso value, Auto-iso, opacity, material, and surface/cloud mode. Hidden and uncomputed orbitals receive the settings too; Molden grids are still computed only when needed. Click an individual orbital to adjust it separately. Differing settings are marked (mixed).
python3 -m http.serverOpen http://localhost:8000/.
Startup now shows the empty onboarding card. Use Choose files or Open sample file to load content.
XYZ files and pasted coordinates share the same import checks. If a structure has at least two atoms but no plausible bonds at angstrom distances, a popup offers conversion from bohr to angstroms. Choose OK to convert or Cancel to keep the original coordinates as angstroms. For trajectories, the check uses the first frame and conversion applies to every frame.
- Scenes → +: create an empty editable scene or create scenes from XYZ, Cube, or Molden files
- Appearance → Preset: choose a built-in preset or one of your saved looks
- Appearance → Style Studio: choose, customize, and save rendering presets
S: save PNGB: batch exportI: toggle surfacesA: toggle axesV: open view/coords panelM: measurement modeE: edit modeArrow keys: previous/next fileCmd/Ctrl+C: copy element and XYZ coordinate rows in angstroms, without the atom-count/comment header. Copies selected atoms in Edit mode, or the active structure otherwise. Text fields and selected page text keep normal copy behavior.Cmd/Ctrl+V: paste XYZ into a new structure, including in a fresh VibeMol window. Selected atoms copied in the same Edit window retain the existing duplicate-selection behavior, including internal bonds.
Use Save session to download the entire workspace, including source data, edited structures, layers, arithmetic dependencies, appearance, and playback settings. Open session restores it with playback paused; the original molecular files are not required.
Browser autosave retains two snapshots and offers Recover session after reopening the app. See Sessions and recovery for format details, storage limits, and the automation API.
Use Save Preset / Load Preset in the web toolbar.
Preset envelope:
kind: "vibemol.preset"presetVersion: 1settingsas dot-keys (for examplesurface.iso,molecule.style,render.mode,view.camera.x)
Compatibility notes:
fancyis accepted as a deprecated alias and mapped totoon.- Unknown preset keys are preserved in relaxed mode for round-trip safety.
See api/README.md for full usage.
Setup:
python3 -m venv .venv
source .venv/bin/activate
pip install -r api/requirements.txt
python -m playwright install chromiumExample:
python api/vibemol_client.py assets/data/sample.cube out/sample_toon_cli.png --style toonThe CLI supports:
- Style and iso overrides
- Preset import/export
.vibemolrcauto-discovery (./then$HOME)
Makefile: local check/test entrypoints (check,test-unit,test-e2e,test)index.html: UI shell and script orderassets/app/js/app.js: core app orchestrationassets/app/js/parsers.js: file parsersassets/app/js/rendering.js: rendering/stat helpersassets/app/js/interaction.js: shortcut/input helpersassets/app/js/ui.js: coords/XYZ formatting helpersassets/app/js/structure.js: normalized structure schema helpers for atoms, bonds, and structure export/importassets/app/js/volume-geometry.js: pure atom/voxel/world coordinate conversion and marching-cubes isosurface helpersassets/app/js/volume-2c.js: 2C phase and total/Bloch-colored isosurface buildersassets/app/js/bond-inference.js: covalent bond candidate generation, bond-order inference, and aromatic six-ring detectionassets/app/js/auto-hydrogen.js: auto-hydrogen planning heuristics and edit-mode hydrogenation controllerassets/app/js/autoiso.js: auto-iso estimation, cache, and worker orchestration controllerassets/app/js/cloud-rendering.js: standard and two-component cloud geometry buildersassets/app/js/preset.js: preset registry, import/export controller, and builder-extension preset state helpersassets/app/js/structure-transport.js: reproducible structure envelope export/import controller andwindow.VibeMolStructurepublic APIassets/app/js/session-format.js,session.js, andsession-recovery.js: portable workspace format, save/open, and browser autosave/recoveryassets/app/js/file-loader.js: file ingestion, onboarding sample loads, drag/drop, and embed file-loading controllerassets/app/js/edit-state.js: edit-history and editable-record controllerassets/app/js/edit-placement.js: add/placement workflows for atoms, fragments, and moleculesassets/app/js/edit-tools.js: edit tool and selection coordinationassets/app/js/edit-gizmos.js: move/rotate gizmo creation, hover, and picking helpersassets/app/js/edit-transform.js: shared move/rotate transform-session and pointer-routing controllerassets/app/js/edit-gestures.js: gesture-first edit interaction controller and gesture HUD coordinatorassets/app/js/edit-ui.js: adaptive edit UI and operator-panel helpersapi/vibemol_client.py: Playwright automation clienttests/unit/: Node built-in unit tests for browserless logic modulestests/e2e/: Playwright smoke/E2E tests for the web app.github/workflows/ci.yml: CI workflow for checks, unit tests, and browser smoke tests
make check
make test-unit
make test-e2e
make testmake test-e2e runs the full smoke suite, focused scene/arithmetic regressions, and session/recovery regressions, each with its own temporary local server. Set VIBEMOL_TEST_ARTIFACT_DIR to keep browser artifacts outside the checkout.
See the Product roadmap for implemented features, remaining work, and priorities. See Scene architecture for data ownership, the shared import pipeline, and arithmetic execution limits.
Relevant browserless syntax checks include:
node --check assets/app/js/volume-geometry.js
node --check assets/app/js/volume-2c.js
node --check assets/app/js/bond-inference.js
node --check assets/app/js/auto-hydrogen.js
node --check assets/app/js/autoiso.js
node --check assets/app/js/cloud-rendering.js
node --check assets/app/js/edit-gizmos.js
node --check assets/app/js/edit-transform.js
node --check assets/app/js/preset.js
node --check assets/app/js/structure-transport.js
node --check assets/app/js/file-loader.js
node --check assets/app/js/app.jsIf Playwright is not installed yet in your current Python environment:
pip install -r api/requirements.txt
python -m playwright install chromium- Current release: v0.10.0 — release notes. This release contains no user-facing changes. VibeMol opens the Workbench interface by default.
- Static deployment from repository root (
index.html) - Release versions live in
assets/app/js/asset-urls.js. Runpython3 tools/sync_asset_versions.py --version 0.9.4(using the intended version) to update the version and committed asset URLs together.make checkrejects stale URLs. See asset versioning. .nojekyllis required for GitHub Pages compatibility- Keep
CNAME(vibemol.org) in source for production. The beta deployment workflow removes it only from the beta mirror.